§
    )xÅj¬µ  ã                   ó’	  — U d dl mZmZ ddlZej         ej        ej        ¦  «        k    se€ e	d¦  «        ‚ ej
        ¦   «         s e	d¦  «        ‚d dlmZ d dlmZmZmZ d dlmZ ddlZddlZddlZddlZdd	lmZmZ dd
lmZ ddlmZmZmZmZm Z m!Z! ddl"m#Z# e$e%e&f         Z'e$e%e&e&e&f         Z(ej)        Z)ej*        Z*ej+        Z+ej,        Z,ej-        Z-ej.        Z.ej/        Z/ej0        Z0ej1        Z1ej2        Z2ej3        Z3ej4        Z4ej5        Z5ej6        Z6ej7        Z7ej8        Z8ej9        Z9ej:        Z:ej;        Z;ej<        Z<ej=        Z=ej>        Z>ej?        Z?ej@        Z@ejA        ZAejB        ZBejC        ZDejE        ZFejG        ZHejI        ZJejK        ZLejM        ZNejO        ZPejQ        ZRejS        ZTejU        ZVejW        ZXejY        ZZej[        Z\ej]        Z^ej_        Z`eja        Zbejc        Zdeje        Zfejg        Zheji        Zj e ejk         ejl        ejm        ¦  «        ¦  «        ¦  «        ZndZo G d„ dep¦  «        Zqi Zre edf         esd<    ejt        ¦   «         d„ ¦   «         Zu ejt        ¦   «         d„ ¦   «         Zv ejt        ¦   «         d„ ¦   «         Zw ejt        ¦   «         d„ ¦   «         Zx ejt        ¦   «         d„ ¦   «         Zyd„ Zzd„ Z{d„ Z|d„ Z}d„ Z~d„ Z G d„ d¦  «        Z€ e€¦   «         Z� G d„ d¦  «        Z‚e G d „ d!¦  «        ¦   «         Zƒe G d"„ d#¦  «        ¦   «         Z„e G d$„ d%¦  «        ¦   «         Z…e G d&„ d'¦  «        ¦   «         Z†e G d(„ d)¦  «        ¦   «         Z‡e G d*„ d+¦  «        ¦   «         Zˆe G d,„ d-¦  «        ¦   «         Z‰e G d.„ d/¦  «        ¦   «         ZŠe G d0„ d1¦  «        ¦   «         Z‹e G d2„ d3¦  «        ¦   «         ZŒe G d4„ d5¦  «        ¦   «         Z�e G d6„ d7¦  «        ¦   «         ZŽe G d8„ d9¦  «        ¦   «         Z�e G d:„ d;¦  «        ¦   «         Z�e G d<„ d=¦  «        ¦   «         Z‘e G d>„ d?¦  «        ¦   «         Z’e G d@„ dA¦  «        ¦   «         Z“e G dB„ dC¦  «        ¦   «         Z”e G dD„ dE¦  «        ¦   «         Z•e G dF„ dG¦  «        ¦   «         Z–e G dH„ dI¦  «        ¦   «         Z—dJe“fdK„Z˜dJe”fdL„Z™dJe•fdM„ZšdJe–fdN„Z›dJe—fdO„ZœdPZ�dS )Qé   )ÚffiÚlibé    NzCould not initialize c-aresz&c-ares is not built with thread safety)Úerrno)Úascii_bytesÚ	maybe_strÚ
parse_name)Ú__version__)ÚCallableÚIterable)Ú	dataclass)ÚAnyr   ÚLiteralÚOptionalÚDictÚUnion)ÚSimpleQueueé   c                   ó   — e Zd ZdS )Ú	AresErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    úAC:\Projects\Historical\venv\Lib\site-packages\pycares/__init__.pyr   r   W   s   € € € € € Ø€Dr   r   ÚChannelÚ_handle_to_channelc                 óH   — t          j        | ¦  «        } ||||¦  «         d S ©N)Ú_ffiÚfrom_handle)ÚdataÚ	socket_fdÚreadableÚwritableÚsock_state_cbs        r   Ú_sock_state_cbr(   `   s.   € õ Ô$ TÑ*Ô*€MØ€M�)˜X xÑ0Ô0Ð0Ð0Ð0r   c                 ó  — | t           vrd S t          j        | ¦  «        }	 |t          j        k    rd }nt          |¦  «        }d } |||¦  «         t                                | d ¦  «         d S # t                                | d ¦  «         w xY wr    )r   r!   r"   Ú_libÚARES_SUCCESSÚparse_hostentÚpop)ÚargÚstatusÚtimeoutsÚhostentÚcallbackÚresults         r   Ú_host_cbr4   g   sš   € à
Õ$Ð$Ð$ØˆåÔ Ñ$Ô$€Hð*Ø•TÔ&Ò&Ð&ØˆFˆFå" 7Ñ+Ô+ˆFØˆFØˆ�˜Ñ Ô Ð å×Ò˜s DÑ)Ô)Ð)Ð)Ð)øÕ×Ò˜s DÑ)Ô)Ð)Ð)øøøó   ¡0A. Á.Bc                 ó  — | t           vrd S t          j        | ¦  «        }	 |t          j        k    rd }nt          ||¦  «        }d } |||¦  «         t                                | d ¦  «         d S # t                                | d ¦  «         w xY wr    )r   r!   r"   r*   r+   Úparse_nameinfor-   )r.   r/   r0   ÚnodeÚservicer2   r3   s          r   Ú_nameinfo_cbr:   x   sœ   € à
Õ$Ð$Ð$ØˆåÔ Ñ$Ô$€Hð*Ø•TÔ&Ò&Ð&ØˆFˆFå# D¨'Ñ2Ô2ˆFØˆFØˆ�˜Ñ Ô Ð å×Ò˜s DÑ)Ô)Ð)Ð)Ð)øÕ×Ò˜s DÑ)Ô)Ð)Ð)øøøs   ¡1A/ Á/Bc                 ó,  — | t           vrdS t          j        | ¦  «        }	 |t          j        k    rd}nt          |¦  «        \  }}|�|}nd} |||¦  «         t                                | d¦  «         dS # t                                | d¦  «         w xY w)z'Callback for new DNS record API queriesN)r   r!   r"   r*   r+   Úparse_dnsrecr-   )r.   r/   r0   Údnsrecr2   r3   Úparse_statuss          r   Ú_query_dnsrec_cbr?   ‰   s°   € ð Õ$Ð$Ð$ØˆåÔ Ñ$Ô$€Hð*Ø•TÔ&Ò&Ð&ØˆFˆFå#/°Ñ#7Ô#7Ñ ˆF�LØÐ'Ø%��ð �Øˆ�˜Ñ Ô Ð å×Ò˜s DÑ)Ô)Ð)Ð)Ð)øÕ×Ò˜s DÑ)Ô)Ð)Ð)øøøs   ¡8A6 Á6Bc                 ó  — | t           vrd S t          j        | ¦  «        }	 |t          j        k    rd }nt          |¦  «        }d } |||¦  «         t                                | d ¦  «         d S # t                                | d ¦  «         w xY wr    )r   r!   r"   r*   r+   Úparse_addrinfor-   )r.   r/   r0   Úresr2   r3   s         r   Ú_addrinfo_cbrC   ¡   sš   € à
Õ$Ð$Ð$ØˆåÔ Ñ$Ô$€Hð*Ø•TÔ&Ò&Ð&ØˆFˆFå# CÑ(Ô(ˆFØˆFØˆ�˜Ñ Ô Ð å×Ò˜s DÑ)Ô)Ð)Ð)Ð)øÕ×Ò˜s DÑ)Ô)Ð)Ð)øøør5   c                 ó¤  — t          j        | |¦  «        }|dk    rg S g }t          |¦  «        D ] }t          j        d¦  «        }t          j        d¦  «        }t          j        | ||||¦  «        }|d         t          j        k    r/t          t          j        |d         |d         ¦  «        ¦  «        }nd}| 	                    ||f¦  «         Œ¡|S )zIExtract OPT params as list of (key, value) tuples for HTTPS/SVCB records.r   zunsigned char **úsize_t *r   )
r*   Úares_dns_rr_get_opt_cntÚranger!   ÚnewÚares_dns_rr_get_optÚNULLÚbytesÚbufferÚappend)	ÚrrÚkeyÚopt_cntÚparamsÚiÚval_ptrÚval_lenÚopt_keyÚvals	            r   Ú_extract_opt_paramsrW   ³   sÊ   € åÔ*¨2¨sÑ3Ô3€GØ�!‚|€|Øˆ	à€FÝ�7‰^Œ^ð &ð &ˆÝ”(Ð-Ñ.Ô.ˆÝ”(˜:Ñ&Ô&ˆÝÔ*¨2¨s°A°wÀÑHÔHˆØ�1Œ:�œÒ"Ð"Ý�œ G¨A¤J°¸´
Ñ;Ô;Ñ<Ô<ˆCˆCàˆCØ�Š�w �nÑ%Ô%Ð%Ð%Ø€Mr   c                 ó’   — t          j        | |¦  «        }|t          j        k    r!t	          t          j        |¦  «        ¦  «        ndS )zRetrieves a stringÚ )r*   Úares_dns_rr_get_strr!   rJ   r   Ústring)rN   rO   Úvalues      r   Ú_extract_str_datar]   Å   s=   € åÔ$ R¨Ñ-Ô-€EØ,1µT´YÒ,>Ð,>�9•T”[ Ñ'Ô'Ñ(Ô(Ð(ÀBÐFr   c                 ó¼   — t          j        d¦  «        }t          j        | ||¦  «        }|t           j        k    r!t          t          j        |¦  «        ¦  «        ndS )z!Retrieves binary data as a stringrE   rY   )r!   rH   r*   Úares_dns_rr_get_binrJ   r   r[   ©rN   rO   Úlengthr\   s       r   Ú_extract_bin_data_as_strrb   Ê   sN   € åŒX�jÑ!Ô!€FÝÔ$ R¨¨fÑ5Ô5€EØ,1µT´YÒ,>Ð,>�9•T”[ Ñ'Ô'Ñ(Ô(Ð(ÀBÐFr   c                 óÊ   — t          j        d¦  «        }t          j        | ||¦  «        }|t           j        k    r(t          t          j        ||d         ¦  «        ¦  «        ndS )zRetrieves binary data as bytesrE   r   r   )r!   rH   r*   r_   rJ   rK   rL   r`   s       r   Ú_extract_bin_data_as_bytesrd   Ð   sT   € åŒX�jÑ!Ô!€FÝÔ$ R¨¨fÑ5Ô5€EØ38½D¼IÒ3EÐ3E�5•”˜U F¨1¤IÑ.Ô.Ñ/Ô/Ð/È3ÐNr   c           	      óH  — |t           j        k    r˜t          j        | t           j        ¦  «        }t	          j        dt           j        ¦  «        }t          j        t          j	        ||t           j        ¦  «         t          t          t	          j        |¦  «        ¦  «        ¬¦  «        S |t           j        k    r˜t          j        | t           j        ¦  «        }t	          j        dt           j        ¦  «        }t          j        t          j        ||t           j        ¦  «         t#          t          t	          j        |¦  «        ¦  «        ¬¦  «        S |t           j        k    rJt          j        | t           j        ¦  «        }t+          | t           j        ¦  «        }t/          ||¬¦  «        S |t           j        k    rÑt          j        | t           j        ¦  «        }g }t7          |¦  «        D ]}}t	          j        d¦  «        }	t          j        | t           j        ||	¦  «        }
|
t          j        k    r6|                     t	          j        |
|	d         ¦  «        dd…         ¦  «         Œ~tA          d !                    |¦  «        ¬¦  «        S |t           j"        k    ret          j#        | t           j$        ¦  «        }t+          | t           j%        ¦  «        }tM          | t           j'        ¦  «        }tQ          |||¬	¦  «        S |t           j)        k    r*t+          | t           j*        ¦  «        }tW          |¬
¦  «        S |t           j,        k    r»t          j        | t           j-        ¦  «        }t          j        | t           j.        ¦  «        }t+          | t           j/        ¦  «        }t+          | t           j0        ¦  «        }t+          | t           j1        ¦  «        }t+          | t           j2        ¦  «        }tg          ||||||¬¦  «        S |t           j4        k    r*t+          | t           j5        ¦  «        }tm          |¬¦  «        S |t           j7        k    r*t+          | t           j8        ¦  «        }ts          |¬¦  «        S |t           j:        k    råt+          | t           j;        ¦  «        }t+          | t           j<        ¦  «        }t          j=        | t           j>        ¦  «        }t          j=        | t           j?        ¦  «        }t          j=        | t           j@        ¦  «        }t          j=        | t           jA        ¦  «        }t          j=        | t           jB        ¦  «        }t‡          |||||||¬¦  «        S |t           jD        k    rŠt          j        | t           jE        ¦  «        }t          j        | t           jF        ¦  «        }t          j        | t           jG        ¦  «        }t+          | t           jH        ¦  «        } t“          |||| ¬¦  «        S |t           jJ        k    rŠt          j#        | t           jK        ¦  «        }!t          j#        | t           jL        ¦  «        }"t          j#        | t           jM        ¦  «        }#t�          | t           jO        ¦  «        }$t¡          |!|"|#|$¬¦  «        S |t           jQ        k    ret          j        | t           jR        ¦  «        }t+          | t           jS        ¦  «        } t©          | t           jU        ¦  «        }%t­          || |%¬¦  «        S |t           jW        k    rjt          j        | t           jX        ¦  «        }t          j        | t           jY        ¦  «        }t+          | t           jZ        ¦  «        } t·          ||| ¬¦  «        S t¹          d|› �¦  «        ‚)zVExtract type-specific data from a DNS resource record and return appropriate dataclassúchar[])Úaddr)ÚpriorityÚexchangerE   r   Nr   )r#   )ÚcriticalÚtagr\   )Úcname)ÚorderÚ
preferenceÚflagsr9   ÚregexpÚreplacement)Únsdname)Údname)ÚmnameÚrnameÚserialÚrefreshÚretryÚexpireÚminimum)rh   ÚweightÚportÚtarget)Ú
cert_usageÚselectorÚmatching_typeÚcert_association_data)rh   r}   rQ   )rh   r{   r}   zUnsupported DNS record type: )]r*   ÚARES_REC_TYPE_AÚares_dns_rr_get_addrÚARES_RR_A_ADDRr!   rH   ÚINET6_ADDRSTRLENÚares_inet_ntopÚsocketÚAF_INETÚARecordDatar   r[   ÚARES_REC_TYPE_AAAAÚares_dns_rr_get_addr6ÚARES_RR_AAAA_ADDRÚAF_INET6ÚAAAARecordDataÚARES_REC_TYPE_MXÚares_dns_rr_get_u16ÚARES_RR_MX_PREFERENCEr]   ÚARES_RR_MX_EXCHANGEÚMXRecordDataÚARES_REC_TYPE_TXTÚares_dns_rr_get_abin_cntÚARES_RR_TXT_DATArG   Úares_dns_rr_get_abinrJ   rM   rL   ÚTXTRecordDataÚjoinÚARES_REC_TYPE_CAAÚares_dns_rr_get_u8ÚARES_RR_CAA_CRITICALÚARES_RR_CAA_TAGrb   ÚARES_RR_CAA_VALUEÚCAARecordDataÚARES_REC_TYPE_CNAMEÚARES_RR_CNAME_CNAMEÚCNAMERecordDataÚARES_REC_TYPE_NAPTRÚARES_RR_NAPTR_ORDERÚARES_RR_NAPTR_PREFERENCEÚARES_RR_NAPTR_FLAGSÚARES_RR_NAPTR_SERVICESÚARES_RR_NAPTR_REGEXPÚARES_RR_NAPTR_REPLACEMENTÚNAPTRRecordDataÚARES_REC_TYPE_NSÚARES_RR_NS_NSDNAMEÚNSRecordDataÚARES_REC_TYPE_PTRÚARES_RR_PTR_DNAMEÚPTRRecordDataÚARES_REC_TYPE_SOAÚARES_RR_SOA_MNAMEÚARES_RR_SOA_RNAMEÚares_dns_rr_get_u32ÚARES_RR_SOA_SERIALÚARES_RR_SOA_REFRESHÚARES_RR_SOA_RETRYÚARES_RR_SOA_EXPIREÚARES_RR_SOA_MINIMUMÚSOARecordDataÚARES_REC_TYPE_SRVÚARES_RR_SRV_PRIORITYÚARES_RR_SRV_WEIGHTÚARES_RR_SRV_PORTÚARES_RR_SRV_TARGETÚSRVRecordDataÚARES_REC_TYPE_TLSAÚARES_RR_TLSA_CERT_USAGEÚARES_RR_TLSA_SELECTORÚARES_RR_TLSA_MATCHrd   ÚARES_RR_TLSA_DATAÚTLSARecordDataÚARES_REC_TYPE_HTTPSÚARES_RR_HTTPS_PRIORITYÚARES_RR_HTTPS_TARGETrW   ÚARES_RR_HTTPS_PARAMSÚHTTPSRecordDataÚARES_REC_TYPE_URIÚARES_RR_URI_PRIORITYÚARES_RR_URI_WEIGHTÚARES_RR_URI_TARGETÚURIRecordDataÚ
ValueError)&rN   Úrecord_typerg   Úbufrh   ri   ÚcntÚchunksrR   ra   r#   rj   rk   Ú	value_strrl   rm   rn   ro   r9   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r€   Ú	cert_datarQ   s&                                         r   Úextract_record_datarØ   ×   sH  € à•dÔ*Ò*Ð*ÝÔ(¨­TÔ-@ÑAÔAˆÝŒh�x¥Ô!6Ñ7Ô7ˆÝÔ�FœN¨D°#µtÔ7LÑMÔMÐMÝ¥	­$¬+°cÑ*:Ô*:Ñ ;Ô ;Ð<Ñ<Ô<Ð<à	�Ô/Ò	/Ð	/ÝÔ)¨"­dÔ.DÑEÔEˆÝŒh�x¥Ô!6Ñ7Ô7ˆÝÔ�FœO¨T°3½Ô8MÑNÔNÐNÝ¥9­T¬[¸Ñ-=Ô-=Ñ#>Ô#>Ð?Ñ?Ô?Ð?à	�Ô-Ò	-Ð	-ÝÔ+¨BµÔ0JÑKÔKˆÝ$ R­Ô)AÑBÔBˆÝ X¸ÐAÑAÔAÐAà	�Ô.Ò	.Ð	.åÔ+¨BµÔ0EÑFÔFˆØˆÝ�s‘”ð 	?ð 	?ˆAÝ”X˜jÑ)Ô)ˆFÝÔ,¨RµÔ1FÈÈ6ÑRÔRˆDØ•t”yÒ Ð Ø—’�dœk¨$°°q´	Ñ:Ô:¸1¸1¸1Ô=Ñ>Ô>Ð>øÝ #§(¢(¨6Ñ"2Ô"2Ð3Ñ3Ô3Ð3à	�Ô.Ò	.Ð	.ÝÔ*¨2­tÔ/HÑIÔIˆÝ ¥DÔ$8Ñ9Ô9ˆÝ,¨RµÔ1GÑHÔHˆ	Ý h°C¸yÐIÑIÔIÐIà	�Ô0Ò	0Ð	0Ý! "¥dÔ&>Ñ?Ô?ˆÝ UÐ+Ñ+Ô+Ð+à	�Ô0Ò	0Ð	0ÝÔ(¨­TÔ-EÑFÔFˆÝÔ-¨bµ$Ô2OÑPÔPˆ
Ý! "¥dÔ&>Ñ?Ô?ˆÝ# B­Ô(CÑDÔDˆÝ" 2¥tÔ'@ÑAÔAˆÝ'¨­DÔ,JÑKÔKˆÝØØ!ØØØØ#ð
ñ 
ô 
ð 	
ð 
�Ô-Ò	-Ð	-Ý# B­Ô(?Ñ@Ô@ˆÝ GÐ,Ñ,Ô,Ð,à	�Ô.Ò	.Ð	.Ý! "¥dÔ&<Ñ=Ô=ˆÝ 5Ð)Ñ)Ô)Ð)à	�Ô.Ò	.Ð	.Ý! "¥dÔ&<Ñ=Ô=ˆÝ! "¥dÔ&<Ñ=Ô=ˆÝÔ)¨"­dÔ.EÑFÔFˆÝÔ*¨2­tÔ/GÑHÔHˆÝÔ(¨­TÔ-CÑDÔDˆÝÔ)¨"­dÔ.EÑFÔFˆÝÔ*¨2­tÔ/GÑHÔHˆÝØØØØØØØð
ñ 
ô 
ð 	
ð 
�Ô.Ò	.Ð	.ÝÔ+¨BµÔ0IÑJÔJˆÝÔ)¨"­dÔ.EÑFÔFˆÝÔ'¨­DÔ,AÑBÔBˆÝ" 2¥tÔ'>Ñ?Ô?ˆÝØØØØð	
ñ 
ô 
ð 	
ð 
�Ô/Ò	/Ð	/ÝÔ,¨RµÔ1MÑNÔNˆ
ÝÔ*¨2­tÔ/IÑJÔJˆÝÔ/°µDÔ4KÑLÔLˆÝ.¨rµ4Ô3IÑJÔJˆ	ÝØ!ØØ'Ø"+ð	
ñ 
ô 
ð 	
ð 
�Ô0Ò	0Ð	0ÝÔ+¨BµÔ0KÑLÔLˆÝ" 2¥tÔ'@ÑAÔAˆÝ$ R­Ô)BÑCÔCˆÝØØØð
ñ 
ô 
ð 	
ð 
�Ô.Ò	.Ð	.ÝÔ+¨BµÔ0IÑJÔJˆÝÔ)¨"­dÔ.EÑFÔFˆÝ" 2¥tÔ'>Ñ?Ô?ˆÝØØØð
ñ 
ô 
ð 	
õ ÐF¸ÐFÐFÑGÔGÐGr   c           
      ó6  — | t           j        k    rdt          j        fS g }g }g }t          j        | t          j        ¦  «        }t          |¦  «        D ]ñ}t          j        | t          j        |¦  «        }|t           j        k    r¿t          t          j	        t          j
        |¦  «        ¦  «        ¦  «        }t          j        |¦  «        }t          j        |¦  «        }	t          j        |¦  «        }
	 t          ||¦  «        }|                     t!          |||	|
