Ë
    F^(hºu  ã                   óÔ  — 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Zd dl	Z	d dl
mZmZ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 d	d
lmZ  ej:                  d«      Z ej:                  d«      Z ej@                  d«      Z!d„ Z" G d„ de«      Z# G d„ de«      Z$ ej:                  d«      Z%d„ Z& G d„ de«      Z' G d„ de«      Z(dd„Z)dd„Z*dd„Z+ ee+«      Z,y)é    N)Úcopy)Úurlparse)ÚAbstractAsyncStreamedFileÚAsyncFileSystemÚsyncÚsync_wrapper)ÚDEFAULT_CALLBACK)ÚFSTimeoutError)ÚAbstractBufferedFile)ÚDEFAULT_BLOCK_SIZEÚglob_translateÚ
isfilelikeÚnullcontextÚtokenizeé   )ÚAllBytesz6<(a|A)\s+(?:[^>]*?\s+)?(href|HREF)=["'](?P<url>[^"']+)z-(?P<url>http[s]?://[-a-zA-Z0-9@:%_+.~#?&/=]+)zfsspec.httpc               ‹   ó4   K  — t        j                  di | ¤ŽS ­w)N© )ÚaiohttpÚClientSession)Úkwargss    úY/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/fsspec/implementations/http.pyÚ
get_clientr       s   è ø€ Ü× Ñ Ñ* 6Ñ*Ð*ùs   ‚c                   ó"  ‡ — e Zd ZdZdZdddddddddedfˆ fd„	Zed„ «       Zd	„ Z	e
d
„ «       Zd„ Zed„ «       Zeˆ fd„«       Zd d„Zd d„Z ee«      Zd„ Zd!d„Zdefd„Zdeddfd„Zd„ Zd„ Z	 	 	 	 	 	 d"d„Zd#d„Zd„ Zd„ Zd$d„Zd„ Z d%d„Z!ˆ xZ"S )&ÚHTTPFileSystema2  
    Simple File-System for fetching data via HTTP(S)

    ``ls()`` is implemented by loading the parent page and doing a regex
    match on the result. If simple_link=True, anything of the form
    "http(s)://server.com/stuff?thing=other"; otherwise only links within
    HTML href tags will be used.
    ú/TNÚbytesFc                 óŽ  •— t        ‰| �  | f||dœ|¤Ž |�|nt        | _        || _        || _        || _        || _        |	xs i | _        |
| _	        || _
        || _        d| _        t        |«      }|j                  dd«      | _        |j                  dd«       |j                  dd«       |j                  dd«       || _        y)aÑ  
        NB: if this is called async, you must await set_client

        Parameters
        ----------
        block_size: int
            Blocks to read bytes; if 0, will default to raw requests file-like
            objects instead of HTTPFile instances
        simple_links: bool
            If True, will consider both HTML <a> tags and anything that looks
            like a URL; if False, will consider only the former.
        same_scheme: True
            When doing ls/glob, if this is True, only consider paths that have
            http/https matching the input URLs.
        size_policy: this argument is deprecated
        client_kwargs: dict
            Passed to aiohttp.ClientSession, see
            https://docs.aiohttp.org/en/stable/client_reference.html
            For example, ``{'auth': aiohttp.BasicAuth('user', 'pass')}``
        get_client: Callable[..., aiohttp.ClientSession]
            A callable which takes keyword arguments and constructs
            an aiohttp.ClientSession. It's state will be managed by
            the HTTPFileSystem class.
        storage_options: key-value
            Any other parameters passed on to requests
        cache_type, cache_options: defaults used in open
        )ÚasynchronousÚloopNÚuse_listings_cacheFÚlistings_expiry_timeÚ	max_pathsÚskip_instance_cache)ÚsuperÚ__init__r   Ú
block_sizeÚsimple_linksÚsame_schemaÚ
cache_typeÚcache_optionsÚclient_kwargsr   Úencodedr   Ú_sessionr   Úpopr!   )Úselfr(   r'   Úsame_schemeÚsize_policyr*   r+   r   r    r,   r   r-   Ústorage_optionsÚrequest_optionsÚ	__class__s                 €r   r&   zHTTPFileSystem.__init__0   sÑ   ø€ ôT 	‰Ñ˜ÐW¨L¸tÑWÀÒWØ(2Ð(>™*ÔDVˆŒØ(ˆÔØ&ˆÔØ$ˆŒØ*ˆÔØ*Ò0¨bˆÔØ$ˆŒØˆŒØ%ˆŒØˆŒô ˜Ó/ˆØ"1×"5Ñ"5Ð6JÈEÓ"RˆÔØ×ÑÐ2°DÔ9Ø×Ñ˜K¨Ô.Ø×ÑÐ1°4Ô8Ø%ˆ�ó    c                  ó   — y)NÚhttpr   ©r0   s    r   ÚfsidzHTTPFileSystem.fsidq   s   € àr6   c                 óD   — t        j                  || j                  ¬«      S )N)r-   )ÚyarlÚURLr-   ©r0   Úurls     r   Ú
encode_urlzHTTPFileSystem.encode_urlu   s   € Ü�x‰x˜ T§\¡\Ô2Ð2r6   c                 óÐ   — | �*| j                  «       r	 t        | |j                  d¬«       y t        |dd «      }|�|j                  «        y y # t        t        t
        f$ r Y Œ7w xY w)Ngš™™™™™¹?)ÚtimeoutÚ
_connector)Ú
is_runningr   ÚcloseÚTimeoutErrorr
   ÚNotImplementedErrorÚgetattrÚ_close)r    ÚsessionÚ	connectors      r   Úclose_sessionzHTTPFileSystem.close_sessionx   sl   € àÐ §¡Ô 1ðÜ�T˜7Ÿ=™=°#Õ6Øô ˜G \°4Ó8ˆ	ØÐ à×ÑÕð !øô !¤.Ô2EÐFò Ùðús   ”A ÁA%Á$A%c              ƒ   ó,  K  — | j                   €w | j                  dd| j                  i| j                  ¤Žƒ d {  –—† | _         | j                  s6t        j                  | | j                  | j                  | j                   «       | j                   S 7 ŒW­w)Nr    r   )r.   r   r    r,   r   ÚweakrefÚfinalizerL   r9   s    r   Úset_sessionzHTTPFileSystem.set_session…   sr   è ø€ Ø�=‰=Ð Ø"1 $§/¡/Ñ"W°t·y±yÐ"WÀD×DVÑDVÑ"W×WˆDŒMØ×$Ò$Ü× Ñ   t×'9Ñ'9¸4¿9¹9ÀdÇmÁmÔTØ�}‰}Ðð Xús   ‚8BºB»ABc                 ó   — |S )z-For HTTP, we always want to keep the full URLr   )ÚclsÚpaths     r   Ú_strip_protocolzHTTPFileSystem._strip_protocolŒ   s	   € ð ˆr6   c                 óD   •— t         ‰| �  |«      }t        |«      dkD  r|S y)Né   Ú )r%   Ú_parentÚlen)rR   rS   Úparr5   s      €r   rX   zHTTPFileSystem._parent‘   s&   ø€ ô ‰g‰o˜dÓ#ˆÜˆs‹8�aŠ<ØˆJØr6   c           	   ‹   óœ  K  — | j                   j                  «       }|j                  |«       t        j	                  |«       | j                  «       ƒ d {  –—† } |j                  | j                  |«      fi | j                   ¤Ž4 ƒd {  –—† }| j                  ||«       	 |j                  «       ƒ d {  –—† }| j                  r=t        j                  |«      t        j                  |«      D �cg c]  }|d   ‘Œ	 c}z   }	n%t        j                  |«      D �cg c]  }|d   ‘Œ	 }	}d d d «      ƒd {  –—†  t        «       }
