§
    eŠtj”i  ã                  ó  — d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	l	m
Z
 dd
l	mZ ddl	mZ ddl	mZ ddl	mZ ddlmZ er$ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ d„ Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ de¦  «        Z G d„ d¦  «        Z  G d„ dee ¦  «        Z! G d „ d!e ¦  «        Z" G d"„ d#e ¦  «        Z# G d$„ d%e ¦  «        Z$ G d&„ d'e ¦  «        Z% G d(„ d)e ¦  «        Z& G d*„ d+e ¦  «        Z'd,S )-zïThe internals for the unit of work system.

The session's flush() process passes objects to a contextual object
here, which assembles flush tasks based on mappers and their properties,
organizes them in order of dependency, and executes.

é    )Úannotations)ÚAny)ÚDict)ÚOptional)ÚSet)ÚTYPE_CHECKINGé   ©Ú
attributes)Úexc)Úutilé   )Úevent)Útopological)ÚDependencyProcessor)ÚMapperProperty)ÚMapper)ÚSession)ÚSessionTransaction)ÚInstanceStatec                ó  ‡— |j         Šˆfd„}ˆfd„}ˆfd„}t          j        | d|dd¬¦  «         t          j        | d|ddd¬¦  «         t          j        | d	|ddd¬¦  «         t          j        | d
|ddd¬¦  «         dS )z\Establish event listeners on object attributes which handle
    cascade-on-set/append.

    c                ó2  •— |€d S | j         }|rˆ|j        r|                     d¦  «         | j        j        j        ‰         }t          j        |¦  «        }|j        j	        r5‰|j
        k    r*|                     |¦  «        s|                     |¦  «         |S )Nzcollection append)ÚsessionÚ_warn_on_eventsÚ_flush_warningÚmanagerÚmapperÚ_propsr   Úinstance_stateÚ_cascadeÚsave_updateÚkeyÚ_contains_stateÚ_save_or_update_state©ÚstateÚitemÚ	initiatorÚkwÚsessÚpropÚ
item_stater"   s          €úW/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sqlalchemy/orm/unitofwork.pyÚappendz$track_cascade_events.<locals>.append1   s­   ø€ ð ˆ<ØˆFàŒ}ˆØð 	7ØÔ#ð 9Ø×#Ò#Ð$7Ñ8Ô8Ð8à”=Ô'Ô.¨sÔ3ˆDÝ#Ô2°4Ñ8Ô8ˆJð ”Ô)ð7à˜IœMÒ)Ð)Ø×,Ò,¨ZÑ8Ô8ð *ð ×*Ò*¨:Ñ6Ô6Ð6Øˆó    c                ó°  •— |€d S | j         }| j        j        j        ‰         }|r%|j        r|                     |j        rdnd¦  «         |��|t          j        uru|t          j	        uri|j
        j        r_t          j        |¦  «        }|j                             |¦  «        r3|r ||j        v r|                     |¦  «         d S d|_        d S d S d S d S d S d S )Nzcollection removezrelated attribute deleteT)r   r   r   r   r   r   Úuselistr   Ú	NEVER_SETÚPASSIVE_NO_RESULTr    Údelete_orphanr   Ú
_is_orphanÚ_newÚexpungeÚ_orphaned_outside_of_sessionr%   s          €r-   Úremovez$track_cascade_events.<locals>.removeH   s#  ø€ Øˆ<ØˆFàŒ}ˆàŒ}Ô#Ô*¨3Ô/ˆàð 	�DÔ(ð 	Ø×Òà”<ð0Ð#Ð#à/ñô ð ð ÐØ�JÔ0Ð0Ð0Ø�JÔ8Ð8Ð8Ø”Ô+ð 9õ $Ô2°4Ñ8Ô8ˆJàŒ{×%Ò% jÑ1Ô1ð CØð C˜J¨$¬)Ð3Ð3Ø—L’L Ñ&Ô&Ð&Ð&Ð&ð ?C�JÔ;Ð;Ð;ð! ÐØ0Ð0Ø8Ð8Ð8Ð8ðCð Cr/   c                ó(  •— ||u r|S | j         }|�r |j        r|                     d¦  «         | j        j        j        ‰	         }|�Ut          j        |¦  «        }|j        j	        r5‰	|j
        k    r*|                     |¦  «        s|                     |¦  «         |�t|t          j        urf|t          j        urX|j        j        rLt          j        |¦  «        }||j        v r/|j                             |¦  «        r|                     |¦  «         |S )Nzrelated attribute set)r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r2   r3   r4   r6   r5   r7   )
r&   ÚnewvalueÚoldvaluer(   r)   r*   r+   Únewvalue_stateÚoldvalue_stater"   s
            €r-   Úset_z"track_cascade_events.<locals>.set_j   s6  ø€ ð �xÐÐØˆOàŒ}ˆØñ 	+ØÔ#ð =Ø×#Ò#Ð$;Ñ<Ô<Ð<à”=Ô'Ô.¨sÔ3ˆDØÐ#Ý!+Ô!:¸8Ñ!DÔ!D�à”MÔ-ð?à 	¤Ò-Ð-Ø ×0Ò0°Ñ@Ô@ð .ð ×.Ò.¨~Ñ>Ô>Ð>ð Ð$Ø¥JÔ$8Ð8Ð8Ø¥JÔ$@Ð@Ð@Ø”MÔ/ð Aõ ",Ô!:¸8Ñ!DÔ!D�à! T¤YÐ.Ð.°4´;×3IÒ3IØ"ñ4ô 4Ð.ð —L’L Ñ*Ô*Ð*Øˆr/   Úappend_wo_mutationT)ÚrawÚinclude_keyr.   )rA   ÚretvalrB   r9   ÚsetN)r"   r   Úlisten)Ú
