Ë
    _§1hny  ã            	       ó   — d dl mZ 	 d dlmZ d dlmZmZm	Z	 d dl
Z
d dlmZ d dlZd dlZd dlmZ d dlZd dlZd dlZdZej(                  dk(  rej*                  d	k  r	 d dlZ ej.                  e«      ZdxZZdxZZdxZZeeedœZ  e! e"e jG                  «       e jI                  «       «      «      Z%ej                   xZ&Z'd„ Z( G d„ de)«      Z* G d„ de*«      Z+ G d„ de*«      Z, G d„ de*«      Z- G d„ de*«      Z. G d„ de*«      Z/ G d„ de*«      Z0ddd d!œZ1d"d#d$d%d&d'd(d)d*œZ2ed+ed+ed,iZ3	 	 d8d-„Z4d.„ Z5d/„ Z6e6Z7d0„ Z8e8Z9	 	 	 	 	 d9d1„Z: G d2„ d3ej                   «      Z;d4„ Z<d5D ]A  Z e=e;ed«      Z> e?e>e«      rŒe;j€                  jƒ                  e«        eBe;e e<e«      «       ŒC  G d6„ d7e;«      ZCy# e$ r
 d dlmZ Y �Œ­w xY w# e$ r	  ed
«      ‚w xY w):é    )Ú	b64encode)ÚCallable)Ú
EOPNOTSUPPÚEINVALÚEAGAINN)ÚBytesIO)ÚSEEK_CURz1.7.1Únt)é   r   z8To run PySocks on Windows you must install win_inet_ptoné   é   r   )ÚSOCKS4ÚSOCKS5ÚHTTPc                 óB   ‡ — t        j                  ‰ «      ˆ fd„«       }|S )Nc                  óö   •— | d   }	 |j                  «       }|dk(  r|j                  d«        ‰| i |¤Ž|dk(  r|j                  d«       S S # t        $ r}‚ d }~ww xY w# dk(  r|j                  d«       w w xY w)Nr   TF)Ú
gettimeoutÚsetblockingÚ	Exception)ÚargsÚkwargsÚselfÚ_is_blockingÚeÚfunctions        €úC/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/socks.pyÚwrapperz"set_self_blocking.<locals>.wrapper(   s�   ø€ à�A‰wˆð
	(ØŸ?™?Ó,ˆLØ˜qÒ Ø× Ñ  Ô&Ù˜TÐ, VÑ,ð
 ˜qÒ Ø× Ñ  Õ'ð !øô	 ò 	Øûð	ûð ˜qÒ Ø× Ñ  Õ'ð !ús#   ˆ-A Á	AÁAÁAÁA ÁA8)Ú	functoolsÚwraps)r   r   s   ` r   Úset_self_blockingr    &   s%   ø€ ä‡_�_�XÓó(ó ð(ð €Nó    c                   ó   — e Zd ZdZdd„Zd„ Zy)Ú
ProxyErrorz4Socket_err contains original socket.error exception.Nc                 ón   — || _         || _        |r%| xj                   dj                  |«      z  c_         y y )Nz: {})ÚmsgÚ
socket_errÚformat)r   r%   r&   s      r   Ú__init__zProxyError.__init__;   s/   € ØˆŒØ$ˆŒáØ�HŠH˜Ÿ™ jÓ1Ñ1ŽHð r!   c                 ó   — | j                   S ©N)r%   ©r   s    r   Ú__str__zProxyError.__str__B   s   € Ø�x‰xˆr!   r*   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r(   r,   © r!   r   r#   r#   9   s   „ Ù>ó2ór!   r#   c                   ó   — e Zd Zy)ÚGeneralProxyErrorN©r-   r.   r/   r1   r!   r   r3   r3   F   ó   „ Ør!   r3   c                   ó   — e Zd Zy)ÚProxyConnectionErrorNr4   r1   r!   r   r7   r7   J   r5   r!   r7   c                   ó   — e Zd Zy)ÚSOCKS5AuthErrorNr4   r1   r!   r   r9   r9   N   r5   r!   r9   c                   ó   — e Zd Zy)ÚSOCKS5ErrorNr4   r1   r!   r   r;   r;   R   r5   r!   r;   c                   ó   — e Zd Zy)ÚSOCKS4ErrorNr4   r1   r!   r   r=   r=   V   r5   r!   r=   c                   ó   — e Zd Zy)Ú	HTTPErrorNr4   r1   r!   r   r?   r?   Z   r5   r!   r?   zRequest rejected or failedzLRequest rejected because SOCKS server cannot connect to identd on the clientzPRequest rejected because the client program and identd report different user-ids)é[   é\   é]   zGeneral SOCKS server failurez!Connection not allowed by rulesetzNetwork unreachablezHost unreachablezConnection refusedzTTL expiredz(Command not supported, or protocol errorzAddress type not supported)r   r   r   é   é   é   é   é   i8  i�  c                 ó„   — | ||||r|j                  «       nd|r|j                  «       ft        _        ydft        _        y)z›Sets a default proxy.

    All further socksocket objects will use the default unless explicitly
    changed. All parameters are as for socket.set_proxy().N)ÚencodeÚ
