ó
    ÌÅLgw1  ã                   ó¾  • S r SSKrSSKrSSKJrJrJr  SSKrSSK	rSSK
rSSKrSSKrSSKrSSKr\R                  R                   1r\R                  R$                  \R                  R&                  \R                  R(                  1rS r\R.                   " S S\R0                  5      5       r " S S5      r\R6                  R6                   " S	 S
\5      5       rg)z)DNS nodes.  A node is a set of rdatasets.é    N)ÚAnyÚDictÚOptionalc                 óh   • X;   =(       d(    U[         R                  R                  :H  =(       a    X ;   $ ©N)ÚdnsÚ	rdatatypeÚRRSIG)ÚrdtypesÚrdtypeÚcoverss      Ú*/usr/lib/python3/dist-packages/dns/node.pyÚ_matches_type_or_its_signaturer   ,   s'   € ØÑ×U ¬3¯=©=×+>Ñ+>Ñ!>×!TÀ6ÑCTÐUó    c                   óØ   • \ rS rSrSrSrSrSr\S\	R                  R                  S\	R                  R                  SS 4S	 j5       r\S
\	R                  R                  SS 4S j5       rSrg)ÚNodeKindé0   zRdatasets in nodesr   é   é   r   r   Úreturnc                 ó¶   • [        [        X5      (       a  [        R                  $ [        [        X5      (       a  [        R
                  $ [        R                  $ r   )r   Ú_cname_typesr   ÚCNAMEÚ_neutral_typesÚNEUTRALÚREGULAR)Úclsr   r   s      r   ÚclassifyÚNodeKind.classify8   s@   € ô *¬,¸×GÑGÜ—>‘>Ð!Ü+¬N¸F×KÑKÜ×#Ñ#Ð#ä×#Ñ#Ð#r   Úrdatasetc                 óN   • U R                  UR                  UR                  5      $ r   )r   r   r   )r   r    s     r   Úclassify_rdatasetÚNodeKind.classify_rdatasetC   s   € à�|‰|˜HŸO™O¨X¯_©_Ó=Ð=r   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r   Úclassmethodr   r	   Ú	RdataTyper   r    ÚRdatasetr"   Ú__static_attributes__r$   r   r   r   r   0   s~   † áà€GØ€GØ€Eàð$Ø—]‘]×,Ñ,ð$Ø69·m±m×6MÑ6Mð$à	ó$ó ð$ð ð>¨¯©×)>Ñ)>ð >À:ó >ó ó>r   r   c                   óˆ  • \ rS rSrSrS/rS rS\R                  R                  S\
\\4   S\4S jrS	 rS
 rS rS rS rS r\R(                  R*                  S4S\R,                  R.                  S\R(                  R0                  S\R(                  R0                  S\S\R4                  R6                  4
S jjr\R(                  R*                  S4S\R,                  R.                  S\R(                  R0                  S\R(                  R0                  S\S\\R4                  R6                     4
S jjr\R(                  R*                  4S\R,                  R.                  S\R(                  R0                  S\R(                  R0                  SS4S jjrS\R4                  R6                  SS4S jr S\!4S jr"S\4S jr#Sr$g)ÚNodeéH   a¦  A Node is a set of rdatasets.

A node is either a CNAME node or an "other data" node.  A CNAME
node contains only CNAME, KEY, NSEC, and NSEC3 rdatasets along with their
covering RRSIG rdatasets.  An "other data" node contains any
rdataset other than a CNAME or RRSIG(CNAME) rdataset.  When
changes are made to a node, the CNAME or "other data" state is
always consistent with the update, i.e. the most recent change
wins.  For example, if you have a node which contains a CNAME
rdataset, and then add an MX rdataset to it, then the CNAME
rdataset will be deleted.  Likewise if you have a node containing
an MX rdataset and add a CNAME rdataset, the MX rdataset will be
deleted.
Ú	rdatasetsc                 ó   • / U l         g r   ©r1   ©Úselfs    r   Ú__init__ÚNode.__init__Z   s	   € àˆ�r   ÚnameÚkwr   c                 ó   • [         R                  " 5       nU R                   HG  n[        U5      S:”  d  M  UR	                  UR
                  " U40 UD65        UR	                  S5        MI     UR                  5       SS $ )zòConvert a node to text format.

Each rdataset at the node is printed.  Any keyword arguments
to this method are passed on to the rdataset's to_text() method.

*name*, a ``dns.name.Name``, the owner name of the
rdatasets.

Returns a ``str``.

r   Ú
Néÿÿÿÿ)ÚioÚStringIOr1   ÚlenÚwriteÚto_textÚgetvalue)r5   r8   r9   ÚsÚrdss        r   rA   ÚNode.to_text^   sb   € ô �KŠK‹MˆØ—>”>ˆCÜ�3‹x˜!�|Ø—‘˜Ÿš DÑ/¨BÑ/Ô0Ø—‘˜–ñ "ð �z‰z‹|˜C˜RÐ Ð r   c                 ó6   • S[        [        U 5      5      -   S-   $ )Nz
<DNS node Ú>)ÚstrÚidr4   s    r   Ú__repr__ÚNode.__repr__r   s   € Øœc¤" T£(›mÑ+¨cÑ1Ð1r   c                 ó”   • U R                    H  nX!R                   ;  d  M    g   UR                    H  nX R                   ;  d  M    g   g)NFTr3   )r5   ÚotherÚrds      r   Ú__eq__ÚNode.__eq__u   sA   € ð —.”.ˆBØŸ™Õ(Ùñ !ð —/”/ˆBØŸ™Õ'Ùñ "ð r   c                 ó.   • U R                  U5      (       + $ r   )rO   )r5   rM   s     r   Ú__ne__ÚNode.__ne__�   s   € Ø—;‘;˜uÓ%Ô%Ð%r   c                 ó,   • [        U R                  5      $ r   )r?   r1   r4   s    r   Ú__len__ÚNode.__len__„   s   € Ü�4—>‘>Ó"Ð"r   c                 ó,   • [        U R                  5      $ r   )Úiterr1   r4   s    r   Ú__iter__ÚNode.__iter__‡   s   € Ü�D—N‘NÓ#Ð#r   c                 ó(  • [        U R                  5      S:”  aÔ  [        R                  U5      nU[        R                  :X  aL  U R                   Vs/ s H.  n[        R                  U5      [        R
                  :w  d  M,  UPM0     snU l        O_U[        R
                  :X  aK  U R                   Vs/ s H.  n[        R                  U5      [        R                  :w  d  M,  UPM0     snU l        U R                  R                  U5        gs  snf s  snf )aV  Append rdataset to the node with special handling for CNAME and
other data conditions.

Specifically, if the rdataset being appended has ``NodeKind.CNAME``,
then all rdatasets other than KEY, NSEC, NSEC3, and their covering
RRSIGs are deleted.  If the rdataset being appended has
``NodeKind.REGULAR`` then CNAME and RRSIG(CNAME) are deleted.
r   N)r?   r1   r   r"   r   r   Úappend)r5   r    ÚkindrD   s       r   Ú_append_rdatasetÚNode._append_rdatasetŠ   sÙ   € ô ˆt�~‰~Ó Ó"Ü×-Ñ-¨hÓ7ˆDØ”x—~‘~Ó%ð  $Ÿ~š~ó"â-˜Ü×1Ñ1°#Ó6¼(×:JÑ:JÑJ÷ Ù-ñ"�•ð
 œ×)Ñ)Ó)ð  $Ÿ~š~ó"â-˜Ü×1Ñ1°#Ó6¼(¿.¹.ÑH÷ Ù-ñ"�”ð 	�‰×Ñ˜hÕ'ùò"ùò"s   Á+D
Â D
Â1+DÃ DFÚrdclassr   r   Úcreatec                 óÞ   • U R                    H  nUR                  XU5      (       d  M  Us  $    U(       d  [        e[        R                  R                  XU5      nU R                  U5        U$ )a¢  Find an rdataset matching the specified properties in the
current node.

*rdclass*, a ``dns.rdataclass.RdataClass``, the class of the rdataset.

*rdtype*, a ``dns.rdatatype.RdataType``, the type of the rdataset.

*covers*, a ``dns.rdatatype.RdataType``, the covered type.
Usually this value is ``dns.rdatatype.NONE``, but if the
rdtype is ``dns.rdatatype.SIG`` or ``dns.rdatatype.RRSIG``,
then the covers value will be the rdata type the SIG/RRSIG
covers.  The library treats the SIG and RRSIG types as if they
were a family of types, e.g. RRSIG(A), RRSIG(NS), RRSIG(SOA).
This makes RRSIGs much easier to work with than if RRSIGs
covering different rdata types were aggregated into a single
RRSIG rdataset.

*create*, a ``bool``.  If True, create the rdataset if it is not found.

Raises ``KeyError`` if an rdataset of the desired type and class does
not exist and *create* is not ``True``.

Returns a ``dns.rdataset.Rdataset``.
)r1   ÚmatchÚKeyErrorr   r    r,   r^   ©r5   r`   r   r   ra   rD   s         r   Úfind_rdatasetÚNode.find_rdataset¦   s\   € ð@ —>”>ˆCØ�y‰y˜¨&×1Ó1Ø’
ñ "ö ÜˆNÜ�l‰l×#Ñ# G°VÓ<ˆØ×Ñ˜cÔ"Øˆ
r   c                 óR   •  U R                  XX45      nU$ ! [         a    Sn U$ f = f)ag  Get an rdataset matching the specified properties in the
current node.

None is returned if an rdataset of the specified type and
class does not exist and *create* is not ``True``.

*rdclass*, an ``int``, the class of the rdataset.

*rdtype*, an ``int``, the type of the rdataset.

*covers*, an ``int``, the covered type.  Usually this value is
dns.rdatatype.NONE, but if the rdtype is dns.rdatatype.SIG or
dns.rdatatype.RRSIG, then the covers value will be the rdata
type the SIG/RRSIG covers.  The library treats the SIG and RRSIG
types as if they were a family of
types, e.g. RRSIG(A), RRSIG(NS), RRSIG(SOA).  This makes RRSIGs much
easier to work with than if RRSIGs covering different rdata
types were aggregated into a single RRSIG rdataset.

*create*, a ``bool``.  If True, create the rdataset if it is not found.

Returns a ``dns.rdataset.Rdataset`` or ``None``.
N)rf   rd   re   s         r   Úget_rdatasetÚNode.get_rdatasetÏ   s;   € ð>	Ø×$Ñ$ W°fÓEˆCð ˆ
øô ó 	Ø‰CØˆ
ð	ús   ‚ –&¥&Nc                 óf   • U R                  XU5      nUb  U R                  R                  U5        gg)a  Delete the rdataset matching the specified properties in the
current node.

If a matching rdataset does not exist, it is not an error.

*rdclass*, an ``int``, the class of the rdataset.

*rdtype*, an ``int``, the type of the rdataset.

*covers*, an ``int``, the covered type.
N)ri   r1   Úremove)r5   r`   r   r   rD   s        r   Údelete_rdatasetÚNode.delete_rdatasetô   s2   € ð$ ×Ñ °Ó8ˆØ‰?Ø�N‰N×!Ñ! #Õ&ð r   Úreplacementc                 ób  • [        U[        R                  R                  5      (       d  [	        S5      e[        U[        R
                  R                  5      (       a  UR                  5       nU R                  UR                  UR                  UR                  5        U R                  U5        g)a…  Replace an rdataset.

It is not an error if there is no rdataset matching *replacement*.

Ownership of the *replacement* object is transferred to the node;
in other words, this method does not store a copy of *replacement*
at the node, it stores *replacement* itself.

*replacement*, a ``dns.rdataset.Rdataset``.

Raises ``ValueError`` if *replacement* is not a
``dns.rdataset.Rdataset``.
zreplacement is not an rdatasetN)Ú
isinstancer   r    r,   Ú
ValueErrorÚrrsetÚRRsetÚto_rdatasetrm   r`   r   r   r^   ©r5   ro   s     r   Úreplace_rdatasetÚNode.replace_rdataset
  sƒ   € ô ˜+¤s§|¡|×'<Ñ'<×=Ñ=ÜÐ=Ó>Ð>Ü�k¤3§9¡9§?¡?×3Ñ3ð &×1Ñ1Ó3ˆKØ×ÑØ×Ñ ×!3Ñ!3°[×5GÑ5Gô	
ð 	×Ñ˜kÕ*r   c                 óÌ   • U R                    HE  n[        R                  UR                  UR                  5      nU[        R
                  :w  d  MC  Us  $    [        R
                  $ )a  Classify a node.

A node which contains a CNAME or RRSIG(CNAME) is a
``NodeKind.CNAME`` node.

A node which contains only "neutral" types, i.e. types allowed to
co-exist with a CNAME, is a ``NodeKind.NEUTRAL`` node.  The neutral
types are NSEC, NSEC3, KEY, and their associated RRSIGS.  An empty node
is also considered neutral.

A node which contains some rdataset which is not a CNAME, RRSIG(CNAME),
or a neutral type is a a ``NodeKind.REGULAR`` node.  Regular nodes are
also commonly referred to as "other data".
)r1   r   r   r   r   r   )r5   r    r]   s      r   r   ÚNode.classify$  sM   € ð ŸœˆHÜ×$Ñ$ X§_¡_°h·o±oÓFˆDØ”x×'Ñ'Õ'Ø’ñ 'ô ×ÑÐr   c                 ó   • g)NFr$   r4   s    r   Úis_immutableÚNode.is_immutable9  s   € Ør   r3   )%r%   r&   r'   r(   r)   Ú	__slots__r6   r   r8   ÚNamer   rH   r   rA   rJ   rO   rR   rU   rY   r^   r	   ÚNONEÚ
rdataclassÚ
RdataClassr+   Úboolr    r,   rf   r   ri   rm   rw   r   r   r|   r-   r$   r   r   r/   r/   H   sÐ  † ñð �€Iòð!˜CŸH™HŸM™Mð !°°c¸3°h±ð !ÀCô !ò(2ò
ò&ò#ò$ò(ð@ +.¯-©-×*<Ñ*<Øñ'à—‘×*Ñ*ð'ð —‘×'Ñ'ð'ð —‘×'Ñ'ð	'ð
 ð'ð 
�‰×	Ñ	õ'ðZ +.¯-©-×*<Ñ*<Øñ#à—‘×*Ñ*ð#ð —‘×'Ñ'ð#ð —‘×'Ñ'ð	#ð
 ð#ð 
�#—,‘,×'Ñ'Ñ	(õ#ðR +.¯-©-×*<Ñ*<ñ	'à—‘×*Ñ*ð'ð —‘×'Ñ'ð'ð —‘×'Ñ'ð	'ð
 
õ'ð,+¨C¯L©L×,AÑ,Að +Àdô +ð4 ˜(ô  ð*˜d÷ r   r/   c                   ó  ^ • \ rS rSrU 4S jr\R                  R                  S4S\R                  R                  S\R                  R                  S\R                  R                  S\S\R                  R                  4
U 4S	 jjjr\R                  R                  S4S\R                  R                  S\R                  R                  S\R                  R                  S\S\\R                  R                     4
U 4S
 jjjr\R                  R                  4S\R                  R                  S\R                  R                  S\R                  R                  SS4S jjrS\R                  R                  SS4S jrS\4S jrSrU =r$ )ÚImmutableNodei=  c                 ó¼   >• [         TU ]  5         [        UR                   Vs/ s H"  n[        R
                  R                  U5      PM$     sn5      U l        g s  snf r   )Úsuperr6   Útupler1   r   r    ÚImmutableRdataset)r5   ÚnoderD   Ú	__class__s      €r   r6   ÚImmutableNode.__init__?  sB   ø€ Ü‰ÑÔÜØ<@¿NºNÓKºN°SŒS�\‰\×+Ñ+¨CÖ0¹NÑKó
ˆ�ùÚKs   £)AFr`   r   r   ra   r   c                 óJ   >• U(       a  [        S5      e[        TU ]	  XUS5      $ ©NÚ	immutableF)Ú	TypeErrorr‡   rf   ©r5   r`   r   r   ra   r‹   s        €r   rf   ÚImmutableNode.find_rdatasetE  s'   ø€ ö Ü˜KÓ(Ð(Ü‰wÑ$ W°f¸eÓDÐDr   c                 óJ   >• U(       a  [        S5      e[        TU ]	  XUS5      $ rŽ   )r�   r‡   ri   r‘   s        €r   ri   ÚImmutableNode.get_rdatasetP  s'   ø€ ö Ü˜KÓ(Ð(Ü‰wÑ# G°V¸UÓCÐCr   Nc                 ó   • [        S5      e©Nr�   ©r�   )r5   r`   r   r   s       r   rm   ÚImmutableNode.delete_rdataset[  s   € ô ˜Ó$Ð$r   ro   c                 ó   • [        S5      er–   r—   rv   s     r   rw   ÚImmutableNode.replace_rdatasetc  s   € Ü˜Ó$Ð$r   c                 ó   • g)NTr$   r4   s    r   r|   ÚImmutableNode.is_immutablef  s   € Ør   r3   )r%   r&   r'   r(   r6   r   r	   r€   r�   r‚   r+   rƒ   r    r,   rf   r   ri   rm   rw   r|   r-   Ú__classcell__)r‹   s   @r   r…   r…   =  s‰  ø† õ
ð +.¯-©-×*<Ñ*<Øñ	Eà—‘×*Ñ*ð	Eð —‘×'Ñ'ð	Eð —‘×'Ñ'ð		Eð
 ð	Eð 
�‰×	Ñ	÷	Eð 	Eð +.¯-©-×*<Ñ*<Øñ	Dà—‘×*Ñ*ð	Dð —‘×'Ñ'ð	Dð —‘×'Ñ'ð		Dð
 ð	Dð 
�#—,‘,×'Ñ'Ñ	(÷	Dð 	Dð +.¯-©-×*<Ñ*<ñ	%à—‘×*Ñ*ð%ð —‘×'Ñ'ð%ð —‘×'Ñ'ð	%ð
 
õ%ð%¨C¯L©L×,AÑ,Að %Àdô %ð˜d÷ ò r   r…   )r)   Úenumr=   Útypingr   r   r   Údns.immutabler   Údns.nameÚdns.rdataclassÚdns.rdatasetÚdns.rdatatypeÚdns.rendererÚ	dns.rrsetr	   r   r   ÚNSECÚNSEC3ÚKEYr   r   ÚuniqueÚEnumr   r/   r�   r…   r$   r   r   Ú<module>r¬      sÌ   ðñ$ 0ã Û 	ß &Ñ &ã Û Û Û Û Û Û ð ‡M�M×Ñð€ð ‡M�M×ÑØ‡M�M×ÑØ‡M�M×Ñð€òVð ‡�ô>ˆt�y‰yó >ó ð>÷.rñ rðj ‡�×Ñô)�Dó )ó ñ)r   