descriptorr+   r.   r9   r?   r"   s        @r-   Útrack_cascade_eventsrG   *   s  ø€ ð
 Œ(€Cðð ð ð ð ð. Cð  Cð  Cð  Cð  CðD"ð "ð "ð "ð "õH 
„LØÐ(¨&°dÈðñ ô ð õ 
„LØ�H˜f¨$°tÈðñ ô ð õ 
„LØ�H˜f¨$°tÈðñ ô ð õ 
„LØ�E˜4 T°$ÀDðñ ô ð ð ð r/   c                  óú   — e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   d+d„Zed„ ¦   «         Zd„ Zd„ Zd„ Z	d„ Z
ej        fd„Zd„ Zd„ Z	 	 	 	 	 d,d-d!„Zd"„ Zd#„ Zej        d$„ ¦   «         Zd%„ Zd&„ Zd'„ Zd.d)„Zd.d*„ZdS )/ÚUOWTransactionr   r   r   ÚtransactionzDict[str, Any]r   z7util.defaultdict[Mapper[Any], Set[DependencyProcessor]]Údepsz6util.defaultdict[Mapper[Any], Set[InstanceState[Any]]]Úmappersc                ó  — || _         i | _        t          j        t          ¦  «        | _        t          j        t          ¦  «        | _        i | _        i | _        t	          ¦   «         | _	        i | _
        t          j        d„ ¦  «        | _        d S )Nc                 ó:   — t          ¦   «         t          ¦   «         fS ©N)rD   © r/   r-   ú<lambda>z)UOWTransaction.__init__.<locals>.<lambda>Î   s   € ½C¹E¼EÅ3Á5Ä5¸>€ r/   )r   r   r   ÚdefaultdictrD   rK   rL   Úpresort_actionsÚpostsort_actionsÚdependenciesÚstatesÚpost_update_states)Úselfr   s     r-   Ú__init__zUOWTransaction.__init__£   s„   € ØˆŒð ˆŒõ Ô$¥SÑ)Ô)ˆŒ	õ
 Ô'­Ñ,Ô,ˆŒð
  "ˆÔð
 !#ˆÔõ  ™EœEˆÔð
 ˆŒõ #'Ô"2Ð3IÐ3IÑ"JÔ"JˆÔÐÐr/   c                ó*   — t          | j        ¦  «        S rO   )ÚboolrV   ©rX   s    r-   Úhas_workzUOWTransaction.has_workÐ   s   € å�D”KÑ Ô Ð r/   c                óº   — |j         rS	 |                     |t          j        ¦  «         n1# t          j        $ r | j                             |g¦  «         Y dS w xY wdS )zZReturn ``True`` if the given state is expired and was deleted
        previously.
        TF)ÚexpiredÚ_load_expiredr   ÚPASSIVE_OFFÚorm_excÚObjectDeletedErrorr   Ú_remove_newly_deleted©rX   r&   s     r-   Úwas_already_deletedz"UOWTransaction.was_already_deletedÔ   ss   € ð Œ=ð 	ðØ×#Ò# E­:Ô+AÑBÔBÐBÐBøÝÔ-ð ð ð Ø”×2Ò2°E°7Ñ;Ô;Ð;Ø�t�tðøøøð ˆus   ‰ * ª*AÁAc                ó:   — || j         v o| j         |         d         S )z[Return ``True`` if the given state is marked as deleted
        within this uowtransaction.r   ©rV   re   s     r-   Ú
is_deletedzUOWTransaction.is_deletedà   s"   € ð ˜œÐ#Ð=¨¬°EÔ(:¸1Ô(=Ð=r/   c                óZ   — || j         v r| j         |         S  |¦   «         x| j         |<   }|S rO   r
   )rX   r"   Ú	callable_Úrets       r-   ÚmemozUOWTransaction.memoæ   s8   € Ø�$”/Ð!Ð!Ø”? 3Ô'Ð'à)2¨©¬Ð4ˆDŒO˜CÑ  3ØˆJr/   c                óD   — | j         |         d         }|df| j         |<   dS )z;Remove pending actions for a state from the uowtransaction.r   TNrh   )rX   r&   Úisdeletes      r-   Úremove_state_actionsz#UOWTransaction.remove_state_actionsí   s,   € ð ”;˜uÔ% aÔ(ˆà&¨Ð-ˆŒ�EÑÐÐr/   c                ój  — d||f}|| j         v r¯| j         |         \  }}}|t           j        z  sŽ|t           j        z  r|j        |         j        }|                     ||j        t           j        t           j        z  t           j        z  ¦  «        }|r|j	        r| 
                    ¦   «         }n|}|||f| j         |<   nu|j        |         j        }|                     ||j        |t           j        z  t           j        z  ¦  «        }|r|j	        r| 
                    ¦   «         }n|}|||f| j         |<   |S )zOFacade to attributes.get_state_history(), including
        caching of results.Úhistory)r   ÚSQL_OKr   ÚimplÚget_historyÚdictra   ÚLOAD_AGAINST_COMMITTEDÚNO_RAISEÚuses_objectsÚas_state)	rX   r&   r"   ÚpassiveÚhashkeyrr   Ústate_historyÚcached_passivert   s	            r-   Úget_attribute_historyz$UOWTransaction.get_attribute_historyô   sl  € ð ˜e SÐ)ˆð �d”oÐ%Ð%Ø59´_ÀWÔ5MÑ2ˆG�] Nð
 #¥ZÔ%6Ñ6ðMà�jÔ/Ñ/ðMð ”} SÔ)Ô.�Ø×*Ò*ØØ”JÝÔ*Ý Ô7ñ8å Ô)ñ*ñô �ð ð ,˜tÔ0ð ,Ø$+×$4Ò$4Ñ$6Ô$6�M�Mà$+�MØ,3°]ÀGÐ+L�” Ñ(øà”= Ô%Ô*ˆDð ×&Ò&ØØ”
