§
    ¤”jc  ã                   ó  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZ d dlmZ d dlmZmZ d dl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 d dlm Z  d dl!m"Z" d dl#m$Z$m%Z% d dl&m'Z'  e'dej(        ¦  «        Z) G d„ de ¦  «        Z* G d„ de+¦  «        Z, G d„ d¦  «        Z- G d„ de-¦  «        Z. G d„ de-¦  «        Z/ G d„ de/¦  «        Z0 G d„ de.¦  «        Z1 G d„ d e1¦  «        Z2 G d!„ d"e1¦  «        Z3 G d#„ d$e.¦  «        Z4 G d%„ d&e.¦  «        Z5 G d'„ d(e.¦  «        Z6 G d)„ d*e.¦  «        Z7 G d+„ d,e.¦  «        Z8 G d-„ d.e.¦  «        Z9 G d/„ d0e.¦  «        Z: G d1„ d2e;¦  «        Z< G d3„ d4e.¦  «        Z=dS )5é    N)ÚHeader)Ú	responses)Úurlparse)Úasync_to_syncÚsync_to_async)Úsettings)ÚsignalsÚsigning)ÚDisallowedRedirect)ÚDjangoJSONEncoder)ÚSimpleCookie)Útimezone)ÚCaseInsensitiveMapping)Ú
iri_to_uri)Úcontent_disposition_headerÚ	http_date)Ú_lazy_re_compilez ;\s*charset=(?P<charset>[^\s;]+)c                   ó6   — e Zd Zd„ Zd	d„Zd„ Zd„ Zd
d„Zd„ ZdS )ÚResponseHeadersc                 ó\   — i | _         |r |                      |¦  «        D ]\  }}|| |<   ŒdS dS )zm
        Populate the initial data using __setitem__ to ensure values are
        correctly encoded.
        N)Ú_storeÚ_unpack_items)ÚselfÚdataÚheaderÚvalues       úc/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/django/http/response.pyÚ__init__zResponseHeaders.__init__!   sS   € ð
 ˆŒØð 	%Ø!%×!3Ò!3°DÑ!9Ô!9ð %ð %‘�˜Ø$��V‘�ð	%ð 	%ð%ð %ó    Fc                 óˆ  — 	 t          |t          ¦  «        r|                     |¦  «         nOt          |t          ¦  «        r|                     |¦  «        }n$t          |¦  «        }|                     |¦  «         d|v sd|v rt          d|›d�¦  «        ‚nª# t          $ r�}t          |t          ¦  «        rd|v s!d|v st          |t          ¦  «        rd|v sd|v rt          d|›d�¦  «        |‚|r/t          |dt          j	        ¬¦  «                             ¦   «         }n|xj
        d	|z  z  c_
        ‚ Y d
}~nd
}~ww xY w|S )zé
        Convert headers key/value to ascii/latin-1 native strings.
        `charset` must be 'ascii' or 'latin-1'. If `mime_encode` is True and
        `value` can't be represented in the given charset, apply MIME-encoding.
        ú
úz*Header values can't contain newlines (got ú)ó   
ó   zutf-8)Ú
maxlinelenz,, HTTP response headers must be in %s formatN)Ú
isinstanceÚstrÚencodeÚbytesÚdecodeÚBadHeaderErrorÚUnicodeErrorr   ÚsysÚmaxsizeÚreason)r   r   ÚcharsetÚmime_encodeÚes        r   Ú_convert_to_charsetz#ResponseHeaders._convert_to_charset+   sŽ  € ð	Ý˜%¥Ñ%Ô%ð 	&à—’˜WÑ%Ô%Ð%Ð%Ý˜E¥5Ñ)Ô)ð &àŸš WÑ-Ô-��å˜E™
œ
�à—’˜WÑ%Ô%Ð%Ø�uˆ}ˆ} ¨  Ý$ØKÀÐKÐKÐKñô ð ð !.øõ ð 	ð 	ð 	õ
 ˜5¥%Ñ(Ô(ð ¨e°u¨n¨nÀÈÀÀÝ˜5¥#Ñ&Ô&ð AOØ,0°E¨M¨M¸TÀU¸]¸]å$ØKÀÐKÐKÐKñô àðð ð Ý˜u g½#¼+ÐFÑFÔF×MÒMÑOÔO��à�”ÐJÈWÑTÑT�”Øð ����øøøøð	øøøð  ˆs   ‚BB Â
D?Â"BD:Ä:D?c                 ó0   — |                       |¦  «         d S ©N)Úpop)r   Úkeys     r   Ú__delitem__zResponseHeaders.__delitem__R   s   € Ø�Š�‰Œˆˆˆr   c                 óž   — |                       |d¦  «        }|                       |dd¬¦  «        }||f| j        |                     ¦   «         <   d S )NÚasciiúlatin-1T)r2   )r4   r   Úlower©r   r8   r   s      r   Ú__setitem__zResponseHeaders.__setitem__U   sO   € Ø×&Ò& s¨GÑ4Ô4ˆØ×(Ò(¨°	ÀtÐ(ÑLÔLˆØ$'¨ <ˆŒ�C—I’I‘K”KÑ Ð Ð r   Nc                 ó\   — | j                              |                     ¦   «         |¦  «        S r6   )r   r7   r=   )r   r8   Údefaults      r   r7   zResponseHeaders.popZ   s    € ØŒ{�Š˜sŸyšy™{œ{¨GÑ4Ô4Ð4r   c                 ó   — || vr|| |<   d S d S r6   © r>   s      r   Ú
setdefaultzResponseHeaders.setdefault]   s   € Ø�dˆ?ˆ?ØˆD�‰IˆIˆIð ˆ?r   )Fr6   )	Ú__name__Ú
__module__Ú__qualname__r   r4   r9   r?   r7   rD   rC   r   r   r   r       sy   € € € € € ð%ð %ð %ð%ð %ð %ð %ðNð ð ð0ð 0ð 0ð
5ð 5ð 5ð 5ðð ð ð ð r   r   c                   ó   — e Zd ZdS )r,   N©rE   rF   rG   rC   r   r   r,   r,   b   ó   € € € € € Ø€Dr   r,   c                   ó:  — e Zd ZdZdZ	 d!d„Zed„ ¦   «         Zej        d„ ¦   «         Zed„ ¦   «         Z	e	j        d„ ¦   «         Z	d	„ Z
e
Zed
„ ¦   «         Zd„ Zd„ Zd„ Zd„ ZeZd„ Zd"d„Z	 	 	 	 	 	 	 	 d#d„Zd„ Zd$d„Zd%d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd „ Z dS )&ÚHttpResponseBasezÖ
    An HTTP response base class with dictionary-accessed headers.

    This class doesn't handle content. It should not be used directly.
    Use the HttpResponse and StreamingHttpResponse subclasses instead.
    éÈ   Nc                 óº  — t          |¦  «        | _        || _        d| j        vr|€
