����JFIFXX�����    $.' ",#(7),01444'9=82<.342  2!!22222222222222222222222222222222222222222222222222����"��4�� ���,�PG"Z_�4�˷����kjز�Z�,F+��_z�,�© �����zh6�٨�ic�fu���#ډb���_�N�?��wQ���5-�~�I���8����TK<5o�Iv-�����k�_U_�����~b�M��d����Ӝ�U�Hh��?]��E�w��Q���k�{��_}qFW7HTՑ��Y��F�?_�'ϔ��_�Ջt��=||I ��6�έ"�����D���/[�k�9���Y�8ds|\���Ҿp6�Ҵ���]��.����6�z<�v��@]�i%��$j��~�g��J>��no����pM[me�i$[����s�o�ᘨ�˸ nɜG-�ĨU�ycP�3.DB�li�;��hj���x7Z^�N�h������N3u{�:j�x�힞��#M&��jL P@_���� P��&��o8������9�����@Sz6�t7#O�ߋ �s}Yf�T���lmr����Z)'N��k�۞p����w\�Tȯ?�8`�O��i{wﭹW�[�r�� ��Q4F�׊���3m&L�=��h3����z~��#�\�l :�F,j@�� ʱ�wQT����8�"kJO���6�֚l����}���R�>ډK���]��y����&����p�}b��;N�1�m�r$�|��7�>e�@B�TM*-iH��g�D�)� E�m�|�ؘbҗ�a��Ҿ����t4���o���G��*oCN�rP���Q��@z,|?W[0�����:�n,jWiE��W��$~/�hp\��?��{(�0���+�Y8rΟ�+����>S-S����VN;�}�s?.����� w�9��˟<���Mq4�Wv'��{)0�1mB��V����W[�����8�/<� �%���wT^�5���b��)iM� pg�N�&ݝ��VO~�q���u���9� ����!��J27����$O-���! �:�%H��� ـ����y�ΠM=t{!S�� oK8������t<����è:a������[�����ա�H���~��w��Qz`�po�^ ����Q��n� �,uu�C�$ ^���,������8�#��:�6��e�|~���!�3�3.�\0��q��o�4`.|� ����y�Q�`~;�d�ׯ,��O�Zw�������`73�v�܋�<���Ȏ�� ـ4k��5�K�a�u�=9Yd��$>x�A�&�� j0� ���vF��� Y�|�y��� ~�6�@c��1vOp�Ig����4��l�OD���L����� R���c���j�_�uX6��3?nk��Wy�f;^*B� ��@�~a�`��Eu������+���6�L��.ü>��}y���}_�O�6�͐�:�YrG�X��kG�����l^w���~㒶sy��Iu�!� W ��X��N�7BV��O��!X�2����wvG�R�f�T#�����t�/?���%8�^�W�aT��G�cL�M���I��(J����1~�8�?aT ���]����AS�E��(��*E}� 2��#I/�׍qz��^t�̔���b�Yz4x���t�){ OH��+(E��A&�N�������XT��o��"�XC��'���)}�J�z�p� ��~5�}�^����+�6����w��c��Q�|Lp�d�H��}�(�.|����k��c4^�"�����Z?ȕ ��a<�L�!039C� �Eu�C�F�Ew�ç ;�n?�*o���B�8�bʝ���'#Rqf���M}7����]����s2tcS{�\icTx;�\��7K���P���ʇ Z O-��~��c>"��?�������P��E��O�8��@�8��G��Q�g�a�Վ���󁶠�䧘��_%#r�>�1�z�a��eb��qcPѵ��n���#L��� =��׀t� L�7�`��V���A{�C:�g���e@�w1 Xp3�c3�ġ����p��M"'-�@n4���fG��B3�DJ�8[Jo�ߐ���gK)ƛ��$���� ���8�3�����+���� �����6�ʻ���� ���S�kI�*KZlT _`���?��K����QK�d����B`�s}�>���`��*�>��,*@J�d�oF*����弝��O}�k��s��]��y�ߘ��c1G�V���<=�7��7����6�q�PT��tXԀ�!9*4�4Tހ3XΛex�46���Y��D ����� �BdemDa����\�_l,��G�/���֌7���Y�](�xTt^%�GE�����4�}bT���ڹ�����;Y)���B�Q��u��>J/J �⮶.�XԄ��j�ݳ�+E��d ��r�5�_D�1 ��o�� �B�x�΢�#���<��W�����8���R6�@g�M�.��� dr�D��>(otU��@x=��~v���2� ӣ�d�oBd��3�eO�6�㣷�����ݜ6��6Y��Qz`��S��{���\P�~z m5{J/L��1������<�e�ͅPu�b�]�ϔ���'������f�b� Zpw��c`"��i���BD@:)ִ�:�]��hv�E�w���T�l��P���"Ju�}��وV J��G6��. J/�Qgl߭�e�����@�z�Zev2u�)]կ�����7x���s�M�-<ɯ�c��r�v�����@��$�ޮ}lk���a���'����>x��O\�ZFu>�����ck#��&:��`�$�ai�>2Δ����l���oF[h��lE�ܺ�Πk:)���`�� $[6�����9�����kOw�\|���8}������ބ:��񶐕��I�A1/�=�2[�,�!��.}gN#�u����b��� ~��݊��}34q����d�E��Lc��$��"�[q�U�硬g^��%B �z���r�pJ�ru%v\h1Y�ne`ǥ:g���pQM~�^�Xi� ��`S�:V29.�P���V�?B�k�� AEvw%�_�9C�Q����wKekPؠ�\�;Io d�{ ߞo�c1eP����\� `����E=���@K<�Y���eڼ�J���w����{av�F�'�M�@/J��+9p���|]�����Iw &`��8���&M�hg��[�{��Xj��%��Ӓ�$��(����ʹN���<>�I���RY���K2�NPlL�ɀ)��&e����B+ь����( � �JTx���_?EZ� }@ 6�U���뙢ط�z��dWI�n` D����噥�[��uV��"�G&Ú����2g�}&m��?ċ�"����Om#��������� ��{�ON��"S�X��Ne��ysQ���@Fn��Vg���dX�~nj�]J�<�K]:��FW��b�������62�=��5f����JKw��bf�X�55��~J �%^����:�-�QIE��P��v�nZum� z � ~ə ���� ���ة����;�f��\v���g�8�1��f24;�V���ǔ�)����9���1\��c��v�/'Ƞ�w�������$�4�R-��t���� e�6�/�ġ �̕Ecy�J���u�B���<�W�ַ~�w[B1L۲�-JS΂�{���΃������A��20�c#��@ 0!1@AP"#2Q`$3V�%45a6�FRUq��� ����^7ׅ,$n�������+��F�`��2X'��0vM��p�L=������5��8������u�p~���.�`r�����\���O��,ư�0oS ��_�M�����l���4�kv\JSd���x���SW�<��Ae�IX����������$I���w�:S���y���›R��9�Q[���,�5�;�@]�%���u�@ *ro�lbI �� ��+���%m:�͇ZV�����u�̉����θau<�fc�.����{�4Ա� �Q����*�Sm��8\ujqs]{kN���)qO�y�_*dJ�b�7���yQqI&9�ԌK!�M}�R�;������S�T���1���i[U�ɵz�]��U)V�S6���3$K{�ߊ<�(� E]Զ[ǼENg�����'�\?#)Dkf��J���o��v���'�%ƞ�&K�u�!��b�35LX�Ϸ��63$K�a�;�9>,R��W��3�3� d�JeTYE.Mϧ��-�o�j3+y��y^�c�������VO�9NV\nd�1 ��!͕_)a�v;����թ�M�lWR1��)El��P;��yوÏ�u 3�k�5Pr6<�⒲l�!˞*��u־�n�!�l:����UNW ��%��Chx8vL'��X�@��*��)���̮��ˍ��� ���D-M�+J�U�kvK����+�x8��cY������?�Ԡ��~3mo��|�u@[XeY�C�\Kp�x8�oC�C�&����N�~3-H���� ��MX�s�u<`���~"WL��$8ξ��3���a�)|:@�m�\���^�`�@ҷ)�5p+��6���p�%i)P M���ngc�����#0Aruz���RL+xSS?���ʮ}()#�t��mˇ!��0}}y����<�e� �-ή�Ԩ��X������ MF���ԙ~l L.3���}�V뽺�v�����멬��Nl�)�2����^�Iq��a��M��qG��T�����c3#������3U�Ǎ���}��לS�|qa��ڃ�+���-��2�f����/��bz��ڐ�� �ݼ[2�ç����k�X�2�* �Z�d���J�G����M*9W���s{��w���T��x��y,�in�O�v��]���n����P�$�JB@=4�OTI�n��e�22a\����q�d���%�$��(���:���: /*�K[PR�fr\nڙdN���F�n�$�4�[�� U�zƶ����� �mʋ���,�ao�u 3�z� �x��Kn����\[��VFmbE;�_U��&V�Gg�]L�۪&#n%�$ɯ�dG���D�TI=�%+AB�Ru#��b4�1�»x�cs�YzڙJG��f��Il��d�eF'T� iA��T���uC�$����Y��H?����[!G`}���ͪ� �纤Hv\������j�Ex�K���!���OiƸ�Yj�+u-<���'q����uN�*�r\��+�]���<�wOZ.fp�ێ��,-*)V?j-kÊ#�`�r��dV����(�ݽBk�����G�ƛk�QmUڗe��Z���f}|����8�8��a���i��3'J�����~G_�^���d�8w������ R�`(�~�.��u���l�s+g�bv���W���lGc}��u���afE~1�Ue������Z�0�8�=e�� f@/�jqEKQQ�J��oN��J���W5~M>$6�Lt�;$ʳ{���^��6�{����v6���ķܰg�V�cnn �~z�x�«�,2�u�?cE+Ș�H؎�%�Za�)���X>uW�Tz�Nyo����s���FQƤ��$��*�&�LLXL)�1�" L��eO��ɟ�9=���:t��Z���c��Ž���Y?�ӭV�wv�~,Y��r�ۗ�|�y��GaF�����C�����.�+� ���v1���fήJ�����]�S��T��B��n5sW}y�$��~z�'�c ��8 ��� ,! �p��VN�S��N�N�q��y8z˱�A��4��*��'������2n<�s���^ǧ˭P�Jޮɏ�U�G�L�J�*#��<�V��t7�8����TĜ>��i}K%,���)[��z�21z ?�N�i�n1?T�I�R#��m-�����������������1����lA�`��fT5+��ܐ�c�q՝��ʐ��,���3�f2U�եmab��#ŠdQ�y>\��)�SLY����w#��.���ʑ�f��� ,"+�w�~�N�'�c�O�3F�������N<���)j��&��,-� �љ���֊�_�zS���TǦ����w�>��?�������n��U仆�V���e�����0���$�C�d���rP �m�׈e�Xm�Vu� �L��.�bֹ��� �[Դaզ���*��\y�8�Է:�Ez\�0�Kq�C b��̘��cө���Q��=0Y��s�N��S.���3.���O�o:���#���v7�[#߫ ��5�܎�L���Er4���9n��COWlG�^��0k�%<���ZB���aB_���������'=��{i�v�l�$�uC���mƎҝ{�c㱼�y]���W�i ��ߧc��m�H� m�"�"�����;Y�ߝ�Z�Ǔ�����:S#��|}�y�,/k�Ld� TA�(�AI$+I3��;Y*���Z��}|��ӧO��d�v��..#:n��f>�>���ȶI�TX��� 8��y����"d�R�|�)0���=���n4��6ⲑ�+��r<�O�܂~zh�z����7ܓ�HH�Ga롏���nCo�>������a ���~]���R���̲c?�6(�q�;5%� |�uj�~z8R=X��I�V=�|{v�Gj\gc��q����z�؋%M�ߍ����1y��#��@f^���^�>N�����#x#۹��6�Y~�?�dfPO��{��P�4��V��u1E1J �*|���%���JN��`eWu�zk M6���q t[�� ��g�G���v��WIG��u_ft����5�j�"�Y�:T��ɐ���*�;� e5���4����q$C��2d�}���� _S�L#m�Yp��O�.�C�;��c����Hi#֩%+) �Ӎ��ƲV���SYź��g |���tj��3�8���r|���V��1#;.SQ�A[���S������#���`n�+���$��$I �P\[�@�s��(�ED�z���P��])8�G#��0B��[ى��X�II�q<��9�~[Z멜�Z�⊔IWU&A>�P~�#��dp<�?����7���c��'~���5 ��+$���lx@�M�dm��n<=e�dyX��?{�|Aef ,|n3�<~z�ƃ�uۧ�����P��Y,�ӥQ�*g�#먙R�\���;T��i,��[9Qi歉����c>]9�� ��"�c��P�� �Md?٥��If�ت�u��k��/����F��9�c*9��Ǎ:�ØF���z�n*�@|I�ށ9����N3{'��[�'ͬ�Ҳ4��#}��!�V� Fu��,�,mTIk���v C�7v���B�6k�T9��1�*l� '~��ƞF��lU��'�M ����][ΩũJ_�{�i�I�n��$���L�� j��O�dx�����kza۪��#�E��Cl����x˘�o�����V���ɞ�ljr��)�/,�߬h�L��#��^��L�ф�,íMƁe�̩�NB�L�����iL����q�}��(��q��6IçJ$�W�E$��:������=#����(�K�B����zђ <��K(�N�۫K�w��^O{!����)�H���>x�������lx�?>Պ�+�>�W���,Ly!_�D���Ō�l���Q�!�[ �S����J��1��Ɛ�Y}��b,+�Lo�x�ɓ)����=�y�oh�@�꥟/��I��ѭ=��P�y9��� �ۍYӘ�e+�p�Jnϱ?V\SO%�(�t� ���=?MR�[Ș�����d�/ ��n�l��B�7j� ��!�;ӥ�/�[-���A�>�dN�sLj ��,ɪv��=1c�.SQ�O3�U���ƀ�ܽ�E����������̻��9G�ϷD�7(�}��Ävӌ\�y�_0[w ���<΍>����a_��[0+�L��F.�޺��f�>oN�T����q;���y\��bՃ��y�jH�<|q-eɏ�_?_9+P���Hp$�����[ux�K w�Mw��N�ی'$Y2�=��q���KB��P��~������Yul:�[<����F1�2�O���5=d����]Y�sw:���Ϯ���E��j,_Q��X��z`H1,#II ��d�wr��P˂@�ZJV����y$�\y�{}��^~���[:N����ߌ�U�������O��d�����ؾe��${p>G��3c���Ė�lʌ�� ת��[��`ϱ�-W����dg�I��ig2��� ��}s ��ؤ(%#sS@���~���3�X�nRG�~\jc3�v��ӍL��M[JB�T��s3}��j�Nʖ��W����;7��ç?=X�F=-�=����q�ߚ���#���='�c��7���ڑW�I(O+=:uxq�������������e2�zi+�kuG�R��������0�&e�n���iT^J����~\jy���p'dtG��s����O��3����9* �b#Ɋ�� p������[Bws�T�>d4�ۧs���nv�n���U���_�~,�v����ƜJ1��s�� �QIz��)�(lv8M���U=�;����56��G���s#�K���MP�=��LvyGd��}�VwWBF�'�à �?MH�U�g2�� ����!�p�7Q��j��ڴ����=��j�u��� Jn�A s���uM������e��Ɔ�Ҕ�!)'��8Ϣ�ٔ��ޝ(��Vp���צ֖d=�IC�J�Ǡ{q������kԭ�߸���i��@K����u�|�p=..�*+����x�����z[Aqġ#s2a�Ɗ���RR�)*HRsi�~�a &f��M��P����-K�L@��Z��Xy�'x�{}��Zm+���:�)�) IJ�-i�u���� ���ܒH��'�L(7�y�GӜq���� j��� 6ߌg1�g�o���,kر���tY�?W,���p���e���f�OQS��!K�۟cҒA�|ս�j�>��=⬒��˧L[�� �߿2JaB~R��u�:��Q�] �0H~���]�7��Ƽ�I���(}��cq '�ήET���q�?f�ab���ӥvr� �)o��-Q��_'����ᴎo��K������;��V���o��%���~OK ����*��b�f:���-ťIR��`B�5!RB@���ï�� �u �̯e\�_U�_������� g�ES��3�������QT��a����x����U<~�c?�*�#]�MW,[8O�a�x��]�1bC|踤�P��lw5V%�)�{t�<��d��5���0i�XSU��m:��Z�┵�i�"��1�^B�-��P�hJ��&)O��*�D��c�W��vM��)����}���P��ܗ-q����\mmζZ-l@�}��a��E�6��F�@��&Sg@���ݚ�M����� ȹ 4����#p�\H����dYDo�H���"��\��..R�B�H�z_�/5˘����6��KhJR��P�mƶi�m���3�,#c�co��q�a)*Pt����R�m�k�7x�D�E�\Y�閣_X�<���~�)���c[[�BP����6�Yq���S��0����%_����;��Àv�~�| VS؇ ��'O0��F0��\���U�-�d@�����7�SJ*z��3n��y��P����O���������m�~�P�3|Y��ʉr#�C�<�G~�.,! ���bqx���h~0=��!ǫ�jy����l�O,�[B��~��|9��ٱ����Xly�#�i�B��g%�S��������tˋ���e���ې��\[d�t)��.+u�|1 ������#�~Oj����hS�%��i.�~X���I�H�m��0n���c�1uE�q��cF�RF�o���7� �O�ꮧ� ���ۛ{��ʛi5�rw?׌#Qn�TW��~?y$��m\�\o����%W� ?=>S�N@�� �Ʈ���R����N�)�r"C�:��:����� �����#��qb��Y�. �6[��2K����2u�Ǧ�HYR��Q�MV��� �G�$��Q+.>�����nNH��q�^��� ����q��mM��V��D�+�-�#*�U�̒ ���p욳��u:�������IB���m���PV@O���r[b= �� ��1U�E��_Nm�yKbN�O���U�}�the�`�|6֮P>�\2�P�V���I�D�i�P�O;�9�r�mAHG�W�S]��J*�_�G��+kP�2����Ka�Z���H�'K�x�W�MZ%�O�YD�Rc+o��?�q��Ghm��d�S�oh�\�D�|:W������UA�Qc yT�q������~^�H��/��#p�CZ���T�I�1�ӏT����4��"�ČZ�����}��`w�#�*,ʹ�� ��0�i��課�Om�*�da��^gJ݅{���l�e9uF#T�ֲ��̲�ٞC"�q���ߍ ոޑ�o#�XZTp����@ o�8��(jd��xw�]�,f���`~�|,s��^����f�1���t��|��m�򸄭/ctr��5s��7�9Q�4�H1꠲BB@l9@���C�����+�wp�xu�£Yc�9��?`@#�o�mH�s2��)�=��2�.�l����jg�9$�Y�S�%*L������R�Y������7Z���,*=�䷘$�������arm�o�ϰ���UW.|�r�uf����IGw�t����Zwo��~5 ��YյhO+=8fF�)�W�7�L9lM�̘·Y���֘YLf�큹�pRF���99.A �"wz��=E\Z���'a� 2��Ǚ�#;�'}�G���*��l��^"q��+2FQ� hj��kŦ��${���ޮ-�T�٭cf�|�3#~�RJ����t��$b�(R��(����r���dx� >U b�&9,>���%E\� Ά�e�$��'�q't��*�א���ެ�b��-|d���SB�O�O��$�R+�H�)�܎�K��1m`;�J�2�Y~9��O�g8=vqD`K[�F)k�[���1m޼c��n���]s�k�z$@��)!I �x՝"v��9=�ZA=`Ɠi �:�E��)`7��vI��}d�YI�_ �o�:ob���o ���3Q��&D&�2=�� �Ά��;>�h����y.*ⅥS������Ӭ�+q&����j|UƧ����}���J0��WW< ۋS�)jQR�j���Ư��rN)�Gű�4Ѷ(�S)Ǣ�8��i��W52���No˓� ۍ%�5brOn�L�;�n��\G����=�^U�dI���8$�&���h��'���+�(������cȁ߫k�l��S^���cƗjԌE�ꭔ��gF���Ȓ��@���}O���*;e�v�WV���YJ\�]X'5��ղ�k�F��b 6R�o՜m��i N�i����>J����?��lPm�U��}>_Z&�KK��q�r��I�D�Չ~�q�3fL�:S�e>���E���-G���{L�6p�e,8��������QI��h��a�Xa��U�A'���ʂ���s�+טIjP�-��y�8ۈZ?J$��W�P� ��R�s�]��|�l(�ԓ��sƊi��o(��S0��Y� 8�T97.�����WiL��c�~�dxc�E|�2!�X�K�Ƙਫ਼�$((�6�~|d9u+�qd�^3�89��Y�6L�.I�����?���iI�q���9�)O/뚅����O���X��X�V��ZF[�یgQ�L��K1���RҖr@v�#��X�l��F���Нy�S�8�7�kF!A��sM���^rkp�jP�DyS$N���q��nxҍ!U�f�!eh�i�2�m���`�Y�I�9r�6� �TF���C}/�y�^���Η���5d�'��9A-��J��>{�_l+�`��A���[�'��յ�ϛ#w:݅�%��X�}�&�PSt�Q�"�-��\縵�/����$Ɨh�Xb�*�y��BS����;W�ջ_mc�����vt?2}1�;qS�d�d~u:2k5�2�R�~�z+|HE!)�Ǟl��7`��0�<�,�2*���Hl-��x�^����'_TV�gZA�'j� ^�2Ϊ��N7t�����?w�� �x1��f��Iz�C-Ȗ��K�^q�;���-W�DvT�7��8�Z�������� hK�(P:��Q- �8�n�Z���܃e貾�<�1�YT<�,�����"�6{/ �?�͟��|1�:�#g��W�>$����d��J��d�B��=��jf[��%rE^��il:��B���x���Sּ�1հ��,�=��*�7 fcG��#q� �eh?��2�7�����,�!7x��6�n�LC�4x��},Geǝ�tC.��vS �F�43��zz\��;QYC,6����~;RYS/6���|2���5���v��T��i����������mlv��������&� �nRh^ejR�LG�f���? �ۉҬܦƩ��|��Ȱ����>3����!v��i�ʯ�>�v��オ�X3e���_1z�Kȗ\<������!�8���V��]��?b�k41�Re��T�q��mz��TiOʦ�Z��Xq���L������q"+���2ۨ��8}�&N7XU7Ap�d�X��~�׿��&4e�o�F��� �H����O���č�c�� 懴�6���͉��+)��v;j��ݷ�� �UV�� i��� j���Y9GdÒJ1��詞�����V?h��l����l�cGs�ځ�������y�Ac�����\V3�? �� ܙg�>qH�S,�E�W�[�㺨�uch�⍸�O�}���a��>�q�6�n6����N6�q������N ! 1AQaq�0@����"2BRb�#Pr���3C`��Scst���$4D���%Td�� ?���N����a��3��m���C���w��������xA�m�q�m���m������$����4n淿t'��C"w��zU=D�\R+w�p+Y�T�&�պ@��ƃ��3ޯ?�Aﶂ��aŘ���@-�����Q�=���9D��ռ�ѻ@��M�V��P��܅�G5�f�Y<�u=,EC)�<�Fy'�"�&�չ�X~f��l�KԆV��?�� �W�N����=(� �;���{�r����ٌ�Y���h{�١������jW����P���Tc�����X�K�r��}���w�R��%��?���E��m�� �Y�q|����\lEE4���r���}�lsI�Y������f�$�=�d�yO����p�����yBj8jU�o�/�S��?�U��*������ˍ�0������u�q�m [�?f����a�� )Q�>����6#������� ?����0UQ����,IX���(6ڵ[�DI�MNލ�c&���υ�j\��X�R|,4��� j������T�hA�e��^���d���b<����n�� �즇�=!���3�^�`j�h�ȓr��jẕ�c�,ٞX����-����a�ﶔ���#�$��]w�O��Ӫ�1y%��L�Y<�wg#�ǝ�̗`�x�xa�t�w��»1���o7o5��>�m뭛C���Uƃߜ}�C���y1Xνm�F8�jI���]����H���ۺиE@I�i;r�8ӭ����V�F�Շ| ��&?�3|x�B�MuS�Ge�=Ӕ�#BE5G�����Y!z��_e��q�р/W>|-�Ci߇�t�1ޯќd�R3�u��g�=0 5��[?�#͏��q�cf���H��{ ?u�=?�?ǯ���}Z��z���hmΔ�BFTW�����<�q�(v� ��!��z���iW]*�J�V�z��gX֧A�q�&��/w���u�gYӘa���; �i=����g:��?2�dž6�ى�k�4�>�Pxs����}������G�9��3 ���)gG�R<>r h�$��'nc�h�P��Bj��J�ҧH� -��N1���N��?��~��}-q!=��_2hc�M��l�vY%UE�@|�v����M2�.Y[|y�"Eï��K�ZF,�ɯ?,q�?v�M 80jx�"�;�9vk�����+ ֧�� �ȺU��?�%�vcV��mA�6��Qg^M����A}�3�nl� QRN�l8�kkn�'�����(��M�7m9و�q���%ޟ���*h$Zk"��$�9��: �?U8�Sl��,,|ɒ��xH(ѷ����Gn�/Q�4�P��G�%��Ա8�N��!� �&�7�;���eKM7�4��9R/%����l�c>�x;������>��C�:�����t��h?aKX�bhe�ᜋ^�$�Iհ �hr7%F$�E��Fd���t��5���+�(M6�t����Ü�UU|zW�=a�Ts�Tg������dqP�Q����b'�m���1{|Y����X�N��b �P~��F^F:����k6�"�j!�� �I�r�`��1&�-$�Bevk:y���#yw��I0��x��=D�4��tU���P�ZH��ڠ底taP��6����b>�xa����Q�#� WeF��ŮNj�p�J* mQ�N����*I�-*�ȩ�F�g�3 �5��V�ʊ�ɮ�a��5F���O@{���NX��?����H�]3��1�Ri_u��������ѕ�� ����0��� F��~��:60�p�͈�S��qX#a�5>���`�o&+�<2�D����: �������ڝ�$�nP���*)�N�|y�Ej�F�5ټ�e���ihy�Z �>���k�bH�a�v��h�-#���!�Po=@k̆IEN��@��}Ll?j�O������߭�ʞ���Q|A07x���wt!xf���I2?Z��<ץ�T���cU�j��]��陎Ltl �}5�ϓ��$�,��O�mˊ�;�@O��jE��j(�ا,��LX���LO���Ц�90�O �.����a��nA���7������j4 ��W��_ٓ���zW�jcB������y՗+EM�)d���N�g6�y1_x��p�$Lv:��9�"z��p���ʙ$��^��JԼ*�ϭ����o���=x�Lj�6�J��u82�A�H�3$�ٕ@�=Vv�]�'�qEz�;I˼��)��=��ɯ���x �/�W(V���p�����$ �m�������u�����񶤑Oqˎ�T����r��㠚x�sr�GC��byp�G��1ߠ�w e�8�$⿄����/�M{*}��W�]˷.�CK\�ުx���/$�WPw���r� |i���&�}�{�X� �>��$-��l���?-z���g����lΆ���(F���h�vS*���b���߲ڡn,|)mrH[���a�3�ר�[1��3o_�U�3�TC�$��(�=�)0�kgP���� ��u�^=��4 �WYCҸ:��vQ�ר�X�à��tk�m,�t*��^�,�}D*� �"(�I��9R����>`�`��[~Q]�#af��i6l��8���6�:,s�s�N6�j"�A4���IuQ��6E,�GnH��zS�HO�uk�5$�I�4��ؤ�Q9�@��C����wp�BGv[]�u�Ov���0I4���\��y�����Q�Ѹ��~>Z��8�T��a��q�ޣ;z��a���/��S��I:�ܫ_�|������>=Z����8:�S��U�I�J��"IY���8%b8���H��:�QO�6�;7�I�S��J��ҌAά3��>c���E+&jf$eC+�z�;��V����� �r���ʺ������my�e���aQ�f&��6�ND��.:��NT�vm�<- u���ǝ\MvZY�N�NT��-A�>jr!S��n�O 1�3�Ns�%�3D@���`������ܟ 1�^c<���� �a�ɽ�̲�Xë#�w�|y�cW�=�9I*H8�p�^(4���՗�k��arOcW�tO�\�ƍR��8����'�K���I�Q�����?5�>[�}��yU�ײ -h��=��% q�ThG�2�)���"ו3]�!kB��*p�FDl�A���,�eEi�H�f�Ps�����5�H:�Փ~�H�0Dت�D�I����h�F3�������c��2���E��9�H��5�zԑ�ʚ�i�X�=:m�xg�hd(�v����׊�9iS��O��d@0ڽ���:�p�5�h-��t�&���X�q�ӕ,��ie�|���7A�2���O%P��E��htj��Y1��w�Ѓ!����  ���� ࢽ��My�7�\�a�@�ţ�J �4�Ȼ�F�@o�̒?4�wx��)��]�P��~�����u�����5�����7X ��9��^ܩ�U;Iꭆ 5 �������eK2�7(�{|��Y׎ �V��\"���Z�1� Z�����}��(�Ǝ"�1S���_�vE30>���p;� ΝD��%x�W�?W?v����o�^V�i�d��r[��/&>�~`�9Wh��y�;���R��� ;;ɮT��?����r$�g1�K����A��C��c��K��l:�'��3 c�ﳯ*"t8�~l��)���m��+U,z��`(�>yJ�?����h>��]��v��ЍG*�{`��;y]��I�T� ;c��NU�fo¾h���/$���|NS���1�S�"�H��V���T���4��uhǜ�]�v;���5�͠x��'C\�SBpl���h}�N����� A�Bx���%��ޭ�l��/����T��w�ʽ]D�=����K���ž�r㻠l4�S�O?=�k �M:� ��c�C�a�#ha���)�ѐxc�s���gP�iG��{+���x���Q���I= �� z��ԫ+ �8"�k�ñ�j=|����c ��y��CF��/��*9ж�h{ �?4�o� ��k�m�Q�N�x��;�Y��4膚�a�w?�6�>e]�����Q�r�:����g�,i"�����ԩA�*M�<�G��b�if��l^M��5� �Ҩ�{����6J��ZJ�����P�*�����Y���ݛu�_4�9�I8�7���������,^ToR���m4�H��?�N�S�ѕw��/S��甍�@�9H�S�T��t�ƻ���ʒU��*{Xs�@����f�����֒Li�K{H�w^���������Ϥm�tq���s� ���ք��f:��o~s��g�r��ט� �S�ѱC�e]�x���a��) ���(b-$(�j>�7q�B?ӕ�F��hV25r[7 Y� }L�R��}����*sg+��x�r�2�U=�*'WS��ZDW]�WǞ�<��叓���{�$�9Ou4��y�90-�1�'*D`�c�^o?(�9��u���ݐ��'PI&� f�Jݮ�������:wS����jfP1F:X �H�9dԯ���˝[�_54 �}*;@�ܨ�� ð�yn�T���?�ןd�#���4rG�ͨ��H�1�|-#���Mr�S3��G�3�����)�.᧏3v�z֑��r����$G"�`j �1t��x0<Ɔ�Wh6�y�6��,œ�Ga��gA����y��b��)��h�D��ß�_�m��ü �gG;��e�v��ݝ�nQ� ��C����-�*��o���y�a��M��I�>�<���]obD��"�:���G�A��-\%LT�8���c�)��+y76���o�Q�#*{�(F�⽕�y����=���rW�\p���۩�c���A���^e6��K������ʐ�cVf5$�'->���ՉN"���F�"�UQ@�f��Gb~��#�&�M=��8�ט�JNu9��D��[̤�s�o�~������ G��9T�tW^g5y$b��Y'��س�Ǵ�=��U-2 #�MC�t(�i� �lj�@Q 5�̣i�*�O����s�x�K�f��}\��M{E�V�{�υ��Ƈ�����);�H����I��fe�Lȣr�2��>��W�I�Ȃ6������i��k�� �5�YOxȺ����>��Y�f5'��|��H+��98pj�n�.O�y�������jY��~��i�w'������l�;�s�2��Y��:'lg�ꥴ)o#'Sa�a�K��Z� �m��}�`169�n���"���x��I ��*+� }F<��cГ���F�P�������ֹ*�PqX�x۩��,� ��N�� �4<-����%����:��7����W���u�`����� $�?�I��&����o��o��`v�>��P��"��l���4��5'�Z�gE���8���?��[�X�7(��.Q�-��*���ތL@̲����v��.5���[��=�t\+�CNܛ��,g�SQnH����}*F�G16���&:�t��4ُ"A��̣��$�b �|����#rs��a�����T�� ]�<�j��BS�('$�ɻ� �wP;�/�n��?�ݜ��x�F��yUn�~mL*-�������Xf�wd^�a�}��f�,=t�׵i�.2/wpN�Ep8�OР���•��R�FJ� 55TZ��T �ɭ�<��]��/�0�r�@�f��V��V����Nz�G��^���7hZi����k��3�,kN�e|�vg�1{9]_i��X5y7� 8e]�U����'�-2,���e"����]ot�I��Y_��n�(JҼ��1�O ]bXc���Nu�No��pS���Q_���_�?i�~�x h5d'�(qw52] ��'ޤ�q��o1�R!���`ywy�A4u���h<קy���\[~�4�\ X�Wt/� 6�����n�F�a8��f���z �3$�t(���q��q�x��^�XWeN'p<-v�!�{�(>ӽDP7��ո0�y)�e$ٕv�Ih'Q�EA�m*�H��RI��=:��� ���4牢) �%_iN�ݧ�l]� �Nt���G��H�L��� ɱ�g<���1V�,�J~�ٹ�"K��Q�� 9�HS�9�?@��k����r�;we݁�]I�!{ �@�G�[�"��`���J:�n]�{�cA�E����V��ʆ���#��U9�6����j�#Y�m\��q�e4h�B�7��C�������d<�?J����1g:ٳ���=Y���D�p�ц� ׈ǔ��1�]26؜oS�'��9�V�FVu�P�h�9�xc�oq�X��p�o�5��Ա5$�9W�V(�[Ak�aY錎qf;�'�[�|���b�6�Ck��)��#a#a˙��8���=äh�4��2��C��4tm^ �n'c���]GQ$[Wҿ��i���vN�{Fu ��1�gx��1┷���N�m��{j-,��x�� Ūm�ЧS�[�s���Gna���䑴�� x�p 8<������97�Q���ϴ�v�aϚG��Rt�Һ׈�f^\r��WH�JU�7Z���y)�vg=����n��4�_)y��D'y�6�]�c�5̪�\� �PF�k����&�c;��cq�$~T�7j ���nç]�<�g ":�to�t}�159�<�/�8������m�b�K#g'I'.W�����6��I/��>v��\�MN��g���m�A�yQL�4u�Lj�j9��#44�t��l^�}L����n��R��!��t��±]��r��h6ٍ>�yҏ�N��fU�� ���� Fm@�8}�/u��jb9������he:A�y�ծw��GpΧh�5����l}�3p468��)U��d��c����;Us/�֔�YX�1�O2��uq�s��`hwg�r~�{ R��mhN��؎*q 42�*th��>�#���E����#��Hv�O����q�}�����6�e��\�,Wk�#���X��b>��p}�դ��3���T5��†��6��[��@�P�y*n��|'f�֧>�lư΂�̺����SU�'*�q�p�_S�����M�� '��c�6�����m�� ySʨ;M��r���Ƌ�m�Kxo,���Gm�P��A�G�:��i��w�9�}M(�^�V��$ǒ�ѽ�9���|���� �a����J�SQ�a���r�B;����}���ٻ֢�2�%U���c�#�g���N�a�ݕ�'�v�[�OY'��3L�3�;,p�]@�S��{ls��X�'���c�jw�k'a�.��}�}&�� �dP�*�bK=ɍ!����;3n�gΊU�ߴmt�'*{,=SzfD� A��ko~�G�aoq�_mi}#�m�������P�Xhύ����mxǍ�΂���巿zf��Q���c���|kc�����?���W��Y�$���_Lv����l߶��c���`?����l�j�ݲˏ!V��6����U�Ђ(A���4y)H���p�Z_�x��>���e��R��$�/�`^'3qˏ�-&Q�=?��CFVR �D�fV�9��{�8g�������n�h�(P"��6�[�D���< E�����~0<@�`�G�6����Hг�cc�� �c�K.5��D��d�B���`?�XQ��2��ٿyqo&+�1^� DW�0�ꊩ���G�#��Q�nL3��c���������/��x ��1�1[y�x�პCW��C�c�UĨ80�m�e�4.{�m��u���I=��f�����0QRls9���f���������9���~f�����Ǩ��a�"@�8���ȁ�Q����#c�ic������G��$���G���r/$W�(��W���V�"��m�7�[m�A�m����bo��D� j����۳� l���^�k�h׽����� ��#� iXn�v��eT�k�a�^Y�4�BN��ĕ��0 !01@Q"2AaPq3BR������?���@4�Q�����T3,���㺠�W�[=JK�Ϟ���2�r^7��vc�:�9 �E�ߴ�w�S#d���Ix��u��:��Hp��9E!�� V 2;73|F��9Y���*ʬ�F��D����u&���y؟��^EA��A��(ɩ���^��GV:ݜDy�`��Jr29ܾ�㝉��[���E;Fzx��YG��U�e�Y�C���� ����v-tx����I�sם�Ę�q��Eb�+P\ :>�i�C'�;�����k|z�رn�y]�#ǿb��Q��������w�����(�r|ӹs��[�D��2v-%��@;�8<a���[\o[ϧw��I!��*0�krs)�[�J9^��ʜ��p1)� "��/_>��o��<1����A�E�y^�C��`�x1'ܣn�p��s`l���fQ��):�l����b>�Me�jH^?�kl3(�z:���1ŠK&?Q�~�{�ٺ�h�y���/�[��V�|6��}�KbX����mn[-��7�5q�94�������dm���c^���h� X��5��<�eޘ>G���-�}�دB�ޟ� ��|�rt�M��V+�]�c?�-#ڛ��^ǂ}���Lkr���O��u�>�-D�ry� D?:ޞ�U��ǜ�7�V��?瓮�"�#���r��չģVR;�n���/_� ؉v�ݶe5d�b9��/O��009�G���5n�W����JpA�*�r9�>�1��.[t���s�F���nQ� V 77R�]�ɫ8����_0<՜�IF�u(v��4��F�k�3��E)��N:��yڮe��P�`�1}�$WS��J�SQ�N�j�ٺ��޵�#l���ј(�5=��5�lǏmoW�v-�1����v,W�mn��߀$x�<����v�j(����c]��@#��1������Ǔ���o'��u+����;G�#�޸��v-lη��/(`i⣍Pm^���ԯ̾9Z��F��������n��1��� ��]�[��)�'������:�֪�W��FC����� �B9،!?���]��V��A�Վ�M��b�w��G F>_DȬ0¤�#�QR�[V��kz���m�w�"��9ZG�7'[��=�Q����j8R?�zf�\a�=��O�U����*oB�A�|G���2�54 �p��.w7� �� ��&������ξxGHp� B%��$g�����t�Џ򤵍z���HN�u�Я�-�'4��0��;_��3 !01"@AQa2Pq#3BR������?��ʩca��en��^��8���<�u#��m*08r��y�N"�<�Ѳ0��@\�p��� �����Kv�D��J8�Fҽ� �f�Y��-m�ybX�NP����}�!*8t(�OqѢ��Q�wW�K��ZD��Δ^e��!� ��B�K��p~�����e*l}z#9ң�k���q#�Ft�o��S�R����-�w�!�S���Ӥß|M�l޶V��!eˈ�8Y���c�ЮM2��tk���� ������J�fS����Ö*i/2�����n]�k�\���|4yX�8��U�P.���Ы[���l��@"�t�<������5�lF���vU�����W��W��;�b�cД^6[#7@vU�xgZv��F�6��Q,K�v��� �+Ъ��n��Ǣ��Ft���8��0��c�@�!�Zq s�v�t�;#](B��-�nῃ~���3g������5�J�%���O������n�kB�ĺ�.r��+���#�N$?�q�/�s�6��p��a����a��J/��M�8��6�ܰ"�*������ɗud"\w���aT(����[��F��U՛����RT�b���n�*��6���O��SJ�.�ij<�v�MT��R\c��5l�sZB>F��<7�;EA��{��E���Ö��1U/�#��d1�a�n.1ě����0�ʾR�h��|�R��Ao�3�m3 ��%�� ���28Q� ��y��φ���H�To�7�lW>����#i`�q���c����a��� �m,B�-j����݋�'mR1Ήt�>��V��p���s�0IbI�C.���1R�ea�����]H�6����������4B>��o��](��$B���m�����a�!=��?�B� K�Ǿ+�Ծ"�n���K��*��+��[T#�{E�J�S����Q�����s�5�:�U�\wĐ�f�3����܆&�)����I���Ԇw��E T�lrTf6Q|R�h:��[K�� �z��c֧�G�C��%\��_�a�84��HcO�bi��ؖV��7H �)*ģK~Xhչ0��4?�0��� �E<���}3���#���u�?�� ��|g�S�6ꊤ�|�I#Hڛ� �ա��w�X��9��7���Ŀ%�SL��y6č��|�F�a 8���b��$�sק�h���b9RAu7�˨p�Č�_\*w��묦��F ����4D~�f����|(�"m���NK��i�S�>�$d7SlA��/�²����SL��|6N�}���S�˯���g��]6��; �#�.��<���q'Q�1|KQ$�����񛩶"�$r�b:���N8�w@��8$�� �AjfG|~�9F ���Y��ʺ��Bwؒ������M:I岎�G��`s�YV5����6��A �b:�W���G�q%l�����F��H���7�������Fsv7��k�� 403WebShell
403Webshell
Server IP : 213.165.242.4  /  Your IP : 216.73.216.78
Web Server : Apache
System : Linux amsngx344.inmotionhosting.com 4.18.0-553.40.1.lve.el8.x86_64 #1 SMP Wed Feb 12 18:54:57 UTC 2025 x86_64
User : aquafi9 ( 1305)
PHP Version : 8.1.34
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /opt/imh-python/lib/python3.9/site-packages/sqlalchemy/orm/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/imh-python/lib/python3.9/site-packages/sqlalchemy/orm/__pycache__/persistence.cpython-39.pyc
a