|¬¦  «        ¦  «         ŒÚ# t"          t$          f$ r Y Œíw xY wŒòt          j        | t          j        ¦  «        }t          |¦  «        D ]ñ}t          j        | t          j        |¦  «        }|t           j        k    r¿t          t          j	        t          j
        |¦  «        ¦  «        ¦  «        }t          j        |¦  «        }t          j        |¦  «        }	t          j        |¦  «        }
	 t          ||¦  «        }|                     t!          |||	|
|¬¦  «        ¦  «         ŒÚ# t"          t$          f$ r Y Œíw xY wŒòt          j        | t          j        ¦  «        }t          |¦  «        D ]ñ}t          j        | t          j        |¦  «        }|t           j        k    r¿t          t          j	        t          j
        |¦  «        ¦  «        ¦  «        }t          j        |¦  «        }t          j        |¦  «        }	t          j        |¦  «        }
	 t          ||¦  «        }|                     t!          |||	|
|¬¦  «        ¦  «         ŒÚ# t"          t$          f$ r Y Œíw xY wŒòt+          |||¬¦  «        }|dfS )z8Parse ares_dns_record_t into DNSResult with all sectionsN)ÚnameÚtypeÚrecord_classÚttlr#   )ÚanswerÚ	authorityÚ
additional)r!   rJ   r*   ÚARES_EBADRESPÚares_dns_record_rr_cntÚARES_SECTION_ANSWERrG   Úares_dns_record_rr_get_constr   r[   Úares_dns_rr_get_nameÚares_dns_rr_get_typeÚares_dns_rr_get_classÚares_dns_rr_get_ttlrØ   rM   Ú	DNSRecordrÑ   Ú	ExceptionÚARES_SECTION_AUTHORITYÚARES_SECTION_ADDITIONALÚ	DNSResult)r=   Úanswer_recordsÚauthority_recordsÚadditional_recordsÚanswer_countrR   rN   rÚ   Úrec_typeÚ	rec_classrÝ   r#   Úauthority_countÚadditional_countr3   s                  r   r<   r<   Z  s»  € à•”ÒÐØ•TÔ'Ð'Ð'à€NØÐØÐõ Ô.¨vµtÔ7OÑPÔP€LÝ�<Ñ Ô ð ð ˆÝÔ.¨vµtÔ7OÐQRÑSÔSˆØ•”Š?ˆ?Ý�Tœ[­Ô)BÀ2Ñ)FÔ)FÑGÔGÑHÔHˆDÝÔ0°Ñ4Ô4ˆHÝÔ2°2Ñ6Ô6ˆIÝÔ*¨2Ñ.Ô.ˆCðÝ*¨2¨xÑ8Ô8�Ø×%Ò%¥iØØ!Ø!*ØØð'ñ 'ô 'ñ ô ð ð øõ ¥	Ð*ð ð ð à�ðøøøð õ( Ô1°&½$Ô:UÑVÔV€OÝ�?Ñ#Ô#ð ð ˆÝÔ.¨vµtÔ7RÐTUÑVÔVˆØ•”Š?ˆ?Ý�Tœ[­Ô)BÀ2Ñ)FÔ)FÑGÔGÑHÔHˆDÝÔ0°Ñ4Ô4ˆHÝÔ2°2Ñ6Ô6ˆIÝÔ*¨2Ñ.Ô.ˆCðÝ*¨2¨xÑ8Ô8�Ø!×(Ò(­ØØ!Ø!*ØØð*ñ *ô *ñ ô ð ð øõ ¥	Ð*ð ð ð à�ðøøøð õ( Ô2°6½4Ô;WÑXÔXÐÝÐ#Ñ$Ô$ð ð ˆÝÔ.¨vµtÔ7SÐUVÑWÔWˆØ•”Š?ˆ?Ý�Tœ[­Ô)BÀ2Ñ)FÔ)FÑGÔGÑHÔHˆDÝÔ0°Ñ4Ô4ˆHÝÔ2°2Ñ6Ô6ˆIÝÔ*¨2Ñ.Ô.ˆCðÝ*¨2¨xÑ8Ô8�Ø"×)Ò)­)ØØ!Ø!*ØØð+ñ +ô +ñ ô ð ð øõ ¥	Ð*ð ð ð à�ðøøøð õ& ØØ#Ø%ðñ ô €Fð �4ˆ<Ðs6   Ã57D-Ä-EÅ EÈ7IÉI!É I!Ì57M-Í-NÎ Nc                   ó2   — e Zd ZdZdd„Zdd„Zdd„Zdd„ZdS )	Ú_ChannelShutdownManagerzLManages channel destruction in a single background thread using SimpleQueue.ÚreturnNc                 ój   — t          ¦   «         | _        d | _        t          j        ¦   «         | _        d S r    )r   Ú_queueÚ_threadÚ	threadingÚLockÚ_start_lock©Úselfs    r   Ú__init__z _ChannelShutdownManager.__init__´  s*   € Ý#.¡=¤=ˆŒØ37ˆŒÝ$œ>Ñ+Ô+ˆÔÐÐr   c                 óÈ   — 	 | j                              ¦   «         \  }}|d         }t          j        |¦  «         t          j        |d¦  «         t          j        |¦  «         Œb)z4Process channel destruction requests from the queue.Tr   éÿÿÿÿ)rú   Úgetr*   Úares_cancelÚares_queue_wait_emptyÚares_destroy)r   ÚchÚ_Úchannels       r   Ú_run_safe_shutdown_loopz/_ChannelShutdownManager._run_safe_shutdown_loop¹  se   € ð	'à”K—O’OÑ%Ô%‰EˆB�Ø˜”eˆGõ Ô˜WÑ%Ô%Ð%õ Ô& w°Ñ3Ô3Ð3õ Ô˜gÑ&Ô&Ð&ð	'r   c                 óô   — | j         �dS | j        5  | j         �	 ddd¦  «         dS t          j        | j        d¬¦  «        | _         | j                              ¦   «          ddd¦  «         dS # 1 swxY w Y   dS )z3Start the background thread if not already started.NT)r}   Údaemon)rû   rþ   rü   ÚThreadr  Ústartrÿ   s    r   r  z_ChannelShutdownManager.startÉ  sà   € àŒ<Ð#ØˆFØÔð 	!ð 	!ØŒ|Ð'àð	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!õ %Ô+°4Ô3OÐX\Ð]Ñ]Ô]ˆDŒLØŒL×ÒÑ Ô Ð ð	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øøøð 	!ð 	!ð 	!ð 	!ð 	!ð 	!s   ‘	A-§9A-Á-A1Á4A1c                 ó>   — | j                              ||f¦  «         dS )aÎ  
        Schedule channel destruction on the background thread.

        The socket state callback handle is passed along to ensure it remains
        alive until the channel is destroyed.

        Thread Safety and Synchronization:
        This method uses SimpleQueue which is thread-safe for putting items
        from multiple threads. The background thread processes channels
        sequentially waiting for queries to end before each destruction.
        N)rú   Úput)r   r
  Úsock_state_cb_handles      r   Údestroy_channelz'_ChannelShutdownManager.destroy_channelÔ  s$   € ð 	Œ�Š˜Ð"6Ð7Ñ8Ô8Ð8Ð8Ð8r   ©rø   N)r   r   r   Ú__doc__r  r  r  r  r   r   r   r÷   r÷   ±  sj   € € € € € ØVÐVð,ð ,ð ,ð ,ð
