Optimize WindowAgg's use of tuplestores
As part of making tuplestores faster [1]https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=590b045c37aad44915f7f472343f24c2bafbe5d8, I noticed that in WindowAgg, when
we end one partition we call tuplestore_end() and then we do
tuplestore_begin_heap() again for the next partition in begin_partition()
and then go on to set up the tuplestore read pointers according to what's
required for the given frameOptions of the WindowAgg. This might make
sense if the frameOptions could change between partitions, but they can't,
so I don't see any reason why we can't just do tuplestore_clear() at the
end of a partition. That resets the read pointer positions back to the
start again ready for the next partition.
I wrote the attached patch and checked how it affects performance. It helps
quite a bit when there are lots of partitions.
CREATE TABLE a (a INT NOT NULL);
INSERT INTO a SELECT x FROM generate_series(1,1000000)x;
VACUUM FREEZE ANALYZE a;
bench.sql:
SELECT a,count(*) OVER (PARTITION BY a) FROM a OFFSET 1000000;
master:
$ pgbench -n -f bench.sql -T 60 -M prepared postgres | grep latency
latency average = 293.488 ms
latency average = 295.509 ms
latency average = 297.772 ms
patched:
$ pgbench -n -f bench.sql -T 60 -M prepared postgres | grep latency
latency average = 203.234 ms
latency average = 204.538 ms
latency average = 203.877 ms
About 45% faster.
Here's the top of perf top of each:
master:
8.61% libc.so.6 [.] _int_malloc
6.71% libc.so.6 [.] _int_free
6.42% postgres [.] heap_form_minimal_tuple
6.40% postgres [.] tuplestore_alloc_read_pointer
5.87% libc.so.6 [.] unlink_chunk.constprop.0
3.86% libc.so.6 [.] __memmove_avx512_unaligned_erms
3.80% postgres [.] AllocSetFree
3.51% postgres [.] spool_tuples
3.45% postgres [.] ExecWindowAgg
2.09% postgres [.] tuplesort_puttuple_common
1.92% postgres [.] comparetup_datum
1.88% postgres [.] AllocSetAlloc
1.85% postgres [.] tuplesort_heap_replace_top
1.84% postgres [.] ExecStoreBufferHeapTuple
1.69% postgres [.] window_gettupleslot
patched:
8.95% postgres [.] ExecWindowAgg
8.10% postgres [.] heap_form_minimal_tuple
5.16% postgres [.] spool_tuples
4.03% libc.so.6 [.] __memmove_avx512_unaligned_erms
4.02% postgres [.] begin_partition
3.11% postgres [.] tuplesort_puttuple_common
2.97% postgres [.] AllocSetAlloc
2.96% postgres [.] comparetup_datum
2.83% postgres [.] tuplesort_heap_replace_top
2.79% postgres [.] window_gettupleslot
2.22% postgres [.] AllocSetFree
2.11% postgres [.] MemoryContextReset
1.99% postgres [.] LogicalTapeWrite
1.98% postgres [.] advance_windowaggregate
Lots less malloc/free work going on.
I'm also tempted to do a cleanup of the state machine inside
nodeWindowAgg.c as I had to add another bool flag to WindowAggState to
replace the previous test that checked if the tuplestore was empty (i.e
just finished a partition) with if (winstate->buffer == NULL). I couldn't
do that anymore due to no longer nullifying that field. I think such a
cleanup would be a separate patch. Annoyingly the extra bool is the 9th
bool flag and widens that struct by 8 bytes and leaves a 7 byte hole.
David
[1]: https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=590b045c37aad44915f7f472343f24c2bafbe5d8
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=590b045c37aad44915f7f472343f24c2bafbe5d8
Attachments:
v1-0001-Optimize-WindowAgg-s-use-of-tuplestores.patchapplication/octet-stream; name=v1-0001-Optimize-WindowAgg-s-use-of-tuplestores.patchDownload
From b26a88d08004b2558a850388bc91d6aec7e300de Mon Sep 17 00:00:00 2001
From: David Rowley <dgrowley@gmail.com>
Date: Sun, 7 Jul 2024 22:19:18 +1200
Subject: [PATCH v1] Optimize WindowAgg's use of tuplestores
When WindowAgg finished one partition of a PARTITION BY, it previously
would call tuplestore_end() to purge all the stored tuples before again
calling tuplestore_begin_heap() and carefully setting up all of the
tuplestore read pointers exactly as required for the given frameOptions.
Since the frameOptions don't change between partitions, this part does
not make much sense.
It seems much better to create the tuplestore and the read pointers once
and simply call tuplestore_clear() at the end of each partition.
tuplestore_clear() moves all of the read pointers back to the start
position and removes all tuples.
A simple test query with 1 million partitions and 1 tuple per partition
has been shown to run around 44% faster than without this change.
---
src/backend/executor/nodeWindowAgg.c | 162 ++++++++++++++++++---------
src/include/nodes/execnodes.h | 1 +
2 files changed, 107 insertions(+), 56 deletions(-)
diff --git a/src/backend/executor/nodeWindowAgg.c b/src/backend/executor/nodeWindowAgg.c
index 3221fa1522..cc32a92bed 100644
--- a/src/backend/executor/nodeWindowAgg.c
+++ b/src/backend/executor/nodeWindowAgg.c
@@ -1074,57 +1074,24 @@ eval_windowfunction(WindowAggState *winstate, WindowStatePerFunc perfuncstate,
}
/*
- * begin_partition
- * Start buffering rows of the next partition.
+ * prepare_tuplestore
+ * Prepare the tuplestore and all of the required read pointers for the
+ * WindowAggState's frameOptions.
+ *
+ * Note: We use pg_noinline to avoid bloating the calling function with code
+ * which is only called once.
*/
-static void
-begin_partition(WindowAggState *winstate)
+static pg_noinline void
+prepare_tuplestore(WindowAggState *winstate)
{
WindowAgg *node = (WindowAgg *) winstate->ss.ps.plan;
- PlanState *outerPlan = outerPlanState(winstate);
int frameOptions = winstate->frameOptions;
int numfuncs = winstate->numfuncs;
- int i;
-
- winstate->partition_spooled = false;
- winstate->framehead_valid = false;
- winstate->frametail_valid = false;
- winstate->grouptail_valid = false;
- winstate->spooled_rows = 0;
- winstate->currentpos = 0;
- winstate->frameheadpos = 0;
- winstate->frametailpos = 0;
- winstate->currentgroup = 0;
- winstate->frameheadgroup = 0;
- winstate->frametailgroup = 0;
- winstate->groupheadpos = 0;
- winstate->grouptailpos = -1; /* see update_grouptailpos */
- ExecClearTuple(winstate->agg_row_slot);
- if (winstate->framehead_slot)
- ExecClearTuple(winstate->framehead_slot);
- if (winstate->frametail_slot)
- ExecClearTuple(winstate->frametail_slot);
-
- /*
- * If this is the very first partition, we need to fetch the first input
- * row to store in first_part_slot.
- */
- if (TupIsNull(winstate->first_part_slot))
- {
- TupleTableSlot *outerslot = ExecProcNode(outerPlan);
- if (!TupIsNull(outerslot))
- ExecCopySlot(winstate->first_part_slot, outerslot);
- else
- {
- /* outer plan is empty, so we have nothing to do */
- winstate->partition_spooled = true;
- winstate->more_partitions = false;
- return;
- }
- }
+ /* we shouldn't be called if this was done already */
+ Assert(winstate->buffer == NULL);
- /* Create new tuplestore for this partition */
+ /* Create new tuplestore */
winstate->buffer = tuplestore_begin_heap(false, false, work_mem);
/*
@@ -1158,16 +1125,10 @@ begin_partition(WindowAggState *winstate)
agg_winobj->readptr = tuplestore_alloc_read_pointer(winstate->buffer,
readptr_flags);
- agg_winobj->markpos = -1;
- agg_winobj->seekpos = -1;
-
- /* Also reset the row counters for aggregates */
- winstate->aggregatedbase = 0;
- winstate->aggregatedupto = 0;
}
/* create mark and read pointers for each real window function */
- for (i = 0; i < numfuncs; i++)
+ for (int i = 0; i < numfuncs; i++)
{
WindowStatePerFunc perfuncstate = &(winstate->perfunc[i]);
@@ -1179,8 +1140,6 @@ begin_partition(WindowAggState *winstate)
0);
winobj->readptr = tuplestore_alloc_read_pointer(winstate->buffer,
EXEC_FLAG_BACKWARD);
- winobj->markpos = -1;
- winobj->seekpos = -1;
}
}
@@ -1224,6 +1183,88 @@ begin_partition(WindowAggState *winstate)
winstate->grouptail_ptr =
tuplestore_alloc_read_pointer(winstate->buffer, 0);
}
+}
+
+/*
+ * begin_partition
+ * Start buffering rows of the next partition.
+ */
+static void
+begin_partition(WindowAggState *winstate)
+{
+ PlanState *outerPlan = outerPlanState(winstate);
+ int numfuncs = winstate->numfuncs;
+
+ winstate->partition_spooled = false;
+ winstate->framehead_valid = false;
+ winstate->frametail_valid = false;
+ winstate->grouptail_valid = false;
+ winstate->spooled_rows = 0;
+ winstate->currentpos = 0;
+ winstate->frameheadpos = 0;
+ winstate->frametailpos = 0;
+ winstate->currentgroup = 0;
+ winstate->frameheadgroup = 0;
+ winstate->frametailgroup = 0;
+ winstate->groupheadpos = 0;
+ winstate->grouptailpos = -1; /* see update_grouptailpos */
+ ExecClearTuple(winstate->agg_row_slot);
+ if (winstate->framehead_slot)
+ ExecClearTuple(winstate->framehead_slot);
+ if (winstate->frametail_slot)
+ ExecClearTuple(winstate->frametail_slot);
+
+ /*
+ * If this is the very first partition, we need to fetch the first input
+ * row to store in first_part_slot.
+ */
+ if (TupIsNull(winstate->first_part_slot))
+ {
+ TupleTableSlot *outerslot = ExecProcNode(outerPlan);
+
+ if (!TupIsNull(outerslot))
+ ExecCopySlot(winstate->first_part_slot, outerslot);
+ else
+ {
+ /* outer plan is empty, so we have nothing to do */
+ winstate->partition_spooled = true;
+ winstate->more_partitions = false;
+ return;
+ }
+ }
+
+ /* Create new tuplestore if not done already. */
+ if (unlikely(winstate->buffer == NULL))
+ prepare_tuplestore(winstate);
+
+ winstate->next_partition = false;
+
+ if (winstate->numaggs > 0)
+ {
+ WindowObject agg_winobj = winstate->agg_winobj;
+
+ /* reset mark and see positions for aggregate functions */
+ agg_winobj->markpos = -1;
+ agg_winobj->seekpos = -1;
+
+ /* Also reset the row counters for aggregates */
+ winstate->aggregatedbase = 0;
+ winstate->aggregatedupto = 0;
+ }
+
+ /* reset mark and seek positions for each real window function */
+ for (int i = 0; i < numfuncs; i++)
+ {
+ WindowStatePerFunc perfuncstate = &(winstate->perfunc[i]);
+
+ if (!perfuncstate->plain_agg)
+ {
+ WindowObject winobj = perfuncstate->winobj;
+
+ winobj->markpos = -1;
+ winobj->seekpos = -1;
+ }
+ }
/*
* Store the first tuple into the tuplestore (it's always available now;
@@ -1360,9 +1401,9 @@ release_partition(WindowAggState *winstate)
}
if (winstate->buffer)
- tuplestore_end(winstate->buffer);
- winstate->buffer = NULL;
+ tuplestore_clear(winstate->buffer);
winstate->partition_spooled = false;
+ winstate->next_partition = true;
}
/*
@@ -2127,7 +2168,7 @@ ExecWindowAgg(PlanState *pstate)
/* We need to loop as the runCondition or qual may filter out tuples */
for (;;)
{
- if (winstate->buffer == NULL)
+ if (winstate->next_partition)
{
/* Initialize for first partition and set current row = 0 */
begin_partition(winstate);
@@ -2670,6 +2711,7 @@ ExecInitWindowAgg(WindowAgg *node, EState *estate, int eflags)
winstate->all_first = true;
winstate->partition_spooled = false;
winstate->more_partitions = false;
+ winstate->next_partition = true;
return winstate;
}
@@ -2684,6 +2726,14 @@ ExecEndWindowAgg(WindowAggState *node)
PlanState *outerPlan;
int i;
+ if (node->buffer != NULL)
+ {
+ tuplestore_end(node->buffer);
+
+ /* nullify so that release_partition skips the tuplestore_clear() */
+ node->buffer = NULL;
+ }
+
release_partition(node);
for (i = 0; i < node->numaggs; i++)
diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h
index b62c96f206..4a91bad4b2 100644
--- a/src/include/nodes/execnodes.h
+++ b/src/include/nodes/execnodes.h
@@ -2619,6 +2619,7 @@ typedef struct WindowAggState
bool all_first; /* true if the scan is starting */
bool partition_spooled; /* true if all tuples in current partition
* have been spooled into tuplestore */
+ bool next_partition; /* true if begin_partition needs to be called */
bool more_partitions; /* true if there's more partitions after
* this one */
bool framehead_valid; /* true if frameheadpos is known up to
--
2.34.1
On Sun, Jul 7, 2024 at 4:27 PM David Rowley <dgrowley@gmail.com> wrote:
As part of making tuplestores faster [1], I noticed that in WindowAgg, when we end one partition we call tuplestore_end() and then we do tuplestore_begin_heap() again for the next partition in begin_partition() and then go on to set up the tuplestore read pointers according to what's required for the given frameOptions of the WindowAgg. This might make sense if the frameOptions could change between partitions, but they can't, so I don't see any reason why we can't just do tuplestore_clear() at the end of a partition. That resets the read pointer positions back to the start again ready for the next partition.
I wrote the attached patch and checked how it affects performance. It helps quite a bit when there are lots of partitions.
CREATE TABLE a (a INT NOT NULL);
INSERT INTO a SELECT x FROM generate_series(1,1000000)x;
VACUUM FREEZE ANALYZE a;bench.sql:
SELECT a,count(*) OVER (PARTITION BY a) FROM a OFFSET 1000000;master:
$ pgbench -n -f bench.sql -T 60 -M prepared postgres | grep latency
latency average = 293.488 ms
latency average = 295.509 ms
latency average = 297.772 mspatched:
$ pgbench -n -f bench.sql -T 60 -M prepared postgres | grep latency
latency average = 203.234 ms
latency average = 204.538 ms
latency average = 203.877 msAbout 45% faster.
I repeated your measurements but by varying the number of partitions
and repeating pgbench 5 times instead of 3. The idea is to see the
impact of the change on a lower number of partitions.
10 partitions query: SELECT a,count(*) OVER (PARTITION BY a % 10) FROM
a OFFSET 1000000;
100 partitions query: SELECT a,count(*) OVER (PARTITION BY a % 100)
FROM a OFFSET 1000000;
1000 partitions query: SELECT a,count(*) OVER (PARTITION BY a % 1000)
FROM a OFFSET 1000000;
original query with 1M partitions: SELECT a,count(*) OVER (PARTITION
BY a) FROM a OFFSET 1000000;
Notice that the offset is still the same to avoid any impact it may
have on the query execution.
Here are the results
master:
no. of partitions, average latencies
10, 362.166 ms, 369.313 ms, 375.203 ms, 368.798 ms, 372.483 ms
100, 372.885 ms, 381.463 ms, 385.372 ms, 382.915 ms, 383.630 ms
1000, 390.834 ms, 395.653 ms, 400.339 ms, 407.777 ms, 389.906 ms
1000000, 552.848 ms, 553.943 ms, 547.806 ms, 541.871 ms, 546.741 ms
patched
10, 356.980 ms, 371.223 ms, 375.550 ms, 378.011 ms, 381.119 ms
100, 392.307 ms, 385.087 ms, 380.383 ms, 390.999 ms, 388.422 ms
1000, 405.136 ms, 397.576 ms, 399.021 ms, 399.572 ms, 406.604 ms
1000000, 394.711 ms, 403.741 ms, 399.008 ms, 392.932 ms, 393.335 ms
Observations
1. The numbers corresponding to 10 and 100 partitions are higher when
patched. That might be just noise. I don't see any reason why it would
impact negatively when there are a small number of partitions. The
lower partition cases also have a higher number of rows per partition,
so is the difference between MemoryContextDelete() vs
MemoryContextReset() making any difference here. May be worth
verifying those cases carefully. Otherwise upto 1000 partitions, it
doesn't show any differences.
2. For 1M partitions it does make a difference. About 35% in my case.
Moreover the change seems to be making the execution times independent
of the number of partitions (more or less).
Combining this observation with the first one, It might be worth
looking at the execution times when there are many rows per partition
in case of a higher number of partitions.
--
Best Wishes,
Ashutosh Bapat
On Wed, 10 Jul 2024 at 02:42, Ashutosh Bapat
<ashutosh.bapat.oss@gmail.com> wrote:
Observations
1. The numbers corresponding to 10 and 100 partitions are higher when
patched. That might be just noise. I don't see any reason why it would
impact negatively when there are a small number of partitions. The
lower partition cases also have a higher number of rows per partition,
so is the difference between MemoryContextDelete() vs
MemoryContextReset() making any difference here. May be worth
verifying those cases carefully. Otherwise upto 1000 partitions, it
doesn't show any differences.
I think this might just be noise as a result of rearranging code. In
terms of C code, I don't see any reason for it to be slower. If you
look at GenerationDelete() (as what is getting called from
MemoryContextDelete()), it just calls GenerationReset(). So resetting
is going to always be less work than deleting the context, especially
given we don't need to create the context again when we reset it.
I wrote the attached script to see if I can also see the slowdown and
I do see the patched code come out slightly slower (within noise
levels) in lower partition counts.
To get my compiler to produce code in a more optimal order for the
common case, I added unlikely() to the "if (winstate->all_first)"
condition. This is only evaluated on the first time after a rescan,
so putting that code at the end of the function makes more sense. The
attached v2 patch has it this way. You can see the numbers look
slightly better in the attached graph.
Thanks for having a look at this.
David
Attachments:
windowagg_v2_bench.pngimage/png; name=windowagg_v2_bench.pngDownload
�PNG
IHDR L � ^V sRGB ��� gAMA ���a pHYs � ����e ��IDATx^���$E�����erNG��J�HA1<���_���>b@@0!J�Y$HT�$H�9��qy������n����p�{�y�ng��CuuuW}���:��$I�$I�$I�$������$I�$I�$I��r�J�$I�$I�$IjYL%I�$I�$I�$�,��$I�$I�$I�Z�SI�$I�$I�$I-���$I�$I�$I���e�T�$I�$I�$IR�2`*I�$I�$I�$�e0�$I�$I�$I����J�$I�$I�$IjYL%I�$I�$I�$�,��$I�$I�$I�Z�SI�$I�$I�$I-���$I�$I�$I���e�T�$I�$I�$IR�j��R��[�\sM������Xy��c����#FT>��� ����}���K�Of�g�}b�����k�M7��^zi�]�k����o6,�?��3�?��O�{��Qq�����.����������1n���~�����~��1z���^o�:uj�z����#�T>�X`�����E]����vO=�T��O���'���|�;���p�[l:::����������3���I���������?��n�Xg�u�g�<r��7����x���"����w�Xj��R^������r������kMI����;�H��W^y%�M��>������v��7�8�\r�hkkK�����4y�z����jL�$I�F�=L����OO
������8qb�����^xa�<����L�} ���Xn��fKA-G0�����md��6L�2����=���o�/��b
�w8~�I��cs��\(�3�{n��s��E]��UC�������N;-Mi�����7�H��<O<��Cq�q����^���|������7�3s�\9���z;�����7�|s����P?Wz������\���z��.�9�?�����+��'�|2]s�2����}��t#������o~����?sk9M���W_��Q����&I�������b�-�z�dT��{������y�O������o��.�3���nK��{��7U�JT.���������t#�r�1���*��8>�?��@�����qy�
7�����t�T����/��& z�y��;�i���%��#��R����N���:+5���<WJ/����_�2]�{C���
���w�uW�O����z|���'�������7\�o�3���?���n���$I��9���)��K/�t�]�Jw�6�J���>Zy7c����_n*�Jc0��d��C��&�eO�y����������?^y�F�9���Ro�<���6��|��E������������$3�+��B��������+��r����}�0�w���x�;����yX�+z>sS
�s{O�����&�SN9%��@/F���7\�~���Z"�}{{{�����8_�����_�rp����kp��g�y�7��&���<����$I����T�VYe����5��N�o�+t��V���S�Zm�RU=0����+x�G�^���7}&�\��'�H�y��������1c�{*a��n��qy�'�l�A�����ih�������>��O�'>���{����g.��"���f���l��R��G>��4-��v�m�ws�\��z�A��Un��\)
,����Q���W]uU�o�2���r�!���<+}�%���_<�^{�tm�5I�i��P����KSY)e�yTCl�7$I�4X50�2�,33� �QR.�Co�������K�dh�F�y^e��+w��XO��_��k�#��q�3�|&?Qq������G�$
U4<����VZ)=�{����\������R���9o�|��$���7��>W���K���P�/o8��a�}�I7Ns��
�\o����y�G�|�cK7t��2�#H @�p�W^y���K�$iPk�er�%���Z��.���^��a�;>�����)|�!~�y����wE�q�S�!Xi8V�a�2x��v&���G�!{%i����������<�4���$I���rT�
6� ����� x���[l�E����}���wjU\�rc<�������!�%I�4�50�_��2U/�!���SOU��B��}�!~�������e�lnM�� ������|�_z*�J��k�'�$
v4L6*��$I���G}t��W�����<��k
��nnu���Eoe�E��?�)��������O��"I�$
ML�����Ge�zx�Z�,�����C�����~8��.���^�]��v���M 4W��G+��b���<w9g�^fX(I�$I��Q�*���������&�\�79;�jk"/���q�=��<�������~����n��K�$I�M[����c������~����z�t�A�T���x��q�y����x}���L-����oS@+��r�Ww�s�=7n����7w�~���w��]�}��3�����?�o����,����}F���O>y���|���Z+�MO����i<�;"Y� ���o�y���;o��f�z��q�]w�2_z���M6�$
{<n��8��cg��%������0�`�����|g/w/����k���� �[�.��P�`���p�qw��������+�"��z��n��*�j{������NJ�
���{��m��L�����3��w���������^���:�����oCwH���CK���K�k��f�*W]����CM����~��'���oN��<M��]j�����o�?y�c�<�m��6��f��wo����O?=����y�#?���Q����w�3��{��wO��Iy�����LK���9�U}�?6�h�Xl�����CZ���!���������;��g�,�H���z���7�������?�M$��|G6�?����Y�SO=5m�+*�Y%?�=���7������yQ�3<������gw���^�K9p�e��s����S�n��5\wi����lc#������:q�pW}>�k)���)S���A+�b���O���y|��������h�\YK���3����Ie��G��;����v��~G9���/���|���d��7n�<]���r�<�v2��:����>`�n�a��WY���s��r)C8�8�:��|�����3�3�Tx`�i�������nKs|}�#IeK3����|Z��������^~a���7_J�����se-���1?�q �5��:�oy�<��u,�/�y�mod����:� ���_�����/mc^N�����r�<����>�\��G��|�{���{5��n�!�AyD�|]���[��Z����5��aW�;�=0o��k���?�G�?��3����|sY����,��a���:����s�g9�����uQ_�
=a�De7���W���3J���(w/���tC4���4��F������7i>`_v�a���OC\����|��t
�g (SX�F���6�Z����|��g��r�7����3�H�)j�A���������;n��m��b�EMi��:�$I�4��}�K�����E%;?��������T1����k��6U�A6���9`J��z�*.������**4�r�b�� �+����^����
����h��rE��F*�LC���Y?*7�/��T4hn�2�o����Np��K���+�C�R���+T��*��0�%�\g�uVj����a����B��y� C�R��f9�!���[���~�!F/`~���~�]�����{�A�r��jT�XN��������Zy7#�@���`�Vw�_�S���W�o����
(�X��l���4�tW��� 8�6���g��X&�=k�_�7n`_2
y�
{o�����+7Lel?��ByU?��� ��4�E!�W+����4.`����qD�����"Ot�'3~z��O��+Wn���T^4ZN��p�UW�B�����Y�r�4V�/�����*o[�������~c:�h@������Ny.o'/����_N��G�!@���^�o��y������_>�xb8��c���b���iF$h�q����RF�9�I/�a���F6�/��a�t����m����sVVN��,39W��7�{���S9Tk;9��<��c��� WK���e�i����D��t��'�>��4�<�1R�:�T���� o���L7}�*�9�_�!��e-��s�9',s��=/��8a�9V(�(��y����W_}5��4�!��G�W^yeZ���z�k�f��sO��^9��:v���_���Z���Rk��=W�*�f�g��5��r8�����XK�KP��&O��=��r���\�
�[\#�������w\������2��S�y��,��c��!������9�p�AP��e��v�?���W��s ��%�#_Qv�y/��7��������.J�6��,�j���q��GYww.��t�����?���]��e�������7��� Z3A�Fq�E:�/X�M^k4�FK]7_�q�us�K>$�L�����.=��Y�c�2�4 x�_�iL[�_�������G��-������5`y.c��Pn���<��`���y����<����m�����u���d��6�n���e?��&I�$�M���A�x�E=��z� S���mn���E�,W�����=���
Dw
���@�
�T�r%��{��rA@� ��;L���W\qE����/�S�c��G�@4�
w����+�T��-�u�Q��NH������ACR��~�4`����>���T���D����Bz�CA��������T�3*e,�4��}���q���F���+���NOY��,���`?�i���4(�*����z��}@���e����'���qF9q�q�u[��������Zy������i��b�46�g�����������b����q��2��2WXa�Y�@|���COi���G��y����Q,�I/>�{���g����l(`=Y_��`bO�����f$�����+���L�����'��W�-7i��l�1��v�����a���������)��2�2Z��C�y��I�u$ �(�;��Y��f��<v���%_{��_��9�W�w��K�6����b�
p|����_���H�F��'x��=m?�q���e4�ela���.�������Yw�A�����^����|e�Mw�?\+0}N�Zy|V�?��������$�{�tG�|Y����������~S��,��e=�?�+��>(�E=�>��up�o�f�s�!�?��KIz���F���`�����9�X�� ��������)kM[���m=a����3��c��<���k����zy���}�C��/|!��m&?I�$IsJ�=L���2@�"P�B��]���]�����X�m��T����i.�k]LS���X�Xp�k����'�:p'%�VW��l��ExOe����~�x������e�&��������B�*R�qMC&g����N;������l��R��
�I���pNtw7)e*_l/���]��7�`HW�1��Y������7�1���@0=�W>��y��,1u�-������T)�������RG�t��iX�&���T����������S�[�~#O���yMS�&��F4�q�@�
�
?V��o�i��y[�w���w�9������O�*��8H���k_z��_Y&�C��^�+���.�;�w������O3w������0��/+�c���j���t!�H+��+���iI;*���{3��qFc7'�����"O����)�x�~$/���y����Z7y��4�0���F����*v�a����y�c�A���f;x�mdq\�C������W|pJ3�Y6��y^w�uid���G� ����D�37��n�/��������gZ�!�q�^�>�c9�4���YN��uc��N���1]>>����7rz�[�L/�3�e���#qc �<�#�V�S�M.���GZp��2�����;^���sza���<A�-C���yz���8����+�'�����q�<9�N�,p�$��N�#�k=Y�����3�Kn2��k����o8F(/Y~��\�\~�{}�7�������>�:Q�tx$�S�0_~�9�=�s��|=@^%��yS6P�p����d���`;��S�4��w��a����'l+�7��S>e�������c�D��3���\����7�7�������y���.����������@_k6+���,3��o����~����Qo�r�q�HK�v�lW�9�����B��L���������@�d�q����o�w�N��C��������u.��u �����irP�m`y�iy�`�|z�g��az�}���g��y�s&�W0=y��q�T��7.���L���3��m���y�|�{�[^#s��y��s������l ����/�b_�[��=��#�-���9�m+���0O^�le��(or:w��H�Ky
�y�e���7�k3�q�u������\��e\��� �-e(��}H�����9s��6W��6��Plh��0�1���e���F}��qF=�����N���fz�����N�f���$I�@j:`
*(4R�
]�;�UI�q5��J#�*���a��fP���-7����� */T��IXK#����Tt��P��Y`T�h��BNE��
������U�=��lu�
����{j� M�?
s�#�I��"�z�#*j�� ��������J����
xT�iP���+���\*J��X���2�{~[����i����DE�������� @�:�C�p�mN*_4��j("_R��
?�K�F��m��\Y�g�i�k��f�)iE��rGe�������0e�h���<@cy�ud��Y��}OC_����5`���?x�>e �+��wT����Tt{0%���1i�+���E�4�OH��V�����s��x�Pn���%��w4P~��hPA��
���N�|�p@jp����+�a�`n��%���C��<�o8n�����C��W���1��9���������7s�H�=���'}h�!��zJs~CzP&R��?IK��|O�T���4�����Y>��#]���{���:���~���@^�,�����?�����.��E���m���T�a����E��� �Q���?/������Q�FP�H�{��l�j4`Y]&��'����v�[��|������<����7��@�����<#��?���/�Y����iM�!���c��A�'��>�|�<��,��q�oH�Z�0��|R��y�.�eiH^ �� �� i�4`��_r�'y�������g.8���,��o8�H���)�m��8v2�I/y�`�V<�k���u.����(��e^N�/oK3�����Z�78�q]�����|�����Z�L��g]ip�VL�]"�:_�e�m��}
���N>�M�/��e@�c����f��:�l�������4���<W��fz~�� ��|�����Yy��q^���>��C�c=���g���
�O�.�$����%�rH*��y����(3�kx�O���s�Ay.������2x�?�O\?�����~�k�����'��\^U��j����}�o(���
��_������Q��k�|������!������S�w��|����}�� 4����?`���D�8��P��+�� e-�in�T�$I�E����A#G�8EE37�����C�P��"�D���(��N#H5.��J��`�*�TRr���:�\���rA���nY�9W�K� ����*�T��`���o��� ���[�� *:[r� ��o��Re��1�rl�F#7��� ������40d���PP�
"
'��
��1�Z9t��Z
�%�!�A���D���F����h-LGC�y�Q)'}���t���&��7,��FZ��Ho���%��_�9�x�K�=�)oO��y�����u�}#����F.����������34���U�y��~4�`~KCan�(�y��4�PFP��
9/�mdy4��p��gY�R�
�j�w���Y�Y��4������\���� ,
>e��BCU#X�C���7i��@�q\�����}MZU�i��sc�Hg������ �I�|S��u�]SYA��J/�(�ior�eMu����W����W�F��Nu��W���_�(.�a�������qHcd~���4�S�3�5o�g}X/zl�� ��Yf���9
��m�e���8�X��e{�sLu��9�2?oCY��7�������E�[��eC7�Rz��e��z�s9����y�V^���z�
���/7b�t&`�v�i����Kl��&7�g�7���U?��wv\k6���r6_��l����ZeF���>������=K�{��Z�����e�����������������T#8��G(?������(���� �Nze���,��� "u7z�U�^����?7�����r��D/�����4�5o����g;�z��?���U�������N����<M���e9,o�����A��8?P�w��c�(��R_d�����
*�]F�C>-���b���W��('8�k��yP����}�1���;�C�M�Y�f������;���=�W��H�$IsZ�jH\���hh���LG��NS*%*T�re��D�XF��Tb��?�.T� ��w=T����Y��`P�q��R��bD%�*E|�Jp=T�J�
���te���F#��\��ME�la]���U��^b?��p�'7>��c���q'�$ ��l����2��U�3 H�2�i8��/Q���n�z1�Sw������WO�_ns���A��
g�|��Tj��F��h��q���2�������zrCMn����=!�+'�����&�/����n�)�4���q��MC�1i�PX���f��Y6���d�w���-����&��'�/�{�f����J�/�uO�q��0��f�����T]Vp����� �L9]�H�������r�(����=��z�&(���"�{�0_�s��{j��z��|^!�����A�g(G����8,��yW�,�m(?gh_���m�-����Q�fe���(��Y�2�@���F�c�4��:�����
��ci&��:���foP����#���u�j|O����k�FX��etw����~�J�k��@^��\o_�/�{t��N]���2HC0&][������q\3��e�7�q,�k�Ru��|U/��w�����%�Q��� zkv\������avb�9���e{w�M]����8����,�@ ���#�FD������H/c���2���,)�M��������&��{Y�P_/����N����+I�$i0���Q�\`�
�ZA(�k���
A���������
�����;�{�(5� ,��]�,��n���
�n��.��N�z�x42<�������4�.��Jr�Ohl���xXV��{87�����P��4"�������O� -��]��4.z�?����u){C��h@��(�'������2dSO�y�EP�����j|��� ��8����|���y0��FI�U�/�S#�D��e����(��y�5e�Q��_�����_�b��!}E�����A���!�Y������Z�^J4d�-=!�����F���+��|l�%?���
�����D������t��%<X�^e ��H#q��|�
��K�xs�OYL����G!@�qsWO7� �zB�������i�-��w����G��oh4%=��U7x�����{u���7[4k���[�� ��w��1?z�|�k_�O����|_�!�#���f�(W��f�����^�������c��s ������V0�?pl�t ������`�ziT+}���K�)��\ktsM���u`���z���?<���/��l��F=��i�p=���O387�y����WU����:���������������z�5_���&�RR�P���F���k�
�6��`�Y���HgnN�ew5�������$I����|
��JKD�V�b��|QM�D�@������*
��2F�wOC����Ft�+.4R�h�(��44�PQ����hV�Q�o�5�u*�o���`"�+�R}�,��T���@D�x����j�L%�J%��l�����w�(�����Ho�Z�Y�-lc�zXnt��N=�3rop\4D�R�������������;��ER��(�8�)�y�[�A��-�q���s��>���<(�e3����P^4�4���r���2(����h����\�M�!��'�X������^�Oy3C���U���8���z/~Su(�j��9�4/l��f�e�6��o|#>����!zi�l�T6��_���iY���[�I���F�z(��F�)�������y��F{9�y&`.���.�����
�<{�^p���o�c8�f��c��%�3���SN���?>=�y��IF����������������Z�Y��Z�����xf�i��M���z���u!��tcOop|��������#������������(C��;���6a��N:)�� ��<S���~��_��5k�����}�8���f�uZ5�}N�.��;�(��3�M_�A�+���~#XV�`~W]uU
��7p�7��>��tf��vX|��_M�nww����v�K/�4~����������&�[�G�>��)��>S� M��<?I�$Is�^����U6F��\V�i�(YiH�w�Oe�jq�^6���Q�#��F�fU7Z4����u.��������*!"��,�I�
�m&��FG4��Y�����
�H���/�E*���2���iY�z��g��y��YO�Y*���U�
��������F�/�XNO
(4��wbsl4�`M��?"�
O��#�����A���r�[�`��~���^L[�������2���B>��w�����G?�Q������/�<�=��Cu��l��)AOe#f-�4��n���_|��5�����O�e�hP�K�������/�K�e�{�v�i�44��Y����Y6�q.k�p~�X$o��f�s�q��(��9����Y�E��R���<g4�V��+���#���a#�O�c��z�O�o��Y��w���p��1;��C���b��~n�8����<�:���\nP�KY��������@\k6��l�l&��U����7���5pV���+�"��������|(7(o(C(9�� �887��'?�#�8";�=��tk$���k9<6�&���1�~���/~��������W�����N���vN���������eQY�����f�fP�\x��������=������'�9.r>�o����^y��)HO^��~����������7�7�Jm�U}c1������2oQ�5:��$I�4���*�JK�S�����
J����@w�T�r��JPY�����l�r{�1;U72S�h����7���7� ["��P�-4��2�W����}��y[ hQ�����('e�T����L�]���n�)���������n_���ogI+*���~���}�Q��b�(�[O����l%��7zW����nf_�Fe:U��FU�/�CCb3���V}�9��?�C���B��L0�����)��O?=5�����Q�>��7��<��g��VKuTK����VZ�{��F,��7��:��7�k-�����u�S�`�N��2(>���eC8���Z�Y�U���6��2������?�1T>?�sm���<\�����{kv;\������%�D��e�G��g�qFy��)XD[^���@�_�a��5��:��3��X��sI�g���r�F��$�����Ko����G^#o�g���`�����i4�R�_�;(w��L�M�U�������:�Z���@���r���^�A��M�K��9�I�SO=5����\����{��g�K��W�>����������t���W_��7y��$�H���,�s
�2���,���>�F����|�47i7;b�$I�4T���@�H�� T��@�3-i��i].���L ��4���6.���F��TW��Yg��=�}���g���;���^�]�2s�
��d)�`��U�z���;�����I�N���T��w=��%�1�����t���������l���]������ M���0�-��I�9��Cc�v����1F�'?��B��?����gDw����-�zSn����f�`[�����5'�Y���\����9�'��V�
�l���D���d���8����J��z���'>��G�������V�Z�QQ����T�����m�~��>m�ZsN�[�����3���y��)�D���Q�)���y�c� �[ll�A��'�~�o������F�`�,���� e�g���]�6��N�1���`�����9��[^%��{�&��{�xz����������@&�\��q����������(ey���[��������:?
�r����6�1����������$I���a�����K4F�}��3R�fR1�.� �"|��7���H�#��{?P�ah.�i��r*��n�m�w��^�[�s���[�v�4��>���e����+��I����dT��*7�Rq�YB���~"9�Wk�zZ�F4���9=��a[��2$*�<_-��h��74��hI^a���3��l�M� ��F�F��b��������:�w� �q�u����{�~#M�y&/��:�}���^O�����:��X��;���ht9�qL6�/X��o�}f��V9��6T�+��A��lo_���7/�7��&�l��-�4[9�Q�8����Ya_���:O�+��Zfe�>C���M���������k�o#/�*���m�guz��>�����6����k��6K���ub�z�d���i��~��\I�M�d�6_�������^1�~x��k��sU�����m=�7�?���Yfg,�r*�����87������� F�������F���<v&0�'��}�r� �V����>`[.�(\+�=�
t��k����f��rm�U�c��
�\���x�N#�\Ko��z*;Ayp��'��P���q��B9@��y����^�M�����Y�4b^�Xo��q}M���e)_��w�?��zT����]���i����F0��@��-y(_/S�QW�l������;��I��.���;�=�2r��� �6�g�=���m�����V[�s y���u���y�^y��r�:�U��c9]b>,#�������[n��������>�QK�I���������$I�Z��9PA+{�R!�2���T�2*�=U
��������xz4fy����Jj~�H�Z
�0}n���:�H�Y4���T����F�\����i�G��S���N�~*���1e�����2��x�yK�M����y��Q*���)�I����-�L� �^6E��T��������������34��U}��h��!���.��_�����_�z����i��������<��l n
�e0:��>�������=�~�q�������X��}��Z��g�����u���`Q}.c����-��L���Z�������Cy�����'��H����r��{�I����\�a��k������c�e���~#H�����7����l���N����
��k@�l���o:�V�q��,��4��f��H�����sI+!��n�����(_��W���L=��ps+������|�1�>�x�~������|:�9���t�MS��<�?��u�5�x3��}�6����2�����|��]���i�����?��?�)�V�y�2�!x P�9�m����R~��}�S��o|��,�{���M@��MYO^d������a0����y7�#���5,��5���o%I�������]� p��8�@�}n��r������4*���l\�B?����:��
��]���R�S�4��e�T07�����$��r�
y{�7�NZ���G����4(����%��k�}��z���W�]v��r�-�������\n�Q�<������7����
���.�T��g,g(k�� k6PC�)��7�/��.�rq3��Hy8�h�!Or��^{�_��W�_�����e�F�XVy����
���R0�i4�F�n����sec��P�N4f��G�&������D9�(����?>
�x�)����f���!�I�f�?p����In�l��7�?��O�����s�9'�X����r���B����i��
����k��mN;��uq>�Z����;,5�S�����4�K~��KZ��f���e��9���~�/�H�F{ci����������[��^w9�D����:�|�F3����8���__������ey��.o���9u�6X����$�A=�4e�sQ��|@ZQ�5�s�Yg����<�+�v�C�}9P�!Z^[�;���y�����|L�����G���9a0�������������\�"m{��[I�$i��S�TV�E3�@4��C?QA ����`�r`-W���w�f����c+�fT^� f�������Ve�C�6S����<�N����i� p�+����^|����G�M�4���T��>=A�2�p=4
��f^��r81����� 3�G�����7lO����_���8s�A�
����L�����HUo��e����.�!�������������!��t�I'�O������*���
�#]XnD��~zmd���'v��wy�8
4{��*Y)7� lo����C�7t�o������<0(����>�Q^6s.�X�X��������Q���g��C 77�7P�4��I~"@�qE�%����1�k���4���� +��e�����!}�k��9�����^��A�:y��v�C��_�7��f���
t������U�_�_�����.�>�g�lZ�[�b�J��(��uZO=���gJr#��~���o�sry�e!=Zy���� gu��������EY���c��&?&�<{2K����}�co�x��/��|~ �p,A����z���s�`,����B�>��.���iy��>T�b$I����s��;Us��
��2����4Z��r�����H�S�cq��Q�����F���������b2o�i�(��lD�]/`Jc=A3R�}~)������b�0e�N�ww����� ���V�X��g�p�u�(DE���/H�Fr����g�~#x�h���� ��B�(K����K4^�&`���F�d���\�g���H�J5��@"�<����}�� '��z�������O?}�s�7�{���H�|O�;l�\u/����U�}��
���K�45�0���l�1�,�z��Gydj������_��Z�eb�^��{o��L=�����0��<���3���,h�x���eo���&�g����2�zB��<��>��l4X�2�����QG�g4�7{#@_q�R6d4#@��|�.�����8��B�V��!�9�P���!�}o���2���e��]�G 7�#��)�=��2���������Z�Y�c��
�-��F�[����2��_37ZhF��i��s�Ag��{:��c�7��7=���O�D�����k���N
((�Icp=I���:{����Zk�4�a^p���i�#�lX��f�9�}X��
75�
���R�h>H�����G���Yn���2� �H�$I���������5
{���\|����P�)��H��U�:�� P4�1!��!@��'�kY9&�n���Y*6���z��W���Q�^C,�>W�h,���x����Q�Ui\�P�{��W�[�f{�g��4-3������
F4�P�.�g�;��4p�|X�N�����o<G-�sP��������!�\{��=N7�T�G���7.�@�) X���7��c�A��(;��f��x�Wy��F��0-y�<���}��L7�����I#]#Aq�-o&@����)K�h�4�d��S_�Y���#z�6r<�����a��N�a}R���:��<K�����\s�5�7tl�OcP�F�r?����h�����>s:����7�����W^Gll� ��c5�t%��+��(�)�s�����������)UI���b5�Sy����!9�H~-��9e���%���M9����&(��k�r��f���;����A>-�����\G�=�����M���#_��{����X��</����|�~��i48E�����<F�5��iCE9,;e>7��G���T��r=I��*kA��a�9���n��=�5�~������z��>V��t5�<=�3�9��s>�����9��%I�����W�4P�0�Q9��M\X���FP����\���0X�P�����{�33�H����\v�eu{P��7AyGow�)R�^����NK���h��9��SS�)#��s�� PI�Q����\�$�X9���Q�
f��FK"�k���MIc3��}��A����r�#*��E^�Y*�T���O���3�hx�$�[�TJ���^:��|C���_���G�)��4��`q���g��T/�j4 �/h��/XW�;��sg�M�6�d�n�=�>����H��^��AnL�
� X^6$S>��97���I�����s�,?��k$(����;����V[���,�<Gz���v��G9
��30C��qY���qC���z�0l ��o���<6�h�>7�����E�����e��K5�s�w�=�w���w�+�l��[l����d�s��]�x��g�R�}���S������LX�z�R��`������e��^i0�o�T�9������2�F����� �c�I����<�u��
p\��}�����Z��-U�e=�����O�k�j��+:���k�fq�o���3�*���m�����*M��
�g>�)7Z����N���u�c�|Cp���c:�V�7]d�?ynft�{nd�w}�q���#OC�H�G����mi �����a� ��7��F���@0�2�������@P������Zy��N��rK�=�)3/�������|[���i0�������:�s!7���b?�7�I�$Is�a��R�����&B%��I��RY�f�mfVA��
;{����<��v�n�o-�>�A��8���^��+W��7w(���p�y�.�Z�
�I�&C��0D�e*&C��i����KR�Z��z�Fz������_��0~,��������i�i�<?����`����[(�d�.��#(�+\��3�-��F�KF~�n�����AW���}Hz�.��,�C�y07�
�'A,�����F����z�����u&�Y�)�?~������� Kc���G��T/��
��������C��4�
p�7�������&��
7��g�wl���}������V�6���8�w���+/GX?�AO�2������<��� ���my�m/{<s\���|�1D�3k��e=�y<���L$/�69P�oHG�Wy�h�2i�'M���r�-k�����G9�z��m�����J~�E��Q�Y��(�X��7�?!8Ns�����3��y-�����.��� �pl�x�6�gi�c?Pf���?���L�y� N.+X/� ���������A@�2z�m o�/8��g5���'|w�<�J�����;�����s%�N�]n|%=�#�O����u�]��3����<��n��m=Y>iH>��
�,�}LyE���&�K�;������l�=��y�DuYS�L���������f��q���9���W�y���4�e'�������K
���#�1-������G����j����5��1��I�y���C9@Y�r�L_�#}����y����t>/�_����K3�����Z�Y,�������������$_?d��_�A��r��sIo���T���a�����sb�
���>'���� �B�!y��Ik��}B�Mp��aZ���3�:�T�x,��k]���{T��r�sU�y�u*q~f>�g���p�Q�b����;��@^�U�_��������ONy�c������?q��b���Y.�8�w�a���e%�Y�����W�EyNZ6��L"���2���<g�X�n��_s})�1�0��9�|@>���r��V}6S�6���:�-#�YN�n��������}�$I�@���)�U*2e�
�]��\XS��D��DC�|'sOzjH����=4� �!�� X��T�i��N�@n���@�%�i�u#m����Q W��&*�Tn�7/��5s���m��v�,*��"��xG0��^eo��^����^q�3z@���5*�4��`���a��/����}��hg����iJ��mc���<�{�����}J�d�1o���Gc�����p,�\��4��Q9ULY�Unlb��4�N,����v�������c�m�jHo��^��}�{S�V>�
���4V�~� �1y_�/�We��}Js��F+��[��ry��>�k>��2���y�}F/����/50V�a���j�y;���s�>p\�h�>�X�JC
�;+�������a�1y�C��u"��e�����85��:V��@��X7��� ��h���f�n���Y�;���M<�xQ��7X��2���L������c��HK���
+�m���Zu`��c�t��)i��[�/h�+�e����<C#�����d�y���s���-����>ey��%�V.��:�������Z�������)8W�p������������c?#9�n���=��AZ�&���86��jd��z������|$�P�P&������>�����U�c��Y�0�*�����r�V~a^��+:��r��������Z�7�y���������9=�3�Fz�����u�-���f�%�=��S]�vW��z{N����� ���r�D�W_���\{�<G�����r>����B��X����lj]�������v������YiY������y����u��uZ��V���:���8����AZ�?s=$#0�H����v�HK��)��}�^�)��SO���].�A^ ��R�c�u���>��T/�����A�qY}�6���<9&(7J���;��cy����$I������5T�k�.$`J��Y����`�zvTrv�i��(@�4�Q�RG��h���n�j��G#����Lr�S c�y4R�J ����C9$��l4x@E�F���T�������K���h��X?�z��7���~U4J4��a�\)�N���X?����hP���6t�A�7�>b_1�C#��c��lz��f�`H �Lg��u�U60�m���m�y�ue�����q���h��:�q�a�r���e�}�g�{��>�����������qV��>C�p@�{��0��P���|�d���s�
�� M�������q���}J�#�,Qf����|l��Z�M�;�9������Ry]k;�y���z�,����9����v�J��V`�/�o������W����SsD�e����� F�sYNwp�p�|��H��/y��R>�^��7���\�y�/���ny���$�y�s���j4�0��r[��.��p�`;�>^��5�@;��{u~-�1^���l���6�������+�n���@_k����|�#�|\��m�����
�������<�9���������L�3����A�f�j�c����.�y�c�?\�v�a��K�_�C�)i�\��u�P��`�J�}�<{��%���%�}.��}��vo����b����W�'����9�|@=��Vd���c9]�eV��>�V�$I��KS*&\��+"��F����a=�2��4�3cE*��j������4c�
i�#8F��W^6��<v�u����{���w2��n�*a4�q1����y��>��^w�4!����f�z�����k�Qy�v���]�e �}Y>�w�rg{F%��F���!�X'�Hn�$����2��q� %iF��3$7,�}�/40q�6\�%��~ HX�����<�l��L�g}@z�XDP�
6�����l��V�� *�C��cz��9���\���������q��4�_����W�wGu/~O#��w8>X�
���F/[9Iw�S=�����q�4�%������g���%��|�:�}�����9�7��� �!�XOz�f�d���#�'����M���a�1�mb](�ig]z������������e}ry��+��4l��P��q�K#������e��?x��tg0�0����G��1�v��G�1Oz�����f��<���7���M 9�ye�A�5��%��u������i����WH.�{J�|W���������/>���`G���e�#)��g�@��6���Io5���h��\��@;��+i�zU��|B~�������{s������y��,���e{��LC���A�F^������0���$�8�������$O�iO2�5i�~��`���������r���.b?�����E�������1����?�����?u��2�eh_�U����zT����iF���2O5R�"}y�E��}�H:5�<N��Z�y0�>o���k�6�8��L�C9�
��6��"-9��^�������> I�$
�������gq�K�O�+��4�Tc�����F������/�AC]��P�����{��^e�D%�l�a��`����~�2Y>��r��Sy��f����e�
x`>���42�Z����m�N/�����z�f�������v�KS��|�������;�RK�(��]����K���������o�[�8�g�}��u)"2��c��F�|_{���SO=5
M�q�?�,+7~�iUC������n����^�l���5�.��}����]+����f�U>�X~���o{�.}I�Z�_N���b������K�������4/1����SYU�;H�o�<����~��eU���<�����Y��������u���:�z=��`���
��.�K���q��H#�P7��p� 3GN���!fg�q��p�`�J������}����W�v��g��J�|~�_������~`^l_>O���^k�F�}��r�7�G�OY.��������NK4R�1}o�����9�5�����ez^�]�^�\�e�w>VJ��O�_��I���=��j����7</����\���<��q]�����tj�X����'�ry��Go��u�������9��iDY�:��#e�$I�4��-`*i��e���o����Nh�*�r�_�9���T,���s�zSIR}�F9���S#,
�4�s>�$�^����?��sx�=%I�$I�S�Eq��C���'?���?>'}���7=c��r(i�\��r��I'�G}t
^u�U��F0�'�|��nF�����$I�� )�5�=Vjtn��F�;�6����l��2�$I������T���x���?��zk��Y�T������I`(�Z���s���F�����y��s�U����*��yP�yN�$i�D�|��k� ���$I���g�y&�|����.��7�H�$I� g�T���B�|�������[����4�aw�W����q�Yg���l���O�jK�����e�^�I�<�aZ�}t���������6����)#I�^}������f�t����a��Yg����q�����V�f�mF�$I��a��R�[R����h�� ��?��=���G�N��I�&�^�7�pC\r�%���O���Ku��vKC!�B@������z������ys�Be�^���z�������t�zF#�V[m���[�}���'n��:��MSIj%�#���9������/����|6�|������$�^� I��k�}��'�\s����]�$I��m��u��Z������3�HA����4v�����{�H��C������k�ma��o�=�=����/e�LO�J��1��S���2��}��c�H���x���w�Yyq��@�$�:���vZz^i~�G �
+������<!I�e��)S����#$I�$I��57������E�, n2�!���/=D ��PM s��V�C=��`)��^?|p,����3��{�2���Y�\�u�]c���������8����o��[l�t��� I�s�p�n�T�$I��{�J���p������S/��%������z���J�E]���� �2�.C(����GI�������c���u�]7V]u������s;{�JR}<����.K�"p^�|�������n���g#�$I�$I���R8D�aq��F�Wo��/�g9�7iV�������VKI����Q�y��7���oI�$I�$I�1`*I�$I�$I�$�e9V�$I�$I�$I���e�T�$I�$I�$IR�2`*I�$I�$I�$�e0�$I�$I�$I����J�$I�$I�$IjYL%I�$I�$I�$�,��$I�$I�$I�Z�SI�$I�$I�$I-���$I�$I�$I���e�T�$I�$I�$IR�2`*I�$I�$I�$�e0�$I�$I�$I����J�$I�$I�$IjYL%I�$I�$I�$�,��$I�$I�$I�Z�SI�$I�$I�$I-���$I�$I�$I���e�T�$I�$I�$IR�2`*I�$I�$I�$�e0�$I�$I�$I����J�$I�$I�$IjYL%I�$I�$I�$�,��$I�$I�$I�Z�SI�$I�$I�$I-���$I�$I�$I���e�T�$I�$I�$IR�2`*I�$I�$I�$�e0�$I�$I�$I����J�$I�$I�$IjYL%I�$I�$I�$�,��$I�$I�$I�Z�SI�$I�$I�$I-���$I�$I�$I���e�T�$I�$I�$IR�j��R�[�$IR��8u`����b�������+�����������j��������h��_�$I�40�$I�Z�q���oZ�]�jo����#b��FT>������1�7�����W����6jt���c��|�^��|):^���A?k��!���t�I�$I���J�$I-������7M�IS+��F���w��fWS���_���8:'O�|�����m��c�#��X���zc�����'=p=L1|�h�i����*H�$I���E�$IR���i,��:��':*���L�������3:_S�������}�>�`}����86�t��}���[��V�v�m��1��z�d��^�x�����e��i����&���/��q�*�J�$I��0�$I�Z�����m�N���YL�81.�������*����a�?V��)���n��zj|���N8!n���x��'����w�q�q�!��/���'��I�?X� ����;��SN9%^|�����$I��'L%I�$i6�2eJs�1��o|#�x����-����������N��_~9G/��������o�[|�+_�a���@�Yg���{��`BP�;��N<���O$I�$���J�$I�lD/5�g���J�Us��_=.���x����3��Lv�a��w�#�_~�Xm��b�����}�s)Pz���/�P���$��������o;���^��$IR0`*I�$I� `��������k��;�,�@���������|���n�m
�2���>�����>��~_��S��g�J�$I��0�$I�4$�7.���/��?�x
l����=��#6�t��S������������������?�q���>�7�?��8�����W_�L9+�=y�9�������M�9��C���c�YX����c������;/����>���������-�8���4;��C���?L�Xk����4�QGO?�ty��i}����>;=KS�s�5�����7�Yw���'��g�.� }F�Yj��R���[,}Vm���O�S~oO��{��g������K���Xd_���ep,����6�(
�������$I�$���J�$I����)��3 ?��O�o~����Az��l��~��q��W��>������z(\&G>����I'���rK�
��.�,�����������c�U~1���?��h���w��x�������*~����'>����l�� ��SO���{�?~|z�� �e�]w]�����o�|��i ��)���X%����-��{6�y�.�l��0���gI��}�tk��f�l�
6�O<1���n`�,���1r�������^8_|�t�vk�X�������Zk������{��3O��'?I7�����1c���$I�$���1K�$IRz���\i��Rp� APzR �������Xc�5RO1��9����g�yfz�hF������N8!��;��#R���,�%�E�@��Es/@��g)��j����3�H=Xo���8���R�N�6������`��������L�s��������S�����������/i����p���G��{n�g����HAY���Yw�yg�}@���'�o������"0��.�[o�Xn���g��Xb�����!�������:i9��|��7Oi����f�`�n$ XJ�3<2F����c��vJ��������$I��~��%I�$
)S�L�u�]7���/��n+��B��������+�����P�L��E����/�����Xxn�?��4���/�;���\~;i����7�|3n���X9���f.�3D/�G��<4������i��%�\2-g�L���J@���,����.���F���3/������m�]������Xz��+��7����[+G����<��[�����;��3
�L`��K�H�
�O�������#�t'H��U��-�b��O�$I�����$I��!��s0z��;6 |��=��e�Y&�
���_�|������"���= r@!�{��/�����^z)�N����w'������UVY%�?��4���+�X��{�|�7)�������1�9^�n����]�� ����.�.����xG����LA�����yJS�t�r��������a��m�O��8��/���'vn�1bf\�$I���I�$Ir
V�x���}Op���fC������;�'&�G_x�������sP�cs����Y�������LU�z�=��g$�,�c�Ep�L ����W��[~F&�y^)�T"P�3���Zj��t�MS���e��</� ����;����;��#�>��CR~R��fn� Jp��A����&�Hp[�$I�����$I��!'i[O3�$����O?�tz^��>�����]w�5>��O��~���=9 �����i8^��������������|����==���i������v�e��,���K�;��4==^���z����y���-��,A8��Y��#�t�go-��'���wR��^���?�������'�d�M������W>�t��?����%I�$ L%I�$
9�\�������z�����|0�4%h�sP ����?�L=+zr~�+_���:+���o�����7n\z>��g��~���������aC�mJ�����W_M�1}��Qk�5�HC��A8�c&�Jp� ]=���J���o�#�<��qk�t�,��"i��=� n����M���+$I�$���J�$Iji�=��cR�����n\p����_��Wc���K�y>j-������W/���8��R�Sz��q�q�e�U~���3���`���O�3���:���g��N�-�p��zkzOp� ]-������G���Z|�K_�C=4Mo�t`07AQ�u�{�f8^���%I�$)3`*I�$��@y��gg����+��P����J��j�=�X|�k_KC�����iZz���Q�E������y���{oCC��Yt�E����O��,��^Lk�m�!�sJs�|C��G��[n�����`�����L���������o,��������+�:��3�Gpn��~K�$IRf�T�$IRK#�����G�N�� �/��\sM��[�
�����^���+���uJ�O������i�@-��`�
��-����4\p5pGuT|���L�W�0��=�4%w�u���)�l�UV�L�z����`��1c�[��V����=>�W�� 5��%H��c�W�7�x����$I���e
A�$IRK�G(.����$ �e�[z���oK��x����n��O�3No����6mZ���^q�q��g�<���m����%P�C����2�I��#�H��v�q���'�/��b
�1�SO=?��O���c<��C��j�����I�0��~��� ������������\�8 6�h���}�W#���8�5����0�� v�
nK�$Ijm��%I�$�4�����K�I���|'
�K �?��������/�Zk���Z�z�~��N��������i��Z p2,/C�����KOR���H�Y���~S�LI�O��s�K�\������|�=��SO=5T?����u���~�����/���q����r_u�Uq�]w��Nw�}��i������������ )��� �1J�[�$I�JL%I�$���[,J���7�_~���C��<����KA����+�����4o������~7�Z{��W��M �m��6i(�O���h�8;��CR����-�{2t��{���{I@��L��g�t�A����&v�y��{�~c��M��������\5����S���W�x��n_<�V��a�9A��g�V�%I�$���"�Y�[�$IR�8�w������o8">������aHZ��e�[������|O����@���T���I��/�a(���-�.���C1bD
t�{z�V�7�x�7��������9�3o�o`��|����~��g��V�P�/��]tNx��n������<>���g.����o����{$7�<0��o:��5����+�N�
_��U����_��?�|:�96����J��$I���3`*I�$���0��cn����!`*I�$I=��HI�$I�$I�$I-���$I����X`�T��g���Y����������k#���1��F-]�K�$I�f?��$IR�{���|�����4��@��y>���_g��[��-���So
[����N��[G��V�I�$I���3L%I��4uz���v����c ��[�>,���z��I�b��������I�j�g�����'�\�cRtN�7:_���A?k���1j���$I�4�0�$I�Z5��S�:�������7R-��G��I�7���=�F���Q�uvt�� �7���-b�|�7�$I�4g0�$I�$I�$I���|��$I�$I�$I���e�T�$I�$I�$IR�2`*I�$I�$I�$�e0�$I�$I�$I����J�$I�$I�$IjYL%I�$I�$I�$�,��$I�$I�$I�Z�SI�$I�$I�$I-���$I�$I�$I���e�T�$I�$I�$IR�2`*I�$I�$I�$�e0�$I�$I�$I����J�$I�$I�$IjYL%I�$I�$I�$�,��$I�$I�$I�Z�SI�$I�$I�$I-���$I�$I�$I���e�T�$I�$I�$IR�2`*I�$I�$I�$�e0�$I�$I�$I����J�$I�$I�$IjYL%I�$I�$I�$�,��$I�$I�$I�Z�SI�$I�$I�$I-���$I�$I�$I���e�T�$I�$I�$IR�2`*I�$I�$I�$�e0�$I�$I�$I����J�$I�$I�$IjYL%I�$I�$I�$�,��$I�$I�$I�Z�SI�$I�$I�$I-���$I�$I�$I���e�T�$I�$I�$IR�2`*I�$I�$I�$�e0�$I�$I�$I����J�$I�$I�$IjYm�]*�I���j�{��q�W�}��K/�tl������������ho������������{��+�mmm�)���g�����/���#{��4�>���e�]�|zk��+I�$I�$I�$
VL{��;�����q��7�k��'N��#G�|���-�\~��q����Q�*�x��o������}��.�����J+������5����v[|�;��[o�5���'ON�Xx��c��������T�n�@�W�$I�$I�$I���^x��8������.�u�]7�<������S��o~�����/�O~������*�x����>:�;��Y~{��W��{��z�2�|�������#�L���w�9.������;��[o�u��������5c��+I�$I�$I�$
v������D ��?�il����_��;vl����|g�-J t�����v������^�zr,%���f���.��2�����o���~,�����&���a�����<�9��x���?�����~w�=Z���������^k��f���:�w=��J�$I�$I�$IC�=L�4m��x���c���J���R��R��%H������w��?�|�s{��W�ax�sN�o �p�w�}S��^�/��b������/�<���~���{G������+��>'