d| j        › �}|| j        d<   n|rt	          d¦  «        ‚g | _        d | _        t          ¦   «         | _        d| _	        |�]	 t          |¦  «        | _        n$# t          t          f$ r t          d¦  «        ‚w xY wd| j        cxk    rdk    sn t	          d¦  «        ‚|| _        d S )	NúContent-Typeztext/html; charset=zX'headers' must not contain 'Content-Type' when the 'content_type' parameter is provided.Fz$HTTP status code must be an integer.éd   iW  z4HTTP status code must be an integer from 100 to 599.)r   ÚheadersÚ_charsetr1   Ú
ValueErrorÚ_resource_closersÚ_handler_classr   ÚcookiesÚclosedÚintÚstatus_codeÚ	TypeErrorÚ_reason_phrase)r   Úcontent_typeÚstatusr0   r1   rQ   s         r   r   zHttpResponseBase.__init__p   s!  € õ ' wÑ/Ô/ˆŒØˆŒØ ¤Ð-Ð-ØÐ#ØC°T´\ÐCÐC�Ø+7ˆDŒL˜Ñ(Ð(Øð 	Ýð8ñô ð ð "$ˆÔð #ˆÔÝ#‘~”~ˆŒØˆŒØÐðHÝ#& v¡;¤;�Ô Ð øÝ¥	Ð*ð Hð Hð HÝÐ FÑGÔGÐGðHøøøð ˜$Ô*Ð1Ð1Ò1Ð1¨cÒ1Ð1Ð1Ð1Ý Ð!WÑXÔXÐXØ$ˆÔÐÐs   Á8B Â!B.c                 óR   — | j         �| j         S t          j        | j        d¦  «        S )NzUnknown Status Code)r[   r   ÚgetrY   ©r   s    r   Úreason_phrasezHttpResponseBase.reason_phraseŽ   s,   € àÔÐ*ØÔ&Ð&õ Œ}˜TÔ-Ð/DÑEÔEÐEr   c                 ó   — || _         d S r6   )r[   ©r   r   s     r   ra   zHttpResponseBase.reason_phrase–   s   € à#ˆÔÐÐr   c                 óÞ   — | j         �| j         S | j                             d¦  «        x}r8t                               |¦  «        x}r|d                              dd¦  «        S t          j        S )NrO   r1   ú"Ú )rR   rQ   r_   Ú_charset_from_content_type_reÚsearchÚreplacer   ÚDEFAULT_CHARSET)r   r\   Úmatcheds      r   r1   zHttpResponseBase.charsetš   sr   € àŒ=Ð$Ø”=Ð ð  œ<×+Ò+¨NÑ;Ô;Ð;ˆ<ð 	;Ý7×>Ò>¸|ÑLÔLÐLˆwð ;ð
 ˜yÔ)×1Ò1°#°rÑ:Ô:Ð:ÝÔ'Ð'r   c                 ó   — || _         d S r6   )rR   rc   s     r   r1   zHttpResponseBase.charset©   s   € àˆŒˆˆr   c                 ón   — d                      d„ | j                             ¦   «         D ¦   «         ¦  «        S )zHTTP headers as a bytestring.s   
c                 óp   — g | ]3\  }}|                      d ¦  «        dz   |                      d¦  «        z   ‘Œ4S )r;   s   : r<   )r)   )Ú.0r8   r   s      r   ú
<listcomp>z6HttpResponseBase.serialize_headers.<locals>.<listcomp>°   sN   € ð ð ð á�C˜ð —
’
˜7Ñ#Ô# eÑ+¨e¯lªl¸9Ñ.EÔ.EÑEðð ð r   )ÚjoinrQ   Úitemsr`   s    r   Úserialize_headersz"HttpResponseBase.serialize_headers­   sB   € à�|Š|ðð à"&¤,×"4Ò"4Ñ"6Ô"6ðñ ô ñ
ô 
ð 	
r   c                 ó8   — d| j         v rd| j         d         z  ndS )NrO   z, "%s"rf   ©rQ   r`   s    r   Ú_content_type_for_reprz'HttpResponseBase._content_type_for_repr¸   s-   € ð  ¤Ð-Ð-ð �t”| NÔ3Ñ3Ð3àð	
r   c                 ó   — || j         |<   d S r6   ru   )r   r   r   s      r   r?   zHttpResponseBase.__setitem__À   s   € Ø$ˆŒ�VÑÐÐr   c                 ó   — | j         |= d S r6   ru   ©r   r   s     r   r9   zHttpResponseBase.__delitem__Ã   s   € ØŒL˜Ð Ð Ð r   c                 ó   — | j         |         S r6   ru   ry   s     r   Ú__getitem__zHttpResponseBase.__getitem__Æ   s   € ØŒ|˜FÔ#Ð#r   c                 ó   — || j         v S )z$Case-insensitive check for a header.ru   ry   s     r   Ú
has_headerzHttpResponseBase.has_headerÉ   s   € à˜œÐ%Ð%r   c                 ó4   — | j                              ¦   «         S r6   )rQ   rr   r`   s    r   rr   zHttpResponseBase.itemsÏ   s   € ØŒ|×!Ò!Ñ#Ô#Ð#r   c                 ó8   — | j                              ||¦  «        S r6   )rQ   r_   )r   r   Ú	alternates      r   r_   zHttpResponseBase.getÒ   s   € ØŒ|×Ò ¨	Ñ2Ô2Ð2r   rf   ú/Fc
                 ó  — || j         |<   |�át          |t          j        ¦  «        r¶t          j        |¦  «        r$t          j        |t          j        j        ¦  «        }|t          j                             t          j        j        ¬¦  «        z
  }