'ð 'ð 'ð 'ð 	!ð 	!ð 	!ð 	!ð9ð 9ð 9ð 9ð 9ð 9r   r÷   c            $       óÎ  — e Zd Zej        ej        ej        ej        ej        ej	        ej
        ej        ej        ej        ej        ej        ej        ej        ej        fZej        ej        ej        ej        ej        fZdddddddddddddddddœdee         dee         dee         dee         dee         d	ee         d
eeeee f                           deeeee f                           deee df         dee!ee"e"gdf                  dee         dee         de"deee df         dee         deee df         ddf"d„Z#d;d„Z$e%j&        d„ ¦   «         Z'd„ Z(d;d„Z)d;d„Z*e+de,e         fd„¦   «         Z-e-j.        d
eeee f                  ddfd„¦   «         Z-dededdfd„Z/deddfd „Z0deddfd!„Z1d<d"„Z2d#ed$e!e3egdf         ddfd%„Z4d&d&d&d&d'œd(ed)ee         d*e5j6        d+ed,eded$e!e3egdf         ddfd-„Z7e8d.œd/ed0ed1ed$e!e3egdf         ddf
d2„Z9e8d.œd/ed0ed1ed$e!e3egdf         ddf
d3„Z:d4„ Z;d5ee<e=f         ded$e!e3egdf         ddfd6„Z>d7„ Z?d;d8„Z@d;d9„ZAd<dede"fd:„ZBdS )=r   NF)ro   ÚtimeoutÚtriesÚndotsÚtcp_portÚudp_portÚserversÚdomainsÚlookupsr'   Úsocket_send_buffer_sizeÚsocket_receive_buffer_sizeÚrotateÚlocal_ipÚ	local_devÚresolvconf_pathro   r  r  r  r  r  r  r  r  r'   r  r   r!  r"  r#  r$  rø   c                óŽ  — d | _         t          j        ¦   «         | _        |�|nd| _        t          j        d¦  «        }t          j        d¦  «        }d}|�||_        |t          j	        z  }|�&t          |dz  ¦  «        |_        |t          j        z  }|�||_        |t          j        z  }|�||_        |t          j        z  }|�||_        |t          j        z  }|�||_        |t          j        z  }|�||_        |t          j        z  }|�||_        |t          j        z  }|
rat3          |
¦  «        st5          d¦  «        ‚t          j        |
¦  «        }|| _        t          j        |_        ||_        |t          j         z  }n'd | _        |t          j!        z  }t          j"        |_#        |	r6t          j        dtI          |	¦  «        ¦  «        |_%        |t          j&        z  }|r‡d„ |D ¦   «         }t          j        dtO          |¦  «        d	z   z  ¦  «        }tQ          tO          |¦  «        ¦  «        D ]}||         ||<   Œ||_)        tO          |¦  «        |_*        |t          j+        z  }|r|t          j,        z  }|�6|t          j-        z  }t          j        dtI          |¦  «        ¦  «        |_.        t          j/        |||¦  «        }|t          j0        k    rtc          d
¦  «        ‚|| _         |r|| _2        |r|  3                    |¦  «         |r|  4                    |¦  «         tj           6                    ¦   «          d S )Nr   zares_channel *zstruct ares_options *éè  zsock_state_cb is not callablerf   c                 óR   — g | ]$}t          j        d t          |¦  «        ¦  «        ‘Œ%S )rf   )r!   rH   r   )Ú.0rR   s     r   ú
<listcomp>z$Channel.__init__.<locals>.<listcomp>?  s*   € ÐHÐHÐH¸1•D”H˜X¥{°1¡~¤~Ñ6Ô6ÐHÐHÐHr   z
char *[%d]r   z#Failed to initialize c-ares channel)7Ú_channelrü   ÚRLockÚ_lockÚ_flagsr!   rH   ro   r*   ÚARES_OPT_FLAGSÚintr  ÚARES_OPT_TIMEOUTMSr  ÚARES_OPT_TRIESr  ÚARES_OPT_NDOTSr  ÚARES_OPT_TCP_PORTr  ÚARES_OPT_UDP_PORTr  ÚARES_OPT_SOCK_SNDBUFr   ÚARES_OPT_SOCK_RCVBUFÚcallableÚ	TypeErrorÚ
new_handleÚ_sock_state_cb_handler(   r'   Úsock_state_cb_dataÚARES_OPT_SOCK_STATE_CBÚARES_OPT_EVENT_THREADÚARES_EVSYS_DEFAULTÚevsysr   r  ÚARES_OPT_LOOKUPSÚlenrG   r  ÚndomainsÚARES_OPT_DOMAINSÚARES_OPT_ROTATEÚARES_OPT_RESOLVCONFr$  Úares_init_optionsr+   r   r  Úset_local_ipÚset_local_devÚ_shutdown_managerr  )r   ro   r  r  r  r  r  r  r  r  r'   r  r   r!  r"  r#  r$  r
  ÚoptionsÚoptmaskÚuserdataÚstrsÚcrR   Úrs                            r   r  zChannel.__init__ë  sH  € ð( ˆŒÝ”_Ñ&Ô&ˆŒ
ð  %Ð0�e�e°aˆŒå”(Ð+Ñ,Ô,ˆÝ”(Ð2Ñ3Ô3ˆØˆàÐØ!ˆGŒMØ¥Ô 3Ñ3ˆGàÐÝ! '¨D¡.Ñ1Ô1ˆGŒOØ¥Ô 7Ñ7ˆGàÐØ!ˆGŒMØ¥Ô!4Ñ4ˆGàÐØ!ˆGŒMØ¥Ô!4Ñ4ˆGàÐØ'ˆGÔØ¥Ô!7Ñ7ˆGàÐØ'ˆGÔØ¥Ô!7Ñ7ˆGà"Ð.Ø.EˆGÔ+Ø¥Ô!:Ñ:ˆGà%Ð1Ø1KˆGÔ.Ø¥Ô!:Ñ:ˆGàð 	4Ý˜MÑ*Ô*ð AÝÐ ?Ñ@Ô@Ð@å” }Ñ5Ô5ˆHð *2ˆDÔ&å$(Ô$7ˆGÔ!Ø)1ˆGÔ&Ø¥Ô!<Ñ<ˆGˆGà)-ˆDÔ&Ø¥Ô!;Ñ;ˆGÝ Ô3ˆGŒMàð 	7Ý"œh xµ¸WÑ1EÔ1EÑFÔFˆGŒOØ¥Ô!6Ñ6ˆGàð 	7ØHÐHÀÐHÑHÔHˆDÝ”˜­¨W©¬¸Ñ)9Ñ:Ñ;Ô;ˆAÝ�3˜w™<œ<Ñ(Ô(ð ð �Ø˜1”gˆq�‰tˆtàˆGŒOÝ" 7™|œ|ˆGÔØ¥Ô!6Ñ6ˆGàð 	6Ø¥Ô!5Ñ5ˆGàÐ&Ø¥Ô!9Ñ9ˆGÝ&*¤h¨x½À_Ñ9UÔ9UÑ&VÔ&VˆGÔ#åÔ" 7¨G°WÑ=Ô=ˆØ•Ô!Ò!Ð!ÝÐAÑBÔBÐBàˆŒØð 	#Ø"ˆDŒLàð 	(Ø×Ò˜hÑ'Ô'Ð'àð 	*Ø×Ò˜yÑ)Ô)Ð)õ 	×ÒÑ!Ô!Ð!Ð!Ð!r   c                 ó.   — |                       ¦   «          d S r    )Ú_destroy_channelrÿ   s    r   Ú__del__zChannel.__del__`  s   € ð 	×ÒÑÔÐÐÐr   c              #   óŽ   K  — | j         5  | j        }|€t          d¦  «        ‚|d         V — ddd¦  «         dS # 1 swxY w Y   dS )zÒ
        Yield the c-ares channel pointer while holding self._lock so that
        a concurrent close() cannot destroy the channel mid-call.

        Raises RuntimeError if the channel has been closed.
        Nz,Channel is destroyed, no new queries allowedr   )r,  r*  ÚRuntimeError©r   r
  s     r   Ú_capture_channelzChannel._capture_channelf  sŸ   è è € ð ŒZð 	ð 	Ø”mˆGØˆÝ"Ð#QÑRÔRÐRØ˜!”*ÐÐÐð		ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   Š#:º>Á>c                 óB   — t          j        |¦  «        }| t          |<   |S )a"  
        Wrap callback_data in a cffi handle and register it so that it (and
        the Channel) stay alive until the c-ares callback fires. Callers
        MUST pop the handle from _handle_to_channel on any exception path
        before the c-ares callback could ever observe it.
        )r!   r9  r   )r   Úcallback_datarL  s      r   Ú_register_callback_handlez!Channel._register_callback_handlet  s#   € õ ”? =Ñ1Ô1ˆØ'+Õ˜8Ñ$Øˆr   c                 óˆ   — |                       ¦   «         5 }t          j        |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S r    )rV  r*   r  rU  s     r   ÚcancelzChannel.cancel  s†   € Ø×"Ò"Ñ$Ô$ð 	&¨ÝÔ˜WÑ%Ô%Ð%ð	&ð 	&ð 	&ñ 	&ô 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&øøøð 	&ð 	&ð 	&ð 	&ð 	&ð 	&s   •7·;¾;c                 óê   — |                       ¦   «         5 }t          j        |¦  «        }d d d ¦  «         n# 1 swxY w Y   |t          j        k    r"t	          |t          j        |¦  «        ¦  «        ‚d S r    )rV  r*   Úares_reinitr+   r   r   Ústrerror)r   r
  rO  s      r   ÚreinitzChannel.reinitƒ  s¦   € Ø×"Ò"Ñ$Ô$ð 	*¨ÝÔ  Ñ)Ô)ˆAð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*à•Ô!Ò!Ð!Ý˜A�uœ~¨aÑ0Ô0Ñ1Ô1Ð1ð "Ð!ó   •6¶:½:c                 ó¾  — |                       ¦   «         5 }t          j        |¦  «        }d d d ¦  «         n# 1 swxY w Y   |t          j        k    r6t          t          j        t          j        t          j        ¦  «        ¦  «        ‚g }t          t          j
        |¦  «        ¦  «        }t          j        |¦  «         d„ |                     d¦  «        D ¦   «         }|S )Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS r   )Ústrip©r(  Úss     r   r)  z#Channel.servers.<locals>.<listcomp>”  s    € Ð@Ð@Ð@ Q�q—w’w‘y”yÐ@Ð@Ð@r   ú,)rV  r*   Úares_get_servers_csvr!   rJ   r   ÚARES_ENOMEMr   r^  r   r[   Úares_free_stringÚsplit)r   r
  Úcsv_strÚserver_listÚ
csv_strings        r   r  zChannel.servers‰  sù   € à×"Ò"Ñ$Ô$ð 	9¨ÝÔ/°Ñ8Ô8ˆGð	9ð 	9ð 	9ñ 	9ô 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9øøøð 	9ð 	9ð 	9ð 	9ð •d”iÒÐÝ�DÔ,­e¬n½TÔ=MÑ.NÔ.NÑOÔOÐOàˆÝ�tœ{¨7Ñ3Ô3Ñ4Ô4ˆ
ÝÔ˜gÑ&Ô&Ð&Ø@Ð@¨*×*:Ò*:¸3Ñ*?Ô*?Ð@Ñ@Ô@ˆàÐr`  c                 óT  — d„ |D ¦   «         }d                      |¦  «        }|                      ¦   «         5 }t          j        ||                     d¦  «        ¦  «        }d d d ¦  «         n# 1 swxY w Y   |t          j        k    r"t          |t          j        |¦  «        ¦  «        ‚d S )Nc                 ó€   — g | ];}t          |t          ¦  «        r"t          |¦  «                             d ¦  «        n|‘Œ<S )Úascii)Ú
isinstancerK   r   Údecoderd  s     r   r)  z#Channel.servers.<locals>.<listcomp>š  sB   € ÐfÐfÐfÐYZ½ÀAÅuÑ9MÔ9MÐT•{ 1‘~”~×,Ò,¨WÑ5Ô5Ð5ÐSTÐfÐfÐfr   rf  rp  )	r™   rV  r*   Úares_set_servers_csvÚencoder+   r   r   r^  )r   r  rl  rk  r
  rO  s         r   r  zChannel.servers˜  sé   € àfÐfÐ^eÐfÑfÔfˆØ—(’(˜;Ñ'Ô'ˆà×"Ò"Ñ$Ô$ð 	L¨ÝÔ)¨'°7·>²>À'Ñ3JÔ3JÑKÔKˆAð	Lð 	Lð 	Lñ 	Lô 	Lð 	Lð 	Lð 	Lð 	Lð 	Lð 	Løøøð 	Lð 	Lð 	Lð 	Là•Ô!Ò!Ð!Ý˜A�uœ~¨aÑ0Ô0Ñ1Ô1Ð1ð "Ð!s   ¶)A+Á+A/Á2A/Úread_fdÚwrite_fdc           	      óØ   — |                       ¦   «         5 }t          j        |t          j        d|¦  «        t          j        d|¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S ©NÚares_socket_t)rV  r*   Úares_process_fdr!   Úcast)r   ru  rv  r
  s       r   Ú
process_fdzChannel.process_fd¢  s·   € Ø×"Ò"Ñ$Ô$ð 	u¨ÝÔ  ­$¬)°OÀWÑ*MÔ*MÍtÌyÐYhÐjrÑOsÔOsÑtÔtÐtð	uð 	uð 	uñ 	uô 	uð 	uð 	uð 	uð 	uð 	uð 	uð 	uøøøð 	uð 	uð 	uð 	uð 	uð 	us   •=AÁA#Á&A#c           	      óâ   — |                       ¦   «         5 }t          j        |t          j        d|¦  «        t          j        dt
          ¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S rx  ©rV  r*   rz  r!   r{  ÚARES_SOCKET_BAD)r   ru  r
  s      r   Úprocess_read_fdzChannel.process_read_fd¦  s·   € Ø×"Ò"Ñ$Ô$ð 	|¨ÝÔ  ­$¬)°OÀWÑ*MÔ*MÍtÌyÐYhÕjyÑOzÔOzÑ{Ô{Ð{ð	|ð 	|ð 	|ñ 	|ô 	|ð 	|ð 	|ð 	|ð 	|ð 	|ð 	|ð 	|øøøð 	|ð 	|ð 	|ð 	|ð 	|ð 	|ó   •AA$Á$A(Á+A(c           	      óâ   — |                       ¦   «         5 }t          j        |t          j        dt
          ¦  «        t          j        d|¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S rx  r~  )r   rv  r
  s      r   Úprocess_write_fdzChannel.process_write_fdª  s¹   € Ø×"Ò"Ñ$Ô$ð 	}¨ÝÔ  ­$¬)°OÅ_Ñ*UÔ*UÕW[ÔW`ÐapÐrzÑW{ÔW{Ñ|Ô|Ð|ð	}ð 	}ð 	}ñ 	}ô 	}ð 	}ð 	}ð 	}ð 	}ð 	}ð 	}ð 	}øøøð 	}ð 	}ð 	}ð 	}ð 	}ð 	}r�  c                 ó  — t           j        }t          j        d¦  «        }|�z|dk    ret          j        d¦  «        }t          t	          j        |¦  «        ¦  «        |_        t          t	          j        |d¦  «        dz  ¦  «        |_        nt          d¦  «        ‚|  
                    ¦   «         5 }t          j        |||¦  «        }d d d ¦  «         n# 1 swxY w Y   |t           j        k    rdS |j        |j        dz  z   S )Nzstruct timeval*g        g      ð?i@B z-timeout needs to be a positive number or Noneg    €„.A)r!   rJ   rH   r/  ÚmathÚfloorÚtv_secÚfmodÚtv_usecrÑ   rV  r*   Úares_timeout)r   ÚtÚmaxtvÚtvr
  r3   s         r   r  zChannel.timeout®  s  € Ý”	ˆÝŒXÐ'Ñ(Ô(ˆàˆ=Ø�CŠxˆxÝœÐ!2Ñ3Ô3�Ý"¥4¤:¨a¡=¤=Ñ1Ô1�”Ý #¥D¤I¨a°Ñ$5Ô$5¸Ñ$?Ñ @Ô @�”�å Ð!PÑQÔQÐQà×"Ò"Ñ$Ô$ð 	;¨ÝÔ& w°°rÑ:Ô:ˆFð	;ð 	;ð 	;ñ 	;ô 	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;øøøð 	;ð 	;ð 	;ð 	;ð •T”YÒÐØ�3à” ¤°Ñ :Ñ:Ð;s   Â1CÃCÃCrg   r2   c          	      ó  — t          |¦  «        st          d¦  «        ‚t          j        d¦  «        }t          j        d¦  «        }t	          j        t          j        t          |¦  «        |¦  «        dk    r|}t          j        }nOt	          j        t          j	        t          |¦  «        |¦  «        dk    r|}t          j	        }nt          d¦  «        ‚|                      ¦   «         5 }|                      |¦  «        }	 t	          j        ||t          j        |d         ¦  «        |t          j        |¦  «         n*# t           $ r t"                               |d ¦  «         ‚ w xY w	 d d d ¦  «         d S # 1 swxY w Y   d S )Núa callable is requiredústruct in_addr*ústruct ares_in6_addr*r   úinvalid IP addressr   )r7  r8  r!   rH   r*   Úares_inet_ptonr‡   rˆ   r   r�   rÑ   rV  rY  Úares_gethostbyaddrÚsizeofr4   ÚBaseExceptionr   r-   )	r   rg   r2   Úaddr4Úaddr6ÚaddressÚfamilyr
  rL  s	            r   ÚgethostbyaddrzChannel.gethostbyaddrÂ  s¬  € Ý˜Ñ!Ô!ð 	6ÝÐ4Ñ5Ô5Ð5å”Ð*Ñ+Ô+ˆÝ”Ð0Ñ1Ô1ˆÝÔ�vœ~­{¸4Ñ/@Ô/@À5ÑJÔJÈaÒOÐOØˆGÝ”^ˆFˆFÝÔ ¥¤µ+¸dÑ2CÔ2CÀeÑMÔMÐQRÒRÐRØˆGÝ”_ˆFˆFåÐ1Ñ2Ô2Ð2à×"Ò"Ñ$Ô$ð 	¨Ø×5Ò5°hÑ?Ô?ˆHðÝÔ'¨°½$¼+ÀgÈaÄjÑ:QÔ:QÐSYÕ[_Ô[hÐjrÑsÔsÐsÐsøÝ ð ð ð Ý"×&Ò& x°Ñ6Ô6Ð6Øðøøøð tð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s*   Ã*E5Ä;D=Ä<E5Ä='E$Å$E5Å5E9Å<E9r   )rš  rÛ   Úprotoro   Úhostr|   rš  rÛ   rœ  c          	      óŒ  — t          |¦  «        st          d¦  «        ‚|€t          j        }nGt	          |t
          ¦  «        r#t          |¦  «                             d¦  «        }nt          |¦  «        }|  	                    ¦   «         5 }	|  
                    |¦  «        }
	 t          j        d¦  «        }||_        ||_        ||_        ||_        t!          j        |	t%          |¦  «        ||t           j        |
¦  «         n*# t(          $ r t*                               |
d ¦  «         ‚ w xY w	 d d d ¦  «         d S # 1 swxY w Y   d S )Nr�  rp  zstruct ares_addrinfo_hints*)r7  r8  r!   rJ   rq  r/  Ústrrt  r   rV  rY  rH   Úai_flagsÚ	ai_familyÚai_socktypeÚai_protocolr*   Úares_getaddrinfor	   rC   r–  r   r-   )r   r�  r|   rš  rÛ   rœ  ro   r2   r9   r
  rL  Úhintss               r   ÚgetaddrinfozChannel.getaddrinfoÙ  s‰  € õ ˜Ñ!Ô!ð 	6ÝÐ4Ñ5Ô5Ð5àˆ<Ý”iˆGˆGÝ˜�cÑ"Ô"ð 	(Ý˜$‘i”i×&Ò& wÑ/Ô/ˆGˆGå! $Ñ'Ô'ˆGà×"Ò"Ñ$Ô$ð 	¨Ø×5Ò5°hÑ?Ô?ˆHð	ÝœÐ!>Ñ?Ô?�Ø!&�”Ø"(�”Ø$(�Ô!Ø$)�Ô!ÝÔ% g­z¸$Ñ/?Ô/?ÀÈ%ÕQUÔQbÐdlÑmÔmÐmÐmøÝ ð ð ð Ý"×&Ò& x°Ñ6Ô6Ð6Øðøøøð nð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s+   Â	D9Â A DÄ D9Ä'D(Ä(D9Ä9D=Å D=)Úquery_classrÚ   Ú
query_typer§  c          
      ó¢  — t          |¦  «        st          d¦  «        ‚|| j        vrt          d¦  «        ‚|| j        vrt          d¦  «        ‚|                      ¦   «         5 }|                      |¦  «        }	 t          j        d¦  «        }t          j
        |t          |¦  «        ||t          j        ||¦  «        }n*# t          $ r t                               |d¦  «         ‚ w xY w	 ddd¦  «         n# 1 swxY w Y   |t          j        k    r=t                               |d¦  «         t#          |t%          j        |¦  «        ¦  «        ‚dS )a   
        Perform a DNS query.

        Args:
            name: Domain name to query
            query_type: Type of query (e.g., QUERY_TYPE_A, QUERY_TYPE_AAAA, etc.)
            query_class: Query class (default: QUERY_CLASS_IN)
            callback: Callback function that receives (result, errno)

        The callback will receive a DNSResult object containing answer, authority, and additional sections.
        r�  úinvalid query type specifiedúinvalid query class specifiedzunsigned short *N)r7  r8  Ú
__qtypes__rÑ   Ú__qclasses__rV  rY  r!   rH   r*   Úares_query_dnsrecr	   r?   r–  r   r-   r+   r   r   r^  )	r   rÚ   r¨  r§  r2   r
  rL  Úqidr/   s	            r   ÚqueryzChannel.queryû  sŸ  € õ ˜Ñ!Ô!ð 	6ÝÐ4Ñ5Ô5Ð5à˜Tœ_Ð,Ð,ÝÐ;Ñ<Ô<Ð<à˜dÔ/Ð/Ð/ÝÐ<Ñ=Ô=Ð=à×"Ò"Ñ$Ô$ð 	¨Ø×5Ò5°hÑ?Ô?ˆHðÝ”hÐ1Ñ2Ô2�ÝÔ/ØÝ˜tÑ$Ô$ØØÝÔ)ØØñô ��øõ !ð ð ð Ý"×&Ò& x°Ñ6Ô6Ð6Øðøøøð ð		ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð  •TÔ&Ò&Ð&Ý×"Ò" 8¨TÑ2Ô2Ð2Ý˜F¥E¤N°6Ñ$:Ô$:Ñ;Ô;Ð;ð 'Ð&s+   Á#C7Á:AC Â?C7Ã 'C'Ã'C7Ã7C;Ã>C;c                óŽ  — t          |¦  «        st          d¦  «        ‚|| j        vrt          d¦  «        ‚|| j        vrt          d¦  «        ‚| j        t          j        z  rdnt          j        }t          j
        d¦  «        }t          j        |d|t          j        t          j        ¦  «        }|t          j        k    r"t          |t!          j        |¦  «        ¦  «        ‚|d         }t          j        |t'          |¦  «        ||¦  «        }|t          j        k    r6t          j        |¦  «         t          |t!          j        |¦  «        ¦  «        ‚	 |                      ¦   «         5 }	|                      |¦  «        }
	 t          j        |	|t          j        |
¦  «        }n*# t2          $ r t4                               |
d¦  «         ‚ w xY w	 ddd¦  «         n# 1 swxY w Y   |t          j        k    r"t          |t!          j        |¦  «        ¦  «        ‚	 t          j        |¦  «         dS # t          j        |¦  «         w xY w)aÆ  
        Perform a DNS search (honors resolv.conf search domains).

        Args:
            name: Domain name to search
            query_type: Type of query (e.g., QUERY_TYPE_A, QUERY_TYPE_AAAA, etc.)
            query_class: Query class (default: QUERY_CLASS_IN)
            callback: Callback function that receives (result, errno)

        The callback will receive a DNSResult object containing answer, authority, and additional sections.
        r�  rª  r«  r   zares_dns_record_t **N)r7  r8  r¬  rÑ   r­  r-  r*   ÚARES_FLAG_NORECURSEÚARES_FLAG_RDr!   rH   Úares_dns_record_createÚARES_OPCODE_QUERYÚARES_RCODE_NOERRORr+   r   r   r^  Úares_dns_record_query_addr	   Úares_dns_record_destroyrV  rY  Úares_search_dnsrecr?   r–  r   r-   )r   rÚ   r¨  r§  r2   Ú	dns_flagsÚdnsrec_pr/   r=   r
  rL  s              r   ÚsearchzChannel.search$  s„  € õ ˜Ñ!Ô!ð 	6ÝÐ4Ñ5Ô5Ð5à˜Tœ_Ð,Ð,ÝÐ;Ñ<Ô<Ð<à˜dÔ/Ð/Ð/ÝÐ<Ñ=Ô=Ð=ð œ+­Ô(@Ñ@ÐX�A�AÅtÔGXˆ	å”8Ð2Ñ3Ô3ˆÝÔ,ØØØÝÔ"ÝÔ#ñ
ô 
ˆð •TÔ&Ò&Ð&Ý˜F¥E¤N°6Ñ$:Ô$:Ñ;Ô;Ð;à˜!”ˆõ Ô/ØÝ�tÑÔØØñ	
ô 
ˆð •TÔ&Ò&Ð&ÝÔ(¨Ñ0Ô0Ð0Ý˜F¥E¤N°6Ñ$:Ô$:Ñ;Ô;Ð;ð	1Ø×&Ò&Ñ(Ô(ð ¨GØ×9Ò9¸(ÑCÔC�ð	Ý!Ô4ØØÝÔ-Ø ñ	ô �F�Føõ %ð ð ð Ý&×*Ò*¨8°TÑ:Ô:Ð:Øðøøøð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð �Ô*Ò*Ð*Ý ­¬°vÑ(>Ô(>Ñ?Ô?Ð?ð +õ Ô(¨Ñ0Ô0Ð0Ð0Ð0ø�DÔ(¨Ñ0Ô0Ð0Ð0øøøsH   ÅH. Å*GÆ!F#Æ"GÆ#'G
Ç
GÇH. ÇGÇH. Ç!GÇ"5H. È.Ic                 ó>  — t          j        d¦  «        }t          j        d¦  «        }|                      ¦   «         5 }t          j        t
          j        t          |¦  «        |¦  «        dk    r-t          j        |t          j	        |j
        ¦  «        ¦  «         nit          j        t
          j        t          |¦  «        |¦  «        dk    r)t          j        |t          j        d|¦  «        ¦  «         nt          d¦  «        ‚d d d ¦  «         d S # 1 swxY w Y   d S )Nr�  r‘  r   zunsigned char *r’  )r!   rH   rV  r*   r“  r‡   rˆ   r   Úares_set_local_ip4ÚntohlÚs_addrr�   Úares_set_local_ip6r{  rÑ   )r   Úipr—  r˜  r
  s        r   rG  zChannel.set_local_ipi  s:  € Ý”Ð*Ñ+Ô+ˆÝ”Ð0Ñ1Ô1ˆà×"Ò"Ñ$Ô$ð 		7¨ÝÔ"¥6¤>µ;¸r±?´?ÀEÑJÔJÈaÒOÐOÝÔ'¨µ´¸e¼lÑ1KÔ1KÑLÔLÐLÐLÝÔ$¥V¤_µkÀ"±o´oÀuÑMÔMÐQRÒRÐRÝÔ'ØÝ”IÐ/°Ñ7Ô7ñô ð ð õ
 !Ð!5Ñ6Ô6Ð6ð		7ð 		7ð 		7ñ 		7ô 		7ð 		7ð 		7ð 		7ð 		7ð 		7ð 		7ð 		7øøøð 		7ð 		7ð 		7ð 		7ð 		7ð 		7s   ½CDÄDÄDr™  c          	      óê  — t          |¦  «        st          d¦  «        ‚t          |¦  «        dk    r |\  }}t          j        d¦  «        }t          j        t          j        t          |¦  «        t          j
        |j        ¦  «        ¦  «        dk    rt          d|z  ¦  «        ‚t          j        |_        t          j        |¦  «        |_        |}nät          |¦  «        dk    rÂ|\  }}}}	t          j        d¦  «        }
t          j        t          j        t          |¦  «        t          j
        |
j        ¦  «        ¦  «        dk    rt          d|z  ¦  «        ‚t          j        |
_        t          j        |¦  «        |
_        t          j        |¦  «        |
_        |	|
_        |
}nt          d	¦  «        ‚|                      ¦   «         5 }|                      |¦  «        }	 t          j        |t          j        d
|¦  «        t          j        |d         ¦  «        |t
          j        |¦  «         n*# t:          $ r t<                               |d ¦  «         ‚ w xY w	 d d d ¦  «         d S # 1 swxY w Y   d S )Nr�  é   ústruct sockaddr_in*r   zInvalid IPv4 address %ré   ústruct sockaddr_in6*zInvalid IPv6 address %rzInvalid address argumentzstruct sockaddr*r   ) r7  r8  rA  r!   rH   r*   r“  r‡   rˆ   r   Ú	addressofÚsin_addrrÑ   Ú
sin_familyÚhtonsÚsin_portr�   Ú	sin6_addrÚsin6_familyÚ	sin6_portÚhtonlÚsin6_flowinfoÚsin6_scope_idrV  rY  Úares_getnameinfor{  r•  r:   r–  r   r-   )r   r™  ro   r2   rÂ  r|   Úsa4ÚsaÚflowinfoÚscope_idÚsa6r
  rL  s                r   ÚgetnameinfozChannel.getnameinfox  sˆ  € Ý˜Ñ!Ô!ð 	6ÝÐ4Ñ5Ô5Ð5åˆw‰<Œ<˜1ÒÐØ ‰JˆR�Ý”(Ð0Ñ1Ô1ˆCÝÔ"¥6¤>µ;¸r±?´?ÅDÄNÐSVÔS_ÑD`ÔD`ÑaÔaÐefÒfÐfÝ Ð!:¸RÑ!?Ñ@Ô@Ð@Ý#œ^ˆCŒNÝ!œ<¨Ñ-Ô-ˆCŒLØˆBˆBÝ�‰\Œ\˜QÒÐØ-4Ñ*ˆR��x Ý”(Ð1Ñ2Ô2ˆCÝÔ"¥6¤?µKÀ±O´OÅTÄ^ÐTWÔTaÑEbÔEbÑcÔcÐghÒhÐhÝ Ð!:¸RÑ!?Ñ@Ô@Ð@Ý$œoˆCŒOÝ"œL¨Ñ.Ô.ˆCŒMÝ &¤¨XÑ 6Ô 6ˆCÔØ (ˆCÔØˆBˆBåÐ7Ñ8Ô8Ð8à×"Ò"Ñ$Ô$ð 	¨Ø×5Ò5°hÑ?Ô?ˆHðÝÔ% g­t¬yÐ9KÈRÑ/PÔ/PÕRVÔR]Ð^`ÐabÔ^cÑRdÔRdÐfkÕmqÔm~ð  AIñ  Jô  Jð  Jð  JøÝ ð ð ð Ý"×&Ò& x°Ñ6Ô6Ð6Øðøøøð Jð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s+   Ç
I(Ç!AH0È/I(È0'IÉI(É(I,É/I,c                 ó¤   — |                       ¦   «         5 }t          j        |t          |¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S r    )rV  r*   Úares_set_local_devr   )r   Údevr
  s      r   rH  zChannel.set_local_dev™  s�   € Ø×"Ò"Ñ$Ô$ð 	?¨ÝÔ# G­[¸Ñ-=Ô-=Ñ>Ô>Ð>ð	?ð 	?ð 	?ñ 	?ô 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?øøøð 	?ð 	?ð 	?ð 	?ð 	?ð 	?s   •#AÁA	ÁA	c                 ón   — | j         5  |                      ¦   «          ddd¦  «         dS # 1 swxY w Y   dS )aÆ  
        Close the channel as soon as it's safe to do so.

        This method can be called from any thread. The channel will be destroyed
        safely using a background thread, after any in-flight submission has
        returned, to ensure c-ares has completed its cleanup.

        Note: Once close() is called, no new queries can be started. Any pending
        queries will be cancelled and their callbacks will receive ARES_ECANCELLED.

        N)r,  rQ  rÿ   s    r   ÚclosezChannel.close�  s‚   € ð ŒZð 	$ð 	$Ø×!Ò!Ñ#Ô#Ð#ð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$ð 	$ð 	$s   ˆ*ª.±.c                 ól   — | j         d c}| _         |€d S t                               || j        ¦  «         d S r    )r*  rI  r  r:  rU  s     r   rQ  zChannel._destroy_channel¬  s=   € Ø!%¤°Ðˆ�”Øˆ?àˆFõ 	×)Ò)¨'°4Ô3MÑNÔNÐNÐNÐNr   c                 óD  — |                       ¦   «         5 }t          j        ||�|dk    rt          |dz  ¦  «        nd¦  «        }ddd¦  «         n# 1 swxY w Y   |t          j        k    rdS |t          j        k    rdS t          |t          j        |¦  «        ¦  «        ‚)z¯
        Wait until all pending queries are complete or timeout occurs.

        Args:
            timeout: Maximum time to wait in seconds. Use -1 for infinite wait.
        Nr   r&  r  TF)	rV  r*   r  r/  r+   ÚARES_ETIMEOUTr   r   r^  )r   r  r
  rO  s       r   ÚwaitzChannel.wait¸  sí   € ð ×"Ò"Ñ$Ô$ð 	z¨ÝÔ*¨7ÈGÐL_ÐdkÐopÒdpÐdpµS¸À4¹Ñ5HÔ5HÐ5HÐvxÑyÔyˆAð	zð 	zð 	zñ 	zô 	zð 	zð 	zð 	zð 	zð 	zð 	zøøøð 	zð 	zð 	zð 	zà•Ô!Ò!Ð!Ø�4Ø•$Ô$Ò$Ð$Ø�5å˜A�uœ~¨aÑ0Ô0Ñ1Ô1Ð1s   •0AÁAÁAr  r    )Cr   r   r   r*   r‚   rŠ   ÚARES_REC_TYPE_ANYrš   r    rÇ   r�   r£   r«   r®   r±   r»   rÁ   r”   rÌ   r¬  ÚARES_CLASS_INÚARES_CLASS_CHAOSÚARES_CLASS_HESOIDÚARES_CLASS_NONEÚARES_CLASS_ANYr­  r   r/  Úfloatr   r   rŸ  rK   r   Úboolr  rR  Ú
