o
    ÔèFhWI  ã                   @   sz  d dl mZ d dlmZmZ d dlmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZmZmZmZmZmZmZ d dlmZ d d	lmZ eeefZG d
d„ dƒZG dd„ deeƒZG dd„ deƒZ G dd„ dƒZ!G dd„ dƒZ"G dd„ de"eƒZ#G dd„ deƒZ$G dd„ deƒZ%G dd„ deƒZ&G dd„ deƒZ'G dd„ deƒZ(G d d!„ d!eƒZ)G d"d#„ d#eƒZ*G d$d%„ d%e"e ƒZ+G d&d'„ d'e"e ƒZ,G d(d)„ d)e ƒZ-G d*d+„ d+e"e ƒZ.G d,d-„ d-ƒZ/G d.d/„ d/e/e"eƒZ0G d0d1„ d1e ƒZ1G d2d3„ d3e ƒZ2G d4d5„ d5eƒZ3G d6d7„ d7eƒZ4G d8d9„ d9eƒZ5G d:d;„ d;eƒZ6G d<d=„ d=e"e ƒZ7ej8G d>d?„ d?eeƒƒZ9ej8G d@dA„ dAe"eeƒƒZ:G dBdC„ dCe/e"eƒZ;G dDdE„ dEeƒZ<G dFdG„ dGe ƒZ=G dHdI„ dIeƒZ>G dJdK„ dKeƒZ?G dLdM„ dMeƒZ@G dNdO„ dOe/e"eƒZAG dPdQ„ dQe"e ƒZBG dRdS„ dSeƒZCG dTdU„ dUe!e ƒZDG dVdW„ dWe!e ƒZEG dXdY„ dYe"e ƒZFG dZd[„ d[e ƒZG d\d]„ d]eDƒZGG d^d_„ d_e"e ƒZHd`S )aé    )ÚDecimal)ÚBaseSpatialFieldÚGeometryField)Ú	AreaFieldÚDistanceField)ÚGEOSGeometry)Ú
FieldError)ÚNotSupportedError)ÚBinaryFieldÚBooleanFieldÚ
FloatFieldÚFuncÚIntegerFieldÚ	TextFieldÚ	TransformÚValue)ÚCast)Úcached_propertyc                       s`   e Zd ZdZdZ‡ fdd„Zedd„ ƒZedd„ ƒZ	d‡ fd	d
„	Z
‡ fdd„Zddd„Z‡  ZS )ÚGeoFuncMixinN)r   c              	      s¾   t ƒ j|i |¤Ž | jD ]P}| j| }t|tƒsqz|j}W n ty)   d }Y nw |j}t|t	ƒr9|rDt|t
ƒsDtd| j|d f ƒ‚|jsM|sMtdƒ‚|s\t|t
|jd�d�| j|< qd S )Nz9%s function requires a geometric argument in position %d.é   z$SRID is required for all geometries.©Úsrid)Úoutput_field)ÚsuperÚ__init__Úgeom_param_posÚsource_expressionsÚ
isinstancer   r   r   Úvaluer   r   Ú	TypeErrorÚnamer   Ú
ValueError)ÚselfÚexpressionsÚextraÚposÚexprr   Úgeom©Ú	__class__© ú_/var/www/html/loop/nvenv/lib/python3.10/site-packages/django/contrib/gis/db/models/functions.pyr      s<   



ÿÿþýÿÿ
ÿ€ëzGeoFuncMixin.__init__c                 C   s   | j jS ©N)r)   Ú__name__©r"   r*   r*   r+   r    9   s   zGeoFuncMixin.namec                 C   s   | j | jd  jS ©Nr   )r   r   Úfieldr.   r*   r*   r+   Ú	geo_field=   s   zGeoFuncMixin.geo_fieldc                    s:   | j d u r|d u r|j | j¡}tƒ j||fd|i|¤ŽS )NÚfunction)r2   ÚopsÚspatial_function_namer    r   Úas_sql)r"   ÚcompilerÚ
connectionr2   Úextra_contextr(   r*   r+   r5   A   s   zGeoFuncMixin.as_sqlc           
         s¶   t ƒ j|i |¤Ž}| js|S | ¡ }| jD ]}|| }t|tƒs/td| j|d t|ƒj	f ƒ‚q|j
j}| jdd … D ]}|j| }|jj}	|	|krXt||ƒj|i |¤Ž|j|< q;|S )Nz<%s function requires a GeometryField in position %s, got %s.r   )r   Úresolve_expressionr   Úget_source_fieldsr   r   r   r    Útyper-   r1   r   r   r   r   )
r"   ÚargsÚkwargsÚresÚsource_fieldsr%   r0   Ú	base_sridr&   Ú	expr_sridr(   r*   r+   r9   F   s<   

ýÿÿÿ

ÿþþ€zGeoFuncMixin.resolve_expressionÚ c                 C   s,   t |dƒs|rt||ƒstd||f ƒ‚|S )Nr9   z2The %s parameter has the wrong type: should be %s.)Úhasattrr   r   )r"   r   Ú
param_nameÚcheck_typesr*   r*   r+   Ú_handle_paramd   s   
ÿÿzGeoFuncMixin._handle_paramr,   ©rB   N)r-   Ú
__module__Ú__qualname__r2   r   r   Úpropertyr    r   r1   r5   r9   rF   Ú__classcell__r*   r*   r(   r+   r      s    

r   c                   @   ó   e Zd ZdS )ÚGeoFuncN©r-   rH   rI   r*   r*   r*   r+   rM   n   ó    rM   c                   @   s   e Zd Zedd„ ƒZdS )ÚGeomOutputGeoFuncc                 C   s   t | jjd�S )Nr   )r   r1   r   r.   r*   r*   r+   r   s   s   zGeomOutputGeoFunc.output_fieldN)r-   rH   rI   r   r   r*   r*   r*   r+   rP   r   s    rP   c                   @   ó   e Zd ZdZdd„ ZdS )ÚSQLiteDecimalToFloatMixinz›
    By default, Decimal values are converted to str by the SQLite backend, which
    is not acceptable by the GIS functions expecting numeric values.
    c                 K   s4   |   ¡ }| dd„ | ¡ D ƒ¡ |j||fi |¤ŽS )Nc                 S   s4   g | ]}t |d ƒrt|jtƒrtt|jƒƒn|‘qS )r   )rC   r   r   r   r   Úfloat)Ú.0r&   r*   r*   r+   Ú
<listcomp>�   s    ýÿ
ÿüz7SQLiteDecimalToFloatMixin.as_sqlite.<locals>.<listcomp>)ÚcopyÚset_source_expressionsÚget_source_expressionsr5   )r"   r6   r7   r8   rV   r*   r*   r+   Ú	as_sqlite~   s   úÿ
z#SQLiteDecimalToFloatMixin.as_sqliteN)r-   rH   rI   Ú__doc__rY   r*   r*   r*   r+   rR   x   s    rR   c                   @   rQ   )ÚOracleToleranceMixingš™™™™™©?c                 K   sP   t |  | j d| j¡dt¡ƒ}|  ¡ }| g |  ¡ ¢|‘¡ |j	||fi |¤ŽS )NÚ	tolerance)
r   rF   r$   Úgetr\   ÚNUMERIC_TYPESrV   rW   rX   r5   )r"   r6   r7   r8   r\   Úcloner*   r*   r+   Ú	as_oracle�   s   ýÿzOracleToleranceMixin.as_oracleN)r-   rH   rI   r\   r`   r*   r*   r*   r+   r[   �   s    r[   c                       s4   e Zd ZdZedd„ ƒZ‡ fdd„Zdd„ Z‡  ZS )ÚArear   c                 C   ó
   t | jƒS r,   )r   r1   r.   r*   r*   r+   r       ó   
