§
    Ètºf)A  ã                   óÈ   — d Z ddlZddlZddlmZ ddlmZmZmZ ddl	m
Z
 ddlmZmZ ddlmZ dd	„Z G d
„ dej        ¦  «        Z G d„ de¦  «        Z G d„ de¦  «        ZdS )z
Authoritative resolvers.
é    N)Údefer)ÚcommonÚdnsÚerror)Úfailure)ÚexecfileÚnativeString)ÚFilePathú/tmp/twisted-names.serialc                 óÜ  — t          j        d¦  «        }t          j        d¦  «        }	 t          j                             | ¦  «        s@t          | d¦  «        5 }|                     |dz   ¦  «         ddd¦  «         n# 1 swxY w Y   t          j        |¦  «         n# t          j        |¦  «         w xY wt          | ¦  «        5 }|                     ¦   «          	                    ¦   «         \  }}ddd¦  «         n# 1 swxY w Y   ||k    rt          |¦  «        dz   pd}t          | d¦  «        5 }|                     d||fz  ¦  «         ddd¦  «         n# 1 swxY w Y   |d	|fz  z   }|S )
aÛ  
    Return a monotonically increasing (across program runs) integer.

    State is stored in the given file.  If it does not exist, it is
    created with rw-/---/--- permissions.

    This manipulates process-global state by calling C{os.umask()}, so it isn't
    thread-safe.

    @param filename: Path to a file that is used to store the state across
        program runs.
    @type filename: L{str}

    @return: a monotonically increasing number
    @rtype: L{str}
    z%Y%m%dé   Úwz 0Né   r   z%s %dz%02d)ÚtimeÚstrftimeÚosÚumaskÚpathÚexistsÚopenÚwriteÚreadlineÚsplitÚint)ÚfilenameÚserialÚoÚfÚ
serialFileÚ
lastSerialÚzoneIDs          úV/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/names/authority.pyÚ	getSerialr#      s  € õ" Œ]˜8Ñ$Ô$€Få
Œ�‰Œ€AðÝŒw�~Š~˜hÑ'Ô'ð 	'Ý�h Ñ$Ô$ð '¨Ø—’˜ ™Ñ&Ô&Ð&ð'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'õ 	Œ�‰Œˆˆø�Œ�‰Œˆˆøøøå	ˆh‰Œð ;˜:Ø'×0Ò0Ñ2Ô2×8Ò8Ñ:Ô:Ñˆ
�Fð;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;ð ˜FÒ"Ð9­¨V©¬°q©Ð>¸Q€Få	ˆh˜Ñ	Ô	ð 5 
Ø×Ò˜ F¨FÐ#3Ñ3Ñ4Ô4Ð4ð5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5ð 5ð 5ð 5øøøð 5ð 5ð 5ð 5ð �v  	Ñ)Ñ*€FØ€MsS   ª/B ÁA>Á2B Á>BÂB ÂBÂB ÂB4Ã*C<Ã<D ÄD Ä1EÅEÅEc                   óŒ   — e Zd ZdZej        ej        ej        fZej	        ej
        fZdZdZd„ Zd„ Zd„ Zd„ Zdd„Zdd	„Zd