|
t          j        d¬¦  «        z  }
d}|�t          d¦  «        ‚t          d|
j        dz  |
j        z   ¦  «        }n!|| j         |         d<   nd	| j         |         d<   |�~t          |t          j        ¦  «        r|                     ¦   «         }t          |¦  «        | j         |         d
<   |s1t          t!          j        ¦   «         |z   ¦  «        | j         |         d<   |�|| j         |         d<   |�|| j         |         d<   |rd| j         |         d<   |rd| j         |         d<   |	r7|	                     ¦   «         dvrt          d¦  «        ‚|	| j         |         d<   dS dS )a™  
        Set a cookie.

        ``expires`` can be:
        - a string in the correct format,
        - a naive ``datetime.datetime`` object in UTC,
        - an aware ``datetime.datetime`` object in any time zone.
        If it is a ``datetime.datetime`` object then calculate ``max_age``.

        ``max_age`` can be:
        - int/float specifying seconds,
        - ``datetime.timedelta`` object.
        N)Útzé   )Úsecondsz/'expires' and 'max_age' can't be used together.r   i€Q Úexpiresrf   zmax-ageÚpathÚdomainTÚsecureÚhttponly)ÚlaxÚnoneÚstrictz,samesite must be "lax", "none", or "strict".Úsamesite)rV   r'   Údatetimer   Úis_naiveÚ
make_awareÚutcÚnowÚ	timedeltarS   ÚmaxÚdaysr…   Útotal_secondsrX   r   Útimer=   )r   r8   r   Úmax_ager†   r‡   rˆ   r‰   rŠ   rŽ   Údeltas              r   Ú
set_cookiezHttpResponseBase.set_cookieÕ   s  € ð2 "ˆŒ�SÑØÐÝ˜'¥8Ô#4Ñ5Ô5ð 7ÝÔ$ WÑ-Ô-ð RÝ&Ô1°'½8Ô;LÔ;PÑQÔQ�GØ¥(Ô"3×"7Ò"7½8Ô;LÔ;PÐ"7Ñ"QÔ"QÑQ�ð �Ô+°AÐ6Ñ6Ô6Ñ6�à�ØÐ&Ý$Ð%VÑWÔWÐWÝ˜a ¤¨eÑ!3°e´mÑ!CÑDÔD��à/6�”˜SÔ! )Ñ,Ð,à+-ˆDŒL˜Ô˜iÑ(ØÐÝ˜'¥8Ô#5Ñ6Ô6ð 2Ø!×/Ò/Ñ1Ô1�Ý+.¨w©<¬<ˆDŒL˜Ô˜iÑ(àð PÝ/8½¼¹¼ÀwÑ9NÑ/OÔ/O�”˜SÔ! )Ñ,ØÐØ(,ˆDŒL˜Ô˜fÑ%ØÐØ*0ˆDŒL˜Ô˜hÑ'Øð 	/Ø*.ˆDŒL˜Ô˜hÑ'Øð 	1Ø,0ˆDŒL˜Ô˜jÑ)Øð 	5Ø�~Š~ÑÔÐ'@Ð@Ð@Ý Ð!OÑPÔPÐPØ,4ˆDŒL˜Ô˜jÑ)Ð)Ð)ð	5ð 	5r   c                 ó<   — | j                              ||¦  «         dS )z,Set a header unless it has already been set.N)rQ   rD   r>   s      r   rD   zHttpResponseBase.setdefault  s    € àŒ×Ò  UÑ+Ô+Ð+Ð+Ð+r   c                 óv   — t          j        ||z   ¬¦  «                             |¦  «        } | j        ||fi |¤ŽS )N)Úsalt)r
   Úget_cookie_signerÚsignr›   )r   r8   r   rž   Úkwargss        r   Úset_signed_cookiez"HttpResponseBase.set_signed_cookie  sC   € ÝÔ)¨s°T©zÐ:Ñ:Ô:×?Ò?ÀÑFÔFˆØˆtŒ˜s EÐ4Ð4¨VÐ4Ð4Ð4r   c           	      óœ   — |                      d¦  «        p|o|                     ¦   «         dk    }|                      |d|||d|¬¦  «         d S )N)z	__Secure-z__Host-rŒ   r   zThu, 01 Jan 1970 00:00:00 GMT)r™   r‡   rˆ   r‰   r†   rŽ   )Ú
startswithr=   r›   )r   r8   r‡   rˆ   rŽ   r‰   s         r   Údelete_cookiezHttpResponseBase.delete_cookie  sq   € ð
 —’Ð 8Ñ9Ô9ð 