socksocketÚdefault_proxy)Ú
proxy_typeÚaddrÚportÚrdnsÚusernameÚpasswords         r   Úset_default_proxyrR   s   s@   € ð !+¨D°$¸Ù5= §¡Ô 1À4Ù5= §¡Ó 1ð I„JÕàCGð I„JÕr!   c                  óH   — d|v r|j                  d«      |d<   t        | i |¤ŽS ©NÚ	proxytyperL   )ÚpoprR   )r   r   s     r   ÚsetdefaultproxyrW   ~   s-   € Ø�fÑØ%Ÿz™z¨+Ó6ˆˆ|ÑÜ˜dÐ- fÑ-Ð-r!   c                  ó"   — t         j                  S )z4Returns the default proxy, set by set_default_proxy.)rJ   rK   r1   r!   r   Úget_default_proxyrY   „   s   € ä×#Ñ#Ð#r!   c                 ód   — t         j                  rt         | j                  _        yt        d«      ‚)a  Attempts to replace a module's socket library with a SOCKS socket.

    Must set a default proxy using set_default_proxy(...) first. This will
    only work on modules that import socket directly into the namespace;
    most of the Python Standard Library falls into this category.zNo default proxy specifiedN)rJ   rK   Úsocketr3   )Úmodules    r   Úwrap_moduler]   ‹   s%   € ô ×ÒÜ)ˆ�‰ÕäÐ <Ó=Ð=r!   c
           	      óÌ  — | \  }
}|
j                  d«      r|
j                  d«      }
|r"|j                  d«      r|j                  d«      }d}t        j                  ||dt        j                  «      D ]š  }|\  }}}}}d}	 t        |||«      }|	r|	D ]  } |j                  |Ž  Œ t        |t        t        f«      r|j                  |«       |r|j                  ||||||«       |r|j                  |«       |j                  |
|f«       |c S  |r|‚t        j                  d«      ‚# t        j                  t        f$ r }|}|r|j!                  «        d}Y d}~Œêd}~ww xY w)aí  create_connection(dest_pair, *[, timeout], **proxy_args) -> socket object

    Like socket.create_connection(), but connects to proxy
    before returning the socket object.

    dest_pair - 2-tuple of (IP/hostname, port).
    **proxy_args - Same args passed to socksocket.set_proxy() if present.
    timeout - Optional socket timeout value, in seconds.
    source_address - tuple (host, port) for the socket to bind to as its source
    address before connecting (only for compatibility)
    ú[z[]Nr   zgai returned empty list.)Ú