„ ZdS )ÚFileAuthoritya­  
    An Authority that is loaded from a file.

    This is an abstract class that implements record search logic. To create
    a functional resolver, subclass it and override the L{loadFile} method.

    @ivar _ADDITIONAL_PROCESSING_TYPES: Record types for which additional
        processing will be done.

    @ivar _ADDRESS_TYPES: Record types which are useful for inclusion in the
        additional section generated during additional processing.

    @ivar soa: A 2-tuple containing the SOA domain name as a L{bytes} and a
        L{dns.Record_SOA}.

    @ivar records: A mapping of domains (as lowercased L{bytes}) to records.
    @type records: L{dict} with L{bytes} keys
    Nc                 ó|   — t           j                             | ¦  «         |                      |¦  «         i | _        d S ©N)r   ÚResolverBaseÚ__init__ÚloadFileÚ_cache©Úselfr   s     r"   r)   zFileAuthority.__init__V   s6   € ÝÔ×$Ò$ TÑ*Ô*Ð*Ø�Š�hÑÔÐØˆŒˆˆó    c                 ó   — || _         d S r'   )Ú__dict__)r-   Ústates     r"   Ú__setstate__zFileAuthority.__setstate__[   s   € ØˆŒˆˆr.   c                 ó   — dS )ab  
        Load DNS records from a file.

        This method populates the I{soa} and I{records} attributes. It must be
        overridden in a subclass. It is called once from the initializer.

        @param filename: The I{filename} parameter that was passed to the
        initilizer.

        @returns: L{None} -- the return value is ignored
        N© r,   s     r"   r*   zFileAuthority.loadFile^   s   € € € r.   c           
   #   ó8  K  — ||z   D ]‘}|j         | j        v r�|j        j        j        }| j                             |                     ¦   «         d¦  «        D ]B}|j        | j        v r2t          j
        ||j        t          j        |j        p||d¬¦  «        V — ŒCŒ’dS )aW  
        Find locally known information that could be useful to the consumer of
        the response and construct appropriate records to include in the
        I{additional} section of that response.

        Essentially, implement RFC 1034 section 4.3.2 step 6.

        @param answer: A L{list} of the records which will be included in the
            I{answer} section of the response.

        @param authority: A L{list} of the records which will be included in
            the I{authority} section of the response.

        @param ttl: The default TTL for records for which this is not otherwise
            specified.

        @return: A generator of L{dns.RRHeader} instances for inclusion in the
            I{additional} section.  These instances represent extra information
            about the records in C{answer} and C{authority}.
        r4   T©ÚauthN)ÚtypeÚ_ADDITIONAL_PROCESSING_TYPESÚpayloadÚnameÚrecordsÚgetÚlowerÚTYPEÚ_ADDRESS_TYPESr   ÚRRHeaderÚINÚttl)r-   ÚanswerÚ	authorityrC   Úrecordr;   Úrecs          r"   Ú_additionalRecordsz FileAuthority._additionalRecordsk   s¸   è è € ð* ˜yÑ(ð 	ð 	ˆFØŒ{˜dÔ?Ð?Ð?Ø”~Ô*Ô/�Øœ<×+Ò+¨D¯JªJ©L¬L¸"Ñ=Ô=ð ð �CØ”x 4Ô#6Ð6Ð6Ý!œlØ  #¤(­C¬F°C´G°N¸sÀCÈdðñ ô ð ð ð øøð	ð 	r.   c                 óò  — g }g }g }g }t          | j        d         j        | j        d         j        ¦  «        }	| j                             |                     ¦   «         ¦  «        }
|
�r|
D �]C}|j        �|j        }n|	}|j        t          j
        k    rr|                     ¦   «         | j        d                              ¦   «         k    r=|                     t          j        ||j        t          j        ||d¬¦  «        ¦  «         nW|j        |k    s|t          j        k    r<|                     t          j        ||j        t          j        ||d¬¦  «        ¦  «         |j        t          j        k    r<|                     t          j        ||j        t          j        ||d¬¦  «        ¦  «         �ŒE|s|}|                      |||	¦  «        }|r|                     |¦  «         n|                     |¦  «         |sY|sW|                     t          j        | j        d         t          j        t          j        || j        d         d¬¦  «        ¦  «         t'          j        |||f¦  «        S t          j        || j        d         ¦  «        r8t'          j        t/          j        t          j        |¦  «        ¦  «        ¦  «        S t'          j        t/          j        t5          j        |¦  «        ¦  «        ¦  «        S )a   
        Determine a response to a particular DNS query.

        @param name: The name which is being queried and for which to lookup a
            response.
        @type name: L{bytes}

        @param cls: The class which is being queried.  Only I{IN} is
            implemented here and this value is presently disregarded.
        @type cls: L{int}

        @param type: The type of records being queried.  See the types defined
            in L{twisted.names.dns}.
        @type type: L{int}

        @param timeout: All processing is done locally and a result is
            available immediately, so the timeout value is ignored.

        @return: A L{Deferred} that fires with a L{tuple} of three sets of
            response records (to comprise the I{answer}, I{authority}, and
            I{additional} sections of a DNS response) or with a L{Failure} if
            there is a problem processing the query.
        r   Nr   Fr6   T)ÚmaxÚsoaÚminimumÚexpirer<   r=   r>   rC   r?   r   ÚNSÚappendrA   rB   ÚALL_RECORDSÚCNAMErH   ÚextendÚSOAr   ÚsucceedÚ_isSubdomainOfÚfailr   ÚFailureÚAuthoritativeDomainErrorr   ÚDomainError)r-   r;   Úclsr8   ÚtimeoutÚcnamesÚresultsrE   Ú