ØÐ3˜ŸšÑ)Ô)¨VÒ3ð 	ð 	�ŠØØØØØØ3Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r   c                 ó  — t          |t          t          f¦  «        rt          |¦  «        S t          |t          ¦  «        r't          |                     | j        ¦  «        ¦  «        S t          |¦  «                             | j        ¦  «        S )z=Turn a value into a bytestring encoded in the output charset.)r'   r*   Ú
memoryviewr(   r)   r1   rc   s     r   Ú
make_byteszHttpResponseBase.make_bytes1  sq   € õ �e�e¥ZÐ0Ñ1Ô1ð 	 Ý˜‘<”<ÐÝ�e�SÑ!Ô!ð 	5Ý˜Ÿš d¤lÑ3Ô3Ñ4Ô4Ð4å�5‰zŒz× Ò  ¤Ñ.Ô.Ð.r   c                 óÚ   — | j         D ]}	  |¦   «          Œ# t          $ r Y Œw xY w| j                              ¦   «          d| _        t          j                             | j        ¬¦  «         d S )NT)Úsender)rT   Ú	ExceptionÚclearrW   r	   Úrequest_finishedÚsendrU   )r   Úclosers     r   ÚclosezHttpResponseBase.closeF  s‡   € ØÔ,ð 	ð 	ˆFðØ�‘”��øÝð ð ð Ø�ðøøøð 	Ô×$Ò$Ñ&Ô&Ð&ØˆŒÝÔ ×%Ò%¨TÔ-@Ð%ÑAÔAÐAÐAÐAs   ‹
–
#¢#c                 ó:   — t          d| j        j        z  ¦  «        ‚©Nz This %s instance is not writable©ÚOSErrorÚ	__class__rE   ©r   Úcontents     r   ÚwritezHttpResponseBase.writeQ  ó   € ÝÐ8¸4¼>Ô;RÑRÑSÔSÐSr   c                 ó   — d S r6   rC   r`   s    r   ÚflushzHttpResponseBase.flushT  s   € Øˆr   c                 ó:   — t          d| j        j        z  ¦  «        ‚)Nz)This %s instance cannot tell its positionr³   r`   s    r   ÚtellzHttpResponseBase.tellW  s!   € ÝØ7¸$¼.Ô:QÑQñ
ô 
ð 	
r   c                 ó   — dS ©NFrC   r`   s    r   ÚreadablezHttpResponseBase.readable_  ó   € Øˆur   c                 ó   — dS r¿   rC   r`   s    r   ÚseekablezHttpResponseBase.seekableb  rÁ   r   c                 ó   — dS r¿   rC   r`   s    r   ÚwritablezHttpResponseBase.writablee  rÁ   r   c                 ó:   — t          d| j        j        z  ¦  «        ‚r²   r³   )r   Úliness     r   Ú
writelineszHttpResponseBase.writelinesh  r¹   r   )NNNNNr6   )rf   NNr�   NFFN)rf   )r�   NN)!rE   rF   rG   Ú__doc__rY   r   Úpropertyra   Úsetterr1   rs   Ú	__bytes__rv   r?   r9   r{   r}   Ú__contains__rr   r_   r›   rD   r¢   r¥   r¨   r°   r¸   r»   r½   rÀ   rÃ   rÅ   rÈ   rC   r   r   rL   rL   f   sB  € € € € € ðð ð €Kð RVð%ð %ð %ð %ð< ðFð Fñ „XðFð Ôð$ð $ñ Ôð$ð ð(ð (ñ „Xð(ð „^ðð ñ „^ðð
ð 
ð 
ð "€Iàð
ð 
ñ „Xð
ð%ð %ð %ð!ð !ð !ð$ð $ð $ð&ð &ð &ð €Lð$ð $ð $ð3ð 3ð 3ð 3ð ØØØØØØØð>5ð >5ð >5ð >5ð@,ð ,ð ,ð5ð 5ð 5ð 5ð
ð 
ð 
ð 
ð(/ð /ð /ð*	Bð 	Bð 	BðTð Tð Tðð ð ð
ð 
ð 
ðð ð ðð ð ðð ð ðTð Tð Tð Tð Tr   rL   c                   ó’   ‡ — e Zd ZdZdZdˆ fd„	Zd„ Zd„ ZeZe	d„ ¦   «         Z
e
j        d„ ¦   «         Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )ÚHttpResponsezs
    An HTTP response class with a string as content.

    This content can be read, appended to, or replaced.
    Fr   c                 óH   •—  t          ¦   «         j        |i |¤Ž || _        d S r6   )Úsuperr   r·   )r   r·   Úargsr¡   rµ   s       €r   r   zHttpResponse.__init__u  s*   ø€ Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)àˆŒˆˆr   c                 ó<   — d| j         j        | j        | j        dœz  S ©Nz5<%(cls)s status_code=%(status_code)d%(content_type)s>)ÚclsrY   r\   ©rµ   rE   rY   rv   r`   s    r   Ú__repr__zHttpResponse.__repr__z  s/   € ØFØ”>Ô*ØÔ+Ø Ô7ðJ