zArea.output_fieldc                    s2   |j js| j |¡rtdƒ‚tƒ j||fi |¤ŽS )Nz2Area on geodetic coordinate systems not supported.)ÚfeaturesÚsupports_area_geodeticr1   Úgeodeticr	   r   r5   ©r"   r6   r7   r8   r(   r*   r+   r5   ¤   s   ÿÿzArea.as_sqlc                 K   s0   | j  |¡rd|d< d|d< | j||fi |¤ŽS )Nz+%(function)s(%(expressions)s, %(spheroid)d)ÚtemplateTÚspheroid)r1   rf   r5   rg   r*   r*   r+   rY   ­   s   zArea.as_sqlite)	r-   rH   rI   Úarityr   r   r5   rY   rK   r*   r*   r(   r+   ra   �   s    
	ra   c                   @   ó   e Zd Zeƒ ZdZdZdS )ÚAzimuthé   ©r   r   N©r-   rH   rI   r   r   rj   r   r*   r*   r*   r+   rl   ´   ó    rl   c                       s0   e Zd Zeƒ Zd‡ fdd„	Z‡ fdd„Z‡  ZS )Ú	AsGeoJSONFé   c                    sf   |g}|d ur|  |  |dt¡¡ d}|r|rd}n	|rd}n|r#d}|  |¡ tƒ j|i |¤Ž d S )NÚ	precisionr   é   r   rm   ©ÚappendrF   Úintr   r   )r"   Ú