additionalÚdefault_ttlÚdomain_recordsrF   rC   ÚadditionalInformations                 r"   Ú_lookupzFileAuthority._lookup‰   sÌ  € ð0 ˆØˆØˆ	Øˆ
Ý˜$œ( 1œ+Ô-¨t¬x¸¬{Ô/AÑBÔBˆàœ×)Ò)¨$¯*ª*©,¬,Ñ7Ô7ˆàñ 7	LØ(ð ñ �Ø”:Ð)Ø œ*�C�Cà%�Cà”;¥#¤&Ò(Ð(¨T¯ZªZ©\¬\¸T¼XÀa¼[×=NÒ=NÑ=PÔ=PÒ-PÐ-Pð ×$Ò$Ýœ T¨6¬;½¼ÀÀVÐRWÐXÑXÔXñô ð ð ð ”[ DÒ(Ð(¨DµC´OÒ,CÐ,CØ—N’NÝœ T¨6¬;½¼ÀÀVÐRVÐWÑWÔWñô ð ð ”;¥#¤)Ò+Ð+Ø—M’MÝœ T¨6¬;½¼ÀÀVÐRVÐWÑWÔWñô ð ùð ð !Ø �ð %)×$;Ò$;Ø˜ Kñ%ô %Ð!ð ð 9Ø—’Ð4Ñ5Ô5Ð5Ð5à×!Ò!Ð"7Ñ8Ô8Ð8àð  9ð ð × Ò Ý”LØœ œ¥S¤W­c¬f°c¸4¼8ÀA¼;ÈTðñ ô ñô ð õ
 ”= '¨9°jÐ!AÑBÔBÐBåÔ! $¨¬°¬Ñ4Ô4ð 	Lõ ”z¥'¤/µ#Ô2NÈtÑ2TÔ2TÑ"UÔ"UÑVÔVÐVõ
 ”z¥'¤/µ%Ô2CÀDÑ2IÔ2IÑ"JÔ"JÑKÔKÐKr.   é
   c                 ó®  — t          j        |¦  «        }| j        d                              ¦   «         |                     ¦   «         k    �rTt	          | j        d         j        | j        d         j        ¦  «        }| j        d         j        �| j        d         j        }n|}t          j        | j        d         t           j	        t           j
        || j        d         d¬¦  «        g}| j                             ¦   «         D ]l\  }}|D ]d}|j        �|j        }	n|}	|j        t           j	        k    r<|                     t          j        ||j        t           j
        |	|d¬¦  «        ¦  «         ŒeŒm|                     |d         ¦  «         t          j        |ddf¦  «        S t          j        t%          j        t          j        |¦  «        ¦  «        ¦  «        S )Nr   r   Tr6   r4   )r   ÚdomainStringrK   r>   rJ   rL   rM   rC   rA   rS   rB   r<   Úitemsr?   rO   r   rT   rV   r   rW   rY   )
r-   r;   r[   r_   Úsoa_ttlr]   ÚkÚrrG   rC   s
             r"   Ú