ð J
ñ 
ð 	
r   c                 ó@   — |                       ¦   «         dz   | j        z   S )z6Full HTTP message, including headers, as a bytestring.s   

)rs   r·   r`   s    r   Ú	serializezHttpResponse.serialize�  s    € à×%Ò%Ñ'Ô'¨+Ñ5¸¼ÑDÐDr   c                 ó6   — d                      | j        ¦  «        S ©Nr   )rq   Ú
_containerr`   s    r   r·   zHttpResponse.content‡  s   € à�xŠx˜œÑ(Ô(Ð(r   c                 óV  ‡ — t          |d¦  «        rzt          |t          t          t          f¦  «        sXd                     ˆ fd„|D ¦   «         ¦  «        }t          |d¦  «        r&	 |                     ¦   «          n&# t          $ r Y nw xY wn‰                      |¦  «        }|g‰ _	        d S )NÚ__iter__r   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r6   ©r¨   )ro   Úchunkr   s     €r   ú	<genexpr>z'HttpResponse.content.<locals>.<genexpr>‘  s/   øè è € ÐIÐI¸%˜tŸš¨uÑ5Ô5ÐIÐIÐIÐIÐIÐIr   r°   )
Úhasattrr'   r*   r§   r(   rq   r°   r«   r¨   rÜ   )r   r   r·   s   `  r   r·   zHttpResponse.content‹  sÇ   ø€ õ �5˜*Ñ%Ô%ð 
	-­jØ•E�:¥sÐ+ñ/
ô /
ð 
	-ð —h’hÐIÐIÐIÐIÀ5ÐIÑIÔIÑIÔIˆGÝ�u˜gÑ&Ô&ð ðØ—K’K‘M”M�M�MøÝ ð ð ð Ø�Dðøøøðð —o’o eÑ,Ô,ˆGà"˜)ˆŒˆˆs   Á&A; Á;
BÂBc                 ó*   — t          | j        ¦  «        S r6   )ÚiterrÜ   r`   s    r   rÞ   zHttpResponse.__iter__œ  s   € Ý�D”OÑ$Ô$Ð$r   c                 ó`   — | j                              |                      |¦  «        ¦  «         d S r6   )rÜ   Úappendr¨   r¶   s     r   r¸   zHttpResponse.writeŸ  s*   € ØŒ×Ò˜tŸš¨wÑ7Ô7Ñ8Ô8Ð8Ð8Ð8r   c                 ó*   — t          | j        ¦  «        S r6   )Úlenr·   r`   s    r   r½   zHttpResponse.tell¢  s   € Ý�4”<Ñ Ô Ð r   c                 ó   — | j         S r6   )r·   r`   s    r   ÚgetvaluezHttpResponse.getvalue¥  s
   € ØŒ|Ðr   c                 ó   — dS )NTrC   r`   s    r   rÅ   zHttpResponse.writable¨  s   € Øˆtr   c                 ó:   — |D ]}|                       |¦  «         Œd S r6   )r¸   )r   rÇ   Úlines      r   rÈ   zHttpResponse.writelines«  s0   € Øð 	ð 	ˆDØ�JŠJ�tÑÔÐÐð	ð 	r   )r   )rE   rF   rG   rÉ   Ú	streamingr   r×   rÙ   rÌ   rÊ   r·   rË   rÞ   r¸   r½   rë   rÅ   rÈ   Ú__classcell__©rµ   s   @r   rÏ   rÏ   l  s  ø€ € € € € ðð ð €Iðð ð ð ð ð ð

ð 
ð 
ðEð Eð Eð €Iàð)ð )ñ „Xð)ð „^ð$ð $ñ „^ð$ð %ð %ð %ð9ð 9ð 9ð!ð !ð !ðð ð ðð ð ðð ð ð ð ð ð r   rÏ   c                   ó’   ‡ — e Zd ZdZdZdˆ fd„	Zd„ Zed„ ¦   «         Zed„ ¦   «         Z	e	j
        d„ ¦   «         Z	d	„ Zd
„ Zd„ Zd„ Zˆ xZS )ÚStreamingHttpResponsea$  
    A streaming HTTP response class with an iterator as content.

    This should only be iterated once, when the response is streamed to the
    client. However, it can be appended to or replaced with a new iterator
    that wraps the original content (or yields entirely new content).
    TrC   c                 óH   •—  t          ¦   «         j        |i |¤Ž || _        d S r6   )rÑ   r   Ústreaming_content)r   rõ   rÒ   r¡   rµ   s       €r   r   zStreamingHttpResponse.__init__»  s/   ø€ Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)ð "3ˆÔÐÐr   c                 ó<   — d| j         j        | j        | j        dœz  S rÔ   )rµ   rG   rY   rv   r`   s    r   r×   zStreamingHttpResponse.__repr__Á  s/   € ØFØ”>Ô.ØÔ+Ø Ô7ðJ
ð J
ñ 
ð 	
r   c                 ó:   — t          d| j        j        z  ¦  «        ‚)NzMThis %s instance has no `content` attribute. Use `streaming_content` instead.)ÚAttributeErrorrµ   rE   r`   s    r   r·   zStreamingHttpResponse.contentÈ  s'   € åð+Ø-1¬^Ô-DñEñ
ô 
ð 	
r   c                 óv   ‡ ‡— ‰ j         r‰ j        Šˆˆ fd„} |¦   «         S t          ‰ j        ‰ j        ¦  «        S )Nc                 óR   •K  — ‰2 3 d {V —†} ‰                      | ¦  «        W V — Œ 6 d S r6   rà   )ÚpartÚ	_iteratorr   s    €€r   Úawrapperz9StreamingHttpResponse.streaming_content.<locals>.awrapperÖ  sV   øè è € Ø"+ð 0ð 0ð 0ð 0ð 0ð 0ð 0˜$ØŸ/š/¨$Ñ/Ô/Ð/Ð/Ð/Ð/Ð/ð #, ) )s   †&)Úis_asyncrü   Úmapr¨   )r   rý   rü   s   ` @r   rõ   z'StreamingHttpResponse.streaming_contentÏ  sW   øø€ àŒ=ð 	8ð œˆIð0ð 0ð 0ð 0ð 0ð 0ð �8‘:”:Ðå�t”¨¬Ñ7Ô7Ð7r   c                 ó0   — |                       |¦  «         d S r6   )Ú_set_streaming_contentrc   s     r   rõ   z'StreamingHttpResponse.streaming_contentÞ  s   € à×#Ò# EÑ*Ô*Ð*Ð*Ð*r   c                 óø   — 	 t          |¦  «        | _        d| _        n+# t          $ r t	          |¦  «        | _        d| _        Y nw xY wt          |d¦  «        r!| j                             |j        ¦  «         d S d S )NFTr°   )	rå   rü   rþ   rZ   Úaiterrã   rT   rç   r°   rc   s     r   r  z,StreamingHttpResponse._set_streaming_contentâ  s�   € ð	!Ý! %™[œ[ˆDŒNØ!ˆDŒMˆMøÝð 	!ð 	!ð 	!Ý" 5™\œ\ˆDŒNØ ˆDŒMˆMˆMð	!øøøõ �5˜'Ñ"Ô"ð 	7ØÔ"×)Ò)¨%¬+Ñ6Ô6Ð6Ð6Ð6ð	7ð 	7s   ‚ ž%AÁAc           
      ó   — 	 t          | j        ¦  «        S # t          $ r] t          j        dt
          ¦  «         d„ }t          | j        t           t          |¦  «        | j	        ¦  «        ¦  «        ¦  «        cY S w xY w)NzƒStreamingHttpResponse must consume asynchronous iterators in order to serve them synchronously. Use a synchronous iterator instead.c              “   óN   K  — g }| 2 3 d {V —†}|                      |¦  «         Œ6 |S r6   )rç   )rü   Úas_listrá   s      r   Úto_listz/StreamingHttpResponse.__iter__.<locals>.to_listø  sR   è è € Ø�Ø#,ð *ð *ð *ð *ð *ð *ð *˜%Ø—N’N 5Ñ)Ô)Ð)Ð)ð $-à�s   ‡$)