contextlibÚcontextmanagerrV  rY  r[  r_  ÚpropertyÚlistr  Úsetterr|  r€  rƒ  r  r   r›  r‡   ÚAddressFamilyr¦  ÚQUERY_CLASS_INr°  r¼  rG  ÚIP4ÚIP6rÙ  rH  rÞ  rQ  râ  r   r   r   r   r   ç  s?  € € € € € ØÔ&¨Ô(?ÀÔAWÐY]ÔYoÐquô  rJð  LPô  Ldð  fjô  f{ð  }Aô  }Uð  W[ô  Wlð  nrô  nDð  FJô  F\ð  ^bô  ^tð  vzô  vMð  OSô  Oeð  gkô  g}ð  ~€JØÔ&¨Ô(=¸tÔ?UÐW[ÔWkÐmqô  nAð  B€Lð )-Ø,0Ø(,Ø(,Ø+/Ø+/ØBFØBFØ48ØNRØ:>Ø=AØ %Ø59Ø,0Ø<@ð#s"ð s"ð s"à  œðs"ð # 5œ/ðs"ð ! œð	s"ð
 ! œðs"ð $ Cœ=ðs"ð $ Cœ=ðs"ð # 8¨E°#°u°*Ô,=Ô#>Ô?ðs"ð # 8¨E°#°u°*Ô,=Ô#>Ô?ðs"ð    U¨DÐ 0Ô1ðs"ð !)¨°3¸¸dÐ2CÀTÐ2IÔ)JÔ Kðs"ð +3°3¬-ðs"ð .6°c¬]ðs"ð ðs"ð !  e¨TÐ!1Ô2ðs"ð  % SœMð!s"ð" #(¨¨U°DÐ(8Ô"9ð#s"ð" FJð#s"ð s"ð s"ð s"ðj ð  ð  ð  ð Ôðð ñ Ôðð	ð 	ð 	ð&ð &ð &ð &ð2ð 2ð 2ð 2ð ð˜˜cœð ð ð ñ „Xðð „^ð2˜x¨¨c°5¨jÔ(9Ô:ð 2¸tð 2ð 2ð 2ñ „^ð2ðu #ð u°ð u¸ð uð uð uð uð| cð |¨dð |ð |ð |ð |ð}¨ð }°ð }ð }ð }ð }ð<ð <ð <ð <ð( #ð °H¸cÀ3¸ZÈÐ=MÔ4Nð ÐSWð ð ð ð ð8 ()ØØØð ð  ð  àð ð �sŒmð ð
 Ô$ð ð ð ð ð ð ð ð ˜C ˜: tÐ+Ô,ð ð 
ð ð  ð  ð  ðD GUð '<ð '<ð '<˜#ð '<¨3ð '<Àð '<Ð`hÐjmÐorÐisÐuyÐiyÔ`zð '<ð  @Dð '<ð '<ð '<ð '<ðR HVð C1ð C1ð C1˜3ð C1¨Cð C1Àð C1ÐaiÐknÐpsÐjtÐvzÐjzÔa{ð C1ð  AEð C1ð C1ð C1ð C1ðJ7ð 7ð 7ð 5¨¨c¨¤?ð ¸3ð ÈXÐWZÐ\_ÐV`ÐbfÐVfÔMgð Ðlpð ð ð ð ðB?ð ?ð ?ð$ð $ð $ð $ð
Oð 
Oð 
Oð 
Oð2ð 2˜Eð 2¨4ð 2ð 2ð 2ð 2ð 2ð 2r   c                   ó   — e Zd ZU dZeed<   dS )r‰   z Data for A (IPv4 address) recordrg   N©r   r   r   r  rŸ  Ú__annotations__r   r   r   r‰   r‰   Ì  s   € € € € € € à*Ð*Ø
€I€I�I€I€Ir   r‰   c                   ó   — e Zd ZU dZeed<   dS )rŽ   z#Data for AAAA (IPv6 address) recordrg   Nrõ  r   r   r   rŽ   rŽ   Ñ  s   € € € € € € à-Ð-Ø
€I€I�I€I€Ir   rŽ   c                   ó(   — e Zd ZU dZeed<   eed<   dS )r“   z"Data for MX (mail exchange) recordrh   ri   N©r   r   r   r  r/  rö  rŸ  r   r   r   r“   r“   Ö  s(   € € € € € € à,Ð,Ø€M€M�MØ€M€M�M€M€Mr   r“   c                   ó   — e Zd ZU dZeed<   dS )r˜   zData for TXT (text) recordr#   N)r   r   r   r  rK   rö  r   r   r   r˜   r˜   Ü  s   € € € € € € à$Ð$Ø
€K€K�K€K€Kr   r˜   c                   ó2   — e Zd ZU dZeed<   eed<   eed<   dS )rŸ   z;Data for CAA (certification authority authorization) recordrj   rk   r\   Nrù  r   r   r   rŸ   rŸ   á  s1   € € € € € € àEÐEØ€M€M�MØ	€H€H�HØ€J€J�J€J€Jr   rŸ   c                   ó   — e Zd ZU dZeed<   dS )r¢   z&Data for CNAME (canonical name) recordrl   Nrõ  r   r   r   r¢   r¢   è  s   € € € € € € à0Ð0Ø€J€J�J€J€Jr   r¢   c                   óP   — e Zd ZU dZeed<   eed<   eed<   eed<   eed<   eed<   dS )	rª   z0Data for NAPTR (naming authority pointer) recordrm   rn   ro   r9   rp   rq   Nrù  r   r   r   rª   rª   í  sQ   € € € € € € à:Ð:Ø€J€J�JØ€O€O�OØ€J€J�JØ€L€L�LØ€K€K�KØÐÐÑÐÐr   rª   c                   ó   — e Zd ZU dZeed<   dS )r­   z Data for NS (name server) recordrr   Nrõ  r   r   r   r­   r­   ÷  s   € € € € € € à*Ð*Ø€L€L�L€L€Lr   r­   c                   ó   — e Zd ZU dZeed<   dS )r°   zData for PTR (pointer) recordrs   Nrõ  r   r   r   r°   r°   ü  s   € € € € € € à'Ð'Ø€J€J�J€J€Jr   r°   c                   óZ   — e Zd ZU dZeed<   eed<   eed<   eed<   eed<   eed<   eed<   d	S )
rº   z(Data for SOA (start of authority) recordrt   ru   rv   rw   rx   ry   rz   N)r   r   r   r  rŸ  rö  r/  r   r   r   rº   rº     sU   € € € € € € à2Ð2Ø€J€J�JØ€J€J�JØ€K€K�KØ€L€L�LØ€J€J�JØ€K€K�KØ€L€L�L€L€Lr   rº   c                   ó<   — e Zd ZU dZeed<   eed<   eed<   eed<   dS )rÀ   zData for SRV (service) recordrh   r{   r|   r}   Nrù  r   r   r   rÀ   rÀ     s:   € € € € € € à'Ð'Ø€M€M�MØ€K€K�KØ
€I€I�IØ€K€K�K€K€Kr   rÀ   c                   ó<   — e Zd ZU dZeed<   eed<   eed<   eed<   dS )rÆ   z9Data for TLSA (DANE TLS authentication) record - RFC 6698r~   r   r€   r�   N)r   r   r   r  r/  rö  rK   r   r   r   rÆ   rÆ     sB   € € € € € € àCÐCØ€O€O�OØ€M€M�MØÐÐÑØ Ð Ð Ñ Ð Ð r   rÆ   c                   ó2   — e Zd ZU dZeed<   eed<   eed<   dS )rË   z2Data for HTTPS (service binding) record - RFC 9460rh   r}   rQ   N)r   r   r   r  r/  rö  rŸ  rî  r   r   r   rË   rË     s1   € € € € € € à<Ð<Ø€M€M�MØ€K€K�KØ€L€L�L€L€Lr   rË   c                   ó2   — e Zd ZU dZeed<   eed<   eed<   dS )rÐ   z<Data for URI (Uniform Resource Identifier) record - RFC 7553rh   r{   r}   Nrù  r   r   r   rÐ   rÐ   #  s1   € € € € € € àFÐFØ€M€M�MØ€K€K�KØ€K€K�K€K€Kr   rÐ   c                   ón   — e Zd ZU dZeed<   eed<   eed<   eed<   eee	e
eeeeeeeeeeef         ed<   dS )ré   z'Represents a single DNS resource recordrÚ   rÛ   rÜ   rÝ   r#   N)r   r   r   r  rŸ  rö  r/  r   r‰   rŽ   r“   r˜   rŸ   r¢   rË   rª   r­   r°   rº   rÀ   rÆ   rÐ   r   r   r   ré   ré   *  s~   € € € € € € à1Ð1Ø
€I€I�IØ
€I€I�IØÐÐÑØ	€H€H�HØ
�˜^¨\¸=Ø˜°ÀØ˜m¨]¸MØ ð.ô /ð /ð /ñ /ð /ð /r   ré   c                   óV   — e Zd ZU dZee         ed<   ee         ed<   ee         ed<   dS )rí   z8Represents a complete DNS query result with all sectionsrÞ   rß   rà   N)r   r   r   r  rî  ré   rö  r   r   r   rí   rí   6  sH   € € € € € € àBÐBØ�ŒOÐÐÑØ�IŒÐÐÑØ�Y”ÐÐÑÐÐr   rí   c                   óJ   — e Zd ZU dZeed<   ee         ed<   ee         ed<   dS )Ú
HostResultz%Result from gethostbyaddr() operationrÚ   ÚaliasesÚ	addressesN)r   r   r   r  rŸ  rö  rî  r   r   r   r  r  @  sA   € € € € € € à/Ð/Ø
€I€I�IØ�#ŒYÐÐÑØ�CŒyÐÐÑÐÐr   r  c                   ó4   — e Zd ZU dZeed<   ee         ed<   dS )ÚNameInfoResultz#Result from getnameinfo() operationr8   r9   N)r   r   r   r  rŸ  rö  r   r   r   r   r  r  G  s1   € € € € € € à-Ð-Ø
€I€I�IØ�cŒ]ÐÐÑÐÐr   r  c                   óP   — e Zd ZU dZeed<   eed<   eed<   eed<   eed<   eed<   dS )	ÚAddrInfoNodez-Single address node from getaddrinfo() resultrÝ   ro   rš  ÚsocktypeÚprotocolrg   N)r   r   r   r  r/  rö  Útupler   r   r   r  r  M  sL   € € € € € € à7Ð7Ø	€H€H�HØ€J€J�JØ€K€K�KØ€M€M�MØ€M€M�MØ
€K€K�K€K€Kr   r  c                   ó2   — e Zd ZU dZeed<   eed<   eed<   dS )ÚAddrInfoCnamez+CNAME information from getaddrinfo() resultrÝ   ÚaliasrÚ   Nrù  r   r   r   r  r  W  s1   € € € € € € à5Ð5Ø	€H€H�HØ€J€J�JØ
€I€I�I€I€Ir   r  c                   ó@   — e Zd ZU dZee         ed<   ee         ed<   dS )ÚAddrInfoResultz,Complete result from getaddrinfo() operationÚcnamesÚnodesN)r   r   r   r  rî  r  rö  r  r   r   r   r  r  ^  s:   € € € € € € à6Ð6Ø�ÔÐÐÑØ�ÔÐÐÑÐÐr   r  rø   c                 ó&  — t          t          j        | j        ¦  «        ¦  «        }g }g }d}| j        |         t          j        k    r_|                     t          t          j        | j        |         ¦  «        ¦  «        ¦  «         |dz  }| j        |         t          j        k    °_d}| j        |         t          j        k    r½t          j        dt          j
        ¦  «        }t          j        t          j        | j        | j        |         |t          j
        ¦  «        k    r?|                     t          t          j        |t          j
        ¦  «        ¦  «        ¦  «         |dz  }| j        |         t          j        k    °½t          |||¬¦  «        S )z.Parse c-ares hostent structure into HostResultr   r   rf   )rÚ   r	  r
  )r   r!   r[   Úh_nameÚ	h_aliasesrJ   rM   Úh_addr_listrH   r*   r…   r†   Ú
h_addrtyper  )r1   rÚ   r	  r
  rR   rÓ   s         r   r,   r,   g  sL  € å•T”[ ¤Ñ0Ô0Ñ1Ô1€DØ€GØ€Ià	€AØ
Ô
˜AÔ
¥$¤)Ò
+Ð
+Ø�Š•y¥¤¨WÔ->¸qÔ-AÑ!BÔ!BÑCÔCÑDÔDÐDØ	ˆQ‰ˆð Ô
˜AÔ
¥$¤)Ò
+Ð
+ð 	
€AØ
Ô
˜aÔ
 ¥D¤IÒ