lookupZonezFileAuthority.lookupZoneâ   s–  € ÝÔ Ñ%Ô%ˆØŒ8�AŒ;×ÒÑÔ $§*¢*¡,¤,Ò.Ñ.å˜dœh qœkÔ1°4´8¸A´;Ô3EÑFÔFˆKØŒx˜Œ{ŒÐ*Øœ( 1œ+œ/��à%�å”Ø”H˜Q”K¥¤­#¬&°'¸4¼8ÀA¼;ÈTðñ ô ðˆGð
 œ×*Ò*Ñ,Ô,ð 	ð 	‘��1Øð ð �CØ”wÐ*Ø!œg˜˜à)˜Ø”x¥3¤7Ò*Ð*ØŸšÝœL¨¨C¬Hµc´f¸cÀ3ÈTÐRÑRÔRñô ð øðð �NŠN˜7 1œ:Ñ&Ô&Ð&Ý”= '¨2¨rÐ!2Ñ3Ô3Ð3ÝŒz�'œ/­#¬/¸$Ñ*?Ô*?Ñ@Ô@ÑAÔAÐAr.   c                 óø   — g g g }}}|D ]m}|d         rc|                      |d         d         ¦  «         |                      |d         d         ¦  «         |                      |d         d         ¦  «         Œn|||fS )Nr   r   é   )rR   )r-   r]   Úansr7   ÚaddÚress         r"   Ú_cbAllRecordszFileAuthority._cbAllRecordsþ   s…   € Ø˜R �3ˆTˆØð 	&ð 	&ˆCØ�1Œvð &Ø—
’
˜3˜qœ6 !œ9Ñ%Ô%Ð%Ø—’˜C œF 1œIÑ&Ô&Ð&Ø—
’
˜3˜qœ6 !œ9Ñ%Ô%Ð%øØ�D˜#ˆ~Ðr.   r'   )rc   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rQ   ÚMXrN   r9   ÚAÚAAAAr@   rK   r<   r)   r2   r*   rH   rb   rj   rp   r4   r.   r"   r%   r%   ;   sË   € € € € € ðð ð( %(¤I¨s¬v°s´vÐ#>Ð Ø”e˜SœXÐ&€Nà
€CØ€Gðð ð ð
ð ð ðð ð ðð ð ð<WLð WLð WLð WLðrBð Bð Bð Bð8ð ð ð ð r.   r%   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚPySourceAuthorityzC
    A FileAuthority that is built up from Python source code.
    c                 óŠ  — |                       ¦   «         i }}t          |||¦  «         d|vrt          d|z   ¦  «        ‚i | _        |d         D ]u}t	          |d         t
          j        ¦  «        r|| _        | j                             |d          	                    ¦   «         g ¦  «         
                    |d         ¦  «         Œvd S )NÚzonezNo zone defined in r   r   )ÚsetupConfigNamespacer   Ú
ValueErrorr<   Ú
isinstancer   Ú
Record_SOArK   Ú
setdefaultr>   rO   )r-   r   ÚgÚlÚrrs        r"   r*   zPySourceAuthority.loadFile  sÆ   € Ø×(Ò(Ñ*Ô*¨Bˆ1ˆÝ�˜1˜aÑ Ô Ð Ø˜ˆ?ˆ?ÝÐ2°XÑ=Ñ>Ô>Ð>àˆŒØ�F”)ð 	Eð 	EˆBÝ˜"˜Qœ%¥¤Ñ0Ô0ð Ø�”ØŒL×#Ò# B q¤E§K¢K¡M¤M°2Ñ6Ô6×=Ò=¸bÀ¼eÑDÔDÐDÐDð	Eð 	Er.   c                 ó   ‡— ˆfd„}|S )Nc                 ó<   •— t          j        | ¦  «         ‰|i |¤ŽfS r'   )r   re   )r;   ÚargÚkwr8   s      €r"   ÚwrapRecordFuncz4PySourceAuthority.wrapRecord.<locals>.wrapRecordFunc  s(   ø€ ÝÔ$ TÑ*Ô*¨D¨D°#Ð,<¸Ð,<Ð,<Ð=Ð=r.   r4   )r-   r8   rˆ   s    ` r"   Ú
wrapRecordzPySourceAuthority.wrapRecord  s$   ø€ ð	>ð 	>ð 	>ð 	>ð 	>ð Ðr.   c                 óì   — i }t           j                             ¦   «         }d„ |D ¦   «         D ]F}t          t           |¦  «        }|                      |¦  «        }|||t          d¦  «        d …         <   ŒG|S )Nc                 ó<   — g | ]}|                      d ¦  «        ¯|‘ŒS )ÚRecord_)Ú
startswith)Ú.0Úxs     r"   ú
<listcomp>z:PySourceAuthority.setupConfigNamespace.<locals>.<listcomp>"  s)   € ÐCÐCÐC˜Q¨1¯<ª<¸	Ñ+BÔ+BÐC�qÐCÐCÐCr.   rŒ   )r   r0   ÚkeysÚgetattrr‰   Úlen)r-   ri   rf   rF   r8   r   s         r"   r|   z&PySourceAuthority.setupConfigNamespace  sz   € ØˆÝ”×!Ò!Ñ#Ô#ˆØCÐC %ÐCÑCÔCð 	,ð 	,ˆFÝ�3 Ñ'Ô'ˆDØ—’ Ñ%Ô%ˆAØ*+ˆAˆf•S˜‘^”^Ð%Ð%Ô&Ñ'Ð'Øˆr.   N)rq   rr   rs   rt   r*   r‰   r|   r4   r.   r"   ry   ry     sN   € € € € € ðð ð
Eð 
Eð 
Eðð ð ðð ð ð ð r.   ry   c                   ó<   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	S )
ÚBindAuthorityz™
    An Authority that loads U{BIND zone files
    <https://en.wikipedia.org/wiki/Zone_file>}.

    Supports only C{$ORIGIN} and C{$TTL} directives.
    c                 óB  — t          |¦  «        }t          |                     ¦   «         dz   ¦  «        | _        |                     ¦   «                              d¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «         dS )z}
        Load records from C{filename}.

        @param filename: file to read from
        @type filename: L{bytes}
        ó   .TN)	r
   r	   ÚbasenameÚoriginÚ