startswithÚstripr[   ÚgetaddrinfoÚSOCK_STREAMrJ   Ú
setsockoptÚ
isinstanceÚintÚfloatÚ
settimeoutÚ	set_proxyÚbindÚconnectÚerrorr#   Úclose)Ú	dest_pairÚtimeoutÚsource_addressrL   Ú
proxy_addrÚ
proxy_portÚ
proxy_rdnsÚproxy_usernameÚproxy_passwordÚsocket_optionsÚremote_hostÚremote_portÚerrÚrÚfamilyÚsocket_typeÚprotoÚ	canonnameÚsaÚsockÚoptr   s                         r   Úcreate_connectionr‚   ™   sj  € ð$  )Ñ€K�Ø×Ñ˜cÔ"Ø!×'Ñ'¨Ó-ˆÙ�j×+Ñ+¨CÔ0Ø×%Ñ% dÓ+ˆ
à
€Cô ×Ñ 
¨J¸¼6×;MÑ;MÓNò ˆØ45Ñ1ˆ�˜U I¨rØˆð	Ü˜f k°5Ó9ˆDáØ)ò *�CØ#�D—O‘O SÒ)ð*ô ˜'¤C¬ <Ô0Ø—‘ Ô(áØ—‘˜z¨:°zÀ:Ø-¨~ô?áØ—	‘	˜.Ô)à�L‰L˜+ {Ð3Ô4ØŠKð)ñ8 Øˆ	ä
�,‰,Ð1Ó
2Ð2øô —‘œjÐ)ò 	ØˆCÙØ—
‘
”Ø�ÿøð		ús   ÂBD*Ä*E#ÅEÅE#c                   ó$   — e Zd ZdZd„ Z e«       Zy)Ú_BaseSocketzBAllows Python 2 delegated methods such as send() to be overridden.c                 óÀ   — t        j                  | g|¢­i |¤Ž t        «       | _        | j                  D ]'  }t        | |«      | j                  |<   t        | |«       Œ) y r*   )Ú_orig_socketr(   ÚdictÚ_savedmethodsÚ
_savenamesÚgetattrÚdelattr©r   ÚposÚkwÚnames       r   r(   z_BaseSocket.__init__Ø   sX   € Ü×Ñ˜dÐ/ SÒ/¨BÒ/ä!›VˆÔØ—O‘Oò 	 ˆDÜ'.¨t°TÓ':ˆD×Ñ˜tÑ$Ü�D˜$Õñ	 r!   N)r-   r.   r/   r0   r(   Úlistr‰   r1   r!   r   r„   r„   Ö   s   „ ÙLò ñ “�Jr!   r„   c                 ó   ‡ — ˆ fd„S )Nc                 ó.   •—  | j                   ‰   |i |¤ŽS r*   )rˆ   rŒ   s      €r   ú<lambda>z_makemethod.<locals>.<lambda>ä   s   ø€ Ð$< D×$6Ñ$6°tÑ$<¸cÐ$HÀRÑ$H€ r!   r1   )r�   s   `r   Ú_makemethodr”   ã   s	   ø€ ÛHÐHr!   )ÚsendtoÚsendÚrecvfromÚrecvc                   óB  ‡ — e Zd ZdZdZej                  ej                  dfˆ fd„	Zd„ Z	ˆ fd„Z
d„ Zd„ Z	 	 dd	„Zd
„ Zˆ fd„Zˆ fd„Zdˆ fd„	Zdˆ fd„	Zd„ Zˆ fd„Zd„ ZeZd„ ZeZd„ ZeZd„ Zˆ fd„Zd„ Zd„ Zd„ Zd„ Z e!ee"ee#e iZ$e%dˆ fd„	«       Z&e%d„ «       Z'd„ Z(ˆ xZ)S ) rJ   a2  socksocket([family[, type[, proto]]]) -> socket object

    Open a SOCKS enabled socket. The parameters are the same as
    those of the standard socket init. In order for SOCKS to work,
    you must specify family=AF_INET and proto=0.
    The "type" argument must be either SOCK_STREAM or SOCK_DGRAM.
    Nr   c                 ó6  •— |t         j                  t         j                  fvrd}t        |j	                  |«      «      ‚t        t        | �  |||g|¢­i |¤Ž d | _        | j                  r| j                  | _
        nd| _
        d | _        d | _        d | _        y )Nz0Socket type must be stream or datagram, not {!r})NNNNNN)r[   rc   Ú
SOCK_DGRAMÚ
ValueErrorr'   ÚsuperrJ   r(   Ú
_proxyconnrK   ÚproxyÚproxy_socknameÚproxy_peernameÚ_timeout)r   r{   Útyper}   r   r   r%   Ú	__class__s          €r   r(   zsocksocket.__init__ü   s�   ø€ àœ×*Ñ*¬F×,=Ñ,=Ð>Ñ>ØDˆCÜ˜SŸZ™Z¨Ó-Ó.Ð.äŒj˜$Ñ(¨°°uÐN¸tÒNÀvÒNØˆŒà×ÒØ×+Ñ+ˆD�Jà=ˆDŒJØ"ˆÔØ"ˆÔàˆ�r!   c                 ó¢   — d}t        |«      |k  r>|j                  |t        |«      z
  «      }|st        d«      ‚||z  }t        |«      |k  rŒ>|S )zŠReceive EXACTLY the number of bytes requested from the file object.

        Blocks until the required number of bytes have been received.r!   úConnection closed unexpectedly)ÚlenÚreadr3   )r   ÚfileÚcountÚdataÚds        r   Ú_readallzsocksocket._readall  sY   € ð ˆÜ�$‹i˜%ÒØ—	‘	˜%¤# d£)Ñ+Ó,ˆAÙÜ'Ð(HÓIÐIØ�A‰IˆDô	 �$‹i˜%Óð
 ˆr!   c                 ó¢   •— || _         	 | j                  «       }t        t        | �  | j                   «       y # t
        j                  $ r Y y w xY wr*   )r¢   Úget_proxy_peernamer�   rJ   rh   r[   rl   )r   ro   Úpeerr¤   s      €r   rh   zsocksocket.settimeout  sF   ø€ ØˆŒð	à×*Ñ*Ó,ˆDÜ”*˜dÑ.¨t¯}©}Õ=øÜ�|‰|ò 	Ùð	ús   Š-8 ¸AÁAc                 ó   — | j                   S r*   )r¢   r+   s    r   r   zsocksocket.gettimeout#  s   € Ø�}‰}Ðr!   c                 óN   — |r| j                  d «       y | j                  d«       y )Ng        )rh   )r   Úvs     r   r   zsocksocket.setblocking&  s   € ÙØ�O‰O˜DÕ!à�O‰O˜CÕ r!   c                 ót   — |||||r|j                  «       nd|r|j                  «       f| _        ydf| _        y)a�   Sets the proxy to be used.

        proxy_type -  The type of the proxy to be used. Three types
                        are supported: PROXY_TYPE_SOCKS4 (including socks4a),
                        PROXY_TYPE_SOCKS5 and PROXY_TYPE_HTTP
        addr -        The address of the server (IP or DNS).
        port -        The port of the server. Defaults to 1080 for SOCKS
                        servers and 8080 for HTTP proxy servers.
        rdns -        Should DNS queries be performed on the remote side
                       (rather than the local side). The default is True.
                       Note: This has no effect with SOCKS4 servers.
        username -    Username to authenticate with to the server.
                       The default is no authentication.
        password -    Password to authenticate with to the server.
                       Only relevant when username is also provided.N)rI   rŸ   )r   rL   rM   rN   rO   rP   rQ   s          r   ri   zsocksocket.set_proxy,  s<   € ð" ! $¨¨dÙ+3�h—o‘oÔ'¸Ù+3�h—o‘oÓ'ð?ˆ�
à9=ð?ˆ�
r!   c                 óV   — d|v r|j                  d«      |d<    | j                  |i |¤ŽS rT   )rV   ri   )r   r   r   s      r   Úsetproxyzsocksocket.setproxyA  s3   € Ø˜&Ñ Ø#)§:¡:¨kÓ#:ˆF�<Ñ Øˆt�~‰~˜tÐ. vÑ.Ð.r!   c                 óÄ  •— | j                   \  }}}}}}|r| j                  t        j                  k7  rt	        j
                  | g|¢­i |¤ŽS | j                  rt        j                  t        d«      ‚|t        k7  rd}	t        j                  t        |	«      ‚t        t        | �  |i |¤Ž | j                  «       \  }
}d|f}t	        «       | _        | j                  «       }| j                  j                  |«       d}| j!                  | j                  ||«      \  }
}|\  }}
|\  }
}t        t        | �?  ||f«       t        t        | �G  | j$                  «       d| _        y)zVImplements proxy connection for UDP sockets.

        Happens during the bind() phase.z"Socket already bound to an addressz'UDP only supported by SOCKS5 proxy typeÚ0ó   )ú0.0.0.0r   N)rŸ   r£   r[   r›   r†   rj   rž   rl   r   r   r   r�   rJ   ÚgetsocknameÚ_proxy_addrrk   Ú_SOCKS5_requestrh   r¢   r    )r   r�   rŽ   rL   rq   rr   rO   rP   rQ   r%   Ú_rN   ÚdstrŸ   ÚUDP_ASSOCIATEÚrelayÚhostr¤   s                    €r   rj   zsocksocket.bindF  sA  ø€ ð
 —Z‘Zñ	ˆ�Z ¨T°8Ø	Ù˜TŸY™Y¬&×*;Ñ*;Ò;Ü×$Ñ$ TÐ6¨CÒ6°2Ñ6Ð6à�?Š?Ü—,‘,œvÐ'KÓLÐLØœÒØ;ˆCÜ—,‘,œz¨3Ó/Ð/ÜŒj˜$Ñ$ cÐ0¨RÒ0ð
 ×"Ñ"Ó$‰ˆˆ4Ø�Dˆkˆä&›.ˆŒØ× Ñ Ó"ˆØ�‰×Ñ Ô&àˆØ×'Ñ'¨¯©¸ÈÓL‰ˆˆ5ð ‰ˆˆaØ‰ˆˆ4ÜŒj˜$Ñ'¨¨t¨Ô5ÜŒj˜$Ñ*¨4¯=©=Ô9Ø,ˆÕr!   c                 ó´  •— | j                   t        j                  k7  rt        t        | �  |g|¢­i |¤ŽS | j                  s| j                  d«       |d   }|d d }t        «       }d}|j                  |«       d}|j                  |«       | j                  ||«       t        t        | �.  |j                  «       |z   g|¢­i |¤Ž}	|	|j                  «       z
  S )N©Ú r   éÿÿÿÿs     ó    )r£   r[   r›   r�   rJ   r•   rž   rj   r   ÚwriteÚ_write_SOCKS5_addressr–   ÚgetvalueÚtell)r   Úbytesr   r   ÚaddressÚflagsÚheaderÚRSVÚ
STANDALONEÚsentr¤   s             €r   r•   zsocksocket.sendtok  sÐ   ø€ Ø�9‰9œ×)Ñ)Ò)Üœ TÑ1°%ÐI¸$ÒIÀ&ÑIÐIØ�ŠØ�I‰I�gÔà�r‘(ˆØ�S�b�	ˆä“ˆØˆØ�‰�SÔØˆ
Ø�‰�ZÔ Ø×"Ñ" 7¨FÔ3ä”Z Ñ+¨F¯O©OÓ,=ÀÑ,Eð 6Èò 6Ø.4ñ6ˆà�f—k‘k“mÑ#Ð#r!   c                 ó¦   •— | j                   t        j                  k(  r | j                  ||| j                  fi |¤ŽS t        t        | �  ||fi |¤ŽS r*   )r£   r[   r›   r•   r¡   r�   rJ   r–   )r   rÌ   rÎ   r   r¤   s       €r   r–   zsocksocket.send  sN   ø€ Ø�9‰9œ×)Ñ)Ò)Ø�4—;‘;˜u e¨T×-@Ñ-@ÑKÀFÑKÐKäœ TÑ/°°uÑGÀÑGÐGr!   c                 ó,  •— | j                   t        j                  k7  rt        t        | �  ||«      S | j                  s| j                  d«       t        t        t        | �'  |dz   |«      «      }|j                  dt        «       |j                  d«      }t        |«      rt        d«      ‚| j                  |«      \  }}| j                   r4| j                   \  }}||k7  s|d|fvrt        j"                  t$        d«      ‚|j                  |«      ||ffS )NrÄ   i   r   r   zReceived UDP packet fragmentr   zPacket filtered)r£   r[   r›   r�   rJ   r—   rž   rj   r   r˜   Úseekr	   r¨   ÚordÚNotImplementedErrorÚ_read_SOCKS5_addressr¡   rl   r   )
r   ÚbufsizerÎ   ÚbufÚfragÚfromhostÚfromportÚpeerhostÚpeerportr¤   s
            €r   r—   zsocksocket.recvfrom…  sò   ø€ Ø�9‰9œ×)Ñ)Ò)Üœ TÑ3°G¸UÓCÐCØ�ŠØ�I‰I�gÔä”eœJ¨Ñ2°7¸T±>À5ÓIÓJˆØ�‰�”HÔØ�x‰x˜‹{ˆÜˆtŒ9Ü%Ð&DÓEÐEØ!×6Ñ6°sÓ;Ñˆ�(à×ÒØ!%×!4Ñ!4ÑˆH�hØ˜8Ò# x¸¸8°}Ñ'DÜ—l‘l¤6Ð+<Ó=Ð=à—‘˜Ó! H¨hÐ#7Ð8Ð8r!   c                 ó0   —  | j                   |i |¤Ž\  }}|S r*   )r—   )r   r�   rŽ   rÌ   r¾   s        r   r˜   zsocksocket.recv™  s    € Ø �4—=‘= #Ð,¨Ñ,‰ˆˆqØˆr!   c                 ót   •— | j                   r| j                   j                  «        t        t        | �  «       S r*   )rž   rm   r�   rJ   )r   r¤   s    €r   rm   zsocksocket.close�  s*   ø€ Ø�?Š?Ø�O‰O×!Ñ!Ô#Ü”Z Ñ,Ó.Ð.r!   c                 ó   — | j                   S )z:Returns the bound IP address and port number at the proxy.)r    r+   s    r   Úget_proxy_socknamezsocksocket.get_proxy_sockname¢  s   € à×"Ñ"Ð"r!   c                 ó"   — | j                  «       S )z>
        Returns the IP and port number of the proxy.
        )Úgetpeernamer+   s    r   r¯   zsocksocket.get_proxy_peername¨  s   € ð ×ÑÓ!Ð!r!   c                 ó   — | j                   S )zwReturns the IP address and port number of the destination machine.

        Note: get_proxy_peername returns the proxy.)r¡   r+   s    r   Úget_peernamezsocksocket.get_peername°  s   € ð ×"Ñ"Ð"r!   c                 óH   — d}| j                  | ||«      \  | _        | _        y)z7Negotiates a stream connection through a SOCKS5 server.ó   N)r½   r¡   r    )r   Ú	dest_addrÚCONNECTs      r   Ú_negotiate_SOCKS5zsocksocket._negotiate_SOCKS5¸  s)   € àˆØ37×3GÑ3GØ�'˜9ó4&Ñ0ˆÔ˜TÕ0r!   c                 ó   •— | j                   \  }}}}}}	|j                  d«      }
|j                  dd«      }	 |r|	r|
j                  d«       n|
j                  d«       |
j                  «        | j	                  |d«      }|dd dk7  rt        d	«      ‚|dd d
k(  r´|r|	st        d«      ‚|
j                  dt        t        |«      «      j                  «       z   |z   t        t        |	«      «      j                  «       z   |	z   «       |
j                  «        | j	                  |d«      }|dd dk7  rt        d	«      ‚|dd dk7  r1t        d«      ‚|dd dk7  r|dd dk(  rt        d«      ‚t        d	«      ‚|
j                  d|z   dz   «       | j                  ||
«      }|
j                  «        | j	                  |d«      }|dd dk7  rt        d	«      ‚t        |dd «      }|dk7  r1t        j                  |d«      }t        dj                  ||«      «      ‚| j!                  |«      }t"        t$        | �O  | j(                  «       ||f|j+                  «        |
j+                  «        S # |j+                  «        |
j+                  «        w xY w)z‘
        Send SOCKS5 request with given command (CMD field) and
        address (DST field). Returns resolved DST address that was used.
        ÚwbÚrbr   s    s    r   r   ó   ú%SOCKS5 proxy server sent invalid dataó   zPNo username/password supplied. Server requested username/password authenticationré   rÇ   zSOCKS5 authentication failedó   ÿz7All offered SOCKS5 authentication methods were rejectedr   úUnknown errorú{:#04x}: {})rŸ   ÚmakefilerÈ   Úflushr­   r3   r9   Úchrr§   rI   rÉ   rÖ   ÚSOCKS5_ERRORSÚgetr;   r'   rØ   r�   rJ   rh   r¢   rm   )r   ÚconnÚcmdr¿   rL   rM   rN   rO   rP   rQ   ÚwriterÚreaderÚchosen_authÚauth_statusÚresolvedÚrespÚstatusrl   Úbndr¤   s                      €r   r½   zsocksocket._SOCKS5_request¾  s²  ø€ ð
 <@¿:¹:Ñ8ˆ
�D˜$  h°à—‘˜tÓ$ˆØ—‘˜t QÓ'ˆðW	á™Hð —‘Ð0Õ1ð —‘˜_Ô-ð �L‰LŒNØŸ-™-¨°Ó2ˆKà˜1˜QÐ 7Ò*ô (Ø;ó=ð =ð
 ˜1˜QÐ 7Ò*ñ !¡Xô *ð +<ó =ð =ð —‘˜W¤s¬3¨x«=Ó'9×'@Ñ'@Ó'BÑBØ'ñ(ä"¤3 x£=Ó1×8Ñ8Ó:ñ;ð  (ñ(ô )ð —‘”Ø"Ÿm™m¨F°AÓ6�Ø˜q Ð# wÒ.ä+Ø?óAð Aà˜q Ð# wÒ.ä)Ð*HÓIÐIð
 ˜Q˜qÐ! WÒ,à˜q Ð# wÒ.Ü)ð$ó%ð %ô ,Ø?óAð Að �L‰L˜ 3™¨Ñ0Ô1Ø×1Ñ1°#°vÓ>ˆHØ�L‰LŒNð —=‘= ¨Ó+ˆDØ�A�aˆy˜GÒ#Ü'Ø;ó=ð =ô ˜˜a ˜“^ˆFØ˜Š~ä%×)Ñ)¨&°/ÓB�Ü! -×"6Ñ"6°v¸uÓ"EÓFÐFð ×+Ñ+¨FÓ3ˆCä”*˜dÑ.¨t¯}©}Ô=Ø˜c�?à�L‰LŒNØ�L‰L�Nøð �L‰LŒNØ�L‰L�Nús   ¹HI+ É+"Jc                 ó  — |\  }}| j                   \  }}}}}}	t        j                  dt        j                  di}
t        j                  t        j                  fD ]p  }	 t        j                  ||«      }|j                  |
|   |z   «       t        j                  ||«      }|j                  t        j                  d|«      «       ||fc S  |rI|j                  d«      }|j                  dt        t        |«      «      j                  «       z   |z   «       n§t        j                  ||t        j                  t        j                  t        j                   t        j"                  «      }|d   }|d   }|d   d   }t        j                  ||«      }|j                  |
|   |z   «       t        j                  ||«      }|j                  t        j                  d|«      «       ||fS # t        j                  $ r Y �Œ¤w xY w)z~
        Return the host and port packed for the SOCKS5 protocol,
        and the resolved address as a tuple object.
        ré   ó   ú>HÚidnar¹   r   rC   )rŸ   r[   ÚAF_INETÚAF_INET6Ú	inet_ptonrÈ   Ú	inet_ntopÚstructÚpackrl   rI   rø   r§   rb   Ú	AF_UNSPECrc   ÚIPPROTO_TCPÚAI_ADDRCONFIG)r   rM   r©   rÂ   rN   rL   r¾   rO   rP   rQ   Úfamily_to_byter{   Ú
addr_bytesÚ
host_bytesÚ	addressesÚtarget_addrs                   r   rÉ   z socksocket._write_SOCKS5_address   sÁ  € ð
 ‰
ˆˆdØ59·Z±ZÑ2ˆ
�A�q˜$ ¨(Ü Ÿ.™.¨'´6·?±?ÀGÐLˆô
 —~‘~¤v§¡Ð7ò 	ˆFðÜ#×-Ñ-¨f°dÓ;�
Ø—
‘
˜>¨&Ñ1°JÑ>Ô?Ü×'Ñ'¨°
Ó;�Ø—
‘
œ6Ÿ;™; t¨TÓ2Ô3Ø˜T�zÒ!ð	ñ àŸ™ VÓ,ˆJØ�J‰J�w¤¤S¨£_Ó!5×!<Ñ!<Ó!>Ñ>ÀÑKÕLô ×*Ñ*¨4°´v×7GÑ7GÜ+1×+=Ñ+=Ü+1×+=Ñ+=Ü+1×+?Ñ+?óAˆIð $ A™,ˆKØ  ‘^ˆFØ˜q‘> !Ñ$ˆDä×)Ñ)¨&°$Ó7ˆJØ�J‰J�~ fÑ-°
Ñ:Ô;Ü×#Ñ# F¨JÓ7ˆDØ�
‰
”6—;‘;˜t TÓ*Ô+Ø�TˆzÐøô1 —<‘<ò Úðús   ÁA+G)Ç)H Ç?H c                 óÆ  — | j                  |d«      }|dk(  r&t        j                  | j                  |d«      «      }nx|dk(  r.| j                  |d«      }| j                  |t        |«      «      }nE|dk(  r5t        j                  t        j
                  | j                  |d«      «      }nt        d«      ‚t        j                  d| j                  |d	«      «      d
   }||fS )Nr   ré   rC   r¹   r  é   rñ   r  r   r   )	r­   r[   Ú	inet_ntoarÖ   r  r
  r3   r  Úunpack)r   r©   ÚatyprM   ÚlengthrN   s         r   rØ   zsocksocket._read_SOCKS5_addressM  s½   € Ø�}‰}˜T 1Ó%ˆØ�7Š?Ü×#Ñ# D§M¡M°$¸Ó$:Ó;‰DØ�WŠ_Ø—]‘] 4¨Ó+ˆFØ—=‘= ¤s¨6£{Ó3‰DØ�WŠ_Ü×#Ñ#¤F§O¡O°T·]±]À4ÈÓ5LÓM‰Dä#Ð$KÓLÐLä�}‰}˜T 4§=¡=°°qÓ#9Ó:¸1Ñ=ˆØ�TˆzÐr!   c                 ót  — | j                   \  }}}}}}| j                  d«      }	| j                  dd«      }
	 d}	 t        j                  |«      }|	j                  t        j                  ddd	|«      «       |	j                  |«       |r|	j                  |«       |	j                  d
«       |r#|	j                  |j                  d«      d
z   «       |	j                  «        | j                  |
d«      }|dd	 d
k7  rt        d«      ‚t        |d	d «      }|dk7  r1t        j                  |d«      }t!        dj#                  ||«      «      ‚t        j$                  |dd «      t        j&                  d|dd «      d   f| _        |rt        j$                  |«      |f| _        n	||f| _        |
j-                  «        |	j-                  «        y# t        j                  $ r3 |rd}d}n(t        j                  t        j
                  |«      «      }Y �ŒÁw xY w# |
j-                  «        |	j-                  «        w xY w)z0Negotiates a connection through a SOCKS4 server.rî   rï   r   Fs      Tz>BBHrC   r   rÇ   r  rG   z%SOCKS4 proxy server sent invalid datar   éZ   rô   rõ   Nr  )rŸ   rö   r[   Ú	inet_atonrl   ÚgethostbynamerÈ   r  r  rI   r÷   r­   r3   rÖ   ÚSOCKS4_ERRORSrú   r=   r'   r  r  r    r¡   rm   )r   rê   Ú	dest_portrL   rM   rN   rO   rP   rQ   rý   rþ   Úremote_resolver  r  r  rl   s                   r   Ú_negotiate_SOCKS4zsocksocket._negotiate_SOCKS4\  s  € à;?¿:¹:Ñ8ˆ
�D˜$  h°à—‘˜tÓ$ˆØ—‘˜t QÓ'ˆð4	à"ˆNð	9Ü#×-Ñ-¨iÓ8�
ð �L‰LœŸ™ V¨T°4¸ÓCÔDØ�L‰L˜Ô$ñ Ø—‘˜XÔ&Ø�L‰L˜Ô!ñ
 Ø—‘˜Y×-Ñ-¨fÓ5¸Ñ?Ô@Ø�L‰LŒNð —=‘= ¨Ó+ˆDØ�A�aˆy˜GÒ#ä'Ø;ó=ð =ô ˜˜a ˜“^ˆFØ˜Š~ä%×)Ñ)¨&°/ÓB�Ü! -×"6Ñ"6°v¸uÓ"EÓFÐFô $*×#3Ñ#3°D¸¸°HÓ#=Ü#)§=¡=°°t¸A¸a°yÓ#AÀ!Ñ#Dð#FˆDÔáÜ&,×&6Ñ&6°zÓ&BÀIÐ&M�Õ#à&/°Ð&:�Ô#à�L‰LŒNØ�L‰L�Nøô_ —<‘<ò 9áØ!4�JØ%)‘Nä!'×!1Ñ!1Ü×,Ñ,¨YÓ7ó"9�Júð9ûð\ �L‰LŒNØ�L‰L�Nús0   ¸H »G ÁEH ÇAHÈH ÈHÈH È"H7c                 ój  — | j                   \  }}}}}}|r|nt        j                  |«      }d|j                  d«      z   dz   t	        |«      j                  «       z   dz   d|j                  d«      z   g}	|r%|r#|	j                  dt        |dz   |z   «      z   «       |	j                  d«       | j                  dj                  |	«      «       | j                  «       }
|
j                  «       }|
j                  «        |st        d«      ‚	 |j                  d	d
«      \  }}}|j                  d«      st        d«      ‚	 t!        |«      }|dk7  r&dj%                  ||«      }|dv r|dz  }t#        |«      ‚d| _        ||f| _        y# t        $ r t        d«      ‚w xY w# t        $ r t#        d«      ‚w xY w)zwNegotiates a connection through an HTTP server.

        NOTE: This currently only supports HTTP CONNECT-style proxies.s   CONNECT r  ó   :s	    HTTP/1.1s   Host: s   Proxy-Authorization: basic s   
r¦   ú r   z'HTTP proxy server sent invalid responsezHTTP/z0Proxy server does not appear to be an HTTP proxyz4HTTP proxy server did not return a valid HTTP statuséÈ   z{}: {})i�  i“  i•  za
[*] Note: The HTTP proxy server may not be supported by PySocks (must be a CONNECT tunnel proxy))s   0.0.0.0r   N)rŸ   r[   r   rI   ÚstrÚappendr   ÚsendallÚjoinrö   Úreadlinerm   r3   Úsplitrœ   r`   rf   r?   r'   r    r¡   )r   rê   r"  rL   rM   rN   rO   rP   rQ   Úhttp_headersÚfobjÚstatus_liner}   Ústatus_codeÚ
status_msgrl   s                   r   Ú_negotiate_HTTPzsocksocket._negotiate_HTTP˜  sí  € ð <@¿:¹:Ñ8ˆ
�D˜$  h°ñ !‰y¤f×&:Ñ&:¸9Ó&Eˆð ˜4Ÿ;™; vÓ.Ñ.°Ñ5Ü�9‹~×$Ñ$Ó&ñ'Ø)5ñ6à˜	×(Ñ(¨Ó0Ñ0ð
ˆñ ™Ø×ÑÐ >Ü"+¨H°t©O¸hÑ,FÓ"Gñ!Hô Ið 	×Ñ˜GÔ$à�‰�W—\‘\ ,Ó/Ô0ð �}‰}‹ˆØ—m‘m“oˆØ�
‰
ŒáÜ#Ð$DÓEÐEð	OØ-8×->Ñ->¸sÀAÓ-FÑ*ˆE�; 
ð ×Ñ Ô(Ü#ØBóDð Dð	HÜ˜kÓ*ˆKð
 ˜#ÒØ—O‘O K°Ó<ˆEØ˜oÑ-ð ð $ñ %�ô ˜EÓ"Ð"à-ˆÔØ" I˜oˆÕøô1 ò 	OÜ#Ð$MÓNÐNð	Oûô ò 	HÜØFóHð Hð	Hús   ÄF Ä>F ÆFÆF2c                 óì  •— t        |«      dk7  s|d   j                  d«      r!t        j                  dt	        |«      z  «      ‚|\  }}| j
                  t        j                  k(  rK| j                  s| j                  d«       t        j                  |«      }|dk(  r
|sd| _
        y||f| _
        y| j                  \  }}}}}	}