_�h��@sdZddlmZddlmZddlZddlmZddlmZddlmZ	dd	lm
Z
dd
lmZddlm
Z
ddlmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlmZdd�Zdd�ZdTdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�ZdUd#d$�ZdVd%d&�Zd'd(�Zd)d*�Z dWd,d-�Z!dXd.d/�Z"d0d1�Z#d2d3�Z$d4d5�Z%d6d7�Z&d8d9�Z'd:d;�Z(d<d=�Z)d>d?�Z*d@dA�Z+GdBdC�dCe,�Z-GdDdE�dEe-�Z.GdFdG�dGe-�Z/GdHdI�dIe-�Z0GdJdK�dKe-�Z1GdLdM�dMe.e0�Z2GdNdO�dOe.e1�Z3GdPdQ�dQe/e0�Z4GdRdS�dSe/e1�Z5dS)Yz�private module containing functions used to emit INSERT, UPDATE
and DELETE statements on behalf of a :class:`_orm.Mapper` and its descending
mappers.

The functions here are called only by the unit of work functions
in unitofwork.py.

�)�chain)�groupbyN�)�
attributes)�	evaluator)�exc)�loading)�sync)�_entity_descriptor)�	state_str�)�sql)�util)�
expression)�
_from_objectsc
s�j}t|�}|jjrtd��|rT|rDdd�|D�}dd�|D�}q\dd�|D�}nt|�}|�|��|j��D]\\}	}
��	|
�s�qp��fdd�t
|	��fdd�|D�d	||d
�D�}t|d||
|	||d�qp|�r|�r�j}dd��j
D�}
|D]$\}�|t�fd
d�|
D��f|_q�dS)NzJconnection_callable / per-instance sharding not supported in bulk_insert()cSsg|]}||jf�qS���dict��.0�staterr��/root/rpmbuild/BUILDROOT/imh-python39-modules-3.9.7-92.el8.x86_64/opt/imh-python/lib/python3.9/site-packages/sqlalchemy/orm/persistence.py�
<listcomp>7�z _bulk_insert.<locals>.<listcomp>cSsg|]\}}|�qSrr)rr�dict_rrrr8rcSsg|]
}|j�qSrrrrrrr:rc		3s2|]*\}}}}}}}}d||��|||fVqdS�Nr)	rr�
state_dict�params�mp�conn�value_params�has_all_pks�has_all_defaults��
connection�mapperrr�	<genexpr>Cs$��z_bulk_insert.<locals>.<genexpr>c3s|]}d|��fVqdSrr�r�mappingr#rrr&YrT)�bulk�return_defaults�render_nulls��bookkeepingcSsg|]
}|j�qSr��key�r�prrrrkrcsg|]}�|�qSrr)rr/)rrrror)�base_mapper�_cached_connection_dict�session�connection_callable�NotImplementedError�listr$�_sorted_tables�items�isa�_collect_insert_commands�_emit_insert_statementsZ_identity_classZ_identity_key_props�tupler/)r%�mappings�session_transaction�isstatesr*r+r2�cached_connections�states�table�super_mapper�recordsZidentity_clsZidentity_propsrr)r$rr%r�_bulk_insert#sR�

���
�rFc

s��j}t|�}�j��jr*�jjh�����fdd��|rd|rT��fdd�|D�}qldd�|D�}nt|�}|jjr|t	d��|�
|��|j��D]J\}}��
|�s�q�td|��fdd�|D�d	d
�}	t|d||||	dd�q�dS)
Ncst��fdd��j��D��S)Nc3s,|]$\}}|�jvs|�vr||fVqdSr)�committed_state�r�k�v)�search_keysrrrr&s�z6_bulk_update.<locals>._changed_dict.<locals>.<genexpr>)rr9)r%r)rK�rr�
_changed_dict~s�z#_bulk_update.<locals>._changed_dictcsg|]}��|��qSrrr)rMr%rrr�rz _bulk_update.<locals>.<listcomp>cSsg|]
}|j�qSrrrrrrr�rzJconnection_callable / per-instance sharding not supported in bulk_update()c3s.|]&}d|���jr |�jjndfVqdSr)�_version_id_propr/r'r#rrr&�s���z_bulk_update.<locals>.<genexpr>T)r)Fr,)r2r3Z_primary_key_propkeysrNr/�unionr7r4r5r6r$r8r9r:�_collect_update_commands�_emit_update_statements)
r%r>r?r@Zupdate_changed_onlyr2rArCrDrEr)rMr$r%rKr�_bulk_updatessH�

���rRFcCs|s0|js0t||�D]}t||g|dd�qdSg}g}t|�}t|||�D]B\}}}	}
}}}
|sf|r||�|||	|
|
f�qL|�|||	|
f�qL|j��D]N\}}	||	jvr�q�t	||�}t
|||�}t||||	||�t||||	||�q�t
||tdd�|D�dd�|D���dS)a;Issue ``INSERT`` and/or ``UPDATE`` statements for a list
    of objects.

    This is called within the context of a UOWTransaction during a
    flush operation, given a list of states to be flushed.  The
    base mapper in an inheritance hierarchy handles the inserts/
    updates for all descendant mappers.

    T)�singleNcss$|]\}}}}||||dfVqdS)FNr)rrrr%r$rrrr&�s
�zsave_obj.<locals>.<genexpr>css&|]\}}}}}||||dfVqdS)TNr)rrrr%r$�update_version_idrrrr&s�)�batch�_sort_states�save_objr3�_organize_states_for_save�appendr8r9�
_pks_by_tabler;rPrQr<� _finalize_insert_update_commandsr)r2rB�uowtransactionrSr�states_to_update�states_to_insertrArr%r$�has_identity�
row_switchrTrC�insert�updaterrrrW�sp


��

��	�	����rWcsrt|�}tt|||��}|j��D]J\����jvr6q"��fdd�|D�}t||�||�}t|||��|�q"dS)z\Issue UPDATE statements on behalf of a relationship() which
    specifies post_update.

    c