ØÝÔ3ñ4åÔ%ñ&ñô ˆGð ð (˜4Ô,ð (Ø '× 0Ò 0Ñ 2Ô 2��à '�Ø(/°ÀÐ'HˆDŒO˜GÑ$àÐr/   c                ó   — |df| j         v S )NT)rS   )rX   Ú	processors     r-   Úhas_depzUOWTransaction.has_dep)  s   € Ø˜4Ð  DÔ$8Ð8Ð8r/   c                óT   — ||f}|| j         vrt          ||¦  «        | j         |<   d S d S rO   )rS   Ú
Preprocess)rX   r�   Ú
fromparentr"   s       r-   Úregister_preprocessorz$UOWTransaction.register_preprocessor,  s?   € Ø˜*Ð%ˆØ�dÔ*Ð*Ð*Ý(2°9¸jÑ(IÔ(IˆDÔ  Ñ%Ð%Ð%ð +Ð*r/   FNr&   úInstanceState[Any]ro   r[   ÚlistonlyÚcancel_deleteÚ	operationúOptional[str]r+   úOptional[MapperProperty]Úreturnc           	     ó”  — | j                              |¦  «        s;|j        s2|�0t          j        dt          j        |¦  «        ›d|›d|›d�¦  «         dS || j        vrW|j        j	        }|| j
        vr|                      |¦  «         | j
        |                              |¦  «         ||f| j        |<   n|s|s|r|df| j        |<   dS )NzObject of type z not in session, z operation along 'z' will not proceedFT)r   r#   Údeletedr   ÚwarnÚorm_utilÚstate_class_strrV   r   r   rL   Ú_per_mapper_flush_actionsÚadd)rX   r&   ro   rˆ   r‰   rŠ   r+   r   s           r-   Úregister_objectzUOWTransaction.register_object1  s  € ð Œ|×+Ò+¨EÑ2Ô2ð 
	ð ”=ð  YÐ%:Ý”	�	õ  Ô/°Ñ6Ô6Ð6Ð6¸	¸	¸	À4À4À4ðIñô ð ð
 �5à˜œÐ#Ð#Ø”]Ô)ˆFà˜Tœ\Ð)Ð)Ø×.Ò.¨vÑ6Ô6Ð6àŒL˜Ô ×$Ò$ UÑ+Ô+Ð+Ø"*¨HÐ!5ˆDŒK˜ÑÐàð 7 ð 7¨]ð 7Ø&.°Ð%6�”˜EÑ"Øˆtr/   c                óœ   — |j         j        j        }| j        |         \  }}|                     |¦  «         |                     |¦  «         d S rO   )r   r   Úbase_mapperrW   r”   Úupdate)rX   r&   Úpost_update_colsr   rV   Úcolss         r-   Úregister_post_updatez#UOWTransaction.register_post_updateS  sK   € Ø”Ô%Ô1ˆØÔ.¨vÔ6‰ˆ�Ø�
Š
�5ÑÔÐØ�ŠÐ$Ñ%Ô%Ð%Ð%Ð%r/   c                ó,  — t          | |j        ¦  «        }t          | |j        ¦  «        }| j                             ||f¦  «         |j        D ]}|                     | ¦  «         Œ|j        D ]&}|j        rŒ
|j	        }|                     | ¦  «         Œ'd S rO   )
ÚSaveUpdateAllr—   Ú	DeleteAllrU   r”   Ú_dependency_processorsÚper_property_preprocessorsÚrelationshipsÚviewonlyÚ_dependency_processor)rX   r   ÚsavesÚdeletesÚdepr+   s         r-   r“   z(UOWTransaction._per_mapper_flush_actionsY  s³   € Ý˜d FÔ$6Ñ7Ô7ˆÝ˜D &Ô"4Ñ5Ô5ˆØÔ×Ò˜u gÐ.Ñ/Ô/Ð/àÔ0ð 	1ð 	1ˆCØ×*Ò*¨4Ñ0Ô0Ð0Ð0àÔ(ð 	1ð 	1ˆDØŒ}ð ØØÔ,ˆCØ×*Ò*¨4Ñ0Ô0Ð0Ð0ð		1ð 	1r/   c                ó,   — t          j        d„ ¦  «        S )a  return a dynamic mapping of (Mapper, DependencyProcessor) to
        True or False, indicating if the DependencyProcessor operates
        on objects of that Mapper.

        The result is stored in the dictionary persistently once
        calculated.

        c                ór   — | d         j                              | d         j        ¦  «        | d         j        u S )Nr   r	   )r   Úgetr"   r+   )Útups    r-   rQ   z0UOWTransaction._mapper_for_dep.<locals>.<lambda>r  s+   € ˜˜Aœœ×)Ò)¨#¨a¬&¬*Ñ5Ô5¸¸Q¼¼ÐD€ r/   )r   ÚPopulateDictr\   s    r-   Ú_mapper_for_depzUOWTransaction._mapper_for_depg  s   € õ Ô ØDÐDñ
ô 
ð 	
r/   c                ó2   ‡‡— | j         Šˆˆfd„|D ¦   «         S )zmFilter the given list of InstanceStates to those relevant to the
        given DependencyProcessor.

        c                ó<   •— g | ]}‰|j         j        ‰f         ¯|‘ŒS rP   )r   r   )Ú.0Úsr¦   Úmapper_for_deps     €€r-   ú