getContentÚ
splitlinesÚstripCommentsÚcollapseContinuationsÚ
parseLines)r-   r   ÚfpÚliness       r"   r*   zBindAuthority.loadFile1  sˆ   € õ �hÑÔˆõ # 2§;¢;¡=¤=°4Ñ#7Ñ8Ô8ˆŒà—’‘”×*Ò*¨4Ñ0Ô0ˆØ×"Ò" 5Ñ)Ô)ˆØ×*Ò*¨5Ñ1Ô1ˆØ�Š˜ÑÔÐÐÐr.   c                 ó.   — d„ d„ |D ¦   «         D ¦   «         S )z«
        Strip comments from C{lines}.

        @param lines: lines to work on
        @type lines: iterable of L{bytes}

        @return: C{lines} sans comments.
        c              3   ó†   K  — | ]<}|                      d ¦  «        dk    r|p|d|                      d ¦  «        …         V — Œ=dS )ó   ;éÿÿÿÿN)Úfind)rŽ   Úas     r"   ú	<genexpr>z.BindAuthority.stripComments.<locals>.<genexpr>K  sb   è è € ð 
ð 
àð �FŠF�4‰LŒL˜BÒÐ$ 1Ð9¨¨.¨A¯FªF°4©L¬L¨.Ô(9ð
ð 
ð 
ð 
ð 
ð 
r.   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r4   )Ústrip)rŽ   Úbs     r"   r�   z/BindAuthority.stripComments.<locals>.<listcomp>M  s    € Ð/Ð/Ð/ A�a—g’g‘i”iÐ/Ð/Ð/r.   r4   )r-   r    s     r"   rœ   zBindAuthority.stripCommentsB  s1   € ð
ð 
à/Ð/¨Ð/Ñ/Ô/ð
ñ 
ô 
ð 	
r.   c           
      óÒ  — g }d}|D ]Ç}|dk    rb|                      d¦  «        dk    r|                     |¦  «         Œ7|                     |d|                      d¦  «        …         ¦  «         d}Œj|                      d¦  «        dk    r1|dxx         d|d|                      d¦  «        …         z   z  cc<   d}Œ´|dxx         d|z   z  cc<   ŒÈt          dd„ |D ¦   «         ¦  «        S )	zÄ
        Transform multiline statements into single lines.

        @param lines: lines to work on
        @type lines: iterable of L{bytes}

        @return: iterable of continuous lines
        r   ó   (r¤   Nr   ó   )ó    c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r'   )r   )rŽ   Úlines     r"   r§   z6BindAuthority.collapseContinuations.<locals>.<genexpr>h  s*   è è € Ð8Ð8¨d˜TŸZšZ™\œ\Ð8Ð8Ð8Ð8Ð8Ð8r.   )r¥   rO   Úfilter)r-   r    r‚   r1   r°   s        r"   r�   z#BindAuthority.collapseContinuationsP  s  € ð ˆØˆØð 	)ð 	)ˆDØ˜ŠzˆzØ—9’9˜T‘?”? bÒ(Ð(Ø—H’H˜T‘N”N�N�Nà—H’H˜TÐ"3 D§I¢I¨d¡O¤OÐ"3Ô4Ñ5Ô5Ð5Ø�E�Eà—9’9˜T‘?”? bÒ(Ð(Ø�b�E�E”E˜T DÐ):¨4¯9ª9°T©?¬?Ð):Ô$;Ñ;Ñ;�E�E‘EØ�E�Eà�b�E�E”E˜T D™[Ñ(�E�E‘E�EÝ�dÐ8Ð8°aÐ8Ñ8Ô8Ñ9Ô9Ð9r.   c                 óP  — d}| j         }i | _        |D ]‹}|d         dk    rt          j        |d         ¦  «        }Œ)|d         dk    r	|d         }Œ>|d         dk    rt	          d¦  «        ‚|d         dk    rt	          d	¦  «        ‚|                      |||¦  «         ŒŒ|| _         d