-Ð
-ÝŒh�x¥Ô!6Ñ7Ô7ˆÝŒ9�Ô+¨GÔ,>ÀÔ@SÐTUÔ@VÐX[Õ]aÔ]rÑsÔsÒsÐsØ×Ò�Y¥t¤{°3½Ô8MÑ'NÔ'NÑOÔOÑPÔPÐPØ	ˆQ‰ˆð	 Ô
˜aÔ
 ¥D¤IÒ
-Ð
-õ ˜4¨¸IÐFÑFÔFÐFr   c                 óÌ   — t          t          j        | ¦  «        ¦  «        }|t          j        k    r!t          t          j        |¦  «        ¦  «        nd}t	          ||¬¦  «        S )z)Parse c-ares nameinfo into NameInfoResultN)r8   r9   )r   r!   r[   rJ   r  )r8   r9   Únode_strÚservice_strs       r   r7   r7   |  sT   € å�œ TÑ*Ô*Ñ+Ô+€HØ5<ÅÄ	Ò5IÐ5I•)�DœK¨Ñ0Ô0Ñ1Ô1Ð1Èt€KÝ˜x°Ð=Ñ=Ô=Ð=r   c                 ó.  — | j         }| j        }| j        }| j        }| j        }|j        | j        k    sJ ‚t          j        dt          j
        ¦  «        }|j        t          j        k    r´t          j        }t          j        d|¦  «        }t          j        t          j        |j        t          j        |j        ¦  «        |t          j
        ¦  «        k    r9t          j        |t          j
        ¦  «        t          j        |j        ¦  «        f}	nót-          d¦  «        ‚|j        t          j        k    rÀt          j        }t          j        d|¦  «        }t          j        t          j        |j        t          j        |j        ¦  «        |t          j
        ¦  «        k    rEt          j        |t          j
        ¦  «        t          j        |j        ¦  «        |j        |j        f}	nt-          d¦  «        ‚t-          d¦  «        ‚t;          ||||||	¬¦  «        S )z5Parse a single c-ares addrinfo node into AddrInfoNodezchar []rÅ  zfailed to convert IPv4 addressrÇ  zfailed to convert IPv6 addresszinvalid sockaddr family)rÝ   ro   rš  r  r  rg   )Úai_ttlr   r¢  r£  Úai_addrÚ	sa_familyr¡  r!   rH   r*   r…   r‡   rˆ   r{  rJ   r†   rÊ  rÈ  rÉ  r[   ÚntohsrÌ  rÑ   r�   rÎ  rÍ  rÏ  rÑ  rÒ  r  )
Ú	ares_noderÝ   ro   r  r  Úaddr_structrÂ  rš  re  rg   s
             r   Úparse_addrinfo_noder(  ƒ  s­  € à
Ô
€CØÔ€EØÔ$€HØÔ$€HàÔ#€KØÔ  IÔ$7Ò7Ð7Ð7Ð7Ý	Œ�)�TÔ2Ñ	3Ô	3€BàÔ¥¤Ò.Ð.Ý”ˆÝŒIÐ+¨[Ñ9Ô9ˆÝŒ9�Ô+¨A¬L½$¼.ÈÌÑ:TÔ:TÐVXÕZ^ÔZoÑpÔpÒpÐpå”K ¥DÔ$9Ñ:Ô:½F¼LÈÌÑ<TÔ<TÐUˆDˆDåÐ=Ñ>Ô>Ð>Ø	Ô	¥&¤/Ò	1Ð	1Ý”ˆÝŒIÐ,¨kÑ:Ô:ˆÝŒ9�Ô+¨A¬M½4¼>È!Ì+Ñ;VÔ;VÐXZÕ\`Ô\qÑrÔrÒrÐrå”K ¥DÔ$9Ñ:Ô:½F¼LÈÌÑ<UÔ<UÐWXÔWfÐhiÔhwÐxˆDˆDåÐ=Ñ>Ô>Ð>åÐ2Ñ3Ô3Ð3å˜C u°VÀhÐYaÐhlÐmÑmÔmÐmr   c           	      óÀ   — t          | j        t          t          j        | j        ¦  «        ¦  «        t          t          j        | j        ¦  «        ¦  «        ¬¦  «        S )z7Parse a single c-ares addrinfo cname into AddrInfoCname)rÝ   r  rÚ   )r  rÝ   r   r!   r[   r  rÚ   )Ú
ares_cnames    r   Úparse_addrinfo_cnamer+  ¤  sM   € åØŒNÝ�œ JÔ$4Ñ5Ô5Ñ6Ô6Ý•t”{ :¤?Ñ3Ô3Ñ4Ô4ðñ ô ð r   c                 ó”  — g }g }| j         }|t          j        k    r9|                     t	          |¦  «        ¦  «         |j        }|t          j        k    °9| j        }|t          j        k    r9|                     t          |¦  «        ¦  «         |j        }|t          j        k    °9t          j
        | ¦  «         t          ||¬¦  «        S )z3Parse c-ares addrinfo structure into AddrInfoResult)r  r  )r  r!   rJ   rM   r+  Únextr  r(  Úai_nextr*   Úares_freeaddrinfor  )Úares_addrinfor  r  Ú	cname_ptrÚnode_ptrs        r   rA   rA   ­  sÁ   € à€FØ€EàÔ$€IØ