expressionÚbboxÚcrsrs   r$   r#   Úoptionsr(   r*   r+   r   ½   s   
zAsGeoJSON.__init__c                    s<   |   ¡ }|  ¡ }| |d d… ¡ tt|ƒj||fi |¤ŽS )Nr   )rX   rV   rW   r   rq   r5   )r"   r6   r7   r8   r   r_   r(   r*   r+   r`   Ë   s   zAsGeoJSON.as_oracle)FFrr   )r-   rH   rI   r   r   r   r`   rK   r*   r*   r(   r+   rq   º   s    rq   c                       s4   e Zd ZdZeƒ Zd‡ fdd„	Z‡ fdd„Z‡  ZS )	ÚAsGML)r   rm   rr   c                    s:   ||g}|d ur|  |  |dt¡¡ tƒ j|i |¤Ž d S ©Nrs   ru   )r"   rx   Úversionrs   r$   r#   r(   r*   r+   r   Ö   s   zAsGML.__init__c                    sX   |   ¡ }|d }|  ¡ }| |d g¡ |jdkrdnd|d< tt|ƒj||fi |¤ŽS )Nr   r   rt   zSDO_UTIL.TO_GML311GEOMETRYzSDO_UTIL.TO_GMLGEOMETRYr2   )rX   rV   rW   r   r   r|   r5   )r"   r6   r7   r8   r   r~   r_   r(   r*   r+   r`   Ü   s   
ÿýzAsGML.as_oracle)rm   rr   )	r-   rH   rI   r   r   r   r   r`   rK   r*   r*   r(   r+   r|   Ò   s
    r|   c                       s$   e Zd Zeƒ Zd‡ fdd„	Z‡  ZS )ÚAsKMLrr   c                    ó8   |g}|d ur|  |  |dt¡¡ tƒ j|i |¤Ž d S r}   ru   ©r"   rx   rs   r$   r#   r(   r*   r+   r   ì   ó   zAsKML.__init__)rr   ©r-   rH   rI   r   r   r   rK   r*   r*   r(   r+   r   é   ó    r   c                       s$   e Zd Zeƒ Zd‡ fdd„	Z‡  ZS )ÚAsSVGFrr   c                    s@   t |dƒr|nt|ƒ}|||  |dt¡g}tƒ j|i |¤Ž d S )Nr9   rs   )rC   rw   rF   r   r   )r"   rx   Úrelativers   r$   r#   r(   r*   r+   r   ö   s   ÿýzAsSVG.__init__)Frr   rƒ   r*   r*   r(   r+   r…   ó   r„   r…   c                   @   ó   e Zd Zeƒ ZdZdS )ÚAsWKBr   N)r-   rH   rI   r
   r   rj   r*   r*   r*   r+   rˆ     ó    rˆ   c                   @   r‡   )ÚAsWKTr   N)r-   rH   rI   r   r   rj   r*   r*   r*   r+   rŠ     r‰   rŠ   c                       s*   e Zd Zd‡ fdd„	Z‡ fdd„Z‡  ZS )ÚBoundingCircleé0   c                    s   t ƒ j||fi |¤Ž d S r,   )r   r   )r"   rx   Únum_segr$   r(   r*   r+   r     s   zBoundingCircle.__init__c                    s6   |   ¡ }| |  ¡ d g¡ tt|ƒj||fi |¤ŽS r/   )rV   rW   rX   r   r‹   r`   ©r"   r6   r7   r8   r_   r(   r*   r+   r`     s   