t        |t        t        f«      r t        |«      dk7  s|rt        |t        «      st!        d«      ‚t"        t$        | �O  | j(                  «       |€:|| _
        t"        t$        | �O  | j(                  «       t"        t$        | �W  ||f«       y| j-                  «       }	 t"        t$        | �W  |«       	 | j.                  |   } || ||«       y# t        j                  $ r%}|s| j1                  «        t!        d	|«      ‚|‚d}~wt2        $ r | j1                  «        ‚ w xY w# t        j                  $ rn}| j1                  «        |sU|\  }}d
j5                  ||«      }t6        |   }dj5                  ||«      }t8        j;                  d||«       t=        ||«      ‚|‚d}~ww xY w)zã
        Connects to the specified destination through a proxy.
        Uses the same API as socket's connect().
        To select the proxy server, use set_proxy().

        dest_pair - 2-tuple of (IP/hostname, port).
        r   r   r_   z PySocks doesn't support IPv6: %srÄ   rº   Nz0Invalid destination-connection (host, port) pairzSocket errorz{}:{}zError connecting to {} proxy {}z%s due to: %s)r§   r`   r[   rl   r)  r£   r›   rž   rj   r   r¡   rŸ   re   r�   Útuplerf   r3   r�   rJ   rh   r¢   rk   r¼   Ú_proxy_negotiatorsrm   r#   r'   ÚPRINTABLE_PROXY_TYPESÚlogÚdebugr7   )r   rn   Úcatch_errorsrê   r"  rL   rq   rr   rO   rP   rQ   Ú	negotiaterl   Úproxy_serverÚprintable_typer%   r¤   s                   €r   rk   zsocksocket.connectÙ  sY  ø€ ô ˆy‹>˜QÒ )¨A¡,×"9Ñ"9¸#Ô">ô —,‘,ÐAÜ!$ Y£ñ 0ó 1ð 1ð  )Ñˆ	�9à�9‰9œ×)Ñ)Ò)Ø—?’?Ø—	‘	˜'Ô"Ü×,Ñ,¨YÓ7ˆIð ˜IÒ%©iØ&*�Ô#ð ð (1°)Ð&<�Ô#Øð —Z‘Zñ	ˆ�Z ¨T°8Ø	ô ˜9¤t¬U mÔ4Ü�y“> QÒ&Ù Ü! )¬SÔ1ä#ØBóDð Dô
 	Œj˜$Ñ*¨4¯=©=Ô9àÐà"+ˆDÔÜ”*˜dÑ.¨t¯}©}Ô=Ü”*˜dÑ+¨Y¸	Ð,BÔCØà×%Ñ%Ó'ˆ
