+
    üÐjŽ$  ã                   ó   € R t ^ RIt^ RIHt ^ RIHtHtHt ^ RIH	t	 ^ RI
Ht ^ RIHtHtHtHtHtHt ]! ^4      w  tttR!t]! ]P0                  4       ! R R4      4       tR"R	 lt/ ]P6                  R
b]P8                  Rb]P:                  Rb]P<                  Rb]P>                  Rb]P@                  Rb]PB                  Rb]PD                  Rb]PF                  Rb]PH                  Rb]PJ                  Rb]PL                  Rb]PN                  Rb]PP                  Rb]PR                  Rb]PT                  Rb]PV                  Rb]PX                  R]PZ                  R]P\                  R]P^                  R]P`                  R]Pb                  R /Ct2R# )#z>
Base functionality useful to various parts of Twisted Names.
N)Úimplementer)ÚdeferÚerrorÚ
interfaces)ÚLogger)Údns)ÚDNSFormatErrorÚDNSNameErrorÚDNSNotImplementedErrorÚDNSQueryRefusedErrorÚDNSServerErrorÚDNSUnknownErrorc            
       óÄ  a € ] tR t^!t o Rt]! 4       t]P                  ]	]P                  ]]P                  ]]P                  ]]P                   ]/tRtR tR tR!R ltR tR!R ltR!R ltR!R	 ltR!R
 ltR!R ltR!R ltR!R ltR!R ltR!R lt R!R lt!R!R lt"R!R lt#R!R lt$R!R lt%R!R lt&R!R lt'R!R lt(R!R lt)R!R lt*R!R lt+R!R lt,R!R lt-R!R lt.R"R lt/R t0R t1V t2R# )#ÚResolverBasea6  
L{ResolverBase} is a base class for implementations of
L{interfaces.IResolver} which deals with a lot
of the boilerplate of implementing all of the lookup methods.

@cvar _errormap: A C{dict} mapping DNS protocol failure response codes
    to exception classes which will be used to represent those failures.
Nc                ó~   € / V n         \         P                  4        F  w  r\        W4      V P                   V&   K  	  R # ©N)ÚtypeToMethodÚitemsÚgetattr)ÚselfÚkÚvs   &  Ú6/usr/lib/python3/dist-packages/twisted/names/common.pyÚ__init__ÚResolverBase.__init__7   s4   € ØˆÔÜ ×&Ñ&Ö(‰DˆAÜ#*¨4Ó#3ˆD×Ñ˜aÓ ó )ó    c                óB   € V P                   P                  V\        4      # )z…
Convert a response code (one of the possible values of
L{dns.Message.rCode} to an exception instance representing it.

@since: 10.0
)Ú	_errormapÚgetr   )r   ÚresponseCodes   &&r   ÚexceptionForCodeÚResolverBase.exceptionForCode<   s   € ð �~‰~×!Ñ! ,´Ó@Ð@r   c                ó�  €  V P                   VP                  ,          p\        P                  ! W1P                  P                  V4      #   \
         dq    T P                  P                  R TR7       \        P                  ! T P                  TP                  P                  \        P                  TP                  T4      u # i ; i)z:Query of unknown type {query.type} for {query.name.name!r})Úquery)r   Útyper   ÚmaybeDeferredÚnameÚKeyErrorÚ_logÚdebugÚ_lookupr   ÚIN)r   r#   ÚtimeoutÚmethods   &&& r   r#   ÚResolverBase.queryE   s™   € ð	IØ×&Ñ& u§z¡zÕ2ˆFô ×&Ò& v¯z©z¯©ÀÓHÐHøô ô 	Ø�I‰I�O‰OØLØð ô ô ×&Ò&Ø—‘˜eŸj™jŸo™o¬s¯v©v°u·z±zÀ7óò ð	ús   ‚A
 Á
A8CÃCc                ó@   € \         P                  ! \        R 4      4      # )zResolverBase._lookup)r   ÚfailÚNotImplementedError)r   r&   Úclsr$   r,   s   &&&&&r   r*   ÚResolverBase._lookupS   s   € Ü�zŠzÔ-Ð.DÓEÓFÐFr   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   ÚdomainStringr+   ÚA©r   r&   r,   s   &&&r   ÚlookupAddressÚResolverBase.lookupAddressV   s*   € Ø�|‰|œC×,Ò,¨TÓ2´C·F±F¼C¿E¹EÀ7ÓKÐKr   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚAAAAr7   s   &&&r   ÚlookupIPV6AddressÚResolverBase.lookupIPV6AddressY   ó*   € Ø�|‰|œC×,Ò,¨TÓ2´C·F±F¼C¿H¹HÀgÓNÐNr   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚA6r7   s   &&&r   ÚlookupAddress6ÚResolverBase.lookupAddress6\   ó*   € Ø�|‰|œC×,Ò,¨TÓ2´C·F±F¼C¿F¹FÀGÓLÐLr   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚMXr7   s   &&&r   ÚlookupMailExchangeÚResolverBase.lookupMailExchange_   rC   r   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚNSr7   s   &&&r   ÚlookupNameserversÚResolverBase.lookupNameserversb   rC   r   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚCNAMEr7   s   &&&r   ÚlookupCanonicalNameÚ ResolverBase.lookupCanonicalNamee   ó*   € Ø�|‰|œC×,Ò,¨TÓ2´C·F±F¼C¿I¹IÀwÓOÐOr   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚMBr7   s   &&&r   ÚlookupMailBoxÚResolverBase.lookupMailBoxh   rC   r   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚMGr7   s   &&&r   ÚlookupMailGroupÚResolverBase.lookupMailGroupk   rC   r   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚMRr7   s   &&&r   ÚlookupMailRenameÚResolverBase.lookupMailRenamen   rC   r   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚPTRr7   s   &&&r   ÚlookupPointerÚResolverBase.lookupPointerq   ó*   € Ø�|‰|œC×,Ò,¨TÓ2´C·F±F¼C¿G¹GÀWÓMÐMr   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚSOAr7   s   &&&r   ÚlookupAuthorityÚResolverBase.lookupAuthorityt   ra   r   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚNULLr7   s   &&&r   Ú
lookupNullÚResolverBase.lookupNullw   r>   r   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚWKSr7   s   &&&r   ÚlookupWellKnownServicesÚ$ResolverBase.lookupWellKnownServicesz   ra   r   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚSRVr7   s   &&&r   ÚlookupServiceÚResolverBase.lookupService}   ra   r   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚHINFOr7   s   &&&r   ÚlookupHostInfoÚResolverBase.lookupHostInfo€   rP   r   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚMINFOr7   s   &&&r   ÚlookupMailboxInfoÚResolverBase.lookupMailboxInfoƒ   rP   r   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚTXTr7   s   &&&r   Ú
lookupTextÚResolverBase.lookupText†   ra   r   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚSPFr7   s   &&&r   ÚlookupSenderPolicyÚResolverBase.lookupSenderPolicy‰   ra   r   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚRPr7   s   &&&r   ÚlookupResponsibilityÚ!ResolverBase.lookupResponsibilityŒ   rC   r   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚAFSDBr7   s   &&&r   ÚlookupAFSDatabaseÚResolverBase.lookupAFSDatabase�   rP   r   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚAXFRr7   s   &&&r   Ú
lookupZoneÚResolverBase.lookupZone’   r>   r   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚNAPTRr7   s   &&&r   ÚlookupNamingAuthorityPointerÚ)ResolverBase.lookupNamingAuthorityPointer•   rP   r   c                óŠ   € V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ÚALL_RECORDSr7   s   &&&r   ÚlookupAllRecordsÚResolverBase.lookupAllRecords˜   s*   € Ø�|‰|œC×,Ò,¨TÓ2´C·F±F¼C¿O¹OÈWÓUÐUr   c                óŒ   € \         P                  ! V4      pV P                  W4      pVP                  V P                  W4       V# r   )r   r5   r”   ÚaddCallbackÚ
_cbRecords)r   r&   r,   ÚeffortÚds   &&&& r   ÚgetHostByNameÚResolverBase.getHostByNameœ   s;   € Ü×Ò Ó%ˆð ×!Ñ! $Ó0ˆØ	�‰�d—o‘o tÔ4Øˆr   c                óª   € Vw  rEp\        V \        P                  ! V4      WE,           V,           V4      pV'       g   \        P                  ! V4      hV# r   )ÚextractRecordr   ÚNamer   ÚDNSLookupError)r   Úrecordsr&   r™   ÚansÚauthÚaddÚresults   &&&&    r   r˜   ÚResolverBase._cbRecords¥   sD   € Ø"Ñˆ�CÜ˜t¤S§X¢X¨d£^°SµZÀ#Õ5EÀvÓNˆßÜ×&Ò& tÓ,Ð,Øˆr   )r   r   )Né
   )3Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r(   r   ÚEFORMATr   ÚESERVERr   ÚENAMEr	   ÚENOTIMPr
   ÚEREFUSEDr   r   r   r   r    r#   r*   r8   r<   rA   rF   rJ   rN   rS   rW   r[   r_   rd   rh   rl   rp   rt   rx   r|   r€   r„   rˆ   rŒ   r�   r”   r›   r˜   Ú__static_attributes__Ú__classdictcell__)Ú__classdict__s   @r   r   r   !   s   ø‡ € ññ ‹8€Dà�‰�^Ø�‰�^Ø�	‰	�<Ø�‰Ð+Ø�‰Ð*ð€Ið €Lò4ò
AôIòGôLôOôMôMôMôPôMôMôMôNôNôOôNôNôPôPôNôNôMôPôOôPôVô÷ð r   r   c                óÆ  aaa€ S'       g   R# \        \        R4      '       dí   V Fp  pVP                  S8X  g   K  VP                  \        P
                  8X  g   K7  \        P                  ! \        P                  VP                  P                  4      u # 	  V Fp  pVP                  S8X  g   K  VP                  \        P                  8X  g   K7  \        P                  ! \        P                  VP                  P                  4      u # 	  V Fp  pVP                  S8X  g   K  VP                  \        P                  8X  g   K7  \        P                  ! \        P                  VP                  P                  4      u # 	  V F£  pVP                  S8X  g   K  VP                  \        P                  8X  g   K7  \        WP                  P                  VS^,
          4      pV'       g;   V P                  VP                  P                  P                  S^,
          R7      u # Vu # 	  V F¬  pVP                  \        P                   8w  d   K$  ^ RIHp VP'                  VP                  P                  P                  P)                  R4      \        P*                  3.R7      oVVV3R lpSP-                  SP                  4      P/                  V4      u # 	  R# )a%  
Resolve a name to an IP address, following I{CNAME} records and I{NS}
referrals recursively.

This is an implementation detail of L{ResolverBase.getHostByName}.

@param resolver: The resolver to use for the next query (unless handling
an I{NS} referral).
@type resolver: L{IResolver}

@param name: The name being looked up.
@type name: L{dns.Name}

@param answers: All of the records returned by the previous query (answers,
authority, and additional concatenated).
@type answers: L{list} of L{dns.RRHeader}

@param level: Remaining recursion budget. This is decremented at each
recursion. The query returns L{None} when it reaches 0.
@type level: L{int}

@returns: The first IPv4 or IPv6 address (as a dotted quad or colon
quibbles), or L{None} when no result is found.
@rtype: native L{str} or L{None}
NÚ	inet_ntop)r™   )ÚclientÚascii)Úserversc                 óR   <€ V w  rp\        SSW,           V,           S^,
          4      # )é   )rž   )r¡   r¢   r£   r¤   Úlevelr&   Ú
nsResolvers   &   €€€r   Ú
queryAgainÚ!extractRecord.<locals>.queryAgainè   s)   ø€ Ø&ÑˆS˜Ü  ¨T°3µ:ÀÕ3CÀUÈQÅYÓOÐOr   )ÚhasattrÚsocketr&   r$   r   r@   r¶   ÚAF_INET6ÚpayloadÚaddressr;   r6   ÚAF_INETrM   rž   r›   rI   Útwisted.namesr·   ÚResolverÚdecodeÚPORTr8   r—   )	Úresolverr&   Úanswersr¼   Úrr¥   r·   r¾   r½   s	   &f&f    @r   rž   rž   ­   sä  ú€ ÷4 Ùô Œv�{×#Ò#ÛˆAØ�v‰v˜Ž~ !§&¡&¬C¯F©FÖ"2Ü×'Ò'¬¯©¸¿¹×9JÑ9JÓKÒKñ ó ˆAØ�v‰v˜Ž~ !§&¡&¬C¯H©HÖ"4Ü×'Ò'¬¯©¸¿¹×9JÑ9JÓKÒKñ ó ˆØ�6‰6�TŽ>˜aŸf™f¬¯©žoÜ×#Ò#¤F§N¡N°A·I±I×4EÑ4EÓFÒFñ ó ˆØ�6‰6�TŽ>˜aŸf™f¬¯	©	Ö1Ü" 8¯Y©Y¯^©^¸WÀeÈaÅiÓPˆFßØ×-Ñ-¨a¯i©i¯n©n×.AÑ.AÈ%ÐRSÍ)Ð-ÓTÒTØŠMñ ó ˆØ�6‰6”S—V‘VÔÙÝ(à—_‘_à—‘—‘×$Ñ$×+Ñ+¨GÓ4´c·h±hÐ?ðð %ó 
ˆ
÷	Pð ×'Ñ'¨¯	©	Ó2×>Ñ>¸zÓJÒJó r   r8   r<   rA   rJ   rN   rd   rS   rW   r[   rh   rl   r_   rt   rx   rF   r|   r€   r„   rˆ   rp   r�   rŒ   r”   )© rÍ   rÍ   )r§   )3r¬   rÁ   Úzope.interfacer   Útwisted.internetr   r   r   Útwisted.loggerr   rÆ   r   Útwisted.names.errorr   r	   r
   r   r   r   ÚrangeÚ_ANSÚ_AUTHÚ_ADDÚEMPTY_RESULTÚ	IResolverr   rž   r6   r;   r@   rI   rM   rc   rR   rV   rZ   rg   rk   r^   rs   rw   rE   r{   r   rƒ   r‡   ro   r�   r‹   r“   r   rÍ   r   r   Ú<module>rØ      sÎ  ðñ
ó
 å &ç 5Ñ 5Ý !Ý ÷÷ ñ ˜!“HÑ €€eˆTà€ñ ˆZ×!Ñ!Ó"÷Hð Hó #ðHôV?KðDØ‡E�Eˆ?ðà‡H�HÐ!ðð ‡F�FÐðð ‡F�FÐð	ð
 ‡I�IÐ$ðð ‡G�GÐðð ‡F�FˆOðð ‡F�FÐðð ‡F�FÐðð ‡H�Hˆlðð ‡G�GÐ&ðð ‡G�Gˆ_ðð ‡I�IÐðð ‡I�IÐ"ðð ‡F�FÐ ðð  ‡G�Gˆ\ð!ð" ‡G�GÐ!ð#ð$ ‡F�FÐ"Ø‡I�IÐ"Ø‡G�Gˆ_Ø‡I�IÐ-Ø‡H�HˆlØ‡O�OÐ'ñ/‚r   