t!        |«      }	D �]B  }t#        |t$        «      r|d   }|j'                  d«      r+t)        |«      dkD  r|j*                  › d|j,                  › |› �}|j'                  d«      r—| j.                  r5|j'                  |j1                  d«      dz   «      r|
j3                  |«       Œ§|j5                  dd«      j'                  |j5                  dd«      j1                  d«      dz   «      sŒë|
j3                  |«       Œý|dvs�Œ|
j3                  dj7                  |j1                  d«      |j9                  d«      g«      «       �ŒE |
s;|j;                  d«      r*| j=                  |j1                  d«      d¬	«      ƒ d {  –—† }
|r'|
D �cg c]  }|d |j;                  d«      rd
nddœ‘Œ c}S t?        |
«      S 7 �Œ±7 �Œ7 �ŒWc c}w c c}w # t        $ r g }	Y �Œÿw xY w7 �Œø# 1 ƒd {  –—†7  sw Y   �Œ	xY w7 Œvc c}w ­w)Nr   é   r   z://r8   Úhttps)z..z../F)ÚdetailÚ	directoryÚfile©ÚnameÚsizeÚtype) r   r   ÚupdateÚloggerÚdebugrP   Úgetr@   Ú_raise_not_found_for_statusÚtextr(   Úex2ÚfindallÚexÚUnicodeDecodeErrorÚsetr   Ú
isinstanceÚtupleÚ
startswithrY   ÚschemeÚnetlocr)   ÚrstripÚaddÚreplaceÚjoinÚlstripÚendswithÚ_ls_realÚsorted)r0   r?   r^   r   ÚkwrJ   Úrrj   ÚuÚlinksÚoutÚpartsÚls                r   r{   zHTTPFileSystem._ls_real™   sÂ  è ø€ à�[‰[×ÑÓˆØ
�	‰	�&ÔÜ�‰�SÔØ×(Ñ(Ó*×*ˆØ�7—;‘;˜tŸ™¨sÓ3ÑC°t·{±{ÑC÷ 		ð 		ÀqØ×,Ñ,¨Q°Ô4ðØŸV™V›X—~�Ø×$Ò$ÜŸK™K¨Ó-¼r¿z¹zÈ$Ó?OÖ0P¸!°°1³Ò0PÑP‘Eä+-¯:©:°dÓ+;Ö< a˜Q˜q›TÐ<�EÐ<÷		÷ 		ô ‹eˆÜ˜“ˆØó 	HˆAÜ˜!œUÔ#Ø�a‘D�Ø�|‰|˜CÔ ¤S¨£V¨a¢Zà—|‘|�n C¨¯© ~°a°SÐ9�Ø�|‰|˜FÔ#Ø×#Ò#¨¯©°S·Z±ZÀ³_ÀsÑ5JÔ(KØ—G‘G˜A•JØ—Y‘Y˜w¨Ó/×:Ñ:Ø—K‘K ¨Ó0×7Ñ7¸Ó<¸sÑBõð —G‘G˜A•Jà˜MÓ)à—G‘G˜CŸH™H c§j¡j°£o°q·x±xÀ³}Ð%EÓFÖGð#	Hñ$ �s—|‘| CÔ(ØŸ™ c§j¡j°£o¸e˜ÓD×DˆCÙð öð ð	 Ø Ø+,¯:©:°c¬?™KÀóòð ô ˜#“;ÐðW +ùð		ùð &ûâ0Pùâ<øÜ%ò Ø“ðúð		ù÷ 		÷ 		ò 		úð> EúòùsÔ   ‚AMÁLÁ4MÂL
ÂMÂL/Â#LÂ6LÂ7;LÃ2LÃ>LÄLÄ'LÄ)MÄ4L,Ä5DMÈ;MÉA;MËMË
MË MË9MÌ
MÌLÌ
LÌL)Ì%L/Ì(L)Ì)L/Ì,MÌ/MÌ5L8Ì6MÌ=	MÍMc              ‹   óÀ   K  — | j                   r|| j                  v r| j                  |   }|S  | j                  |fd|i|¤Žƒ d {  –—† }|| j                  |<   |S 7 Œ­w)Nr^   )r!   Údircacher{   )r0   r?   r^   r   r�   s        r   Ú_lszHTTPFileSystem._lsË   sg   è ø€ Ø×"Ò" s¨d¯m©mÑ';Ø—-‘- Ñ$ˆCð ˆ
ð &˜Ÿ™ cÑC°&ÐC¸FÑC×CˆCØ!$ˆD�M‰M˜#ÑØˆ
ð Dús   ‚AAÁAÁAc                 óX   — |j                   dk(  rt        |«      ‚|j                  «        y)zU
        Raises FileNotFoundError for 404s, otherwise uses raise_for_status.
        i”  N)ÚstatusÚFileNotFoundErrorÚraise_for_status)r0   Úresponser?   s      r   ri   z*HTTPFileSystem._raise_not_found_for_statusÕ   s'   € ð �?‰?˜cÒ!Ü# CÓ(Ð(Ø×!Ñ!Õ#r6   c              ‹   ób  K  — | j                   j                  «       }|j                  |«       t        j	                  |«       |€|�I||k(  ry|j                  di «      j                  «       }| j                  |||«      ƒ d {  –—† |d<   ||d<   | j                  «       ƒ d {  –—† } |j                  | j                  |«      fi |¤Ž4 ƒd {  –—† }|j                  «       ƒ d {  –—† }	| j                  ||«       d d d «      ƒd {  –—†  |	S 7 Œ‹7 Œm7 ŒD7 Œ.7 Œ# 1 ƒd {  –—†7  sw Y   	S xY w­w)Nr6   ÚheadersÚRange)r   r   re   rf   rg   r/   Ú_process_limitsrP   rh   r@   Úreadri   )