ÿÿzBoundingCircle.as_oracle)rŒ   )r-   rH   rI   r   r`   rK   r*   r*   r(   r+   r‹     s    r‹   c                   @   ó   e Zd ZdZdS )ÚCentroidr   N©r-   rH   rI   rj   r*   r*   r*   r+   r�     ó    r�   c                   @   ó   e Zd ZdZdZdS )ÚClosestPointrm   rn   N©r-   rH   rI   rj   r   r*   r*   r*   r+   r”     ó    r”   c                   @   r“   )Ú
Differencerm   rn   Nr•   r*   r*   r*   r+   r—   !  r–   r—   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚDistanceResultMixinc                 C   rb   r,   )r   r1   r.   r*   r*   r+   r   '  rc   z DistanceResultMixin.output_fieldc                 C   s   | j jo	| j jdkS )Niæ  )r1   Ú	geographyr   r.   r*   r*   r+   Úsource_is_geography+  s   z'DistanceResultMixin.source_is_geographyN)r-   rH   rI   r   r   rš   r*   r*   r*   r+   r˜   &  s    
r˜   c                       s>   e Zd ZdZdZd	‡ fdd„	Z‡ fdd„Z‡ fdd„Z‡  ZS )
ÚDistancern   Nc                    s6   ||g}|d ur|   |dt¡| _tƒ j|i |¤Ž d S )Nri   )rF   Úboolri   r   r   )r"   Úexpr1Úexpr2ri   r$   r#   r(   r*   r+   r   3  s   zDistance.__init__c                    sÀ   |   ¡ }d }|jd }|  ¡ }|jj|kr-t|tƒr||j_nt|t|jj	|d�ƒ|jd< |sQ| j
 |¡rQ| jrK|j d¡}|j t| j
 |¡ƒ¡ n|j d¡}tt|ƒj||fd|i|¤ŽS )Nr   )r   r™   ÚDistanceSpheroidÚDistanceSpherer2   )rV   r   rš   r   r™   r   r   r   r   r   r1   rf   ri   r3   r4   rv   r   r›   r5   )r"   r6   r7   r8   r_   r2   rž   r™   r(   r*   r+   Úas_postgresql9  s2   



þÿ
ÿÿÿzDistance.as_postgresqlc                    s<   | j  |¡rd|d< tt| jƒƒ|d< tƒ j||fi |¤ŽS )Nz8COALESCE(%(function)s(%(expressions)s, %(spheroid)s), 0)rh   ri   )r1   rf   rw   rœ   ri   r   r5   rg   r(   r*   r+   rY   X  s
   ÿzDistance.as_sqliter,   )	r-   rH   rI   r   ri   r   r¡   rY   rK   r*   r*   r(   r+   r›   /  s    r›   c                   @   r�   )ÚEnveloper   Nr‘   r*   r*   r*   r+   r¢   b  r’   r¢   c                   @   r�   )ÚForcePolygonCWr   Nr‘   r*   r*   r*   r+   r£   f  r’   r£   c                   @   ó   e Zd Zedd�ZdZdZdS )ÚFromWKBr   r   r   r*   N©r-   rH   rI   r   r   rj   r   r*   r*   r*   r+   r¥   j  ó    
r¥   c                   @   r¤   )ÚFromWKTr   r   r   r*   Nr¦   r*   r*   r*   r+   r¨   p  r§   r¨   c                       s,   e Zd Zeƒ Zd‡ fdd„	Zdd„ Z‡  ZS )ÚGeoHashNc                    r€   r}   ru   r�   r(   r*   r+   r   y  r‚   zGeoHash.__init__c                 K   s:   |   ¡ }t|jƒdk r|j tdƒ¡ |j||fi |¤ŽS )Nrm   éd   )rV   Úlenr   rv   r   r5   rŽ   r*   r*   r+   Úas_mysql  s   zGeoHash.as_mysqlr,   )r-   rH   rI   r   r   r   r¬   rK   r*   r*   r(   r+   r©   v  s    r©   c                   @   s"   e Zd Zeƒ ZdZdZdZdZdS )ÚGeometryDistancerm   rB   z <-> rn   N)	r-   rH   rI   r   r   rj   r2   Ú
arg_joinerr   r*   r*   r*   r+   r­   ‡  s    r­   c                   @   r“   )ÚIntersectionrm   rn   Nr•   r*   r*   r*   r+   r¯   �  r–   r¯   c                   @   s   e Zd ZdZeƒ ZdS )ÚIsEmptyÚisemptyN)r-   rH   rI   Úlookup_namer   r   r*   r*   r*   r+   r°   ”  s    
r°   c                       s&   e Zd ZdZeƒ Z‡ fdd„Z‡  ZS )ÚIsValidÚisvalidc                    s&   t ƒ j||fi |¤Ž\}}d| |fS )Nz%CASE %s WHEN 'TRUE' THEN 1 ELSE 0 END)r   r`   )r"   r6   r7   r8   ÚsqlÚparamsr(   r*   r+   r`   Ÿ  s   zIsValid.as_oracle)r-   rH   rI   r²   r   r   r`   rK   r*   r*   r(   r+   r³   š  s    r³   c                       sB   e Zd Zd
‡ fdd„	Z‡ fdd„Z‡ fdd„Z‡ fdd	„Z‡  ZS )ÚLengthTc                    s   || _ tƒ j|fi |¤Ž d S r,   )ri   r   r   )r"   r�   ri   r$   r(   r*   r+   r   ¥  s   zLength.__init__c                    s2   | j  |¡r|jjstdƒ‚tƒ j||fi |¤ŽS )Nz6This backend doesn't support Length on geodetic fields)r1   rf   rd   Úsupports_length_geodeticr	   r   r5   rg   r(   r*   r+   r5   ©  s   
ÿþÿzLength.as_sqlc                    sž   |   ¡ }d }|  ¡ r|j t| jƒ¡ n,| j |¡r-|j 	d¡}|j t| j |¡ƒ¡ nt
dd„ |  ¡ D ƒƒ}|dkr@|jj}tt|ƒj||fd|i|¤ŽS )NÚLengthSpheroidc                 s   s   � | ]}|r|j V  qd S r,   ©Údim©rT   Úfr*   r*   r+   Ú	<genexpr>½  s   € z'Length.as_postgresql.<locals>.<genexpr>rm   r2   )rV   rš   r   rv   r   ri   r1   rf   r3   r4   Úminr:   Úlength3dr   r·   r5   )r"   r6   r7   r8   r_   r2   r»   r(   r*   r+   r¡   ³  s"   
ÿÿÿzLength.as_postgresqlc                    s8   d }| j  |¡r| jrdnd}tƒ j||fd|i|¤ŽS )NÚGeodesicLengthÚGreatCircleLengthr2   )r1   rf   ri   r   r5   )r"   r6   r7   r8   r2   r(   r*   r+   rY   Ä  s   zLength.as_sqlite)T)r-   rH   rI   r   r5   r¡   rY   rK   r*   r*   r(   r+   r·   ¤  s
    