<listcomp>z8UOWTransaction.filter_states_for_dep.<locals>.<listcomp>{  s-   ø€ ÐMÐMÐM�a ^°Q´YÔ5EÀsÐ4KÔ%LÐM�ÐMÐMÐMr/   )r¬   )rX   r¦   rV   r±   s    ` @r-   Úfilter_states_for_depz$UOWTransaction.filter_states_for_depu  s+   øø€ ð
 Ô-ˆØMÐMÐMÐMÐM˜6ÐMÑMÔMÐMr/   c              #  óz   K  — ||f}|j         j        D ]'}| j        |         D ]}| j        |         |k    r|V — ŒŒ(d S rO   )r—   Úself_and_descendantsrL   rV   )rX   r   ro   rˆ   Úchecktupr&   s         r-   Ústates_for_mapper_hierarchyz*UOWTransaction.states_for_mapper_hierarchy}  sf   è è € Ø˜hÐ'ˆØÔ(Ô=ð 	 ð 	 ˆFØœ fÔ-ð  ð  �Ø”;˜uÔ%¨Ò1Ð1Ø�K�K�Køð ð	 ð 	 r/   c                óÖ  ‡ — 	 d}t          ‰ j                             ¦   «         ¦  «        D ]}|                     ‰ ¦  «        rd}Œ|snŒFt	          j        ‰ j        t          ‰ j                             ¦   «         ¦  «        ¦  «        x‰ _        }|�r$ˆ fd„|D ¦   «         }t          ‰ j        ¦  «        D �] }d|v s/|d         j	        s"|d         j	        s| 
                    |¦  «        r‰ j                             |¦  «         ŒQ|d         |v rN‰ j                             |¦  «         ||d                  D ]$}‰ j                             ||d         f¦  «         Œ%Œ©|d         |v rM‰ j                             |¦  «         ||d                  D ]$}‰ j                             |d         |f¦  «         Œ%�Œd„ ‰ j                             ¦   «         D ¦   «                              |¦  «        S )z}Generate the full, unsorted collection of PostSortRecs as
        well as dependency pairs for this UOWTransaction.

        TFc                óV   •— i | ]%}|t          |                     ‰¦  «        ¦  «        “Œ&S rP   )rD   Úper_state_flush_actions)r¯   ÚrecrX   s     €r-   ú
<dictcomp>z4UOWTransaction._generate_actions.<locals>.<dictcomp>œ  s>   ø€ ð ð ð Ø@C�•S˜×4Ò4°TÑ:Ô:Ñ;Ô;ðð ð r/   Nr   r	   c                ó    — h | ]}|j         °	|’ŒS rP   ©Údisabled)r¯   Úas     r-   ú	<setcomp>z3UOWTransaction._generate_actions.<locals>.<setcomp>´  s/   € ð 
ð 
ð 
Ø¸Q¼Zð
Øð
ð 
ð 
r/   )ÚlistrS   ÚvaluesÚexecuter   Úfind_cyclesrU   rT   Úcyclesr¿   Ú
issupersetr9   r”   Ú
difference)rX   rl   ÚactionrÆ   ÚconvertÚedger¦   s   `      r-   Ú_generate_actionsz UOWTransaction._generate_actions„  sE  ø€ ð	ØˆCÝ˜tÔ3×:Ò:Ñ<Ô<Ñ=Ô=ð ð �Ø—>’> $Ñ'Ô'ð Ø�CøØð Øð	õ  +Ô6ØÔ�t DÔ$9×$@Ò$@Ñ$BÔ$BÑCÔCñ 
ô  
ð 	
ˆŒ�fð ñ 	>ðð ð ð ØGMðñ ô ˆGõ ˜TÔ.Ñ/Ô/ð >ñ >�à˜D�L�LØ˜A”wÔ'ð !à˜A”wÔ'ð !ð ×(Ò(¨Ñ.Ô.ð !ð
 Ô%×,Ò,¨TÑ2Ô2Ð2Ð2Ø˜!”W Ð&Ð&ØÔ%×,Ò,¨TÑ2Ô2Ð2Ø& t¨A¤wÔ/ð >ð >˜ØÔ)×-Ò-¨s°D¸´G¨nÑ=Ô=Ð=Ð=ð>à˜!”W Ð&Ð&ØÔ%×,Ò,¨TÑ2Ô2Ð2Ø& t¨A¤wÔ/ð >ð >˜ØÔ)×-Ò-¨t°A¬w¸¨nÑ=Ô=Ð=Ð=ùð
ð 
ØÔ,×3Ò3Ñ5Ô5ð
ñ 
ô 
ç
Š*�VÑ
Ô
ð	r/   ÚNonec                ó|  — |                       ¦   «         }t          |d„ ¬¦  «        }| j        r\t          j        | j        |¦  «        D ]?}t          |¦  «        }|r,|                     ¦   «         }|                     | |¦  «         |°,Œ@d S t          j	        | j        |¦  «        D ]}| 
                    | ¦  «         Œd S )Nc                ó   — | j         S rO   )Úsort_key)r'   s    r-   rQ   z(UOWTransaction.execute.<locals>.<lambda>½  s   € ˜Tœ]€ r/   )r"   )rÌ   ÚsortedrÆ   r   Úsort_as_subsetsrU   rD   ÚpopÚexecute_aggregateÚsortrÄ   )rX   rT   Úsubsetr?   Únr»   s         r-   rÄ   zUOWTransaction.execute¸  sñ   € Ø×1Ò1Ñ3Ô3Ðå!ØØ*Ð*ð
ñ 
ô 
Ðð Œ;ð 
	"Ý%Ô5ØÔ!Ð#3ñô ð 4ð 4�õ ˜6‘{”{�Øð 4ØŸš™
œ
�AØ×'Ò'¨¨dÑ3Ô3Ð3ð ð 4øð	4ð 4õ #Ô'¨Ô(9Ð;KÑLÔLð "ð "�Ø—’˜DÑ!Ô!Ð!Ð!ð"ð "r/   c                ó$  — | j         sdS t          | j         ¦  «        }d„ | j                              ¦   «         D ¦   «         }|                     |¦  «        }|r| j                             |¦  «         |r| j                             |¦  «         dS dS )zéMark processed objects as clean / deleted after a successful
        flush().

        This method is called within the flush() method after the
        execute() method has succeeded and the transaction has been committed.

        Nc                ó"   — h | ]\  }\  }}|¯