r0   r?   ÚstartÚendr   r}   r�   rJ   r~   r�   s
             r   Ú	_cat_filezHTTPFileSystem._cat_fileÝ   s  è ø€ Ø�[‰[×ÑÓˆØ
�	‰	�&ÔÜ�‰�SÔàÐ  Ø˜Š|ØØ—f‘f˜Y¨Ó+×0Ñ0Ó2ˆGà%)×%9Ñ%9¸#¸uÀcÓ%J×JˆG�GÑØ#ˆBˆy‰MØ×(Ñ(Ó*×*ˆØ�7—;‘;˜tŸ™¨sÓ3Ñ:°rÑ:÷ 	5ð 	5¸aØŸ™›—.ˆCØ×,Ñ,¨Q°Ô4÷	5÷ 	5ð ˆ
ð  Køà*øð	5øØ øð	5ø÷ 	5÷ 	5ð 	5ð ˆ
üs~   ‚BD/ÂDÂD/Â#DÂ$*D/ÃDÃD/ÃDÃ&DÃ'DÃ=D/ÄDÄ	D/ÄD/ÄD/ÄDÄD/ÄD,ÄD"Ä D,Ä'D/i  P c              ‹   ón  K  — | j                   j                  «       }|j                  |«       t        j	                  |«       | j                  «       ƒ d {  –—† } |j                  | j                  |«      fi |¤Ž4 ƒd {  –—† }	 t        |j                  d   «      }	|j                  |	«       | j                  ||«       t        |«      r|}
nt        |d«      }
	 d}|rQ|j                   j#                  |«      ƒ d {  –—† }|
j%                  |«       |j'                  t)        |«      «       |rŒQt        |«      s|
j+                  «        	 d d d «      ƒd {  –—†  y 7 �Œ	7 Œà# t        t        f$ r d }	Y ŒØw xY w7 Œ{# t        |«      s|
j+                  «        w w xY w7 ŒD# 1 ƒd {  –—†7  sw Y   y xY w­w)Nzcontent-lengthÚwbT)r   r   re   rf   rg   rP   rh   r@   Úintr�   Ú
ValueErrorÚKeyErrorÚset_sizeri   r   ÚopenÚcontentr�   ÚwriteÚrelative_updaterY   rE   )r0   ÚrpathÚlpathÚ
chunk_sizeÚcallbackr   r}   rJ   r~   rc   ÚoutfileÚchunks               r   Ú	_get_filezHTTPFileSystem._get_fileï   s~  è ø€ ð �[‰[×ÑÓˆØ
�	‰	�&ÔÜ�‰�UÔØ×(Ñ(Ó*×*ˆØ�7—;‘;˜tŸ™¨uÓ5Ñ<¸Ñ<÷ 	$ð 	$ÀðÜ˜1Ÿ9™9Ð%5Ñ6Ó7�ð ×Ñ˜dÔ#Ø×,Ñ,¨Q°Ô6Ü˜%Ô Ø‘ä˜u dÓ+�ð$Ø�ÙØ"#§)¡)§.¡.°Ó"<×<�EØ—M‘M %Ô(Ø×,Ñ,¬S°«ZÔ8ò ô
 " %Ô(Ø—M‘M•O÷+	$÷ 	$ð 	$ð +ùð	$ùô ¤Ð)ò Ø’ðúð =ùô " %Ô(Ø—M‘M•Oð )úð)	$ø÷ 	$÷ 	$ñ 	$üs¨   ‚AF5ÁEÁ*F5ÂE"ÂF5ÂF ÂE$Â=F Ã"E=Ã?E;Ä 1E=Ä2F ÅF5ÅFÅF5Å"F5Å$E8Å5F Å7E8Å8F Å;E=Å=FÆF ÆF5Æ F2Æ&F)Æ'F2Æ.F5ÚpostÚ	overwritec              ‹   óì  ‡‡‡K  — |dk7  rt        d«      ‚ˆˆˆfd„}| j                  j                  «       }	|	j                  |«       | j	                  «       ƒ d {  –—† }
|j                  «       }|dvrt        d|›�«      ‚t        |
|«      } || j                  |«      fd |«       i|	¤Ž4 ƒd {  –—† }| j                  ||«       d d d «      ƒd {  –—†  y 7 Œ}7 Œ)7 Œ	# 1 ƒd {  –—†7  sw Y   y xY w­w)Nr¦   zExclusive writec                 óÖ  •K  — t        ‰t        j                  «      rt        ‰«      } d}nt	        ‰d«      } d}| 5 }|r3‰j                  |j                  dd«      «       |j                  d«       n‰j                  t        |dd «      «       |j                  ‰«      }|r3|­–— ‰j                  t        |«      «       |j                  ‰«      }|rŒ3d d d «       y # 1 sw Y   y xY w­w)NFÚrbTr   r   rc   )rp   ÚioÚIOBaser   rš   r™   ÚseekrH   r�   r�   rY   )ÚcontextÚuse_seekÚfr£   r¡   r    rŸ   s       €€€r   Ú
gen_chunksz,HTTPFileSystem._put_file.<locals>.gen_chunks  sÈ   øè ø€ ô ˜%¤§¡Ô+Ü% eÓ,�Ø ‘ä˜u dÓ+�Ø�àð /˜AÙØ×%Ñ% a§f¡f¨Q°£lÔ3Ø—F‘F˜1•Ià×%Ñ%¤g¨a°¸Ó&>Ô?àŸ™˜zÓ*�ÙØ“KØ×,Ñ,¬S°«ZÔ8ØŸF™F :Ó.�Eò ÷/÷ /ñ /üs   ƒ9C)¼BCÃ	C)ÃC&Ã"C))r¥   Úputz.method has to be either 'post' or 'put', not: Údata)
rG   r   r   re   rP   Úlowerr—   rH   r@   ri   )r0   rŸ   rž   r    r¡   ÚmethodÚmoder   r°   r}   rJ   ÚmethÚresps    ` ``        r   Ú	_put_filezHTTPFileSystem._put_file  sô   úè ø€ ð �;ÒÜ%Ð&7Ó8Ð8ö	/ð. �[‰[×ÑÓˆØ
�	‰	�&ÔØ×(Ñ(Ó*×*ˆà—‘“ˆØ˜Ñ(ÜØ@ÀÀ
ÐKóð ô �w Ó'ˆÙ˜Ÿ™¨Ó.ÑH±Z³\ÐHÀRÑH÷ 	:ð 	:ÈDØ×,Ñ,¨T°5Ô9÷	:÷ 	:ð 	:ð +øð	:øð 	:ø÷ 	:÷ 	:ñ 	:üs[   …AC4ÁCÁAC4Â1CÂ2C4Â5CÃC4ÃCÃC4ÃC4ÃC4ÃC1Ã%C(Ã&C1Ã-C4c              ‹   óÒ  K  — | j                   j                  «       }|j                  |«       	 t        j	                  |«       | j                  «       ƒ d {  –—† } |j                  | j                  |«      fi |¤Žƒ d {  –—† }|4 ƒd {  –—†  |j                  dk  cd d d «      ƒd {  –—†  S 7 ŒY7 Œ17 Œ(7 Œ# 1 ƒd {  –—†7  sw Y   y xY w# t        j                  $ r Y yw xY w­w)Ni�  F)r   r   re   rf   rg   rP   rh   r@   rˆ   r   ÚClientError)r0   rS   r   r}   rJ   r~   s         r   Ú_existszHTTPFileSystem._exists?  sÊ   è ø€ Ø�[‰[×ÑÓˆØ
�	‰	�&Ôð	Ü�L‰L˜ÔØ ×,Ñ,Ó.×.ˆGØ!�g—k‘k $§/¡/°$Ó"7Ñ>¸2Ñ>×>ˆAØ÷ &ñ &Ø—x‘x #‘~÷&÷ &ñ &ð /øØ>øð&øð &ø÷ &÷ &ñ &ûä×"Ñ"ò 	Ùð	üs    ‚,C'¯(C ÁB1Á)C ÂB3Â
C ÂB5ÂC ÂB9ÂC Â+B7Â,C Â0C'Â1C Â3C Â5C Â7C Â9CÂ?CÃ CÃC Ã
C'ÃC ÃC$Ã!C'Ã#C$Ã$C'c              ‹   óD   K  —  | j                   |fi |¤Žƒ d {  –—† S 7 Œ­w©N)r»   )r0   rS   r   s      r   Ú_isfilezHTTPFileSystem._isfileK  s"   è ø€ Ø!�T—\‘\ $Ñ1¨&Ñ1×1Ð1Ð1ús   ‚ ™š c                 ó"  — |dk7  rt         ‚|�|n| j                  }| j                  j                  «       }	| j                  |	d<   |	j                  |«       i }
|xs) |
j                   | j                  |fi |¤Ž«      xs |
d   }t        | j                  | j                  «      }|rO|rM|
j                  dd«      r;t        | |f|||||xs | j                  |xs | j                  | j                  dœ|	¤ŽS t        | |f|| j                  |dœ|	¤ŽS )a³  Make a file-like object

        Parameters
        ----------
        path: str
            Full URL with protocol
        mode: string
            must be "rb"
        block_size: int or None
            Bytes to download in one request; use instance value if None. If
            zero, will return a streaming Requests file-like instance.
        kwargs: key-value
            Any other parameters, passed to requests calls
        r©   r   rc   ÚpartialT)rJ   r'   rµ   rc   r*   r+   r    )rµ   r    rJ   )rG   r'   r   r   r   re   Úinfor   r    rP   rh   ÚHTTPFiler*   r+   ÚHTTPStreamFile)r0   rS   rµ   r'   Ú
autocommitr*   r+   rc   r   r}   rÁ   rJ   s               r   Ú_openzHTTPFileSystem._openN  s,  € ð2 �4Š<Ü%Ð%Ø#-Ð#9‘Z¸t¿¹ˆ
Ø�[‰[×ÑÓˆØ!×.Ñ.ˆˆ>ÑØ
�	‰	�&ÔØˆØÒM�t—{‘{ 9 4§9¡9¨TÑ#<°VÑ#<Ó=ÒMÀÀfÁˆÜ�t—y‘y $×"2Ñ"2Ó3ˆÙ™$ 4§8¡8¨I°tÔ#<ÜØØðð  Ø%ØØØ%Ò8¨¯©Ø+ÒA¨t×/AÑ/AØ—Y‘Yñð ñð ô "ØØðð Ø—Y‘YØñð ñð r6   c              ‹   óØ   K  — | j                  «       ƒ d {  –—† }|€	  | j                  |fi |¤Žƒ d {  –—† d   }t        | |f| j                  ||dœ|¤ŽS 7 Œ@7 Œ$# t        $ r Y Œ*w xY w­w)Nrc   )r    rJ   rc   )rP   Ú_infor‰   ÚAsyncStreamFiler    )r0   rS   rµ   rc   r   rJ   s         r   Ú
open_asynczHTTPFileSystem.open_async‡  s�   è ø€ Ø×(Ñ(Ó*×*ˆØˆ<ðØ(˜dŸj™j¨Ñ8°Ñ8×8¸&ÑA�ô ØØð
ð —‘ØØñ
ð ñ
ð 	
ð +øð 9ùÜ$ò ÙðüsA   ‚A*–A—A*žA ´AµA ¼A*ÁA Á	A'Á$A*Á&A'Á'A*c                 óD   — t        || j                  | j                  «      S )z;Unique identifier; assume HTTP files are static, unchanging)r   r   Úprotocolr>   s     r   ÚukeyzHTTPFileSystem.ukey—  s   € ä˜˜TŸ[™[¨$¯-©-Ó8Ð8r6   c           	   ‹   ó�  K  — i }| j                  «       ƒ d{  –—† }dD ]W  }	 |j                  t        | j                  |«      f||dœ| j                  ¤|¤Žƒ d{  –—† «       |j                  d«      � nŒY |ddœ|¥d	d
i¥S 7 Œk7 Œ*# t        $ r2}|dk(  rt        |«      |‚t        j                  d|¬«       Y d}~ŒŸd}~ww xY w­w)aH  Get info of URL

        Tries to access location via HEAD, and then GET methods, but does
        not fetch the data.

        It is possible that the server does not supply any size information, in
        which case size will be given as None (and certain operations on the
        corresponding file will not work).
        N)Úheadrh   )r2   rJ   rc   rh   rW   )Úexc_info©rb   rc   rd   r`   )
