grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a ÊÒg7 ã@sXdZddlmZmZddlmZmZdZ dZ dd„Z dd „Z d d „Z d d „Zdd„ZdS)z=Fallback routines for Python's standard library socket moduleé)ÚunpackÚpack)Ú _bytes_joinÚ_is_stréé cCs:t|ƒstdt|ƒƒ‚t|ƒdkr,tdƒ‚dtd|ƒS)zR Convert an IP address from 32-bit packed binary format to string format. zstring type expected, not %séú*invalid length of packed IP address stringz %d.%d.%d.%dZ4B)rÚ TypeErrorÚtypeÚlenÚ ValueErrorÚ_unpack)Ú packed_ip©rú4/usr/lib/python3.9/site-packages/netaddr/fbsocket.pyÚ inet_ntoas  rc Cs"g}g}d}d}t|ƒD]N\}}|dkr>|dur4|}|d7}n|dkrT| ||f¡d}d}| |¡q|dkr~| ||f¡t|ƒdk�r|jdd„d�|d}|D]}|d|dkr¨|}q¨|\} } |d| …dg|| | d…}|ddk�r| dd¡|ddk�r| d¡|S) NrÚ0écSs|dS)Nrr)ÚxrrrÚ9óz&_compact_ipv6_tokens..)ÚkeyÚéÿÿÿÿ)Ú enumerateÚappendr ÚsortÚinsert) ÚtokensZ new_tokensZ positionsÚ start_indexZ num_tokensÚidxÚtokenZ best_positionZpositionÚlengthZ start_idxrrrÚ_compact_ipv6_tokenss:  "  r$c Cs|tkrt|ƒS|tkrôt|ƒdks,t|ƒs4tdƒ‚dd„td|ƒDƒ}ttd|ƒƒ}d}tt |ƒƒD] \}}|}|d|>}||B}qfd|krœdksªn|d ?dkræt d gd d„|d d …Dƒ¢RŽ}t|ƒ} |dd …| g}d  t |ƒ¡Std|ƒ‚d S)zBConvert an packed IP address of the given family to string format.ér cSsg|] }d|‘qS)ú%xr©Ú.0ÚirrrÚ Vrzinet_ntop..z>8Hréÿÿlÿÿé z>2HcSsg|]}t|dƒ‘qS©r%©Úintr'rrrr*bréþÿÿÿNú:zunknown address family %d) ÚAF_INETrÚAF_INET6r rr rÚlistrÚreversedÚ_packÚjoinr$) ÚafrrÚwordsZint_valr)ZnumÚwordZ packed_ipv4Úipv4_strrrrÚ inet_ntopLs$  ""r<c CsÀt|ƒr¬td|ƒ}| d¡}t|ƒdkr¨g}|D]l}| d¡sV| d¡rZt|ƒdkrZ|‚z t|ƒ}Wnty||‚Yn0|d?dkrŽ|‚| td |ƒ¡q2t|ƒS|‚td t |ƒƒ‚d S) a Convert an IP address in string format (123.45.67.89) to the 32-bit packed binary format used in low-level network functions. Differs from inet_aton by only support decimal octets. Using octal or hexadecimal values will raise a ValueError exception. úillegal IP address string %rÚ.rÚ0xrrérÚBz#argument should be a string, not %sN) rr Úsplitr Ú startswithr/rr6rr )Ú ip_stringÚ invalid_addrrr9r"ZoctetrrrÚ_inet_pton_af_inetks$        rFcCs@|tkrt|ƒS|tk�r0td|ƒ}g}t|ƒs6|‚d|vrB|‚d|v�rä|dkr`d ¡dSz| d¡\}}Wntyˆ|‚Yn0g}g}|dkr¤| d¡}|dkr¶| d¡}t|ƒ�rd|d v�rt| ¡ƒ}|  d t d |d d …ƒd ¡|  d t d |d d…ƒd ¡t|ƒt|ƒ} d | k�rBdk�sHn|‚dt|ƒt|ƒ} dd„|Dƒdd„t | ƒDƒdd„|Dƒ}z<||D].} t | dƒ} d | k�rºdk�s”n|‚�q”Wnt�yÞ|‚Yn0�nDd|v�r$| d¡} d|v�r¬| dd …}|dd …gd¢k�r(|‚|d   ¡dv�r>|‚t| ƒdk�rP|‚t|  ¡ƒ}|   d t d |d d …ƒd ¡|   d t d |d d…ƒd ¡dd„| Dƒ}nt| ƒdk�r¾|‚zrr&ú>Hrrrér@cSsg|]}tdt|dƒƒ‘qS©rHr%©r6r/r'rrrr*Ârzinet_pton..cSsg|] }d ¡‘qS)z)Úencoder'rrrr*ÃrcSsg|]}tdt|dƒƒ‘qSrJrKr'rrrr*Ärr+N)rrrrr)rZffffcSsg|]}tdt|dƒƒ‘qSrJrKr'rrrr*ârcSsg|]}t|dƒ‘qSr-r.)r(r"rrrr*èrcSsg|]}td|ƒ‘qS)rH)r6r'rrrr*ðrzUnknown address family %d)r2rFr3r rrLrBr ÚpoprrÚranger/Úlowerr)r8rDrEÚvaluesÚprefixÚsuffixZl_prefixZl_suffixr;Z token_countZgap_sizer"r:rZ ipv6_prefixrrrÚ inet_pton�sŒ            ÿ þÿ            rSN)Ú__doc__Ústructrrrr6Znetaddr.compatrrr2r3rr$r<rFrSrrrrÚs /"