|’ŒS rP   rP   )r¯   r°   ro   rˆ   s       r-   rÁ   z8UOWTransaction.finalize_flush_changes.<locals>.<setcomp>ß  s6   € ð 
ð 
ð 
Ù+�1Ñ*�x Àhð
Øð
ð 
ð 
r/   )rV   rD   ÚitemsrÈ   r   rd   Ú_register_persistent)rX   rV   ÚisdelÚothers       r-   Úfinalize_flush_changesz%UOWTransaction.finalize_flush_changesÓ  s¯   € ð Œ{ð 	ØˆFå�T”[Ñ!Ô!ˆð
ð 
Ø/3¬{×/@Ò/@Ñ/BÔ/Bð
ñ 
ô 
ˆð ×!Ò! %Ñ(Ô(ˆØð 	6ØŒL×.Ò.¨uÑ5Ô5Ð5Øð 	5ØŒL×-Ò-¨eÑ4Ô4Ð4Ð4Ð4ð	5ð 	5r/   )r   r   )FFFNN)r&   r‡   ro   r[   rˆ   r[   r‰   r[   rŠ   r‹   r+   rŒ   r�   r[   )r�   rÍ   )Ú__name__Ú
__module__Ú__qualname__Ú__annotations__rY   Úpropertyr]   rf   ri   rm   rp   r   ÚPASSIVE_NO_INITIALIZEr   r‚   r†   r•   r›   r“   r   Úmemoized_propertyr¬   r³   r·   rÌ   rÄ   rÞ   rP   r/   r-   rI   rI   œ   sÁ  € € € € € € ØÐÐÑØ#Ð#Ð#Ñ#ØÐÐÑØAÐAÐAÑAØCÐCÐCÑCð+Kð +Kð +Kð +KðZ ð!ð !ñ „Xð!ð
ð 
ð 
ð>ð >ð >ðð ð ð.ð .ð .ð #-Ô"Bð3ð 3ð 3ð 3ðj9ð 9ð 9ðJð Jð Jð ØØ#Ø#'Ø)-ð ð  ð  ð  ð  ðD&ð &ð &ð1ð 1ð 1ð 
Ôð
ð 
ñ Ôð
ðNð Nð Nð ð  ð  ð2ð 2ð 2ðh"ð "ð "ð "ð65ð 5ð 5ð 5ð 5ð 5r/   rI   c                  ó   — e Zd ZdZd„ ZdS )ÚIterateMappersMixinrP   c                óŒ   ‡ ‡— ‰ j         r+t          ˆ ˆfd„‰ j        j        j        D ¦   «         ¦  «        S ‰ j        j        j        S )Nc              3  óD   •K  — | ]}‰j         |‰j        f         ¯|V — Œd S rO   )r¬   Údependency_processor)r¯   ÚmrX   Úuows     €€r-   ú	<genexpr>z/IterateMappersMixin._mappers.<locals>.<genexpr>î  sM   øè è € ð ð àØÔ&¨¨4Ô+DÐ'EÔFðØðð ð ð ð ð r/   )r…   Úiterrê   Úparentrµ   r   ©rX   rì   s   ``r-   Ú_mapperszIterateMappersMixin._mappersì  sf   øø€ ØŒ?ð 	IÝð ð ð ð ð àÔ2Ô9ÔNðñ ô ñ ô ð ð Ô,Ô3ÔHÐHr/   N)rß   rà   rá   Ú	__slots__rñ   rP   r/   r-   rç   rç   é  s-   € € € € € Ø€IðIð Ið Ið Ið Ir/   rç   c                  ó   — e Zd ZdZd„ Zd„ ZdS )r„   )rê   r…   Ú	processedÚsetup_flush_actionsc                óV   — || _         || _        t          ¦   «         | _        d| _        d S ©NF)rê   r…   rD   rô   rõ   )rX   rê   r…   s      r-   rY   zPreprocess.__init__ÿ  s*   € Ø$8ˆÔ!Ø$ˆŒÝ™œˆŒØ#(ˆÔ Ð Ð r/   c                óä  — t          ¦   «         }t          ¦   «         }|                      |¦  «        D ]i}|j        |                              | j        ¦  «        D ]A}|j        |         \  }}|s-|r|                     |¦  «         Œ,|                     |¦  «         ŒBŒj|r5| j                             ||¦  «         | j         	                    |¦  «         |r5| j         
                    ||¦  «         | j         	                    |¦  «         |s|rb| j        sY| j                             ||d¦  «        s| j                             ||d¦  «        r!| j                             |¦  «         d| _        dS dS ©NTF)rD   rñ   rL   rÈ   rô   rV   r”   rê   Úpresort_deletesr˜   Úpresort_savesrõ   Úprop_has_changesÚper_property_flush_actions)rX   rì   Údelete_statesÚsave_statesr   r&   ro   rˆ   s           r-   rÄ   zPreprocess.execute  s   € Ý™œˆÝ‘e”eˆà—m’m CÑ(Ô(ð 	/ð 	/ˆFØœ VÔ,×7Ò7¸¼ÑGÔGð /ð /�Ø%(¤Z°Ô%6Ñ"�˜(Øð /Øð /Ø%×)Ò)¨%Ñ0Ô0Ð0Ð0à#Ÿš¨Ñ.Ô.Ð.øð/ð ð 	1ØÔ%×5Ò5°c¸=ÑIÔIÐIØŒN×!Ò! -Ñ0Ô0Ð0Øð 	/ØÔ%×3Ò3°C¸ÑEÔEÐEØŒN×!Ò! +Ñ.Ô.Ð.àð 	˜Kð 	ØÔ+ð 	0ØÔ)×:Ò:Ø˜¨ñô ð	0ð Ô,×=Ò=Ø˜ eñô ð		0ð Ô)×DÒDÀSÑIÔIÐIØ+/�Ô(Ø�4à�5r/   N)rß   rà   rá   rò   rY   rÄ   rP   r/   r-   r„   r„   ÷  s9   € € € € € ð€Ið)ð )ð )ð!ð !ð !ð !ð !r/   r„   c                  ó   — e Zd ZdZd„ Zd„ ZdS )ÚPostSortRecr¾   c                ó”   — | f|z   }||j         v r|j         |         S t                               | ¦  «        x|j         |<   }d|_        |S r÷   )rT   ÚobjectÚ__new__r¿   )Úclsrì   Úargsr"   rl   s        r-   r  zPostSortRec.__new__,  sS   € Øˆf�t‰mˆØ�#Ô&Ð&Ð&ØÔ'¨Ô,Ð,å.4¯nªn¸SÑ.AÔ.AÐAˆCÔ  Ñ%¨Ø ˆCŒLØˆJr/   c                ó0   — |                       |¦  «         d S rO   )rÄ   )rX   rì   Úrecss      r-   rÔ   zPostSortRec.execute_aggregate5  s   € Ø�Š�SÑÔÐÐÐr/   N)rß   rà   rá   rò   r  rÔ   rP   r/   r-   r  r  )  s7   € € € € € Ø€Iðð ð ðð ð ð ð r/   r  c                  ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )Ú
ProcessAll)rê   ro   r…   rÐ   c                ó¬   — || _         d| j         j        |f| _        || _        || _        |j        |j        j                                      |¦  «         d S )Nr
  )rê   rÐ   ro   r…   rK   rï   r—   r”   )rX   rì   rê   ro   r…   s        r-   rY   zProcessAll.__init__<  se   € Ø$8ˆÔ!àØÔ%Ô.Øð
ˆŒð
 !ˆŒØ$ˆŒØŒÐ%Ô,Ô8Ô9×=Ò=Ø ñ	