S )zs
        Parse C{lines}.

        @param lines: lines to work on
        @type lines: iterable of L{bytes}
        i0*  r   s   $TTLr   s   $ORIGINs   $INCLUDEz"$INCLUDE directive not implementeds	   $GENERATEz#$GENERATE directive not implementedN)r™   r<   r   Ústr2timeÚNotImplementedErrorÚparseRecordLine)r-   r    rC   r™   r°   s        r"   rž   zBindAuthority.parseLinesj  sÈ   € ð ˆØ”ˆàˆŒàð 
	8ð 
	8ˆDØ�AŒw˜'Ò!Ð!Ý”l 4¨¤7Ñ+Ô+��Ø�a”˜JÒ&Ð&Ø˜aœ��Ø�a”˜KÒ'Ð'Ý)Ð*NÑOÔOÐOØ�a”˜LÒ(Ð(Ý)Ð*OÑPÔPÐPà×$Ò$ V¨S°$Ñ7Ô7Ð7Ð7ð ˆŒˆˆr.   c                 óÔ   — |                      d¦  «        s|dz   |dd…         z   }n
|dd…         }t          | d|› �d¦  «        }|r |||||¦  «         dS t          d|›d�¦  «        ‚)a  
        Add a record to our authority.  Expand domain with origin if necessary.

        @param owner: origin?
        @type owner: L{bytes}

        @param ttl: time to live for the record
        @type ttl: L{int}

        @param domain: the domain for which the record is to be added
        @type domain: L{bytes}

        @param type: record type
        @type type: L{str}

        @param cls: record class
        @type cls: L{str}

        @param rdata: record data
        @type rdata: L{list} of L{bytes}
        r—   Nr¤   Úclass_zRecord class ú not supported)Úendswithr’   r´   )r-   ÚownerrC   r8   ÚdomainrZ   Úrdatar   s           r"   Ú	addRecordzBindAuthority.addRecord…  s“   € ð, �Š˜tÑ$Ô$ð 	!Ø˜d‘] U¨3¨B¨3¤ZÑ/ˆFˆFà˜C˜R˜C”[ˆFÝ�D˜. 3˜.˜.¨$Ñ/Ô/ˆØð 	MØˆAˆc�4˜ Ñ'Ô'Ð'Ð'Ð'å%Ð&K°cÐ&KÐ&KÐ&KÑLÔLÐLr.   c                 óP  — t          t          dt          |¦  «        › �d¦  «        }|r_ ||Ž }||_        | j                             |                     ¦   «         g ¦  «                             |¦  «         |dk    r||f| _        dS dS t          dt          |¦  «        ›d�¦  «        ‚)a>  
        Simulate a class IN and recurse into the actual class.

        @param ttl: time to live for the record
        @type ttl: L{int}

        @param type: record type
        @type type: str

        @param domain: the domain
        @type domain: bytes

        @param rdata:
        @type rdata: bytes
        rŒ   NrS   zRecord type r¸   )
r’   r   r	   rC   r<   r€   r>   rO   rK   r´   )r-   rC   r8   r»   r¼   rF   ri   s          r"   Úclass_INzBindAuthority.class_IN¥  s·   € õ  �Ð<­°TÑ(:Ô(:Ð<Ð<¸dÑCÔCˆØð 
	Ø�˜�ˆAØˆAŒEØŒL×#Ò# F§L¢L¡N¤N°BÑ7Ô7×>Ò>¸qÑAÔAÐAà�uŠ}ˆ}Ø" A˜;�”��ð ˆ}õ &ØC�|¨DÑ1Ô1ÐCÐCÐCñô ð r.   c           	      ó®  — d„ t           j                             ¦   «         D ¦   «         }d„ t           j                             ¦   «         D ¦   «         }||z  }d}|}|d         dk    r|dd…         }|}n6|d                              ¦   «         s|d         |vr|d         }|dd…         }|d                              ¦   «         s