rå   rõ   rZ   ÚwarningsÚwarnÚWarningrÿ   r¨   r   rü   )r   r  s     r   rÞ   zStreamingHttpResponse.__iter__í  s›   € ð	VÝ˜Ô.Ñ/Ô/Ð/øÝð 	Vð 	Vð 	VÝŒMðPåñô ð ðð ð õ �t”­Ð-C­]¸7Ñ-CÔ-CÀDÄNÑ-SÔ-SÑ(TÔ(TÑUÔUÐUÐUÐUð	Vøøøs   ‚ –A$A=Á<A=c                óì   K  — 	 | j         2 3 d {V —†}|W V — Œ6 d S # t          $ rN t          j        dt          ¦  «          t          t          ¦  «        | j         ¦  «        ƒ d {V —†D ]}|W V — ŒY d S w xY w)Nz…StreamingHttpResponse must consume synchronous iterators in order to serve them asynchronously. Use an asynchronous iterator instead.)rõ   rZ   r  r	  r
  r   Úlist)r   rû   s     r   Ú	__aiter__zStreamingHttpResponse.__aiter__   sÚ   è è € ð	Ø"Ô4ð ð ð ð ð ð ð �dØ�
�
�
�
�
ð 5Ð4Ð4øåð 		ð 		ð 		ÝŒMðSåñô ð ð 2�m­DÑ1Ô1°$Ô2HÑIÔIÐIÐIÐIÐIÐIÐIð ð �Ø�
�
�
�
�
ðð ð ð		øøøs   „ ‹‘ ›AA3Á2A3c                 ó6   — d                      | j        ¦  «        S rÛ   )rq   rõ   r`   s    r   rë   zStreamingHttpResponse.getvalue  s   € Ø�xŠx˜Ô.Ñ/Ô/Ð/r   )rC   )rE   rF   rG   rÉ   rï   r   r×   rÊ   r·   rõ   rË   r  rÞ   r  rë   rð   rñ   s   @r   ró   ró   °  sñ   ø€ € € € € ðð ð €Ið3ð 3ð 3ð 3ð 3ð 3ð
ð 
ð 
ð ð
ð 
ñ „Xð
ð ð8ð 8ñ „Xð8ð Ôð+ð +ñ Ôð+ð	7ð 	7ð 	7ðVð Vð Vð&ð ð ð0ð 0ð 0ð 0ð 0ð 0ð 0r   ró   c                   ó>   ‡ — e Zd ZdZdZdddœˆ fd„
Zˆ fd„Zd„ Zˆ xZS )	ÚFileResponsez>
    A streaming HTTP response class optimized for files.
    i   Frf   )Úas_attachmentÚfilenamec                ó|   •— || _         || _        d|vp	|d         d u | _         t          ¦   «         j        |i |¤Ž d S )Nr\   )r  r  Ú_no_explicit_content_typerÑ   r   )r   r  r  rÒ   r¡   rµ   s        €r   r   zFileResponse.__init__  sU   ø€ Ø*ˆÔØ ˆŒà &Ð(ÐJ¨F°>Ô,BÀdÐ,Jð 	Ô&ð 	�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ð)Ð)r   c                 ó€  •‡ ‡— t          |d¦  «        s(d ‰ _        t          ¦   «                              |¦  «        S |x‰ _        Št          ‰d¦  «        r‰ j                             ‰j        ¦  «         t          ˆˆ fd„d¦  «        }‰                      ‰¦  «         t          ¦   «                              |¦  «         d S )NÚreadr°   c                  ó8   •— ‰                       ‰j        ¦  «        S r6   )r  Ú
block_size©Úfileliker   s   €€r   ú<lambda>z5FileResponse._set_streaming_content.<locals>.<lambda>*  s   ø€ ˜XŸ]š]¨4¬?Ñ;Ô;€ r   r   )	rã   Úfile_to_streamrÑ   r  rT   rç   r°   rå   Úset_headers)r   r   r  rµ   s   ` @€r   r  z#FileResponse._set_streaming_content"  s½   øøø€ Ý�u˜fÑ%Ô%ð 	9Ø"&ˆDÔÝ‘7”7×1Ò1°%Ñ8Ô8Ð8à).Ð.ˆÔ˜hÝ�8˜WÑ%Ô%ð 	:ØÔ"×)Ò)¨(¬.Ñ9Ô9Ð9ÝÐ;Ð;Ð;Ð;Ð;¸SÑAÔAˆØ×Ò˜Ñ"Ô"Ð"Ý‰Œ×&Ò& uÑ-Ô-Ð-Ð-Ð-r   c                 ó  ‡ ‡— t          ‰dd¦  «        }t          |t          ¦  «        r|nd}t          ‰d¦  «        o$t          ‰d¦  «         p‰                     ¦   «         }t          ‰d¦  «        �r|rj‰                     ¦   «         }‰                     dt          j        ¦  «         ‰                     ¦   «         |z
  ‰ j	        d<   ‰                     |¦  «         �nt          ‰d¦  «        r7‰ 
                    ¦   «         j        ‰                     ¦   «         z
  ‰ j	        d<   nÀt          j                             |¦  «        r<t          j                             |¦  «        ‰                     ¦   «         z
  ‰ j	        d<   nd|rbt!          t#          ˆˆ fd	„d¦  «        ¦  «        ‰ j	        d<   ‰                     t%          ‰ j	        d         ¦  «         t          j        ¦  «         t          j                             ‰ j        p|¦  «        }‰ j        rL|r@t-          j        |¦  «        \  }}d
dddddœ                     ||¦  «        }|pd‰ j	        d<   n
d‰ j	        d<   t3          ‰ j        |¦  «        x}r|‰ j	        d<   dS dS )zœ
        Set some common response headers (Content-Length, Content-Type, and
        Content-Disposition) based on the `filelike` response content.
        Únamerf   ÚseekrÃ   r½   r   zContent-LengthÚ	getbufferc                  óR   •— t          ‰                      ‰j        ¦  «        ¦  «        S r6   )ré   r  r  r  s   €€r   r  z*FileResponse.set_headers.<locals>.<lambda>H  s   ø€ �S §¢¨t¬Ñ!?Ô!?Ñ@Ô@€ r   zapplication/x-brotlizapplication/x-bzipzapplication/x-compresszapplication/gzipzapplication/x-xz)ÚbrÚbzip2ÚcompressÚgzipÚxzzapplication/octet-streamrO   zContent-DispositionN)Úgetattrr'   r(   rã   rÃ   r½   r   ÚioÚSEEK_ENDrQ   r!  ÚnbytesÚosr‡   ÚexistsÚgetsizeÚsumrå   rX   Úbasenamer  r  Ú	mimetypesÚ