ô 	
ð 	
ð 	
ð 	
r/   c                ó®   — |                       |¦  «        }| j        r| j                             ||¦  «         d S | j                             ||¦  «         d S rO   )Ú	_elementsro   rê   Úprocess_deletesÚprocess_saves)rX   rì   rV   s      r-   rÄ   zProcessAll.executeI  s\   € Ø—’ Ñ$Ô$ˆØŒ=ð 	AØÔ%×5Ò5°c¸6ÑBÔBÐBÐBÐBàÔ%×3Ò3°C¸Ñ@Ô@Ð@Ð@Ð@r/   c                ó    — t          g ¦  «        S rO   )rî   rð   s     r-   rº   z"ProcessAll.per_state_flush_actionsP  s   € õ
 �B‰xŒxˆr/   c                ó@   — | j         j        ›d| j        ›d| j        ›d�S )Nú(z, isdelete=ú))Ú	__class__rß   rê   ro   r\   s    r-   Ú__repr__zProcessAll.__repr__W  s/   € àŒNÔ#Ð#Ð#ØÔ%Ð%Ð%ØŒMˆMˆMð
ð 	
r/   c              #  óœ   K  — |                       |¦  «        D ]3}|j        |         D ]#}|j        |         \  }}|| j        k    r|s|V — Œ$Œ4d S rO   )rñ   rL   rV   ro   )rX   rì   r   r&   ro   rˆ   s         r-   r  zProcessAll._elements^  ss   è è € Ø—m’m CÑ(Ô(ð 	 ð 	 ˆFØœ VÔ,ð  ð  �Ø%(¤Z°Ô%6Ñ"�˜(Ø˜tœ}Ò,Ð,°XÐ,Ø�K�K�Køð ð	 ð 	 r/   N)	rß   rà   rá   rò   rY   rÄ   rº   r  r  rP   r/   r-   r
  r
  9  sg   € € € € € ØL€Ið
ð 
ð 
ðAð Að Aðð ð ð
ð 
ð 
ð ð  ð  ð  ð  r/   r
  c                  óJ   — e Zd ZdZd„ Z ej        d¦  «        d„ ¦   «         ZdS )ÚPostUpdateAll)r   ro   rÐ   c                ó@   — || _         || _        d|j        |f| _        d S )Nr  )r   ro   Ú	_sort_keyrÐ   )rX   rì   r   ro   s       r-   rY   zPostUpdateAll.__init__i  s%   € ØˆŒØ ˆŒØ(¨&Ô*:¸HÐEˆŒˆˆr/   úsqlalchemy.orm.persistencec                ó®   ‡ ‡— t           j        j        }‰j        ‰ j                 \  }}ˆ ˆfd„|D ¦   «         }|                     ‰ j        |‰|¦  «         d S )Nc                óL   •— g | ] }‰j         |         d          ‰j        k    ¯|‘Œ!S ©r   )rV   ro   )r¯   r°   rX   rì   s     €€r-   r²   z)PostUpdateAll.execute.<locals>.<listcomp>r  s0   ø€ ÐIÐIÐI˜ s¤z°!¤}°QÔ'7¸4¼=Ò'HÐ'H�!Ð'HÐ'HÐ'Hr/   )r   Ú	preloadedÚorm_persistencerW   r   Úpost_update)rX   rì   ÚpersistencerV   rš   s   ``   r-   rÄ   zPostUpdateAll.executen  s_   øø€ å”nÔ4ˆØÔ-¨d¬kÔ:‰ˆ�ØIÐIÐIÐIÐI˜VÐIÑIÔIˆà×Ò ¤¨V°S¸$Ñ?Ô?Ð?Ð?Ð?r/   N)rß   rà   rá   rò   rY   r   Úpreload_modulerÄ   rP   r/   r-   r  r  f  sZ   € € € € € Ø0€IðFð Fð Fð
 €TÔÐ5Ñ6Ô6ð@ð @ñ 7Ô6ð@ð @ð @r/   r  c                  óV   — e Zd ZdZd„ Z ej        d¦  «        d„ ¦   «         Zd„ Zd„ Z	dS )r�   ©r   rÐ   c                óF   — || _         d|j        f| _        ||j        u sJ ‚d S )Nr�   ©r   r  rÐ   r—   ©rX   rì   r   s      r-   rY   zSaveUpdateAll.__init__z  s2   € ØˆŒØ(¨&Ô*:Ð;ˆŒØ˜Ô+Ð+Ð+Ð+Ð+Ð+Ð+r/   r  c                ó�   — t           j        j                             | j        |                     | j        dd¦  «        |¦  «         d S r÷   )r   r  r   Úsave_objr   r·   rð   s     r-   rÄ   zSaveUpdateAll.execute  sH   € åŒÔ&×/Ò/ØŒKØ×+Ò+¨D¬K¸ÀÑFÔFØñ	
ô 	
ð 	
ð 	
ð 	
r/   c              #  ó‚  K  — t          |                     | j        dd¦  «        ¦  «        }| j        j        }t	          ||¦  «        }|D ]2}t          ||¦  «        }|j                             ||f¦  «         |V — Œ3|j        | j                 D ]/}| 	                    ||¦  «        }| 
                    ||d¦  «         Œ0d S r÷   )rÂ   r·   r   r—   rž   ÚSaveUpdateStaterU   r”   rK   r³   rº   )	rX   rì   rV   r—   Ú