|d         |v r|}	|}n|d         }	|dd…         }|d         |v rL|d         }|dd…         }|d                              ¦   «         rt          |d         ¦  «        }|dd…         }nU|d                              ¦   «         r;t          |d         ¦  «        }|dd…         }|d         |v r|d         }|dd…         }|d         }
|dd…         }|                      ||t          |
¦  «        |	t          |¦  «        |¦  «         dS )aƒ  
        Parse a C{line} from a zone file respecting C{origin} and C{ttl}.

        Add resulting records to authority.

        @param origin: starting point for the zone
        @type origin: L{bytes}

        @param ttl: time to live for the record
        @type ttl: L{int}

        @param line: zone file line to parse; split by word
        @type line: L{list} of L{bytes}
        c                 ó8   — h | ]}|                      d ¦  «        ’ŒS ©Úascii©Úencode)rŽ   Úqcs     r"   ú	<setcomp>z0BindAuthority.parseRecordLine.<locals>.<setcomp>Ñ  s$   € ÐPÐPÐP¨r˜Ÿ	š	 'Ñ*Ô*ÐPÐPÐPr.   c                 ó8   — h | ]}|                      d ¦  «        ’ŒS rÂ   rÄ   )rŽ   Úqts     r"   rÇ   z0BindAuthority.parseRecordLine.<locals>.<setcomp>Ò  s$   € ÐLÐLÐL¨R�b—i’i Ñ(Ô(ÐLÐLÐLr.   s   INr   ó   @r   N)r   ÚQUERY_CLASSESÚvaluesÚQUERY_TYPESÚisdigitr   r½   r	   )r-   r™   rC   r°   ÚqueryClassesÚ
queryTypesÚmarkersrZ   rº   r»   r8   r¼   s               r"   rµ   zBindAuthority.parseRecordLineÂ  sõ  € ð QÐPµSÔ5F×5MÒ5MÑ5OÔ5OÐPÑPÔPˆØLÐLµ3´?×3IÒ3IÑ3KÔ3KÐLÑLÔLˆ
à Ñ+ˆàˆØˆà�Œ7�dŠ?ˆ?Ø˜˜˜”8ˆDØˆEˆEØ�a”—’Ñ"Ô"ð 	 t¨A¤w°gÐ'=Ð'=Ø˜”GˆEØ˜˜˜”8ˆDà�Œ7�?Š?ÑÔð 	  Q¤¨7Ð 2Ð 2ØˆFØˆEˆEà˜!”WˆFØ˜˜˜”8ˆDà�Œ7�lÐ"Ð"Ø�q”'ˆCØ˜˜˜”8ˆDØ�AŒw�ŠÑ Ô ð  Ý˜$˜qœ'‘l”l�Ø˜A˜B˜B”x�øØ�!ŒW�_Š_ÑÔð 	 Ý�d˜1”g‘,”,ˆCØ˜˜˜”8ˆDØ�AŒw˜,Ð&Ð&Ø˜1”g�Ø˜A˜B˜B”x�à�AŒwˆØ�Q�R�R”ˆà�Š�u˜c¥<°Ñ#5Ô#5°v½|ÈCÑ?PÔ?PÐRWÑXÔXÐXÐXÐXr.   N)rq   rr   rs   rt   r*   rœ   r�   rž   r½   r¿   rµ   r4   r.   r"   r•   r•   )  s�   € € € € € ðð ðð ð ð"
ð 
ð 
ð:ð :ð :ð4ð ð ð6Mð Mð Mð@ð ð ð:5Yð 5Yð 5Yð 5Yð 5Yr.   r•   )r   )rt   r   r   Útwisted.internetr   Útwisted.namesr   r   r   Útwisted.pythonr   Útwisted.python.compatr   r	   Útwisted.python.filepathr
   r#   r(   r%   ry   r•   r4   r.   r"   ú<module>r×      sM  ðð
ð ð
 
€	€	€	Ø €€€à "Ð "Ð "Ð "Ð "Ð "Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø "Ð "Ð "Ð "Ð "Ð "Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ð$ð $ð $ð $ðNJð Jð Jð Jð J�FÔ'ñ Jô Jð JðZð ð ð ð ˜ñ ô ð ðBNYð NYð NYð NYð NY�Mñ NYô NYð NYð NYð NYr.   