WIP: store additional info in GIN index
Hackers,
Attached patch enables GIN to store additional information with item
pointers in posting lists and trees.
Such additional information could be positions of words, positions of
trigrams, lengths of arrays and so on.
This is the first and most huge patch of serie of GIN improvements which
was presented at PGConf.EU
http://wiki.postgresql.org/images/2/25/Full-text_search_in_PostgreSQL_in_milliseconds-extended-version.pdf
Patch modifies GIN interface as following:
1) Two arguments are added to extractValue
Datum **addInfo, bool **addInfoIsNull
2) Two arguments are added to consistent
Datum addInfo[], bool addInfoIsNull[]
3) New method config is introduced which returns datatype oid of addtional
information (analogy with SP-GiST config method).
Patch completely changes storage in posting lists and leaf pages of posting
trees. It uses varbyte encoding for BlockNumber and OffsetNumber.
BlockNumber are stored incremental in page. Additionally one bit of
OffsetNumber is reserved for additional information NULL flag. To be able
to find position in leaf data page quickly patch introduces small index in
the end of page.
------
With best regards,
Alexander Korotkov.
Attachments:
On 18.11.2012 22:54, Alexander Korotkov wrote:
Hackers,
Patch completely changes storage in posting lists and leaf pages of
posting trees. It uses varbyte encoding for BlockNumber and
OffsetNumber. BlockNumber are stored incremental in page. Additionally
one bit of OffsetNumber is reserved for additional information NULL
flag. To be able to find position in leaf data page quickly patch
introduces small index in the end of page.
Hi,
I've tried to apply the patch with the current HEAD, but I'm getting
segfaults whenever VACUUM runs (either called directly or from autovac
workers).
The patch applied cleanly against 9b3ac49e and needed a minor fix when
applied on HEAD (because of an assert added to ginRedoCreatePTree), but
that shouldn't be a problem.
The backtrace always looks like this:
Program received signal SIGSEGV, Segmentation fault.
0x00000000004dea3b in processPendingPage (accum=0x7fff15ab8aa0,
ka=0x7fff15ab8a70, page=0x7f88774a7ea0 "", startoff=1) at ginfast.c:785
785 addInfo = index_getattr(itup, 2,
accum->ginstate->tupdesc[curattnum - 1], &addInfoIsNull);
(gdb) bt
#0 0x00000000004dea3b in processPendingPage (accum=0x7fff15ab8aa0,
ka=0x7fff15ab8a70, page=0x7f88774a7ea0 "", startoff=1) at ginfast.c:785
#1 0x00000000004df3c6 in ginInsertCleanup (ginstate=0x7fff15ab97c0,
vac_delay=1 '\001', stats=0xfb0050) at ginfast.c:909
#2 0x00000000004dbe8c in ginbulkdelete (fcinfo=0x7fff15abbfb0) at
ginvacuum.c:747
Reproducing the issue is quite simple:
1) create table messages (id int, txt text, ts tsvector);
2) insert into messages select i, substr(md5(i::text), 0, 4),
to_tsvector('english', substr(md5(i::text), 0, 4))
from generate_series(1,100000) s(i);
3) vacuum messages
4) ... segfault :-(
regards
Tomas
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers
On Sun, Nov 18, 2012 at 4:54 PM, Alexander Korotkov
<aekorotkov@gmail.com> wrote:
Patch completely changes storage in posting lists and leaf pages of posting
trees. It uses varbyte encoding for BlockNumber and OffsetNumber.
BlockNumber are stored incremental in page. Additionally one bit of
OffsetNumber is reserved for additional information NULL flag. To be able to
find position in leaf data page quickly patch introduces small index in the
end of page.
This sounds like it means that this would break pg_upgrade, about
which I'm not too keen. Ideally, we'd like to have a situation where
new indexes have additional capabilities, but old indexes are still
usable for things that they could do before. I am not sure whether
that's a realistic goal.
--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers
On 12/4/12 9:34 AM, Robert Haas wrote:
On Sun, Nov 18, 2012 at 4:54 PM, Alexander Korotkov
<aekorotkov@gmail.com> wrote:Patch completely changes storage in posting lists and leaf pages of posting
trees. It uses varbyte encoding for BlockNumber and OffsetNumber.
BlockNumber are stored incremental in page. Additionally one bit of
OffsetNumber is reserved for additional information NULL flag. To be able to
find position in leaf data page quickly patch introduces small index in the
end of page.This sounds like it means that this would break pg_upgrade, about
which I'm not too keen. Ideally, we'd like to have a situation where
new indexes have additional capabilities, but old indexes are still
usable for things that they could do before. I am not sure whether
that's a realistic goal.
Is there a reason not to create this as a new type of index? "GIN2" or
whatever?
--
Josh Berkus
PostgreSQL Experts Inc.
http://pgexperts.com
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers
On 2012-12-04 10:04:03 -0800, Josh Berkus wrote:
On 12/4/12 9:34 AM, Robert Haas wrote:
On Sun, Nov 18, 2012 at 4:54 PM, Alexander Korotkov
<aekorotkov@gmail.com> wrote:Patch completely changes storage in posting lists and leaf pages of posting
trees. It uses varbyte encoding for BlockNumber and OffsetNumber.
BlockNumber are stored incremental in page. Additionally one bit of
OffsetNumber is reserved for additional information NULL flag. To be able to
find position in leaf data page quickly patch introduces small index in the
end of page.This sounds like it means that this would break pg_upgrade, about
which I'm not too keen. Ideally, we'd like to have a situation where
new indexes have additional capabilities, but old indexes are still
usable for things that they could do before. I am not sure whether
that's a realistic goal.Is there a reason not to create this as a new type of index? "GIN2" or
whatever?
Aren't the obvious maintenance problems enough?
Greetings,
Andres Freund
--
Andres Freund http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers
Hi!
On Sun, Dec 2, 2012 at 5:02 AM, Tomas Vondra <tv@fuzzy.cz> wrote:
I've tried to apply the patch with the current HEAD, but I'm getting
segfaults whenever VACUUM runs (either called directly or from autovac
workers).The patch applied cleanly against 9b3ac49e and needed a minor fix when
applied on HEAD (because of an assert added to ginRedoCreatePTree), but
that shouldn't be a problem.
Thanks for testing! Patch is rebased with HEAD. The bug you reported was
fixed.
------
With best regards,
Alexander Korotkov.
Attachments:
ginaddinfo.2.patch.gzapplication/x-gzip; name=ginaddinfo.2.patch.gzDownload
� �J�P ���WG�8�3�+���!Bo�%����76���{�>�A`b���H&l��o�v=�5���G�M������������j_^����x*��,�\����x�Q��\�c���l��6�|3�n�e<��M2�D�^������a�����m�j�V�s��fsss�^����^��M�?!�$7�8zN����c�f�[�M��U �8��F��;�}#�������ev��4��A8�����$��O��hJ�����I8�*Q��t$���aex� $��Tl>��o��5�OD�h��M��4Ja�b��E��h�}�&������|���v?�u�����G�� "m>������iz���F�4Ia�K ������P��:���%��e�NV�� ��'aYK��!�-��t[4���gY�N+���Q�������O�K\oU~�W���/������4
h ��6�`��B���\X�h*A?�9H&w�g�x4�PAl����%�@C"w��Wk�M�i<�x(�����0�g��R�������q�����2������6�N�P� p��}t������@b����Te���Q8����}��B�v�$# ��8�U �A��4�B��^������$��d<����q4f"�����p*n��E$FI�>�)��;D�Fk7ht
u� 0�g8�/�@ ��Q`��>���e�����O�.���2ut�rA5u�ag5 aI���=�N�M~P?�h>B�n��a������d���Q�� p�^g�d�;�8�.���
JQX�G��A��1����}�FQ 4+��
l[!�'�����\q�� ��f�_l���5�@*�nj������*|"�7��3��ax������x(�v�'���_e��l4<MRx�b�����F�$���[���r��������g'U�V��_������T����h�E��=��}���y�`���9�^�t
���W�]���f�4�=���].�����X}���mF�GQz�dVM-�E�)�\Koq3|���M��������f�4Z$��S�gws����b.`��8S
��f/h�Z
g,��@%��`o���D,�����
��T���~��}��h��l6��!����������������|4�6���)p�";��N��;Z����R��5)F�7�����A�g��:�e$P���BE��y�d�g�q�*�dO(��,!��!�$���0G�A%L���
�q$d���E�@D�=�$Z���xpMb!4$;�����&d��%�]��4��(��Ln���M�R�!��%{]N~.Uo�2)���<�6�tD�bs<WG�p�Ia�0U-���5_��� l1�j�`�4{�~��W���1��t����*^&H�=�����++.��q���W��ptJV{jY/�x�-��X�A����V��e�(�j�cM�uF�$���t,���}��v5+��S+�A�9��rnI��$��X�M�y��F�[o����|5�:CD��z_h����������$4%�6hvZjm�#F39�o'I6�J��v�-�|2��O����$(�e��M�Q������?�������y"w��n ��o��1x/�&Hc Z7�w�h[r���9�t�C���p�W�or��2�,���������?�q�����lW����It�������������� ����$~7��*��H�?�)�i���~5�d��@��2M4���!$@� ����55I�AD�F���H�D��a ���N%��'6����[x[���(V�!�(,'uq����0�G�0 h5��
R����,�;�b^
�����'�gg������<<?����YG'Y+SfE�Z�>���5��X�n��R�c �x��v���O�ro�~���C2�i��,���x�`�&������\
{.������������O���T�O����?4�}�P�����}��9��XRqVQ/�^hy������K�r�HH���U>tQ�o��4�������q���m��_ /A�����h����������K��jM�FS\OF}��A�EibJ��
V�����X�$�,�'GE�DDH�n8���?Q} �a�]�~���Rg�p���5�>����$�<@p�s�B$��L��m�a)�����vv���x�*8?5|F%hte�*��g���9��������R�1+*�����^e�y2�!T$L��������x��n�XCQ<�{I�����E4%NH�"n$c�H�|&����P�1���r�
u;R����������} �(Y��q~��7�&$�����G���I�*�''oN�����T �K;��e���^�P���>:�;AC��,���C\
�f�}= ����@Qw�j����D���j�|��$"�$$�"��r�]E���������w����3��9��}k���g�.8��m�Fl�����|�l[sj��� ���.��F�H�d#5�{��J�k�K�C�e�l����jL�����
��Fm}7����d�����N��,U�?�r&��C��yvwX���h��CP\:�.�4������e�e����}`�RV�SU5�E��z�z���)�
!�?�K���[�W��s*�5JE�%6&@��;<���wD �%g)*K@SK�F��=*�����)Zd�[������-(Rp��<f'����5����;'��������V&�����$��Z ��9��3��[�+# ������70d%�[����P�V�&Pop�Q��h����[��1����Zk�r����v��Im����m����V�W��^�W��r{
�we��"��l2���+����������$O���J���'BU?�_4%�.����������M�\�Q���z�]�j��
����5N><>3=�N���s3V�������jY�d+�����*���_��Y�r��`���v �`V�v���*ncP��*1��I%���@>���!HG9����0]-�{B�����D{����e<>�j��3�x@�1��9���H�i|1�e��"HZ�El�F#�.s,�VA���z��p|�O���0��@��k�)��~���4�G��/:�Q��X��.�lk]�%���I �f����HY~ V�������!���w�
�e�V����k�M6�����h�Oiv\���a������d�~_��vg>��^��������p+���.sl�$����1�^�7R1�j����{���-��!,��s������as���1��,�����������oeX�6]:�������ktAGr�������v3���Cm��H<�� ��^�":���K4NfW�l��6��T_��o�a����tt�+�j����(��q8���)v��)�]��6�c��������@��
���ub�E`��k��}�m��q=g�`T�7�FB��e���]�Z�(i�Q���K���� �"��v�V�g|��I~p3)w��7](w�������l<��imm�;��-<[��_�S�A�-��)\��9>x��k����P
���� ���>G�0�s���l3v��,S�~B��0�V��d�]�p���������G� �MB����(��c*���2��P.h(0��P.�
%��� ��:���0m��@(z�^�@h�2��<��(��S>��n��p����MM����o�@��b����JC�v�"�v�����@�C�������Q{������!g<�.R��c�L�Pd�73�|����n��#�"����,�
g����H�q!�iK��� ��O�r�Gc��@&+, ������M}^�$��� ���1�B���(
9�K#���?ae�'��87�o�o�R�����k����=����?��imk WAH4��i<<�7�����F���dU�N����Oi0���0�eB�� �80>K���;)<�FS`��0M�[n�n��yGgK5���h��Y'�L���y '�����% ��$T��\#��Dl����(����3��~�((������X�����}^����[��Mb?b�|�mhK=f)�����~o6\e���K�5� i���&g�y���3�i4�@m[c����^}JX��s���X����N�Eu��!�<��y�`�4��U����z�T'��T�UC'�}v1����8W�<��e��l9,���Y=H
�
����k��ps{A�������,��]��|������rwrC�a�0(��O� # 9�!����X
�=��_D���I�k����Jp����FO_�6��b>��4������G"���x6���R8�}
n?���t���(F��R_���k�M�n�J���w>�c�ehRA��u��w�P��Y[��]���y������e�~����m��IX����r�����Cs[�� ���������
c���]�w��!�gG9�Z��Q��"H����6v�4����7�Pvs�*�����hVUs���f���[����>$���TM�|�Ev������
���<s9����rsOUk�� �_�0}�UU�S���M����{,�#�CB������^�e�W�e�%(m���LlXZ���GG�!����Z�.���0Z�V�2�*���D�
��'2��R�agc�
��T�l�����1*�y�K�e�*��\/����y����E�������%A�qK+\�a�]@�n�t�M���+&�����+��b�Ji;1�J��?�y�u������6�vJ(�Y6��@����2��>/�L�v���Fr�@o<_{"�HfS��v ����6^�q/��c�Q��U��b���Ur��~�����W<����n�<��_�i�V�[+���k��j��<x,TH��n�DCW���t����Jp�~���e]��`�@������1������I������������������o^�������q��?}�gZE�����a,%R5^��mB�O���-U�JxM6��)'�l6����Uru
�P�9I��e�O�\wa��i��)p����\�ik��DK�����������]|������ ���[�T4Du:}!�4�������n��.q��QrE�Pvj <y9�T�^,�ww{A��k��_j-��-=�5�m�I%����h����|�����_��C�<{u������R���e���q���F����1��`f�O:<��{�����8���6N�e���*��#w�$�0��y4���:B}!�h�_�6{�-���
�]G�����m}@�s�C��%�K�F�h�]&��|)r+�j�
���h5M��4oWp����e���4���;�K���
)��h�����%�^��Pg� _�b�M)�l��`�����9,��4�e��[�}�R��x5|y�x9��L���k�k��$S}WG�a�
tXb[���"Q35U�<#�u�����bn�U@�������*�����*M�\�|��4f������>}}Tn7�l&7��@��$k�k�����~��R�����N��:�s��{J'��78�4�������o-y�����G����`r��j�{Tx�b
B{j�pFnA�a����g�����(�}�P���uz����h�� �������]j�x�r���eF�s�$U{9�]A2��4L����\Y[n����]��h��8�)���� �h�%No��MU�CN�����W ��0���t�)� i���:E|��-���>����Es�e�)a���c���aP��V���E8���S�Tii� 6}��cU��C�!.$O���o����+wu3�
p�)_��z�Db�:K�Q����"}�d^���N��������������A������y�.�bZ��o�E)6�~��_���.%d��Mt3��TDh���6>EM$�:��[Jw�Ju�����Z�e�M�t�|�|nYj��Nc���2ja������w��#�D5�,o#�(�~���<���'��Q���Y�P���k�����������z^pH��N`&�]�����o��UD
����+�$�t��yX�&������?�t)���*����������JR���~��6������
K*��co��h���V��JB�k fP��X<=��;��H�y&�F�T��"e]���aa�����!��~,_|���c�������
��A��i�E\+���Zw�'�O�-'��o����4j�)��d9o4��3,�]���/x�����?��t���o[���Z��fr%]�g�� !�:� z��n?���/"�� ���Bl�,���)�*4���?����������7�'o�_
��@+U"~�}�������!)���k�d*U
��vDD2M?#*l�]z(��R���rzdI��eA����55��\��(YX��������4�DH�E�K���zf���L�LIj����u`���q����������R�+�C��j���k���ji���t6E�sMfH��D$�r��*#0
��s6�&��u4��T�����
/B���&xK��q��]�P*�8������F��������Q?���, �r9+�2FdX���STD%��|������f\b��?��3����?�Z�/�}�U�-�_2��2@�g�����DC��[�������!S�Yt3y�[{�=\���ZUS�\J�z����>�����*+g(a�W��c������bh��=�LG��b���#B������<�#v
�8<��"m�:X\_p���?XD��s�u�\q���A����:���$h�8��,��#e�G������ �����G�����VMO$��n�\�������u�\���\n�s�*k1���9!N�� �,k��� tU���(�BV,�������B�LFT�t��%#1��v���9
p�����\�-�`�}� nd�D.��MF�������k@������m������A�xk`�>��A�+h|�~\�O����&7j����S�����=
<�����pTQ���[r�����G�2n��hS������O��Xo��9�������z�����0�_�������EXg�*?x�7����d��y����Q�'���Tk��w��"�3�L6������W��:�x����u$\������g9���hF��"���'b�8����������=�������{�`��
�X�k,��U�����`,��[�M�����t{���-�v��9�m�"�Q�d�@,����(�Q��{����������r����8�7
�|��:��G���t*:`��I�>"�(��X��v#�-��*�/z��}A��E�2?]r��>�s������L6~��s>'.+\NC��-s� |gYe�U>$�/^�/W��
w_P����
{-KD4�p5��e/�������{�ZTJ>:K��g9�Y�tS�}�������Q}(YH�=�����_��>��N]��������2*��9#e�X�E��h���6BB�Mw�@��H�<7�HykO\T�8`���V4���b�e�)�7�V<p,����4����*�&�T���)�Y�,8w�F�bL�.��T8��2Z���q.2um�[��M�|�������'rdy�n���_�f������e~�v�2�v��<�v���LH���������!;t}���.S8���f]�9��
�U���kL��y�xz<�g]��V)���&]���k�|37���o�|�|s������:���U�[,�4��u�n#h;Y�4��
28���!�}�/��B~�M:���i� ��^�h��Vp���q�#D�_z>J���>��|K��ii{���w�>�����`���s5��h '���r��v�C��nKd���{�_f���7��J��
:�]��-%X8)r����K.�6u�������=_�6�d4��:Ag������{����q���E�7�N��I�h��A�e��=� �j��I)�v
C�BX�Q�!�x��0N:�JtSQ����J��$�'��x.,��N@�EH�2-f��mk�fk)?+����>
�e�Ms�^��9������ul7_+zZ��\4qr��J�3�q�GX��������*�P��.���4wdA�2�FVB��iR����^����|S�� �0�*�����N�����:Z����b@�&#���s��������HYj��}SV�-�%����1w��`D�t>q��R������&����� xSK�n�H�j��p%mj�n+��2��w��5��/����A��T�o�
�������&d��C�F)�������=k����7+�����G�P�X�t���|�����0==;g�p�W\ZDS��n�;4Rb���*�0�PP�]���4�,��|�i��H��&�����J{C��R^���;$lk��Y��o��0���v/
�����nC���/c��nyea"�|c'�H��AC0��������X���X���Jp|��7���io������g�����M\���a����Jq����#���
��#�gK��$ �.�S���lK������-�@w� 9�>��U��8����'^H s"����������*Q�����M[I9 I(��ad��/�w5��e�SU�����^1��+��/�{�7d��O�Dxj����'*�a/W���]�����6f<��q&��C���O���X�]��i��#����M�������C���� ���Ga�2� ��]!��wB���� #�T���d0�
*s����Mk��S����y�A��$)f�L��CF�)gt �|���5Rxq�4@ZE��w�����O�Bs~}�y����>�cZ�������lB�~��.�{�=�[������9M����.��p�3������r>����������hQ�m%l��D��x*��,���Y�����A�e;rq����Q�����}�%8� j���v��{z���pxY��z��p�E��d�H ��!�������M����x0��1~k:�������o��i<�v�hD������ ����[�3���P�T���+P�[�|�$�"F�T�"C^������y\���f�4�E��"e
�%�3�D��5.��k`�z���m����'���_��B���x�lw���Em�{'������5���&��"|��,KV�V�u�-�i�&|� ����=��k$�1��<H��0S er����� eM�j�t��p0�hNr���7X�����Qb_p�m�
��5��, 1(���kIV��A�f�$=��c�%��Qk���xH194P<a��N��h��9x(C���:a������ �NU����|hGF�Y�����r�2�������\eJx�C���E'�C�y������/�.�.p��"�/�>��*~ ���(�?<�U�@ �������&CUw�PhX�����'��_��gc�>�wfzk�$r�p`�)�>�;���h��E��"���d����d4��}�@LF�1H[��rV�����qt��\�r��\Y�]�i�������_�����9y}����^��������ukvS��{�B>q��oT�F� �PS��9p�s�O���`H��Z��!���R/Jo��;����}�CD��R�,�t�=nJ�
7HEDh<1�Ce��SY�q�L%������y��3k?����3�{��h������@��.�N�!�g �I�����Z� �M*:G_�?M�1n�p��_�G��3��*t+f����t�A�>�����I����"�,�'e R����2���XJ2p�3�����cg��\����v�f�C���LJ�)��h�|�!D�*�2-)B�X�\`��(�j�uRM���f�|&�K&���x��$P�����?�99C�QU������sgL���\T�|T�������k*�&��K8dp�.�Mq�Q�4�(��n� ����o�����l�X�\�(�r�����<��q�������O������������6��9gvg3�MF��D��MQ� ���o���=y��d������Gg��?8<|~���F�����-I^R@�[��o4�z�@B:�s��Fr;x@������e���[����+3�0W��0J�WU��sJ��`;�����2'�{�<olnM����v6��!W}����|���I�� ����#����9�}��������&`;��4l�Lq��N_
����twH���?9H�K�������\Y����g�M|.�2�f�V�i�� ,��cc�V���i!~&ou��r�/L��CS��)l���`�Q���������r��` Z+sIl���c�H��pH ��$g�>=V��DL���RQD����F��N�l)�������eS��a6�k��L��}[|�n�������Dc���2
ZK�P�P(����){����j@~�����T��i����1����rh��D���0a��M����M�
�����<vo��V������\��Q�����l'���:��5�����A-�� I3��{"�T�+�����l�>������u��`%����I��'5mF�M#��T�1g����(��p>�&��4We��m�\��%~������|�F�O ��V�P�G
u�� �� ^��0wX6!.i����N*2����/���V����h4:����"�&��6���J.���a7q6�RI���������Z���0���.3:���t:qrxlV��;�d�������a.%�Ig���1���#�,<�}t�����6 9�=����.�f���I���Z8N@y.���Fr����X
�tjA`��)�1�����d�8�����8��G=U>O�5m5����ke�xd���Gk*�#��j%� 5��1�>���5����������Z��,���jz�_�� np/$��H_�!�H��z�Vi�0�`�t����>�;��x6��
�p�F����f-�,�������n=�BK�������b�x����c[�
������=v�#�j��c�t^��I�����d�V4�Z����><t����B��S^�����r�#�2
L��A�0�f�l���A�?� 8�8��W�����~�h�E�u}�%��������� ����&W�"��A���^��u��/����$@C��,�M�CR�#"��\�����9������W���;���wZ�0W{4�]���A�������Mx��C-x�$���
x�w�~��|��Z�z����Y�z���gB)���Y�z��j����d ��jm���P������z�N|I^���f�����| �(3�=�!8�>��#�����5���"�K.M�-5�N�����I4�/c�B{'����i<�Z:����<T�Q\���r���G��(x����m�N�<)��e�Xy�Y�,$�;�m��:� q������]C(J�1��C� �����
5�yH�,PIg� �`�Oj
c�S%�w�U��g�w������#@VLE��0\}�X;�z����I���Oe��`Q��#��<������(���w��2�q�({s.f���GF�BP�V+2�LT�������Mf��g��(��i�b����-�#���:�Z�l�/�!j��2�����a��Z��CX=�7�}P��V>p������g{�F�k�!L�R�+�5�c�1�>��6���S4lH����W[�j�k�D���wPe������y�B��|#�6����Yi�?w�$Lt����eM����A�k�,�i����n[v�:�'�XrP�B �e��PGR�J�� $�H�wM���[4���N�)*�^�4�D��"6�����%�M�i����A����.���n���|����I���/�� �����bY�"nQ����~�kJ�nw,�������+��QiK7�aY���Z���G�~6�����A���X�X=p+�`��R��s�I��Q�[2Qa4w���O*���p0 ��k]��/����WU�W��Ld�9���������T]�����-�)�.��R��`��D��u8�@�4�=Om�C�����%�e���h�i$�`��k�!�`�u�D�(�
*�%\1V 9�2���s#��������ng���� ��H��p����A��JWG�x���JkZ;��D��/�;�RV��x\��oY����(d���q�I��Ml�f�������a:���[������8��0��+��n_�%�)-DS�>����@� �����r�<>��j_RCC��Pm����]�y�l[k�+u�� �������!��~��us���f��A���B�^�.����l��K0�X���_(���\�+?c��ak�z�%��a �t�Y2�����D@N�Cs���%u/���t%�u����f�7)��$���-�|��GV,�����`������8�
0�C���A��[���Y���}^��)��>����6I���Dr��z���Zu����������w,Hh��(h� �o��v[-��}�y�^1N�a%���w��n��v�Zl��]Ac�;����|W� l�����u K��'��Z�$��z�k�`���R�C�so�1������h�5�>���a4
��j���lvC/��Q��j|$��4������$5yL�)���������L=� ��:���z�u����i��q�m�m<]uh�5��&]U��,�`���\-���U�bii��-�xt���oQ��cMeCyn���w�GB���|O��~�"y������8!��zp�� ���@���� �|�4�
�����s����C�#p�+X��,�������QI��+q�u�9X��k���x�c�����z�����.��Vk�4��}.�+�Ry���/� o�=s�kp�6��>s���p1�G�>��R4�c$��q$E7s����>$�A��wpx��e�����C��r$l?��bX��7O�;�Q�t�������i��Sf$)�`�� �3�����y@��>�W6�
���/��m�������&�wM����z���~�C'���'R7���yba��@:w�0�n7��>�}<�4�|�<���`�n����&�n�R�ox�03o'��E�������{���jN�E*?�c�i"ue���A��P�%�Z��7]�NZ.�>�92h����U+�Y1�V1������d�����td^�2U�����]T
�����=?|uxv���,/Y9������$uA�Pe�a�b���3����$�����@��+��K�!��h�6i���������E� "u�+U�P�
��s���R5(�:����#h�{���
�"�i)�]�;�l��OR�}��>X�Y���]5�`t��\5��c����A��Kc���PQ�����akq����}<J l>\�a;�Un���oTh�����1��8A��&E���s��Z&~f��E ���@��EP����K�|>f����0�8?
--L�`�Ad�F�n�N~�A?ZW���k��4h-[ c��g����(�_:_$�.�7�+�]2�h�W�!Yy A�?lZe�����9�nE�B4������W�r/S��O��$`Pv��� S�`�vS���_s�~f�tr�E�Y<� '�����
Zu�4�J���TQH�)�-���Wo~4�]PxF�>;z�I=���J�����������aXD\�3v�����������U�S� 3��cn��Ad����P�����j~+���A�a0�������dk��A�c�32���7�Rv�k�YEO�%���@�JY1F�Ko�
�W���jZ��0�& ��h
N��F��� i:��e]7)�j�{�I�@�
������6��)�������
��8x��O��S��V������Q�l�a:�RA������^=h�����~3h�����n�/�oD�-��(��4����
�4`���-�w�9�}�3�J=��H���x��r|�A�%��1��x�a o��~�n[w,��f����Fs��|(�3�R�:/���@~_[�<����+��u� ��ti�U&����r�]��6��.!��4�
�QI�y�4Y�m �N��F���I�66�5��
�q��h��?����T�V �E����h"�)���b��6����h��*��&��v�vo��q�J�F���-
��t���Sv(y�;�����x�O��zC�k+����rnr�2>=�n�r��:��_I����??|�������G�p�y~�������^��
}DZ�D���Z���#?@��I�X���{��x=K��5h�n�3e����|Q�Nu��c���OX�CZ=��������9�;0��Ek1-r�QjA/������~?���c�Vk.$�����DR��~�}�|#x���X����<���Vn$T��O(����%��U��.y��~9VL�?%�n�@�%��Q�++�\��
��l*�$T��u�[�IfI��RJ�cX h=���I��;n�EU"�/OV����Yu>�+*�K7k�6�^��8����c:~ y7�A�i��|
���O�z����|17��%-ne�;���X���d��j�E5����ol��
�Q���-�6NT��H��z7��dt�N[�0�a��q�v��3V�l?�&�p��_XWah9e��$$��@T0�(���_��;�a���x����T@������1��FjI���w}��������$d��@�����iek���}dc��|�{����!�� �Wt�6;u� eH�sH��;���[����D3���a���q�z�d�;��6�R|��`�W�b<! �n��V��g�����I��������$��j�4�j��_��k��
2�N��Or��,A��q����C<�z;.C]IW�����E/ri��n�����{n�++rW���<��%p��Qn5�f�N��R�XZ�Vk��,���j4+�4�N�e=�w��$m�����}{�<U�m�
#N�Ok� ���y��TQ������+����^{��H�
��`�$����j�h��������n�q�IN��*(K+B�!@�o��cR�`�7��R~u�Gs�F|qu��f�W���B�n/���GX���C�*��;��@5;���1���6�[8@�D��{{�(�� R<�-Q�/�n�:<��7�{��uH7=�4��}#�N��9��������0�eL�_F�8����i�������Vb��
v-:!lOh|�,UN�@,������[��V�-i<A�6��\��%KU��KVB[��?$�b�1��calY�����
�-��g`ny=B����b���>��W]
k{�A�oq�]����s�]2
�]pF��������3� ��������?� ����������f�.Uh��nc�����e��w�m�*,���k\�`!���j���"���;8�����A�9��{o�p�����Q0?=�g`y���W�f��g]J���;q3��V��6I!V4fZ'b8��b�x��-_9����\N�Ig�OY��.sn��
G�,�S�n,h�kh�|2O��qK��R��#��i���h�@�u��@0�#����l���������������q�h�m����Y���"���(J��9�>��n���rW�|��������`����,� �v��hN��fD�����KX��N���^[B x��%��x������+`�SV������(���������{��.q�d�x����C
�-����lL$,�-EL�Z0y�Yb�\�wG��@��(&B���:�����5�ph�o����wL LM�*�&rw���'�7��X��������i��-����g�=.R)�R��K�]m���)A�\�)�n��\�Q4:����o��� ?�j�����6��eQ/J��n������q�WJ�{n�<>�����������+cp��LgG����K|889�?;<{vr(U\l�g���a4������S�$��)w�#"��<6%�%����h������WKV����wr����Es�Y�\�.��������o���b��V�,�����8�n;��5�p���V���I���a2<�Hot�_�����;5,A��.Mnsq�>�nVs�Dg"���1�N������)��Q[�`LtV�q��J���
9��z�r����;�d�~
S����CN�D�x���&)�l���-7!�����$?��RHv����"�{.a��n&<aY��[
S�<r�#�=�>D#�PH@�@��� ���0�+����` ������L>�b��+8�V~����9�-��d�
��5�������lc��ZJ���>��S)f�x�g
)��Qz���Qk�����<��R��wdGcY��A?h��%���ag�� �4H&8(�0���B���DRI� eO�� &��'W��\���0��E4I�'-E8�>X��~�d�����-���[�����D�Ni��>Y�BG���
������k�+��gIwh'��[_c2C;g�3V��IU�<�k|�v���X��<�(^��R�e��7�&��6�:i�L.�����T��r��OM����]���Q�7` �F#n
6����-g���� �/�;�I:�����*n����J���i�m)�p�K�*�n)����'���V�0�E�����Qnj�D���)r�$!�e���r��^��k�L
� Uf���32��.�xz��\!'�KL������������9�p�f�m0����r'�����O���m�&