delete_allr&   rÉ   r¦   Ústates_for_props	            r-   rº   z%SaveUpdateAll.per_state_flush_actions‡  sä   è è € ÝØ×+Ò+¨D¬K¸ÀÑFÔFñ
ô 
ˆð ”kÔ-ˆÝ˜s KÑ0Ô0ˆ
Øð 	ð 	ˆEõ % S¨%Ñ0Ô0ˆFØÔ× Ò  &¨*Ð!5Ñ6Ô6Ð6ØˆLˆLˆLˆLà”8˜DœKÔ(ð 	Eð 	EˆCØ!×7Ò7¸¸VÑDÔDˆOØ×'Ò'¨¨_¸eÑDÔDÐDÐDð	Eð 	Er/   c                ó0   — | j         j        ›d| j        ›d�S ©Nr  r  ©r  rß   r   r\   s    r-   r  zSaveUpdateAll.__repr__˜  ó   € Øœ>Ô2Ð2Ð2°D´K°K°KÐ@Ð@r/   N©
rß   rà   rá   rò   rY   r   r#  rÄ   rº   r  rP   r/   r-   r�   r�   w  sx   € € € € € Ø&€Ið,ð ,ð ,ð
 €TÔÐ5Ñ6Ô6ð
ð 
ñ 7Ô6ð
ðEð Eð Eð"Að Að Að Að Ar/   r�   c                  óV   — e Zd ZdZd„ Z ej        d¦  «        d„ ¦   «         Zd„ Zd„ Z	dS )rž   r%  c                óF   — || _         d|j        f| _        ||j        u sJ ‚d S )Nrž   r'  r(  s      r-   rY   zDeleteAll.__init__Ÿ  s2   € ØˆŒØ$ fÔ&6Ð7ˆŒØ˜Ô+Ð+Ð+Ð+Ð+Ð+Ð+r/   r  c                ó�   — t           j        j                             | j        |                     | j        dd¦  «        |¦  «         d S rù   )r   r  r   Ú
delete_objr   r·   rð   s     r-   rÄ   zDeleteAll.execute¤  sH   € åŒÔ&×1Ò1ØŒKØ×+Ò+¨D¬K¸¸uÑEÔEØñ	
ô 	
ð 	
ð 	
ð 	
r/   c              #  ó‚  K  — t          |                     | j        dd¦  «        ¦  «        }| j        j        }t	          ||¦  «        }|D ]2}t          ||¦  «        }|j                             ||f¦  «         |V — Œ3|j        | j                 D ]/}| 	                    ||¦  «        }| 
                    ||d¦  «         Œ0d S rù   )rÂ   r·   r   r—   r�   ÚDeleteStaterU   r”   rK   r³   rº   )	rX   rì   rV   r—   Úsave_allr&   rÉ   r¦   r.  s	            r-   rº   z!DeleteAll.per_state_flush_actions¬  sä   è è € ÝØ×+Ò+¨D¬K¸¸uÑEÔEñ
ô 
ˆð ”kÔ-ˆÝ   kÑ2Ô2ˆØð 	ð 	ˆEõ !  eÑ,Ô,ˆFØÔ× Ò  (¨FÐ!3Ñ4Ô4Ð4ØˆLˆLˆLˆLà”8˜DœKÔ(ð 	Dð 	DˆCØ!×7Ò7¸¸VÑDÔDˆOØ×'Ò'¨¨_¸dÑCÔCÐCÐCð	Dð 	Dr/   c                ó0   — | j         j        ›d| j        ›d�S r0  r1  r\   s    r-   r  zDeleteAll.__repr__½  r2  r/   Nr3  rP   r/   r-   rž   rž   œ  sx   € € € € € Ø&€Ið,ð ,ð ,ð
 €TÔÐ5Ñ6Ô6ð
ð 
ñ 7Ô6ð
ðDð Dð Dð"Að Að Að Að Ar/   rž   c                  ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚProcessState)rê   ro   r&   rÐ   c                óL   — || _         d|j        f| _        || _        || _        d S ©Nr=  )rê   rÐ   ro   r&   )rX   rì   rê   ro   r&   s        r-   rY   zProcessState.__init__Ä  s,   € Ø$8ˆÔ!Ø'Ð)=Ô)FÐGˆŒØ ˆŒØˆŒ
ˆ
ˆ
r/   c                ó
  ‡‡‡— | j         Š| j        Š| j        Šˆˆˆfd„|D ¦   «         }|                     |¦  «         | j        gd„ |D ¦   «         z   }‰r‰                     ||¦  «         d S ‰                     ||¦  «         d S )Nc                óJ   •— g | ]}|j         ‰u r|j        ‰u r|j        ‰u ¯|‘Œ S rP   )r  rê   ro   )r¯   ÚrÚcls_rê   ro   s     €€€r-   r²   z2ProcessState.execute_aggregate.<locals>.<listcomp>Î  sN   ø€ ð 