guess_typer_   r   r  )r   r  r  rÃ   Úinitial_positionr\   ÚencodingÚcontent_dispositions   ``      r   r  zFileResponse.set_headers.  sª  øø€ õ
 ˜8 V¨RÑ0Ô0ˆÝ)¨(µCÑ8Ô8Ð@�8�8¸bˆÝ˜8 VÑ,Ô,ð 
Ý˜ *Ñ-Ô-Ð-ÐD°×1BÒ1BÑ1DÔ1Dð 	õ �8˜VÑ$Ô$ñ 	MØð Ø#+§=¢=¡?¤?Ð Ø—’˜a¥¤Ñ-Ô-Ð-Ø19·²±´ÐCSÑ1S�”Ð-Ñ.Ø—’Ð.Ñ/Ô/Ð/Ñ/Ý˜ ;Ñ/Ô/ð à×&Ò&Ñ(Ô(Ô/°(·-²-±/´/ÑAð ”Ð-Ñ.Ð.õ ”—’ Ñ)Ô)ð å”G—O’O HÑ-Ô-°·²±´Ñ?ð ”Ð-Ñ.øð ð 	MÝ-0ÝÐ@Ð@Ð@Ð@Ð@À!ÑDÔDñ.ô .ˆDŒLÐ)Ñ*ð �MŠM�3˜tœ|Ð,<Ô=Ñ>Ô>Ð>ÅÄÑLÔLÐLå”7×#Ò# D¤MÐ$=°XÑ>Ô>ˆØÔ)ð 	JØð JÝ)2Ô)=¸hÑ)GÔ)GÑ&�˜hð 1Ø1Ø 8Ø.Ø,ð ð  ÷ ’#�h Ñ-Ô-ð ð !Ð>Ð$>ð ”˜^Ñ,Ð,ð 0J�”˜^Ñ,å"<ØÔ ñ#
ô #
ð 
Ðð 	Fð 3FˆDŒLÐ.Ñ/Ð/Ð/ð	Fð 	Fr   )	rE   rF   rG   rÉ   r  r   r  r  rð   rñ   s   @r   r  r    s‡   ø€ € € € € ðð ð €Jà,1¸Bð *ð *ð *ð *ð *ð *ð *ð
.ð 
.ð 
.ð 
.ð 
.ð4Fð 4Fð 4Fð 4Fð 4Fð 4Fð 4Fr   r  c                   óD   ‡ — e Zd Zg d¢Zˆ fd„Z ed„ ¦  «        Zd„ Zˆ xZS )ÚHttpResponseRedirectBase)ÚhttpÚhttpsÚftpc                 óò   •—  t          ¦   «         j        |i |¤Ž t          |¦  «        | d<   t          t	          |¦  «        ¦  «        }|j        r%|j        | j        vrt          d|j        z  ¦  «        ‚d S d S )NÚLocationz)Unsafe redirect to URL with protocol '%s')rÑ   r   r   r   r(   ÚschemeÚallowed_schemesr   )r   Úredirect_torÒ   r¡   Úparsedrµ   s        €r   r   z!HttpResponseRedirectBase.__init__h  s‹   ø€ Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ý% kÑ2Ô2ˆˆZÑÝ�#˜kÑ*Ô*Ñ+Ô+ˆØŒ=ð 	˜Vœ]°$Ô2FÐFÐFÝ$Ø;¸f¼mÑKñô ð ð	ð 	ÐFÐFr   c                 ó   — | d         S )Nr<  rC   r`   s    r   r  z!HttpResponseRedirectBase.<lambda>q  s   €   ZÔ 0€ r   c                 óH   — d| j         j        | j        | j        | j        dœz  S )NzD<%(cls)s status_code=%(status_code)d%(content_type)s, url="%(url)s">)rÕ   rY   r\   Úurl)rµ   rE   rY   rv   rC  r`   s    r   r×   z!HttpResponseRedirectBase.__repr__s  s2   € àRà”~Ô.Ø#Ô/Ø $Ô ;Ø”xð	ð ñð	
r   )	rE   rF   rG   r>  r   rÊ   rC  r×   rð   rñ   s   @r   r7  r7  e  sg   ø€ € € € € Ø.Ð.Ð.€Oðð ð ð ð ð ˆ(Ð0Ð0Ñ
1Ô
1€Cð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
r   r7  c                   ó   — e Zd ZdZdS )ÚHttpResponseRedirecti.  N©rE   rF   rG   rY   rC   r   r   rE  rE    ó   € € € € € Ø€K€K€Kr   rE  c                   ó   — e Zd ZdZdS )ÚHttpResponsePermanentRedirecti-  NrF  rC   r   r   rI  rI  ƒ  rG  r   rI  c                   óL   ‡ — e Zd ZdZˆ fd„Zej        j        d„ ¦   «         Zˆ xZS )ÚHttpResponseNotModifiedi0  c                 ó@   •—  t          ¦   «         j        |i |¤Ž | d= d S )Nzcontent-type)rÑ   r   )r   rÒ   r¡   rµ   s      €r   r   z HttpResponseNotModified.__init__Š  s-   ø€ Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ø�Ð Ð Ð r   c                 ó6   — |rt          d¦  «        ‚g | _        d S )Nz7You cannot set content to a 304 (Not Modified) response)rø   rÜ   rc   s     r   r·   zHttpResponseNotModified.contentŽ  s,   € àð 	Ý ØIñô ð ð ˆŒˆˆr   )	rE   rF   rG   rY   r   rÏ   r·   rË   rð   rñ   s   @r   rK  rK  ‡  s_   ø€ € € € € Ø€Kð!ð !ð !ð !ð !ð ÔÔ ðð ñ !Ô ðð ð ð ð r   rK  c                   ó   — e Zd ZdZdS )ÚHttpResponseBadRequesti�  NrF  rC   r   r   rO  rO  —  rG  r   rO  c                   ó   — e Zd ZdZdS )ÚHttpResponseNotFoundi”  NrF  rC   r   r   rQ  rQ  ›  rG  r   rQ  c                   ó   — e Zd ZdZdS )ÚHttpResponseForbiddeni“  NrF  rC   r   r   rS  rS  Ÿ  rG  r   rS  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚHttpResponseNotAllowedi•  c                 ój   •—  t          ¦   «         j        |i |¤Ž d                     |¦  «        | d<   d S )Nz, ÚAllow)rÑ   r   rq   )r   Úpermitted_methodsrÒ   r¡   rµ   s       €r   r   zHttpResponseNotAllowed.__init__¦  s9   ø€ Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)ØŸ	š	Ð"3Ñ4Ô4ˆˆW‰ˆˆr   c                 óJ   — d| j         j        | j        | j        | d         dœz  S )NzC<%(cls)s [%(methods)s] status_code=%(status_code)d%(content_type)s>rW  )rÕ   rY   r\   ÚmethodsrÖ   r`   s    r   r×   zHttpResponseNotAllowed.__repr__ª  s6   € ØTØ”>Ô*ØÔ+Ø Ô7Ø˜G”}ð	X
ð X
ñ 
ð 	
r   )rE   rF   rG   rY   r   r×   rð   rñ   s   @r   rU  rU  £  sL   ø€ € € € € Ø€Kð5ð 5ð 5ð 5ð 5ð
ð 
ð 
ð 
ð 
ð 
ð 
r   rU  c                   ó   — e Zd ZdZdS )ÚHttpResponseGoneiš  NrF  rC   r   r   r\  r\  ³  rG  r   r\  c                   ó   — e Zd ZdZdS )ÚHttpResponseServerErroriô  NrF  rC   r   r   r^  r^  ·  rG  r   r^  c                   ó   — e Zd ZdS )ÚHttp404NrI   rC   r   r   r`  r`  »  rJ   r   r`  c                   ó*   ‡ — e Zd ZdZeddfˆ fd„	Zˆ xZS )ÚJsonResponseaH  
    An HTTP response class that consumes data to be serialized to JSON.

    :param data: Data to be dumped into json. By default only ``dict`` objects
      are allowed to be passed due to a security flaw before ECMAScript 5. See
      the ``safe`` parameter for more information.
    :param encoder: Should be a json encoder class. Defaults to
      ``django.core.serializers.json.DjangoJSONEncoder``.
    :param safe: Controls if only ``dict`` objects may be serialized. Defaults
      to ``True``.
    :param json_dumps_params: A dictionary of kwargs passed to json.dumps().
    TNc                 óæ   •— |r$t          |t          ¦  «        st          d¦  «        ‚|€i }|                     dd¦  «         t	          j        |fd|i|¤Ž} t          ¦   «         j        dd|i|¤Ž d S )NzTIn order to allow non-dict objects to be serialized set the safe parameter to False.r\   zapplication/jsonrÕ   r·   rC   )r'   ÚdictrZ   rD   ÚjsonÚdumpsrÑ   r   )r   r   ÚencoderÚsafeÚjson_dumps_paramsr¡   rµ   s         €r   r   zJsonResponse.__init__Í  sŸ   ø€ ð ð 	�
 4­Ñ.Ô.ð 	Ýð+ñô ð ð Ð$Ø "ÐØ×Ò˜.Ð*<Ñ=Ô=Ð=ÝŒz˜$ÐAÐA GÐAÐ/@ÐAÐAˆØ�‰ŒÔÐ0Ð0 Ð0¨Ð0Ð0Ð0Ð0Ð0r   )rE   rF   rG   rÉ   r   r   rð   rñ   s   @r   rb  rb  ¿  sR   ø€ € € € € ðð ð  "ØØð1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1r   rb  )>r�   r)  re  r1  r,  Úrer.   r˜   r  Úemail.headerr   Úhttp.clientr   Úurllib.parser   Úasgiref.syncr   r   Údjango.confr   Údjango.corer	   r
   Údjango.core.exceptionsr   Údjango.core.serializers.jsonr   Údjango.http.cookier   Údjango.utilsr   Údjango.utils.datastructuresr   Údjango.utils.encodingr   Údjango.utils.httpr   r   Údjango.utils.regex_helperr   ÚIrg   r   rS   r,   rL   rÏ   ró   r  r7  rE  rI  rK  rO  rQ  rS  rU  r\  r^  r«   r`  rb  rC   r   r   ú<module>rz     s¸  ðØ €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø 	€	€	€	Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø !Ð !Ð !Ð !Ð !Ð !à 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à  Ð  Ð  Ð  Ð  Ð  Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø :Ð :Ð :Ð :Ð :Ð :Ø +Ð +Ð +Ð +Ð +Ð +Ø !Ð !Ð !Ð !Ð !Ð !Ø >Ð >Ð >Ð >Ð >Ð >Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ 6Ð 6Ð 6Ð 6Ð 6Ð 6à 0Ð 0Ø'¨¬ñ!ô !Ð ð
?ð ?ð ?ð ?ð ?Ð,ñ ?ô ?ð ?ðD	ð 	ð 	ð 	ð 	�Zñ 	ô 	ð 	ðCTð CTð CTð CTð CTñ CTô CTð CTðLAð Að Að Að AÐ#ñ Aô Að AðH`0ð `0ð `0ð `0ð `0Ð,ñ `0ô `0ð `0ðFOFð OFð OFð OFð OFÐ(ñ OFô OFð OFðd
ð 
ð 
ð 
ð 
˜|ñ 
ô 
ð 
ð4ð ð ð ð Ð3ñ ô ð ðð ð ð ð Ð$<ñ ô ð ðð ð ð ð ˜lñ ô ð ð ð ð ð ð ˜\ñ ô ð ðð ð ð ð ˜<ñ ô ð ðð ð ð ð ˜Lñ ô ð ð
ð 
ð 
ð 
ð 
˜\ñ 
ô 
ð 
ð ð ð ð ð �|ñ ô ð ðð ð ð ð ˜lñ ô ð ð	ð 	ð 	ð 	ð 	ˆiñ 	ô 	ð 	ð1ð 1ð 1ð 1ð 1�<ñ 1ô 1ð 1ð 1ð 1r   