r·   c                   @   rk   )ÚLineLocatePointrm   rn   Nro   r*   r*   r*   r+   rÃ   Ë  rp   rÃ   c                   @   rL   )Ú	MakeValidNrN   r*   r*   r*   r+   rÄ   Ñ  rO   rÄ   c                   @   r‡   )ÚMemSizer   N©r-   rH   rI   r   r   rj   r*   r*   r*   r+   rÅ   Õ  r‰   rÅ   c                   @   r‡   )ÚNumGeometriesr   NrÆ   r*   r*   r*   r+   rÇ   Ú  r‰   rÇ   c                   @   r‡   )Ú	NumPointsr   NrÆ   r*   r*   r*   r+   rÈ   ß  r‰   rÈ   c                       s,   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡  ZS )Ú	Perimeterr   c                    s`   d }| j  |¡r|  ¡ stdƒ‚tdd„ |  ¡ D ƒƒ}|dkr#|jj}tƒ j	||fd|i|¤ŽS )Nz<ST_Perimeter cannot use a non-projected non-geography field.c                 s   s   � | ]}|j V  qd S r,   rº   r¼   r*   r*   r+   r¾   í  s   € z*Perimeter.as_postgresql.<locals>.<genexpr>rm   r2   )
r1   rf   rš   r	   r¿   r:   r3   Úperimeter3dr   r5   )r"   r6   r7   r8   r2   r»   r(   r*   r+   r¡   ç  s   ÿzPerimeter.as_postgresqlc                    s*   | j  |¡r
tdƒ‚tƒ j||fi |¤ŽS )Nz+Perimeter cannot use a non-projected field.)r1   rf   r	   r   r5   rg   r(   r*   r+   rY   ò  s   zPerimeter.as_sqlite)r-   rH   rI   rj   r¡   rY   rK   r*   r*   r(   r+   rÉ   ä  s    rÉ   c                   @   r�   )ÚPointOnSurfacer   Nr‘   r*   r*   r*   r+   rË   ø  r’   rË   c                   @   r�   )ÚReverser   Nr‘   r*   r*   r*   r+   rÌ   ü  r’   rÌ   c                       s   e Zd Zd‡ fdd„	Z‡  ZS )ÚScaleç        c                    sP   ||   |dt¡|   |dt¡g}|dkr| |   |dt¡¡ tƒ j|i |¤Ž d S )NÚxÚyrÎ   Úz)rF   r^   rv   r   r   )r"   rx   rÏ   rÐ   rÑ   r$   r#   r(   r*   r+   r     s   ýzScale.__init__)rÎ   ©r-   rH   rI   r   rK   r*   r*   r(   r+   rÍ      s    rÍ   c                       ó   e Zd Z‡ fdd„Z‡  ZS )Ú
SnapToGridc                    s”   t |ƒ}|g}|dv r| ‡ fdd„|D ƒ¡ n'|dkr;|g ‡ fdd„|dd … D ƒ¢‡ fdd„|d	d… D ƒ¢7 }ntd
ƒ‚tƒ j|i |¤Ž d S )N)r   rm   c                    s   g | ]	}ˆ   |d t¡‘qS )rB   ©rF   r^   ©rT   Úargr.   r*   r+   rU     s    z'SnapToGrid.__init__.<locals>.<listcomp>é   c                 3   ó   � | ]
}ˆ   |d t¡V  qdS rG   rÕ   rÖ   r.   r*   r+   r¾     ó   € z&SnapToGrid.__init__.<locals>.<genexpr>rm   c                 3   rÙ   rG   rÕ   rÖ   r.   r*   r+   r¾     rÚ   r   z2Must provide 1, 2, or 4 arguments to `SnapToGrid`.)r«   Úextendr!   r   r   )r"   rx   r<   r$   Únargsr#   r(   r.   r+   r     s   ÿÿþzSnapToGrid.__init__rÒ   r*   r*   r(   r+   rÔ     ó    rÔ   c                   @   r“   )ÚSymDifferencerm   rn   Nr•   r*   r*   r*   r+   rÞ     r–   rÞ   c                       rÓ   )r   c                    s>   ||   |dt¡g}d|vrt|d�|d< tƒ j|i |¤Ž d S )Nr   r   r   )rF   rw   r   r   r   )r"   rx   r   r$   r#   r(   r*   r+   r   %  s   þzTransform.__init__rÒ   r*   r*   r(   r+   r   $  rÝ   r   c                       rÓ   )Ú	Translatec                    s@   |   ¡ }t| jƒdk r|j tdƒ¡ tt|ƒj||fi |¤ŽS )NrØ   r   )rV   r«   r   rv   r   r   rß   rY   rŽ   r(   r*   r+   rY   0  s   zTranslate.as_sqlite)r-   rH   rI   rY   rK   r*   r*   r(   r+   rß   /  rÝ   rß   c                   @   r“   )ÚUnionrm   rn   Nr•   r*   r*   r*   r+   rà   8  r–   rà   N)IÚdecimalr   Ú#django.contrib.gis.db.models.fieldsr   r   Ú django.contrib.gis.db.models.sqlr   r   Údjango.contrib.gis.geosr   Údjango.core.exceptionsr   Ú	django.dbr	   Údjango.db.modelsr
   r   r   r   r   r   r   r   Údjango.db.models.functionsr   Údjango.utils.functionalr   rw   rS   r^   r   rM   rP   rR   r[   ra   rl   rq   r|   r   r…   rˆ   rŠ   r‹   r�   r”   r—   r˜   r›   r¢   r£   r¥   r¨   r©   r­   r¯   Úregister_lookupr°   r³   r·   rÃ   rÄ   rÅ   rÇ   rÈ   rÉ   rË   rÌ   rÍ   rÔ   rÞ   rß   rà   r*   r*   r*   r+   Ú<module>   sn    (

V
	3	'	