ð#	ä”*˜dÑ+¨JÔ7ð&à ×3Ñ3°JÑ?�	Ù˜$ 	¨9Õ5øÜ—<‘<ò  Ù#à—J‘J”LÜ+¨N¸EÓBÐBà�KûÜò à—
‘
”Øðûô9 �|‰|ò 	à�J‰JŒLÙØ)3Ñ&�
˜JØ&Ÿ~™~¨j¸*ÓE�Ü!6°zÑ!B�à7×>Ñ>¸~ØDPóR�ä—	‘	˜/¨3°Ô6Ü*¨3°Ó6Ð6à�ûð	ús1   Å0G2 ÆF ÆG/Æ1 GÇG/Ç2I3ÈA)I.É.I3c                 óŠ   — 	 | j                  |d¬«       y# t        $ r#}|j                  r|j                  cY d}~S ‚ d}~ww xY w)a&   https://docs.python.org/3/library/socket.html#socket.socket.connect_ex
        Like connect(address), but return an error indicator instead of raising an exception for errors returned by the C-level connect() call (other problems, such as "host not found" can still raise exceptions).
        T)r;  r   N)rk   ÚOSErrorÚerrno)r   rn   r   s      r   Ú
connect_exzsocksocket.connect_ex6  s?   € ð
		Ø�L‰L˜°ˆLÔ6ØøÜò 	ð �wŠwØ—w‘w•àûð	ús   ‚ –	AŸ=¶A¼=½Ac                 ó|   — | j                   \  }}}}}}|xs t        j                  |«      }|st        d«      ‚||fS )zD
        Return proxy address to connect to as tuple object
        zInvalid proxy type)rŸ   ÚDEFAULT_PORTSrú   r3   )r   rL   rq   rr   rO   rP   rQ   s          r   r¼   zsocksocket._proxy_addrF  sL   € ð
 —Z‘Zñ	ˆ�Z ¨T°8Ø	ØÒ@¤=×#4Ñ#4°ZÓ#@ˆ