rP   re   Ú
_file_infor@   r   rh   Ú	Exceptionr‰   rf   rg   )r0   r?   r   rÁ   rJ   ÚpolicyÚexcs          r   rÇ   zHTTPFileSystem._info›  sï   è ø€ ð ˆØ×(Ñ(Ó*×*ˆà%ò 	/ˆFð/Ø—‘Ü$ØŸ™¨Ó,ðà$*Ø 'ñð Ÿ+™+ð	ð
 !ñ÷ ôð —8‘8˜FÓ#Ð/Ùð 0ð	/ð&  TÑB¨TÐB°6¸6ÑBÐBð+ +øð
ùô ò /Ø˜U’?ä+¨CÓ0°cÐ9Ü—‘˜R¨#�×.Ñ.ûð	/üsJ   ‚C˜B™	C£8BÁB
ÁBÁ5CÂBÂ	CÂ(B>Â9CÂ>CÃCc           	   ‹   ó  K  — |�|dk  rt        d«      ‚ddl}|j                  d«      }| j                  |«      }|xs |j                  d«      }|j	                  d«      dk\  r|j	                  d«      n
t        |«      }|j	                  d«      dk\  r|j	                  d«      n
t        |«      }t        ||«      }	|j                  d	d
«      }
t        |«      sC | j                  |fi |¤Žƒ d{  –—† r"|
s|gS | | j                  |fi |¤Žƒ d{  –—† iS |
sg S i S d|d|	 v r7|d|	 j                  d«      }	|d|	dz    }||	dz   d j                  d«      dz   }nd}||	dz   d j                  d«      dz   }d|v r5|�1|j	                  d«      }||d j                  d«      dz   }||z
  |z   }nd} | j                  |f|dddœ|¤Žƒ d{  –—† }t        ||rdndz   «      } |j                  |«      }t!        |j#                  «       «      D ��ci c]T  \  }}|j%                  |j'                  d«      «      r/|s*|d   dk(  r"|j                  d«      r|j'                  d«      n||“ŒV }}}|