•t”yÒ
 Ð
 Ø�ŠÕ*¨9Ñ5Ô5Ñ6Ô6Ð6Ø”Nˆ	ð •t”yÒ
 Ð
 ð Ô"€HØ
•d”iÒ
Ð
Ø�ŠÕ(¨Ñ2Ô2Ñ3Ô3Ð3ØÔ#ˆð •d”iÒ
Ð
õ 	Ô˜=Ñ)Ô)Ð)å ¨uÐ5Ñ5Ô5Ð5r   )HÚARES_FLAG_USEVCÚARES_FLAG_PRIMARYÚARES_FLAG_IGNTCr²  ÚARES_FLAG_STAYOPENÚARES_FLAG_NOSEARCHÚARES_FLAG_NOALIASESÚARES_FLAG_NOCHECKRESPÚARES_FLAG_EDNSÚARES_FLAG_NO_DFLT_SVRÚARES_NI_NOFQDNÚARES_NI_NUMERICHOSTÚARES_NI_NAMEREQDÚARES_NI_NUMERICSERVÚARES_NI_DGRAMÚARES_NI_TCPÚARES_NI_UDPÚARES_NI_SCTPÚARES_NI_DCCPÚARES_NI_NUMERICSCOPEÚARES_NI_LOOKUPHOSTÚARES_NI_LOOKUPSERVICEÚARES_NI_IDNÚARES_NI_IDN_ALLOW_UNASSIGNEDÚ ARES_NI_IDN_USE_STD3_ASCII_RULESr  ÚQUERY_TYPE_AÚQUERY_TYPE_AAAAÚQUERY_TYPE_ANYÚQUERY_TYPE_CAAÚQUERY_TYPE_CNAMEÚQUERY_TYPE_HTTPSÚQUERY_TYPE_MXÚQUERY_TYPE_NAPTRÚQUERY_TYPE_NSÚQUERY_TYPE_PTRÚQUERY_TYPE_SOAÚQUERY_TYPE_SRVÚQUERY_TYPE_TLSAÚQUERY_TYPE_TXTÚQUERY_TYPE_URIrñ  ÚQUERY_CLASS_CHAOSÚQUERY_CLASS_HSÚQUERY_CLASS_NONEÚQUERY_CLASS_ANYÚARES_VERSIONr   r   r   r
   rí   ré   r‰   rŽ   r“   r˜   rŸ   r¢   rË   rª   r­   r°   rº   rÀ   rÆ   rÐ   r  r  r  r  r  )žÚ_caresr   r!   r   r*   Ú_cffi_backendr+   Úares_library_initÚARES_LIB_INIT_ALLrT  Úares_threadsafetyrY   r   Úutilsr   r   r	   Ú_versionr
   rë  r…  r‡   rü   Úcollections.abcr   r   Údataclassesr   Útypingr   r   r   r   r   Úqueuer   r  rŸ  r/  rò  ró  r3  r4  r5  r²  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  r  r‚   rK  rŠ   rL  rã  rM  rš   rN  r    rO  r�   rQ  r£   rR  r«   rS  r®   rT  r±   rU  r»   rV  r”   rX  rÁ   rW  rÇ   rP  rÌ   rY  rä  rñ  rå  rZ  ræ  r[  rç  r\  rè  r]  r[   Úares_versionrJ   r^  ÚPYCARES_ADDRTTL_SIZErê   r   r   rö  Ú
def_externr(   r4   r:   r?   rC   rW   r]   rb   rd   rØ   r<   r÷   rI  r   r‰   rŽ   r“   r˜   rŸ   r¢   rª   r­   r°   rº   rÀ   rÆ   rË   rÐ   ré   rí   r  r  r  r  r  r,   r7   r(  r+  rA   Ú__all__r   r   r   ú<module>rn     sû	  ðà ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø Ð Ð Ð àÔÐ.˜Ô.¨tÔ/EÑFÔFÒFÐFÈ$È,Ø
ˆ,Ð4Ñ
5Ô
5Ð5à€tÔÑÔð AØ
ˆ,Ð?Ñ
@Ô
@Ð@à Ð Ð Ð Ð Ð Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø !Ð !Ð !Ð !Ð !Ð !à Ð Ð Ð Ø €€€Ø €€€Ø Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø !Ð !Ð !Ð !Ð !Ð !Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø Ð Ð Ð Ð Ð àˆC�ˆH„o€ØˆC��c˜3ÐÔ€ð Ô&€ØÔ*Ð ØÔ&€ØÔ.Ð ØÔ,Ð ØÔ,Ð ØÔ.Ð ØÔ2Ð ØÔ$€ØÔ2Ð ð Ô$€ØÔ.Ð ØÔ(Ð ØÔ.Ð ØÔ"€ØÔ€ØÔ€ØÔ €ØÔ €ØÔ0Ð ØÔ,Ð ØÔ2Ð ØÔ€Ø#Ô@Ð Ø#'Ô#HÐ  ð Ô&€ð Ô#€ØÔ)€ØÔ'€ØÔ'€ØÔ+Ð ØÔ%€ØÔ+Ð ØÔ%€ØÔ'€ØÔ'€ØÔ'€ØÔ'€ØÔ)€ØÔ+Ð ØÔ'€ð Ô#€ØÔ)Ð ØÔ'€ØÔ'Ð ØÔ%€àˆy˜˜œÐ%6 TÔ%6°t´yÑ%AÔ%AÑBÔBÑCÔC€ØÐ ð	ð 	ð 	ð 	ð 	�	ñ 	ô 	ð 	ð ,.Ð �D˜˜i˜Ô(Ð -Ð -Ñ -ð €„ÑÔð1ð 1ñ Ôð1ð €„ÑÔð*ð *ñ Ôð*ð  €„ÑÔð*ð *ñ Ôð*ð  €„ÑÔð*ð *ñ Ôð*ð. €„ÑÔð*ð *ñ Ôð*ð"ð ð ð$Gð Gð Gð
Gð Gð GðOð Oð Oð@Hð @Hð @HðFTð Tð Tðn/9ð /9ð /9ð /9ð /9ñ /9ô /9ð /9ðf ,Ð+Ñ-Ô-Ð ð_2ð _2ð _2ð _2ð _2ñ _2ô _2ð _2ðJ ðð ð ð ð ñ ô ñ „ðð ðð ð ð ð ñ ô ñ „ðð ðð ð ð ð ñ ô ñ „ðð
 ðð ð ð ð ñ ô ñ „ðð ðð ð ð ð ñ ô ñ „ðð ðð ð ð ð ñ ô ñ „ðð ðð ð ð ð ñ ô ñ „ðð ðð ð ð ð ñ ô ñ „ðð ðð ð ð ð ñ ô ñ „ðð ðð ð ð ð ñ ô ñ „ðð ðð ð ð ð ñ ô ñ „ðð ð!ð !ð !ð !ð !ñ !ô !ñ „ð!ð ðð ð ð ð ñ ô ñ „ðð ðð ð ð ð ñ ô ñ „ðð ð	/ð 	/ð 	/ð 	/ð 	/ñ 	/ô 	/ñ „ð	/ð ð ð  ð  ð  ð  ñ  ô  ñ „ð ð ðð ð ð ð ñ ô ñ „ðð ðð ð ð ð ñ ô ñ „ðð
 ðð ð ð ð ñ ô ñ „ðð ðð ð ð ð ñ ô ñ „ðð ðð ð ð ð ñ ô ñ „ððG˜jð Gð Gð Gð Gð*> ^ð >ð >ð >ð >ðn lð nð nð nð nðB¨ð ð ð ð ð6 ^ð 6ð 6ð 6ð 6ð(X€€€r   