ÙÜ#Ð$8Ó9Ð9Ø˜:Ð%Ð%r!   ©NNNTNN)r   r*   )*r-   r.   r/   r0   rK   r[   r	  rc   r(   r­   rh   r   r   ri   r¶   rj   r•   r–   r—   r˜   rm   rã   Úgetproxysocknamer¯   Úgetproxypeernamerç   rå   rì   r½   rÉ   rØ   r$  r4  r   r   r   r7  r    rk   rB  r¼   Ú__classcell__)r¤   s   @r   rJ   rJ   ñ   s  ø„ ñð €Mà$Ÿn™n°6×3EÑ3EØõò$
ôòò!ð EIØ*.ó?ò*/ô
#-ôJ$õ(Hõ9ò(ô/ò
#ð *Ðò"ð *Ðò#ð €Kò&ô`òD+òZò:òx9.ðx "Ð#4Ø!Ð#4Ø ðÐð ôZó ðZðx ñó ðö	&r!   rJ   rE  )	NNNNNTNNN)DÚbase64r   Úcollections.abcr   ÚImportErrorÚcollectionsrA  r   r   r   r   Úior   ÚloggingÚosr	   r[   r  ÚsysÚ__version__r�   Úversion_infoÚwin_inet_ptonÚ	getLoggerr-   r9  ÚPROXY_TYPE_SOCKS4r   ÚPROXY_TYPE_SOCKS5r   ÚPROXY_TYPE_HTTPr   ÚPROXY_TYPESr‡   ÚzipÚvaluesÚkeysr8  Ú
_orgsocketr†   r    ÚIOErrorr#   r3   r7   r9   r;   r=   r?   r!  rù   rD  rR   rW   rY   Úgetdefaultproxyr]   Ú
wrapmoduler‚   r„   r”   rŠ   Úmethodre   r‰   r*  ÚsetattrrJ   r1   r!   r   ú<module>rb     s`  ðÝ ð%Ý(÷ -Ñ ,Û Ý Û Û 	Ý Û Û Û 
à€ð ‡7�7ˆd‚?�s×'Ñ'¨&Ò0ðHÛð
 €g×Ñ˜Ó!€àÐ Ð �FØÐ Ð �FØÐ €�$à¨6¸4Ñ@€Ù™S ×!3Ñ!3Ó!5°{×7GÑ7GÓ7IÓJÓKÐ à"ŸM™MÐ )€
ˆ\òô&
�ô 
ô	˜
ô 	ô	˜:ô 	ô	�jô 	ô	�*ô 	ô	�*ô 	ô	�
ô 	ð 'ðð!ñ	€ð )Ø
-Ø
Ø
Ø
Ø
Ø
4Ø
&ñ	€ð ˜˜v t¨T°4Ð8€ð CGØ.2óIò.ò$ð $€ò	>ð €
ð 48Ø26Ø26Ø:>Ø%)ó:3ôz
�&—-‘-ô 
òIà2ò 	6€DÙ�[ $¨Ó-€Fñ �f˜hÕ'Ø×Ñ×%Ñ% dÔ+Ù�˜T¡;¨tÓ#4Õ5ð	6ô^	&�õ ^	&øð[ ò %ß$Ð$ð%ûð$ ò HÙØFóHð 	HðHús   ˆF- ÁF? Æ-F<Æ;F<Æ?G