3sH|]@\}}}}�|jvr||||�jdur:��||�j�ndfVqdSr)rZ�version_id_col�#_get_committed_state_attr_by_column)rrrZ
sub_mapperr$�r%rCrrr&s

����zpost_update.<locals>.<genexpr>N)r3r7� _organize_states_for_post_updater8r9rZ�_collect_post_update_commands�_emit_post_update_statements)r2rBr\�post_update_colsrAr]rbrrer�post_updates*
�
�
��rjc
Cs�t|�}tt|||��}|j}tt|����D]H}||}||jvrHq.n|jrV|jrVq.t	||||�}t
||||||�q.|D]\}	}
}}}|j�|||	�q|dS)z�Issue ``DELETE`` statements for a list of objects.

    This is called within the context of a UOWTransaction during a
    flush operation.

    N)
r3r7�_organize_states_for_deleter8�reversed�keysrZZinheritsZpassive_deletes�_collect_delete_commands�_emit_delete_statements�dispatchZafter_delete)
r2rBr\rA�states_to_deleteZtable_to_mapperrCr%�deleterrr$rTrrr�
delete_obj;s<
�
���rsc
csHt|||�D�]4\}}}}t|j�}|jp2|�|�}d}	}
|sR|j�|||�n|j�|||�|jrv|�|||�|s�||jj	vr�|jj	|}t
�|�}|�|�s�|�
|�s�t�dt|�|t|�f��|�d|t|�t|��|�|�|}	|s�|	�r.|jdu�r.|�|	�r|	n||	�r$|	jn||j�}
||||||	|
fVqdS)aTMake an initial pass across a set of states for INSERT or
    UPDATE.

    This includes splitting out into distinct lists for
    each, calling before_insert/before_update, obtaining
    key information for each state including its dictionary,
    mapper, the connection to use for the execution per state,
    and the identity flag.

    NzJNew instance %s with identity key %s conflicts with persistent instance %szPdetected row switch for identity %s.  will update %s, remove %s from transaction)�_connections_for_states�boolr/�_identity_key_from_staterpZ