r|S t)        |«      S 7 �ŒŠ7 �Œl7 Œµc c}}w ­w)a  
        Find files by glob-matching.

        This implementation is idntical to the one in AbstractFileSystem,
        but "?" is not considered as a character for globbing, because it is
        so common in URLs, often identifying the "query" part.
        Nr\   zmaxdepth must be at least 1r   r   )z/**z/*Ú*ú[r^   FrW   z**T)ÚmaxdepthÚwithdirsr^   rd   r_   )r—   Úrerz   rT   ÚfindrY   Úminr/   Ú	has_magicr»   rÇ   ÚrindexÚcountÚ_findr   Úcompiler|   ÚitemsÚmatchru   Úlist)r0   rS   rØ   r   rÚ   Úends_with_slashÚappend_slash_to_dirnameÚidx_starÚ	idx_braceÚmin_idxr^   ÚrootÚdepthÚidx_double_starsÚdepth_double_starsÚallpathsÚpatternÚprÁ   r�   s                       r   Ú_globzHTTPFileSystem._glob½  sÅ  è ø€ ð Ð H¨q¢LÜÐ:Ó;Ð;ÛàŸ-™-¨Ó,ˆØ×#Ñ# DÓ)ˆØ"1Ò"Q°T·]±]À=Ó5QÐØ%)§Y¡Y¨s£^°qÒ%8�4—9‘9˜S”>¼cÀ$»iˆØ&*§i¡i°£n¸Ò&9�D—I‘I˜c”N¼sÀ4»yˆ	ä�h 	Ó*ˆà—‘˜H eÓ,ˆä˜ŒØ!�T—\‘\ $Ñ1¨&Ñ1×1Ð1ÙØ ˜6�Mà ¨
¨¯
©
°4Ñ(B¸6Ñ(B×"BÐCÐCáØ�Ià�IØ�D˜˜'�NÑ"Ø˜8˜G�n×+Ñ+¨CÓ0ˆGØ˜˜' A™+Ð&ˆDØ˜ 1™˜Ð'×-Ñ-¨cÓ2°QÑ6‰EàˆDØ˜ 1™˜Ð'×-Ñ-¨cÓ2°QÑ6ˆEà�4‰<ØÐ#Ø#'§9¡9¨T£?Ð Ø%)Ð*:Ð*;Ð%<×%BÑ%BÀ3Ó%GÈ!Ñ%KÐ"ØÐ 2Ñ2°XÑ=‘à�à#˜Ÿ™Øð
Ø ¨4¸ñ
Ø@Fñ
÷ 
ˆô ! ±©ÀRÑ!HÓIˆØ�"—*‘*˜WÓ%ˆô " (§.¡.Ó"2Ó3÷

ñ ��4Ø�}‰}˜QŸX™X c›]Ô+ñ /Ø˜‘L KÒ/Ø—J‘J˜s”Oð —‘˜”ð Øñð

ˆñ 

ñ ØˆJä˜“9Ðða 2ùð #Cùð,
úó

ùsK   ‚C-JÃ/I9Ã0 JÄI<ÄB8JÇ	I?Ç
AJÈAJÉ'JÉ<JÉ?JÊJc              ƒ   ó~   K  — 	 t        | j                  |«      ƒ d {  –—† «      S 7 Œ# t        t        f$ r Y yw xY w­w)NF)Úboolr†   r‰   r—   )r0   rS   s     r   Ú_isdirzHTTPFileSystem._isdir  s:   è ø€ ð	Ü˜dŸh™h t›n×,Ó-Ð-Ð,ùÜ!¤:Ð.ò 	Ùð	üs(   ‚=„( �&ž( ¥=¦( ¨:·=¹:º=c              ‹   ód  K  — | j                  |«      }|j                  di «      }t        t        |«      «      |d<   | j	                  «       ƒ d{  –—† } |j
                  |f||dœ|¤Ž4 ƒd{  –—† }|j                  «        ddd«      ƒd{  –—†  y7 ŒD7 Œ'7 Œ	# 1 ƒd{  –—†7  sw Y   yxY w­w)aˆ  
        Write bytes to a remote file over HTTP.

        Parameters
        ----------
        path : str
            Target URL where the data should be written
        value : bytes
            Data to be written
        mode : str
            How to write to the file - 'overwrite' or 'append'
        **kwargs : dict
            Additional parameters to pass to the HTTP request
        r�   úContent-LengthN)r²   r�   )rT   r/   ÚstrrY   rP   r±   rŠ   )	r0   rS   Úvaluerµ   r   r?   r�   rJ   r~   s	            r   Ú
_pipe_filezHTTPFileSystem._pipe_file  s®   è ø€ ð ×"Ñ" 4Ó(ˆØ—*‘*˜Y¨Ó+ˆÜ$'¬¨E«
£OˆÐ Ñ!à×(Ñ(Ó*×*ˆà�7—;‘;˜sÐJ¨¸ÑJÀ6ÑJ÷ 	!ð 	!ÈaØ×ÑÔ ÷	!÷ 	!ð 	!ð +øð	!øð 	!ø÷ 	!÷ 	!ñ 	!üsZ   ‚AB0ÁBÁB0Á/BÁ0B0Á3BÂB0ÂBÂB0ÂB0ÂB0ÂB-Â!B$Â"B-Â)B0)T)NN)r©   NNNNN)r©   Nr½   )r¦   )#Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úsepr   r&   Úpropertyr:   r@   ÚstaticmethodrL   rP   ÚclassmethodrT   rX   r{   r†   r   Úlsri   r“   r	   r¤   r¸   r»   r¾   rÅ   rÉ   rÌ   rÇ   rñ   rô   rù   Ú__classcell__©r5   s   @r   r   r   $   s  ø„ ñð €Cð ØØØØØØØØØØõ?&ðB ñó ðò3ð ñ
ó ð
òð ñó ðð óó ðó0ódñ 
�cÓ	€Bò$óð& (1Ð;Kó$ðD Ø!ØØó0:òd
ò2ð ØØØØØó7ór
ò 9ò CóDGòR÷!r6   r   c                   ór   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 dˆ fd„	Zdˆ fd„	Zd„ Z ee«      Zd„ Z	d„ Z
 ee
«      Zˆ xZS )	rÂ   a�  
    A file-like object pointing to a remote HTTP(S) resource

    Supports only reading, with read-ahead of a predetermined block-size.

    In the case that the server does not supply the filesize, only reading of
    the complete file in one go is supported.

    Parameters
    ----------
    url: str
        Full URL of the remote resource, including the protocol
    session: aiohttp.ClientSession or None
        All calls will be made within this session, to avoid restarting
        connections where the server allows this
    block_size: int or None
        The amount of read-ahead to do, in bytes. Default is 5MB, or the value
        configured for the FileSystem creating this file
    size: None or int
        If given, this is the size of the file in bytes, and we don't attempt
        to call the server to find the value.
    kwargs: all other key-values are passed to requests calls.
    c           
      ó    •— |dk7  rt        d«      ‚|
| _        |	| _        || _        || _        ||ddœ| _        t        ‰| �  d||||||dœ|¤Ž y )Nr©   zFile mode not supportedr`   ra   )ÚfsrS   rµ   r'   r*   r+   r   )rG   r   r    r?   rJ   Údetailsr%   r&   )r0   r  r?   rJ   r'   rµ   r*   r+   rc   r    r   r   r5   s               €r   r&   zHTTPFile.__init__?  sq   ø€ ð �4Š<Ü%Ð&?Ó@Ð@Ø(ˆÔØˆŒ	ØˆŒØˆŒØ #¨T¸6ÑBˆŒÜ‰Ñð 	
ØØØØ!Ø!Ø'ñ	
ð ó	
r6   c                 ó>  •— |dk  rD| j                   dk(  r5| j                  �| j                  | j                  k  s| j                  «        | j                  €|dk  r4| j                  «        n#t	        | j                  | j                   z
  |«      }t
        ‰| �  |«      S )a5  Read bytes from file

        Parameters
        ----------
        length: int
            Read up to this many bytes. If negative, read all content to end of
            file. If the server has not supplied the filesize, attempting to
            read only part of the data will raise a ValueError.
        r   )Úlocrc   Ú	blocksizeÚ
_fetch_allrÜ   r%   r�   )r0   Úlengthr5   s     €r   r�   zHTTPFile.read^  s|   ø€ ð �aŠZ˜DŸH™H¨šMà—Y‘YÐ*¨t¯y©y¸D¿N¹NÒ/Jà�O‰OÔØ�9‰9ÐØ˜ŠzØ—‘Õ!ä˜Ÿ™ T§X¡XÑ-¨vÓ6ˆFÜ‰w‰|˜FÓ#Ð#r6   c              ƒ   ó0  K  — t         j                  d| › �«       t        | j                  t        «      sÃ | j
                  j                  | j                  j                  | j                  «      fi | j                  ¤Žƒ d{  –—† }|4 ƒd{  –—†  |j                  «        |j                  «       ƒ d{  –—† }t	        t        |«      dd|¬«      | _        t        |«      | _        ddd«      ƒd{  –—†  yy7 Œv7 Œm7 ŒG7 Œ# 1 ƒd{  –—†7  sw Y   yxY w­w)z¥Read whole file in one shot, without caching

        This is only called when position is still at zero,
        and read() is called without a byte-count.
        zFetch all for N)rc   Úfetcherr  r²   )rf   rg   rp   Úcacher   rJ   rh   r  r@   r?   r   rŠ   r�   rY   rc   )r0   r~   r�   s      r   Úasync_fetch_allzHTTPFile.async_fetch_allu  sá   è ø€ ô 	�‰�~ d VÐ,Ô-Ü˜$Ÿ*™*¤hÔ/Ø&�d—l‘l×&Ñ& t§w¡w×'9Ñ'9¸$¿(¹(Ó'CÑSÀtÇ{Á{ÑS×SˆAØ÷ %ñ %Ø×"Ñ"Ô$ØŸF™F›H—n�Ü%Ü˜S›¨4¸4Àcô�”
ô   ›H�”	÷%÷ %ð %ð 0ØSøð%øà$øð%ø÷ %÷ %ñ %üsl   ‚B DÂC9Â
DÂC;ÂDÂ$DÂ5C=Â61DÃ'DÃ2C?Ã3DÃ;DÃ=DÃ?DÄDÄD
ÄDÄDc                 ó  — |j                  dd«      }t        j                  d|«      }|sy|d   dk(  rdx}}n.|d   j                  d«      D �cg c]  }t	        |«      ‘Œ c}\  }}|d	   dk(  rdnt	        |d	   «      }|||fS c c}w )
zParse the Content-Range headerúContent-RangerW   zbytes (\d+-\d+|\*)/(\d+|\*))NNNr\   rÖ   Nú-r   )rh   rÚ   rã   Úsplitr–   )r0   r�   ÚsÚmr‘   r’   ÚxÚtotals           r   Ú_parse_content_rangezHTTPFile._parse_content_rangeˆ  s�   € à�K‰K˜¨Ó,ˆÜ�H‰HÐ3°QÓ7ˆÙØ#àˆQ‰4�3Š;ØÐˆE‘Cà*+¨A©$¯*©*°S«/Ö: Qœ#˜a�&Ò:‰JˆE�3Ø˜!™ š‘¬¨Q¨q©T«ˆØ�c˜5Ð Ð ùò ;s   ÁBc              ƒ   óŽ  K  — t         j                  d| › d|› d|› �«       | j                  j                  «       }|j	                  di «      j                  «       }d|› d|dz
  › �|d<   t         j                  | j
                  › d|d   › �«        | j                  j                  | j                  j                  | j
                  «      fd|i|¤Žƒ d	{  –—† }|4 ƒd	{  –—†  |j                  d
k(  r	 d	d	d	«      ƒd	{  –—†  y|j                  «        |j                  dk(  xsQ | j                  |j                  «      d   |k(  xs. t        |j                  j                  d|dz   «      «      ||z
  k  }|r|j                  «       ƒ d	{  –—† }n{|dkD  rt!        d«      ‚d}g }	 |j"                  j                  d«      ƒ d	{  –—† }	|	r(|j%                  |	«       |t'        |	«      z  }|||z
  kD  rnnŒOdj)                  |«      d	||z
   }|cd	d	d	«      ƒd	{  –—†  S 7 �ŒL7 �ŒD7 �Œ'7 Œœ7 Œe7 Œ# 1 ƒd	{  –—†7  sw Y   y	xY w­w)a3  Download a block of data

        The expectation is that the server returns only the requested bytes,
        with HTTP code 206. If this is not the case, we first check the headers,
        and then stream the output - if the data size is bigger than we
        requested, an exception is raised.
        zFetch range for z: r  r�   úbytes=r\   rŽ   z : Ni   r6   éÎ   r   rö   z¨The HTTP server doesn't appear to support range requests. Only reading this file from the beginning is supported. Open with block_size=0 for a streaming file interface.i   )rf   rg   r   r   r/   r?   rJ   rh   r  r@   rˆ   rŠ   r  r�   r–   r�   r—   r›   ÚappendrY   rx   )
r0   r‘   r’   r   r�   r~   Úresponse_is_ranger�   Úclr£   s
             r   Úasync_fetch_rangezHTTPFile.async_fetch_range–  sM  è ø€ ô 	�‰Ð'¨ v¨R°¨w°a¸°uÐ=Ô>Ø—‘×!Ñ!Ó#ˆØ—*‘*˜Y¨Ó+×0Ñ0Ó2ˆØ# E 7¨!¨C°!©G¨9Ð5ˆ�ÑÜ�‰˜Ÿ™�z  W¨WÑ%5Ð$6Ð7Ô8Ø"�$—,‘,×"Ñ"Ø�G‰G×Ñ˜tŸx™xÓ(ñ
Ø29ð
Ø=Cñ
÷ 
ˆð ÷ )	ñ )	Ø�x‰x˜3Šà÷)	÷ )	ð )	ð ×ÑÔ ð —‘˜C‘ò PØ×,Ñ,¨Q¯Y©YÓ7¸Ñ:¸eÑCòPä�q—y‘y—}‘}Ð%5°s¸Q±wÓ?Ó@ÀCÈ%ÁKÑOð ñ !àŸF™F›H—n‘Ø˜’Ü ðMóð ð �Ø�ØØ"#§)¡)§.¡.°Ó"7×7�EáØŸ
™
 5Ô)Øœc %›jÑ(˜Ø  e¡Ò+Ø!àð ð —h‘h˜s“m M c¨E¡kÐ2�Ø÷S)	÷ )	ñ )	ð
ùð)	ùð )	ùð$ %øð 8øð?)	ø÷ )	÷ )	ñ )	üsž   ‚CIÃH!Ã
IÃ H$Ã!IÃ$H0Ã5IÄ H'ÄIÄBH0ÆH*Æ8H0ÇH,ÇAH0ÈIÈH.ÈIÈ$IÈ'IÈ*H0È,H0È.IÈ0IÈ6H9È7IÈ>I)NNr©   r   NNNF©éÿÿÿÿ)rú   rû   rü   rý   r&   r�   r  r   r  r  r!  Ú_fetch_ranger  r  s   @r   rÂ   rÂ   &  sU   ø„ ñð8 ØØØØØØØõ
õ>$ò.%ñ" ˜oÓ.€Jò!ò9ñv  Ð 1Ó2„Lr6   rÂ   z([*[])c                 ó4   — t         j                  | «      }|d uS r½   )Úmagic_checkÚsearch)r  rã   s     r   rÝ   rÝ   ×  s   € Ü×Ñ˜qÓ!€EØ˜ÐÐr6   c                   óP   ‡ — e Zd Zdˆ fd„	Zdd„Zdd„Z ee«      Zd„ Zˆ fd„Z	ˆ xZ
S )	rÃ   c                 ó  •‡ ‡‡— ‰j                  dd«      ‰ _        ‰‰ _        |‰ _        |‰ _        |dk7  rt
        ‚‰d dœ‰ _        t        ‰‰ �   d|‰|ddœ‰¤Ž ˆˆ ˆfd„}t        ‰ j                  |«      ‰ _
        |j                  ‰ _        y )	Nr   Fr©   rÐ   Únone©r  rS   rµ   r*   c               “   óä   •K  —  ‰j                   j                  ‰j                  j                  ‰«      fi ‰¤Žj	                  «       ƒ d {  –—† } ‰j                  j                  | ‰«       | S 7 Œ"­wr½   )rJ   rh   r  r@   Ú
__aenter__ri   )r~   r   r0   r?   s    €€€r   Úcorz$HTTPStreamFile.__init__.<locals>.corç  s\   øè ø€ Ø&�d—l‘l×&Ñ& t§w¡w×'9Ñ'9¸#Ó'>ÑIÀ&ÑI×TÑTÓV×VˆAØ�G‰G×/Ñ/°°3Ô7ØˆHð Wús   ƒAA0ÁA.Á#A0r   )r/   r   r?   r    rJ   r—   r  r%   r&   r   r~   )	r0   r  r?   rµ   r    rJ   r   r.  r5   s	   ` `   ` €r   r&   zHTTPStreamFile.__init__Ý  sƒ   û€ Ø"ŸJ™J ~°uÓ=ˆÔØˆŒØˆŒ	ØˆŒØ�4Š<ÜÐØ #¨TÑ2ˆŒÜ‰ÑÐQ˜B S¨tÀÑQÈ&ÒQö	ô
 �d—i‘i Ó%ˆŒØ—G‘Gˆ�	r6   c                 óX   — |dk(  r|dk(  ry || j                   k(  r|dk(  ry t        d«      ‚)Nr   r\   zCannot seek streaming HTTP file)r
  r—   )r0   r
  Úwhences      r   r¬   zHTTPStreamFile.seekï  s2   € Ø�!Š8˜ !šØØ�$—(‘(Š?˜v¨š{ØÜÐ:Ó;Ð;r6   c              ƒ   ó¨   K  — | j                   j                  j                  |«      ƒ d {  –—† }| xj                  t	        |«      z  c_        |S 7 Œ$­wr½   )r~   r›   r�   r
  rY   )r0   Únumr�   s      r   Ú_readzHTTPStreamFile._readö  s=   è ø€ Ø—F‘F—N‘N×'Ñ'¨Ó,×,ˆØ�Š”C˜“HÑ�Øˆ
ð -ús   ‚)A«A¬%Ac              ƒ   ó@   K  — | j                   j                  «        y ­wr½   )r~   rE   r9   s    r   rI   zHTTPStreamFile._closeý  s   è ø€ Ø�‰�‰�ùs   ‚c                 ó~   •— t        j                  | j                  «       | j                  «       t        ‰| �  «        y r½   )ÚasyncioÚrun_coroutine_threadsaferI   r    r%   rE   ©r0   r5   s    €r   rE   zHTTPStreamFile.close   s&   ø€ Ü×(Ñ(¨¯©«¸¿	¹	ÔBÜ‰‰�r6   )r©   NN)r   r"  )rú   rû   rü   r&   r¬   r3  r   r�   rI   rE   r  r  s   @r   rÃ   rÃ   Ü  s-   ø„ õó$<óñ
 ˜Ó€Dò÷ð r6   rÃ   c                   ó4   ‡ — e Zd Z	 dˆ fd„	Zdd„Zˆ fd„Zˆ xZS )rÈ   c                 óœ   •— || _         || _        d | _        |dk7  rt        ‚|d dœ| _        || _        t        ‰| �  |||d¬«       || _        y )Nr©   rÐ   r*  r+  )	r?   rJ   r~   r—   r  r   r%   r&   rc   )	r0   r  r?   rµ   r    rJ   rc   r   r5   s	           €r   r&   zAsyncStreamFile.__init__  sW   ø€ ð ˆŒØˆŒØˆŒØ�4Š<ÜÐØ #¨TÑ2ˆŒØˆŒÜ‰Ñ˜B S¨tÀÐÔGØˆ�	r6   c              ƒ   óÞ  K  — | j                   €� | j                  j                  | j                  j	                  | j
                  «      fi | j                  ¤Žj                  «       ƒ d {  –—† }| j                  j                  || j
                  «       || _         | j                   j                  j                  |«      ƒ d {  –—† }| xj                  t        |«      z  c_        |S 7 Œ~7 Œ&­wr½   )r~   rJ   rh   r  r@   r?   r   r-  ri   r›   r�   r
  rY   )r0   r2  r~   r�   s       r   r�   zAsyncStreamFile.read  s±   è ø€ Ø�6‰6ˆ>Ø&�d—l‘l×&Ñ&Ø—‘×"Ñ" 4§8¡8Ó,ñØ04·±ñç‰j‹l÷ˆAð �G‰G×/Ñ/°°4·8±8Ô<ØˆDŒFØ—F‘F—N‘N×'Ñ'¨Ó,×,ˆØ�Š”C˜“HÑ�Øˆ
ðøð
 -ús%   ‚A(C-Á*C)Á+AC-ÃC+Ã%C-Ã+C-c              ƒ   ó˜   •K  — | j                   �!| j                   j                  «        d | _         t        ‰| �  «       ƒ d {  –—†  y 7 Œ­wr½   )r~   rE   r%   r8  s    €r   rE   zAsyncStreamFile.close  s4   øè ø€ Ø�6‰6ÐØ�F‰F�L‰LŒNØˆDŒFÜ‰g‰m‹o×Òús   ƒ?A
ÁAÁA
)r©   NNNr"  )rú   rû   rü   r&   r�   rE   r  r  s   @r   rÈ   rÈ     s   ø„ à@Dõó	÷ð r6   rÈ   c              ‹   ó  K  — |j                  «       }|j                  di «      j                  «       }d|› d|dz
  › �|d<    | j                  |fd|i|¤Žƒ d {  –—† }|j                  «        |4 ƒd {  –—†  |j	                  «       ƒ d {  –—† }d d d «      ƒd {  –—†  |r8t        |d«      5 }	|	j                  |«       |	j                  «       d d d «       y S 7 Œƒ7 Œj7 ŒT7 ŒF# 1 ƒd {  –—†7  sw Y   ŒVxY w# 1 sw Y   y xY w­w)Nr�   r  r  r\   rŽ   zr+b)r   r/   rh   rŠ   r�   rš   r¬   rœ   )
rJ   r?   r‘   r’   r`   r   r�   r~   r�   r¯   s
             r   Ú	get_ranger>  %  sý   è ø€ à�[‰[‹]€FØ�j‰j˜ BÓ'×,Ñ,Ó.€GØ ˜w a¨¨a© yÐ1€GˆGÑØˆg�k‰k˜#Ñ9 wÐ9°&Ñ9×9€AØ×ÑÔØ÷ ñ Ø—F‘F“H�nˆ÷÷ áÜ�$˜Óð 	 !Ø�F‰F�5ŒMØ�G‰G�CŒL÷	ð 	ð ˆ
ð 	:øðøØøðø÷ ÷ ñ ú÷	ð 	üs„   ‚ADÁCÁDÁ4CÁ5DÁ8C%ÂC!ÂC%ÂDÂC#ÂDÂ/#C:ÃDÃDÃ!C%Ã#DÃ%C7Ã+C.Ã,C7Ã3DÃ:DÃ?Dc              ‹   ób  K  — t         j                  d| «       |j                  «       }|j                  dd«      }|j	                  di «      j                  «       }d|d<   ||d<   i }|dk(  r |j
                  | fd|i|¤Žƒ d{  –—† }n1|d	k(  r |j                  | fd|i|¤Žƒ d{  –—† }nt        d
|› �«      ‚|4 ƒd{  –—†  |j                  «        d|j                  v r;d|j                  vs|j                  d   dv rWt        |j                  d   «      |d<   n;d|j                  v r-t        |j                  d   j                  d«      d   «      |d<   d|j                  v r$|j                  d   j                  d«      d   |d<   |j                  j	                  d«      dk(  rd|d<   t        |j                  «      |d<   dD ]0  }|j                  j	                  |«      sŒ|j                  |   ||<   Œ2 ddd«      ƒd{  –—†  |S 7 �ŒŠ7 �Œj7 �ŒS7 Œ# 1 ƒd{  –—†7  sw Y   |S xY w­w)zÜCall HEAD on the server to get details about the file (size/checksum etc.)

    Default operation is to explicitly allow redirects and use encoding
    'identity' (no compression) to get the true size of the target.
    zRetrieve file size for %sÚallow_redirectsTr�   ÚidentityzAccept-EncodingrÎ   Nrh   z)size_policy must be "head" or "get", got rö   zContent-Encoding)rA  rW   rc   r  r   r\   zContent-Typeú;r   ÚmimetypezAccept-Rangesr*  FrÀ   r?   )ÚETagzContent-MD5ÚDigest)rf   rg   r   r/   rh   rÎ   Ú	TypeErrorrŠ   r�   r–   r  Ú	partitionr÷   r?   )	r?   rJ   r2   r   ÚarrÎ   rÁ   r~   Úchecksum_fields	            r   rÑ   rÑ   6  s6  è ø€ ô ‡L�LÐ,¨cÔ2Ø�[‰[‹]€FØ	�‰Ð% tÓ	,€BØ�:‰:�i Ó$×)Ñ)Ó+€DØ(€DÐ	ÑØ€Fˆ9Ñà€DØ�fÒØ�'—,‘,˜sÑA°BÐA¸&ÑA×A‰Ø	˜Ò	Ø�'—+‘+˜cÑ@°2Ð@¸Ñ@×@‰äÐCÀKÀ=ÐQÓRÐRØ÷ Añ AØ	×ÑÔà˜qŸy™yÑ(ð "¨¯©Ñ2°a·i±iÐ@RÑ6Sð Xñ 7ô  # 1§9¡9Ð-=Ñ#>Ó?��V’Ø §	¡	Ñ)Ü˜qŸy™y¨Ñ9×?Ñ?ÀÓDÀQÑGÓHˆD�‰Là˜QŸY™YÑ&Ø Ÿy™y¨Ñ8×BÑBÀ3ÓGÈÑJˆD�Ñà�9‰9�=‰=˜Ó)¨VÒ3ð $ˆD�‰Oä˜!Ÿ%™%“jˆˆU‰à?ò 	AˆNØ�y‰y�}‰}˜^Õ,Ø'(§y¡y°Ñ'@��^Ò$ð	A÷1A÷ Að8 €KðC Bùà@ùðAùð Aø÷ A÷ Að Að8 €Küss   ‚BH/ÂHÂ"H/Â'HÂ(H/ÃHÃH/ÃD"HÇ(HÇ<H/ÈHÈH/ÈH/ÈH/ÈH/ÈH,ÈH"È H,È'H/c              �   óŽ   K  — |€t        «       ƒ d {  –—† }t        | g|¢­d|i|¤Žƒ d {  –—† }|j                  d«      S 7 Œ.7 Œ­w)NrJ   rc   )r   rÑ   rh   )r?   rJ   Úargsr   rÁ   s        r   Ú
_file_sizerL  i  sI   è ø€ Ø€Ü"›×$ˆÜ˜CÐB°4ÒB¨ÐB¸6ÑB×B€DØ�8‰8�FÓÐð %øØBús   ‚A’A“A«A¬AÁAr½   )rÎ   )-r6  rª   ÚloggingrÚ   rN   r   Úurllib.parser   r   r<   Úfsspec.asynr   r   r   r   Úfsspec.callbacksr	   Úfsspec.exceptionsr
   Úfsspec.specr   Úfsspec.utilsr   r   r   r   r   Úcachingr   rá   rm   rk   Ú	getLoggerrf   r   r   rÂ   r&  rÝ   rÃ   rÈ   r>  rÑ   rL  Ú	file_sizer   r6   r   ú<module>rW     sç   ðÛ Û 	Û Û 	Û Ý Ý !ã Û ç VÓ VÝ -Ý ,Ý ,÷õ õ ð €R‡Z�ZÐMÓN€Ø€b‡j�jÐEÓF€Ø	ˆ×	Ñ	˜=Ó	)€ò+ô!�_ô !ôDk3Ð#ô k3ð\ ˆb�j‰j˜Ó"€òô
&Ð)ô &ôRÐ/ô ó@ó"0ófñ ˜Ó$�	r6   