ð 
ð 
àØŒ{˜dÐ"Ð"ØÔ&Ð*>Ð>Ð>Ø”
˜hÐ&Ð&ð	 ð 'Ð&Ð&r/   c                ó   — g | ]	}|j         ‘Œ
S rP   ©r&   ©r¯   rB  s     r-   r²   z2ProcessState.execute_aggregate.<locals>.<listcomp>Ö  ó   € Ð ;Ð ;Ð ;¨Q ¤Ð ;Ð ;Ð ;r/   )r  rê   ro   Údifference_updater&   r  r  )rX   rì   r  Úour_recsrV   rC  rê   ro   s        @@@r-   rÔ   zProcessState.execute_aggregateÊ  sÁ   øøø€ ØŒ~ˆØ#Ô8ÐØ”=ˆð
ð 
ð 
ð 
ð 
ð 
àð
ñ 
ô 
ˆð 	×Ò˜xÑ(Ô(Ð(Ø”*�Ð ;Ð ;°(Ð ;Ñ ;Ô ;Ñ;ˆØð 	<Ø ×0Ò0°°fÑ=Ô=Ð=Ð=Ð=à ×.Ò.¨s°FÑ;Ô;Ð;Ð;Ð;r/   c                ót   — | j         j        ›d| j        ›dt          j        | j        ¦  «        ›d| j        ›d�S )Nr  z, z	, delete=r  )r  rß   rê   r‘   Ú	state_strr&   ro   r\   s    r-   r  zProcessState.__repr__Ü  sE   € àŒNÔ#Ð#Ð#ØÔ%Ð%Ð%ÝÔ˜tœzÑ*Ô*Ð*Ð*ØŒMˆMˆMð	
ð 	
r/   N)rß   rà   rá   rò   rY   rÔ   r  rP   r/   r-   r=  r=  Á  sF   € € € € € ØG€Iðð ð ð<ð <ð <ð$
ð 
ð 
ð 
ð 
r/   r=  c                  óP   — e Zd ZdZd„ Z ej        d¦  «        d„ ¦   «         Zd„ ZdS )r,  ©r&   r   rÐ   c                ó\   — || _         |j        j        | _        d| j        j        f| _        d S r?  ©r&   r   r—   r  rÐ   ©rX   rì   r&   s      r-   rY   zSaveUpdateState.__init__è  s*   € ØˆŒ
Ø”lÔ.ˆŒØ'¨¬Ô)>Ð?ˆŒˆˆr/   r  c                óä   ‡‡— t           j        j        }| j        Š| j        Šˆˆfd„|D ¦   «         }|                     |¦  «         |                     ‰| j        gd„ |D ¦   «         z   |¦  «         d S )Nc                ó8   •— g | ]}|j         ‰u ¯|j        ‰u ¯|‘ŒS rP   ©r  r   ©r¯   rB  rC  r   s     €€r-   r²   z5SaveUpdateState.execute_aggregate.<locals>.<listcomp>ò  ó8   ø€ ð 
ð 
ð 
Ø˜qœ{¨dÐ2Ð2°q´xÀ6Ð7IÐ7IˆAÐ7IÐ7IÐ7Ir/   c                ó   — g | ]	}|j         ‘Œ
S rP   rE  rF  s     r-   r²   z5SaveUpdateState.execute_aggregate.<locals>.<listcomp>÷  s   € Ð#>Ð#>Ð#>° A¤GÐ#>Ð#>Ð#>r/   )r   r  r   r  r   rH  r*  r&   )rX   rì   r  r"  rI  rC  r   s        @@r-   rÔ   z!SaveUpdateState.execute_aggregateí  s    øø€ å”nÔ4ˆØŒ~ˆØ”ˆð
ð 
ð 
ð 
ð 
Øð
ñ 
ô 
ˆð 	×Ò˜xÑ(Ô(Ð(Ø×ÒØ�T”Z�LÐ#>Ð#>°XÐ#>Ñ#>Ô#>Ñ>Àñ	
ô 	
ð 	
ð 	
ð 	
r/   c                óT   — | j         j        ›dt          j        | j        ¦  «        ›d�S r0  ©r  rß   r‘   rK  r&   r\   s    r-   r  zSaveUpdateState.__repr__ú  ó0   € àŒNÔ#Ð#Ð#ÝÔ˜tœzÑ*Ô*Ð*Ð*ð
ð 	
r/   N©	rß   rà   rá   rò   rY   r   r#  rÔ   r  rP   r/   r-   r,  r,  å  sd   € € € € € Ø-€Ið@ð @ð @ð
 €TÔÐ5Ñ6Ô6ð

ð 

ñ 7Ô6ð

ð
ð 
ð 
ð 
ð 
r/   r,  c                  óP   — e Zd ZdZd„ Z ej        d¦  «        d„ ¦   «         Zd„ ZdS )r9  rM  c                ó\   — || _         |j        j        | _        d| j        j        f| _        d S )Nr9  rO  rP  s      r-   rY   zDeleteState.__init__  s*   € ØˆŒ
Ø”lÔ.ˆŒØ&¨¬Ô(=Ð>ˆŒˆˆr/   r  c                ó  ‡‡‡— t           j        j        }| j        Š| j        Šˆˆfd„|D ¦   «         }|                     |¦  «         | j        gd„ |D ¦   «         z   }|                     ‰ˆfd„|D ¦   «         ‰¦  «         d S )Nc                ó8   •— g | ]}|j         ‰u ¯|j        ‰u ¯|‘ŒS rP   rS  rT  s     €€r-   r²   z1DeleteState.execute_aggregate.<locals>.<listcomp>  rU  r/   c                ó   — g | ]	}|j         ‘Œ
S rP   rE  rF  s     r-   r²   z1DeleteState.execute_aggregate.<locals>.<listcomp>  rG  r/   c                ó:   •— g | ]}‰j         |         d          ¯|‘ŒS r  rh   )r¯   r°   rì   s     €r-   r²   z1DeleteState.execute_aggregate.<locals>.<listcomp>  s)   ø€ Ð;Ð;Ð;˜1¨#¬*°Q¬-¸Ô*:Ð;�QÐ;Ð;Ð;r/   )r   r  r   r  r   rH  r&   r7  )rX   rì   r  r"  rI  rV   rC  r   s    `    @@r-   rÔ   zDeleteState.execute_aggregate	  s»   øøø€ å”nÔ4ˆØŒ~ˆØ”ˆð
ð 
ð 
ð 
ð 
Øð
ñ 
ô 
ˆð 	×Ò˜xÑ(Ô(Ð(Ø”*�Ð ;Ð ;°(Ð ;Ñ ;Ô ;Ñ;ˆØ×ÒØÐ;Ð;Ð;Ð; Ð;Ñ;Ô;¸Sñ	
ô 	
ð 	
ð 	
ð 	
r/   c                óT   — | j         j        ›dt          j        | j        ¦  «        ›d�S r0  rX  r\   s    r-   r  zDeleteState.__repr__  rY  r/   NrZ  rP   r/   r-   r9  r9    sa   € € € € € Ø-€Ið?ð ?ð ?ð
 €TÔÐ5Ñ6Ô6ð
ð 
ñ 7Ô6ð
ð
ð 
ð 
ð 
ð 
r/   r9  N)(Ú__doc__Ú
__future__r   Útypingr   r   r   r   r   Ú r   r   rb   r   r‘   r   r   Ú
dependencyr   Ú
interfacesr   r   r   r   r   r   r&   r   rG   rI   rç   r„   r  r
  r  r�   rž   r=  r,  r9  rP   r/   r-   ú<module>rh     st  ððð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð àð %Ø/Ð/Ð/Ð/Ð/Ð/Ø*Ð*Ð*Ð*Ð*Ð*ØÐÐÐÐÐØ Ð Ð Ð Ð Ð Ø+Ð+Ð+Ð+Ð+Ð+Ø$Ð$Ð$Ð$Ð$Ð$ðoð oð oðdJ5ð J5ð J5ð J5ð J5ñ J5ô J5ð J5ðZ
Ið Ið Ið Ið Iñ Iô Ið Ið/ð /ð /ð /ð /Ð$ñ /ô /ð /ðdð ð ð ð ñ ô ð ð * ð * ð * ð * ð * Ð$ kñ * ô * ð * ðZ@ð @ð @ð @ð @�Kñ @ô @ð @ð""Að "Að "Að "Að "A�Kñ "Aô "Að "AðJ"Að "Að "Að "Að "A�ñ "Aô "Að "AðJ!
ð !
ð !
ð !
ð !
�;ñ !
ô !
ð !
ðH
ð 
ð 
ð 
ð 
�kñ 
ô 
ð 
ð8
ð 
ð 
ð 
ð 
�+ñ 
ô 
ð 
ð 
ð 
r/   