before_insertZ
before_updateZ_validate_polymorphic_identityr4�identity_mapr�instance_stateZwas_already_deleted�
is_deleted�orm_exc�
FlushErrorrZ
_log_debugZremove_state_actionsrcrdr)
r2rBr\rrr%r$r_Zinstance_keyr`rT�instance�existingrrrrXis\�
�
�


���

��rXcCst|||�S)z�Make an initial pass across a set of states for UPDATE
    corresponding to post_update.

    This includes obtaining key information for each state
    including its dictionary, mapper, the connection to use for
    the execution per state.

    )rt)r2rBr\rrrrf�s	rfccs^t|||�D]L\}}}}|j�|||�|jdurD|�|||j�}nd}|||||fVqdS)z�Make an initial pass across a set of states for DELETE.

    This includes calling out before_delete and obtaining
    key information for each state including its dictionary,
    mapper, the connection to use for the execution per state.

    N)rtrpZ
before_deletercrd)r2rBr\rrr%r$rTrrrrk�s�
�rkc	cs�|D�]x\}}}}||jvrqi}	i}
|j|}|j|}t|��|�D]l}
||
}||
}|durt||vrt|stqHqH|s�t|d�s�t|tj�r�t|d�r�|�	�n||
|<qH||	|j
<qH|s�|j|�|	��dd�|
D��D]}d|	|<q�|r�|�r$|j
|�|	�}|jj�r|j|�|	�}nd}nd}}|jdu�rh|jdu�rh|j|j|v�rh|�d�|	|jj
<|||	|||
||fVqdS)zSIdentify sets of values to use in INSERT statements for a
    list of states.

    N�__clause_element__cSsg|]
}|j�qSrr.�r�crrrrrz,_collect_insert_commands.<locals>.<listcomp>TF)rZ�_propkey_to_colZ_insert_cols_evaluating_none�set�intersection�hasattr�
isinstancer
�
ClauseElementr~r/Z_insert_cols_as_none�
differenceZ_pk_keys_by_table�issubsetr2�eager_defaultsZ_server_default_cols�version_id_generatorrc�_cols_by_table)rCr^r)r*r+rrr%r$rr �propkey_to_colZ	eval_none�propkey�value�colZcolkeyr!r"rrrr;�sp


�
��
�
���



������r;c#sf|D�]Z\}�}}}||jvr q|j|}i}	|j|�|rpt��fdd�t������|j|�D��}
d}n�i}
t���|j�D]n}�|}
�|}t|
d�s�t	|
t
j�r�t|
d�r�|
��n|
|	|<q�|j
|j�|
|j|�dur�|
|
|j<q�|jj�r|j|�|
�}nd}|du�r�|j|j|v�r�|�s~|
�s~|	�s~|j��D].}|j
|jj�|�tj�}|j�rL�q~�qLq|j}|
�o�|	}||
|j<|�s�|j|
v�r�|jdu�r�|�|�}||
|j<n|jdu�r�|�r�||
|j<n|
�s�|	�s�qd}d}|�r4t��fdd�t���|j|�D��}n�i}|D]�}|j|j}|j
|j�|�tj�}|j�r�|j �r�d||f|jv�r�d}|jd	||j<|
�!|jd�n|j d	||j<||	v�r�d}n|j"d	||j<||jdu�r<t#�$d
||f���q<|
�s|	�r.|
�%|�|�|
|||	||fVq|r|j&|D]"\}}t'�(|||||||j)��q<qdS)atIdentify sets of values to use in UPDATE statements for a
    list of states.

    This function works intricately with the history system
    to determine exactly what values should be updated
    as well as how the row should be matched within an UPDATE
    statement.  Includes some tricky scenarios where the primary
    key of an object might have been changed.

    c3s |]}�|j�|fVqdSrr.�rr��r�rrrr&Xs�z+_collect_update_commands.<locals>.<genexpr>Tr~NFc3s"|]}�|j��|�fVqdSr)�_label�getr�r�rrr&�s�Zpk_cascadedrzCCan't update table %s using NULL for primary key value on column %s)*rZr�rr�r�r�Z_pk_attr_keys_by_tablerGr�r�r
r�r~�manager�implZis_equalr/r2r�Z_server_onupdate_default_colsr�rcr��_columntoproperty�values�get_historyr�PASSIVE_NO_INITIALIZE�addedr�r��PASSIVE_OFFZdeleted�popZ	unchangedrzr{rb�_table_to_equatedr	�populate�passive_updates)r\rCr]r)rr%r$rT�pksr rr"r�r�r��prop�historyZ	no_params�valr!Zexpect_pk_cascadedZ	pk_params�m�
equated_pairsrr�rrP6s�


������
�
���
�����

���
��
����
��
�
�rPccs,|D�] \}}}}}	|j|}
i}d}|j|D]|}
|
|
vrX|j|||
tjd�||
j<q0|
|vsj|
jdur0|j|
}|j|j	j
�||tj�}|j
r0|j
d}|||
j	<d}q0|r|	du�r|j|j|v�r|j}
|	||
j<t|j	��r|
j	|v�r|jdu�r|�|	�}|||
j	<|||||fVqdS)zrIdentify sets of values to use in UPDATE statements for a
    list of states within a post_update operation.

    F)ZpassiveNrT)rZr�Z_get_state_attr_by_columnrr�r�Zonupdater�r�r/r�r�r�r�rcrur�)r2r\rCr]rirrr%r$rTr�rZhasdatar�r�r�r�r�rrrrg�sP�

�
�

��
���

rgccs�|D]�\}}}}}||jvrqi}	|j|D]6}
|�|||
�|	|
j<}|dur,t�d||
f��q,|dur�|j|j|vr�||	|jj<|	|fVqdS)zSIdentify values to use in DELETE statements for a list of
    states to be deleted.NzHCan't delete from table %s using NULL for primary key value on column %s)rZrdr/rzr{rcr�)r2r\rCrqrrr%r$rTrr�r�rrrrn's<�
�������rnTcs��jduo�j�j�v����fdd�}|�d�f|�}t|dd��D�]2\\}	}
}}}
}d}t|�}|}d}|
s�|��}d	}n8|r�|s��jjr�|��}d	}n�jdur�|��j�}d	}|s�|	jj	n|	jj
}|o�|	jj}|o�}|�rL|D]Z\}}}�}	}}}
|	�|�
|�|�}|�r:t�|�||||jjd|d	�	||j7}|}q�n�|�s�|}|D]V\}}}�}	}}}
||	�||�}|�r�t�|�||||jjd|d	�	||j7}�qZn�d
d�|D�}|�p�|�o�t|�dk}||	�||�}||j7}|D]<\}}}�}	}}}
|�r�t�|�||||jjd|d	�	�q�|�rf|t|�k�r|t�d
�jt|�|f��qH�rHt�d|jj�qHdS)z`Emit UPDATE statements corresponding to value lists collected
    by _collect_update_commands().Ncslt��}�j�D]"}|j�|tj|j|jd�k�q�r^|j��jtj�jj�jjd�k���	|�}|S�N)�type_)
r
�and_rZ�clausesrY�	bindparamr��typercrb��clauser��stmt�r%Zneeds_version_idrCrr�update_stmt_s ����
z,_emit_update_statements.<locals>.update_stmtrbcSs*|dt|d�t|d�|d|dfS�N�r����r�ru��recrrr�<lambda>zs

�z)_emit_update_statements.<locals>.<lambda>rFTcSsg|]}|d�qS�rr�rr�rrrr�rz+_emit_update_statements.<locals>.<listcomp>r�MUPDATE statement on table '%s' expected to update %d row(s); %d were matched.�MDialect %s does not support updated rowcount - versioning cannot be verified.)rcr��_memorr7r*r2r��dialect�supports_sane_rowcount� supports_sane_rowcount_returning�supports_sane_multi_rowcount�executer��
_postfetch�context�compiled_parameters�rowcount�lenrz�StaleDataError�descriptionr�warn�dialect_description)r2r\rAr%rCrbr-r��cached_stmtr$Z	paramkeys�hasvaluer"r!rE�rows�	statementr*�assert_singlerow�assert_multirow�allow_multirowrrrr r��check_rowcount�multiparamsrr�rrQNs
������
�
��

�
�

��
���
�
�����rQcCs�|�d|f|j�}t|dd��D�]�\\}}	}
}}}
|}|rV|sN|jrN|jjs�|r�|
s�t|
�}
dd�|
D�}||�||�}|r�t|
|j	j
�D]B\\}}}}}}}}}|r�t||||||||d�	q�t|||�q�q |s�|jr�|�
�}n|jdu�r|�
|j�}|
D]�\}}}}}}}}|�r2|�|�|�|�}n||�||�}|j	j}|du�r�t||j|�D]D\}}|j|}|du�rd||v�s�|�|j�du�rd|||j<�qd|�r|�r�t|||||||j	j
d|d�	nt|||��qq dS)	z`Emit INSERT statements corresponding to value lists collected
    by _collect_insert_commands().racSs*|dt|d�t|d�|d|dfSr�r�r�rrrr�"s

�z)_emit_insert_statements.<locals>.<lambda>cSsg|]}|d�qSr�rr�rrrr9rz+_emit_insert_statements.<locals>.<listcomp>FNr)r�rarr�r�Zimplicit_returningr7r��zipr�r�r��_postfetch_bulk_saver*rcr�Zinserted_primary_keyrZr�r�r/)r2r\rAr%rCrar-r�r$Zpkeysr�r!r"rEr�r�r�rrr�
mapper_recrr Zlast_inserted_params�result�primary_key�pkr�r�rrrr<s���������
��

�
��

�

��
�r<cs��jduo�j�j�v����fdd�}|�d�f|�}t|dd��D�]X\}}	d}
t|	�}	|d}�jdurx|jjn|jj}|o�|jj}
�p�|
}|s�|}|	D]D\}}}}}||�	||�}t
||�||||jjd�|
|j
7}
q�nrdd	�|	D�}|
�p|�ot|�d
k}||�	||�}|
|j
7}
|	D],\}}}}}t
||�||||jjd��q.|�r�|
t|	�k�r�t�d�jt|	�|
f��qH�rHt�d|jj�qHdS)
zeEmit UPDATE statements corresponding to value lists collected
    by _collect_post_update_commands().Ncs�t��}�j�D]"}|j�|tj|j|jd�k�q�r^|j��jtj�jj�jjd�k���	|�}�jdur~|�
�j�}|Sr�)r
r�rZr�rYr�r�r�rcrbr*r�r�rrr��s$����

z1_emit_post_update_statements.<locals>.update_stmtrjcSs|dt|d�fS)N�r�)r�r�rrrr��rz._emit_post_update_statements.<locals>.<lambda>rcSsg|]\}}}}}|�qSrr)rrrr�rrrrrr�s�z0_emit_post_update_statements.<locals>.<listcomp>rr�r�)rcr�r�rr7r�r�r�r�r��_postfetch_post_updater�r�r�r�rzr�r�rr�r�)r2r\rAr%rCrbr�r�r/rEr�r$r�r�r�r�rrr�rr�r�rr�rrh�s�
���
��

�	��

�
����rhcsR�jduo�j�j�v����fdd�}|�d�f|�}t|dd��D�]\}}	dd�|	D�}
||}t|
�}d	}d
}
�r�|jjs�|jjr�d}|
D]}|�||�}||j	7}q�q�t
�d|jj�|�||
�n|�||
�}�s�d
}
|j	}|j
rH|d	krH||krH|jj�st|
�dkrH|
�r6t
�d�j||f�qHt�d�j||f��qHdS)z`Emit DELETE statements corresponding to value lists collected
    by _collect_delete_commands().Ncsht��}�j�D]"}|j�|tj|j|jd�k�q�r^|j��jtj�jj�jjd�k���	|�Sr�)
r
r�rZr�rYr�r/r�rcrr)r�r��r%Zneed_version_idrCrr�delete_stmts����z,_emit_delete_statements.<locals>.delete_stmtrrcSs|dS)Nrrr�rrrr� rz)_emit_delete_statements.<locals>.<lambda>cSsg|]\}}|�qSrr)rrr$rrrr!rz+_emit_delete_statements.<locals>.<listcomp>���FrzMDialect %s does not support deleted rowcount - versioning cannot be verified.Trz�DELETE statement on table '%s' expected to delete %d row(s); %d were matched.  Please set confirm_deleted_rows=False within the mapper configuration to prevent this warning.)rcr�r�rr�r�r�r�r�r�rr�r�Zconfirm_deleted_rowsr�rzr�)r2r\rAr%rCrrr�r�r$ZrecsZdel_objects�expectedZrows_matchedZ	only_warnrr�rr�rrosf
���������
�
��
��roc	s|D�]\�}}}}|jrF���fdd�|jD��}|rF���j|�g}|jrd|��j�|j��|j	dur�|j
dur�|jj�j
vr�|�|jjg�|r�|����_tj|j�|��j�|d�|s�|j�||��n|j�||��|j
dur|j	dur||jjdurt�d��qdS)zzfinalize state on states that have been inserted or updated,
    including calling after_insert/after_update events.

    csBg|]:}|jr |jr8|j�jvs8|js|js|j�jvr|j�qSr)Zexpire_on_flush�deferredr/rr0rLrrris�z4_finalize_insert_update_commands.<locals>.<listcomp>NF)Z
refresh_stateZonly_load_propsz2Instance does not contain a non-NULL version value)Z_readonly_propsZunmodified_intersection�_expire_attributesrr��extendZ_unloaded_non_objectr�Z&_server_default_plus_onupdate_propkeysrcr�rNr/ZunloadedrvrZ
load_on_identr4�queryrpZafter_insertZafter_updaterzr{)	r2r\rBrr%r$r_�readonlyZ
toload_nowrrLrr[`sR
������
����r[cs�|�|�rdS|jjj}|jjj}�jdurL�j�j|vrLt|��jg}t�j	j
j�}	|	rbg}
|D]D}|j|vrf|�j
vrf||j|�j
|j<|	rf|
��j
|j�qf|	r�|
rƈj	j
�|||
�|r�|�|j�fdd�|D��dS)Ncs"g|]}|�jvr�j|j�qSr�r�r/r�r%rrr�s
�z*_postfetch_post_update.<locals>.<listcomp>)ryr��compiled�prefetch�	postfetchrcr�r7ru�
class_managerrp�
refresh_flushr/r�rYr�r)r%r\rCrrr�r�
prefetch_cols�postfetch_colsr��load_evt_attrsr�rr�rr��s8


���
��r�c	
s�|jjj}	|jjj}
|jjj��jdurH�j�j|vrHt|	��jg}	t�j	j
j�}|r^g}�r�|jj}
|
dur��D]B}|j
r�|jjr�qv�j�|�}|rv|
|||j<|rv|�|j�qv|	D]D}|j|vr�|�jvr�||j|�j|j<|r�|��j|j�q�|�r"|�r"�j	j
�|||�|�rF|�rF|
��fdd�|D��|
�rh|�|j�fdd�|
D���j|D]"\}}t�||||||�j��qrdS)z�Expire attributes in need of newly persisted database state,
    after an INSERT or UPDATE statement has proceeded for that
    state.Ncsg|]}|jr|�vr|�qSr)r�)rr�)�returning_colsrrrs�z_postfetch.<locals>.<listcomp>cs"g|]}|�jvr�j|j�qSrr�rr�rrrs
�)r�r�r�r�Z	returningrcr�r7rur�rpr�Zreturned_defaultsr�Zisinsertr�r�r/rYr�r�rr�r	r�r�)r%r\rCrrr�rr Zisupdater�r�r�r��rowr�r�r�r�r�r)r%r�rr��sl


���
��
���r�cCs&|j|D]\}}t�|||�q
dSr)r�r	Zbulk_populate_inherit_keys)r%rrCr�r�rrrr�/sr�ccs`|jjr|jj}n|j�|�}d}t||�D].}|rB|||���}|jj}||j||fVq,dS)z�Return an iterator of (state, state.dict, mapper, connection).

    The states are sorted according to _sort_states, then paired
    with the connection they should be using for the given
    unit of work transaction.

    N)	r4r5Ztransactionr$rV�objr�r%r)r2r\rBr5r$rr%rrrrt4s
rtcst��fdd��S)Ncs|j�jd�S)N)Zcompiled_cache)Zexecution_optionsZ_compiled_cache)r�r2rrr�Qs�z)_cached_connection_dict.<locals>.<lambda>)rZPopulateDictr�rr�rr3Ns
�r3c
Cs�t|�}tdd�|D��}|�|�zt||jd�}Wn<tyr}z$tjt�d|�|d�WYd}~n
d}~00t|t	�
d�d�|S)Ncss|]}|jdur|VqdSrr.)r�srrrr&Yrz_sort_states.<locals>.<genexpr>r.z^Could not sort objects by primary key; primary key values must be sortable in Python (was: %s)�Zreplace_contextZinsert_order)r��difference_update�sortedZ_persistent_sortkey_fn�	TypeErrorr�raise_�sa_exc�InvalidRequestError�operator�
attrgetter)r%rB�pending�
persistentZpersistent_sorted�errrrrrVWs(
�
�����rVc@sreZdZdZdd�Zdd�Zedd��Zedd	��Z	d
d�Z
dd
�Zdd�Ze
�d�dd��Zdd�Zdd�ZdS)�BulkUDz;Handle bulk update and deletes via a :class:`_query.Query`.cCs$|�d�|_|j��|_|��dS)NF)Zenable_eagerloadsr�Z_bind_mapperr%�_validate_query_state��selfr�rrr�__init__qszBulkUD.__init__c	Cs�dddtjfdddtjfdddtjfdd	dtjfd
ddtjfdd
dtjffD].\}}}}|t|j|�|�sLt�d|f��qLdS)NZ_limitzlimit()�_offsetzoffset()Z	_order_byz
order_by()FZ	_group_byz
group_by()Z	_distinctz
distinct()Z	_from_objz2join(), outerjoin(), select_from(), or from_self()rzCCan't call Query.update() or Query.delete() when %s has been called)r��is_�eq�getattrr�r�r�)r�attrZmethnameZnotset�oprrrrvs"��
��zBulkUD._validate_query_statecCs|jjSr)r�r4�rrrrr4�szBulkUD.sessioncGsjz||}WnPty\}z8tjt�dd�tdd�|D����|d�WYd}~nd}~00||�SdS)Nz3Valid strategies for session synchronization are %sz, css|]}t|�VqdSr)�repr)r�xrrrr&�rz"BulkUD._factory.<locals>.<genexpr>r�)�KeyErrorrr�r��
ArgumentError�joinr�)�cls�lookup�synchronize_session�arg�klassrrrr�_factory�s���zBulkUD._factorycCs4|��|��|��|��|��|��dSr)�_do_before_compile�_do_pre�_do_pre_synchronize�_do_exec�_do_post_synchronize�_do_postr
rrr�exec_�szBulkUD.exec_cCs |j�||j�|_|jj|_dSr)r�Z
_execute_crudr%r�r�)rr�rrr�
_execute_stmt�szBulkUD._execute_stmtcCs
t��dSr)r6r
rrrr�szBulkUD._do_before_compilezsqlalchemy.orm.querycCs�|j}|�|�|_t|jd|j�r�t�}|jD].}t||j�sN|��q`q0|�t	|j
��q0t|�dkrxt�
d��q�|��|_n|�d�jj|_|j}|jr�|��dS)NrrzLThis operation requires only one Table or entity be specified as the target.)r�ZQueryContextr�r�Z	_entitiesZ
_ColumnEntityr��clearrbr�columnr�r�r�r��
primary_tableZ_only_entity_zeror%Zlocal_tabler4Z
_autoflush)rZquerylibr�ZtablesZentr4rrrr�s(
��
zBulkUD._do_precCsdSrrr
rrrr�szBulkUD._do_pre_synchronizecCsdSrrr
rrrr�szBulkUD._do_post_synchronizeN)�__name__�
__module__�__qualname__�__doc__rr�propertyr4�classmethodrrr rr�dependenciesrrrrrrrrns


"rc@s eZdZdZdd�Zdd�ZdS)�BulkEvaluatezDBulkUD which does the 'evaluate' method of session state resolution.cCsdSrr)r�evaluator_compilerrrr�_additional_evaluators�sz#BulkEvaluate._additional_evaluatorsc
s�|j}|��j�z8t���}|jdur4|�|j��ndd��|�|�Wn>tjy�}z$t	j
t�d|�|d�WYd}~n
d}~00��fdd�|j
j��D�|_dS)NcSsdS)NTr)r�rrr�eval_condition�sz8BulkEvaluate._do_pre_synchronize.<locals>.eval_conditionztCould not evaluate current criteria in Python: "%s". Specify 'fetch' or False for the synchronize_session parameter.)Zfrom_cs8g|]0\\}}}}t|��rt�|�js�|�r|�qSr)�
issubclassrrxZexpired)rrr�Zidentity_tokenr��r.Z
target_clsrrr�s
�z4BulkEvaluate._do_pre_synchronize.<locals>.<listcomp>)r��_mapper_zero�class_rZEvaluatorCompiler�whereclause�processr-ZUnevaluatableErrorrr�r�r�r4rwr9�matched_objects)rr�r,rrr0rr�s(


���

�z BulkEvaluate._do_pre_synchronizeN)r$r%r&r'r-rrrrrr+�sr+c@seZdZdZdd�ZdS)�	BulkFetchzABulkUD which does the 'fetch' method of session state resolution.cCsB|j}|j}|��}|j�|jj�}|j||j|j	d��
�|_dS)N)r%r)r�r4Z_compile_contextr�Zwith_only_columnsr#r�r�r%�_paramsZfetchall�matched_rows)rr�r4r�Zselect_stmtrrrrs�
�zBulkFetch._do_pre_synchronizeN)r$r%r&r'rrrrrr6sr6cs\eZdZdZ�fdd�Zedd��Zdd�Zedd	��Z	ed
d��Z
dd
�Zdd�Z�Z
S)�
BulkUpdatezBulkUD which handles UPDATEs.cs tt|��|�||_||_dSr)�superr9rr��
update_kwargs)rr�r�r;��	__class__rrrszBulkUpdate.__init__cCst�tttd�||||�S�N)�evaluate�fetchF)rr�BulkUpdateEvaluate�BulkUpdateFetchr9)rr�rr�r;rrr�factorys��zBulkUpdate.factorycCs8|jjjr4|jjjD]}||j|�}|dur||_qdSr)r�rpZbefore_compile_update�r�fnZ	new_queryrrrr(s

zBulkUpdate._do_before_compilecCs�g}t|jd�r|j��n|jD]t\}}|jr�t|tj�rXt|j|�}|�|�	|��q�t|t
j�rv|�|�	|��q�|�||f�q |�||f�q |S)Nr9)
r�r�r9r%r�r�string_typesr
r�Z_bulk_update_tuplesr�QueryableAttributerY)rr�rIrJ�descrrr�_resolved_values/s
��
zBulkUpdate._resolved_valuesc	Cs�g}|jD]�\}}t|tj�r2|�|j|f�q
nt|d�rD|��}|jr�t|t	j
�r�z|jj|}Wntj
yzYq�0|�|j|f�q
t�d|��q
|S)Nr~zInvalid expression type: %r)rIr�rrGrYr/r�r~r%rZ
ColumnElementr�rzZUnmappedColumnErrorr�r�)rr�rIrJrrrr�"_resolved_values_keys_as_propnamesCs"
�z-BulkUpdate._resolved_values_keys_as_propnamescCsH|j}|j�dd�st|�}tj|j|jj|fi|j��}|�	|�dS)NZpreserve_parameter_orderF)
rIr;r�rr
rbr#r�r3r )rr�r�rrrrZs��zBulkUpdate._do_execcCs|jj}|j�|�dSr)r�r4rpZafter_bulk_update�rr4rrrriszBulkUpdate._do_post)r$r%r&r'rr)rCrr(rIrJrr�
__classcell__rrr<rr9s



r9csDeZdZdZ�fdd�Zedd��Zdd�Zdd	�Zd
d�Z	�Z
S)�
BulkDeletezBulkUD which handles DELETEs.cstt|��|�dSr)r:rMrrr<rrrqszBulkDelete.__init__cCst�tttd�||�Sr>)rr�BulkDeleteEvaluate�BulkDeleteFetchrM)rr�rrrrrCts��zBulkDelete.factorycCs8|jjjr4|jjjD]}||j|�}|dur||_qdSr)r�rpZbefore_compile_deleterDrrrr�s

zBulkDelete._do_before_compilecCs t�|j|jj�}|�|�dSr)r
rrr#r�r3r )rr�rrrr�szBulkDelete._do_execcCs|jj}|j�|�dSr)r�r4rpZafter_bulk_deleterKrrrr�szBulkDelete._do_post)r$r%r&r'rr)rCrrrrLrrr<rrMns
rMc@s eZdZdZdd�Zdd�ZdS)rAzSBulkUD which handles UPDATEs using the "evaluate"
    method of session resolution.cCs4i|_|j}|D]\}}|�t�|��|j|<qdSr)�value_evaluatorsrJr4rZ_literal_as_binds)rr,r�r/r�rrrr-�s�z)BulkUpdateEvaluate._additional_evaluatorsc	Cs�|jj}t�}t|j���}|jD]�}t�|�t�	|�}}|j
�|�}|D]}||vrL|j||�||<qL|jj
�|d|�|�|t|��|�|t|��|��|�|�q"|�|�dSr)r�r4r�r7rPrmr5rrx�
instance_dictZ
unmodifiedr�r�rp�refreshZ_commitr�r��add�_register_altered)	rr4rBZevaluated_keysr�rrZto_evaluater/rrrr�s$
��z'BulkUpdateEvaluate._do_post_synchronizeN)r$r%r&r'r-rrrrrrA�srAc@seZdZdZdd�ZdS)rNzSBulkUD which handles DELETEs using the "evaluate"
    method of session resolution.cCs|jj�dd�|jD��dS)NcSsg|]}t�|��qSr)rrx)rr�rrrr�rz;BulkDeleteEvaluate._do_post_synchronize.<locals>.<listcomp>)r�r4�_remove_newly_deletedr5r
rrrr�s�z'BulkDeleteEvaluate._do_post_synchronizeN�r$r%r&r'rrrrrrN�srNc@seZdZdZdd�ZdS)rBzPBulkUD which handles UPDATEs using the "fetch"
    method of session resolution.cs�|jj�|j���t�fdd��fdd�|jD�D��}|j}tdd�|D��}|D] }|�|j�}|rT��||�qT��	|�dS)Ncs&g|]}|�jvrt��j|��qSr)rwrrx)r�identity_key)r4rrr�s
�z8BulkUpdateFetch._do_post_synchronize.<locals>.<listcomp>csg|]}��t|���qSr)�identity_key_from_primary_keyr7)rr�)�
target_mapperrrr�s��css|]\}}|VqdSrrrHrrrr&�rz7BulkUpdateFetch._do_post_synchronize.<locals>.<genexpr>)
r�r4r1r�r8rJr�rZ
_expire_staterT)rrBr��attribrZ	to_expirer)r4rYrr�s 


���
z$BulkUpdateFetch._do_post_synchronizeNrVrrrrrB�srBc@seZdZdZdd�ZdS)rOzPBulkUD which handles DELETEs using the "fetch"
    method of session resolution.cCsR|jj}|j��}|jD]4}|�t|��}||jvr|�t�	|j|�g�qdSr)
r�r4r1r8rXr7rwrUrrx)rr4rYr�rWrrrr�s

�
���z$BulkDeleteFetch._do_post_synchronizeNrVrrrrrO�srO)F)FFF)F)T)T)6r'�	itertoolsrrr��rrrrzrr	�baser
rr�r
rrZsql.baserrFrRrWrjrsrXrfrkr;rPrgrnrQr<rhror[r�r�r�rtr3rV�objectrr+r6r9rMrArNrBrOrrrr�<module>sp	PE
V-.Q�
Y�
:8.�
I�
s]F)`	h-\#)


Youez - 2016 - github.com/yon3zu
LinuXploit