§
    HºiS  ã                   óT   — d dl Z d dlZd dlmZmZmZ d dlZd dlZ G d„ d¦  «        Z	dS )é    N)ÚIteratorÚOptionalÚTuplec                   ó  — e Zd ZdZddedefd„Zdefd„Zdedefd	„Zddedefd„Z	defd„Z
defd„Zdefd„Zdefd„Zdefd„Zdedefd„Zdded         ddfd„Zdeddfd„Zej        dedefd„¦   «         Zej        defd„¦   «         ZdS )ÚParserz)Helper class for parsing DNS wire format.r   ÚwireÚcurrentc                 ó�   — || _         d| _        t          | j         ¦  «        | _        |r|                      |¦  «         || _        dS )a  Initialize a Parser

        *wire*, a ``bytes`` contains the data to be parsed, and possibly other data.
        Typically it is the whole message or a slice of it.

        *current*, an `int`, the offset within *wire* where parsing should begin.
        r   N)r   r	   ÚlenÚendÚseekÚfurthest)Úselfr   r	   s      úM/home/mmwave/public_html/mmwave/venv/lib/python3.11/site-packages/dns/wire.pyÚ__init__zParser.__init__   sF   € ð ˆŒ	ØˆŒÝ�t”y‘>”>ˆŒØð 	Ø�IŠI�gÑÔÐØˆŒˆˆó    Úreturnc                 ó    — | j         | j        z
  S ©N)r   r	   ©r   s    r   Ú	remainingzParser.remaining   s   € ØŒx˜$œ,Ñ&Ð&r   Úsizec                 óþ   — |dk    sJ ‚||                       ¦   «         k    rt          j        j        ‚| j        | j        | j        |z   …         }| xj        |z  c_        t          | j        | j        ¦  «        | _        |S ©Nr   )r   ÚdnsÚ	exceptionÚ	FormErrorr   r	   Úmaxr   )r   r   Úoutputs      r   Ú	get_byteszParser.get_bytes    ss   € Ø�qŠyˆyˆyˆyØ�$—.’.Ñ"Ô"Ò"Ð"Ý”-Ô)Ð)Ø”˜4œ<¨$¬,¸Ñ*=Ð=Ô>ˆØˆŒ˜ÑˆŒÝ˜DœM¨4¬<Ñ8Ô8ˆŒØˆr   é   Úlength_sizec                 óˆ   — t                                |                      |¦  «        d¦  «        }|                      |¦  «        S )NÚbig©ÚintÚ
from_bytesr    )r   r"   Úlengths      r   Úget_counted_byteszParser.get_counted_bytes)   s3   € Ý—’ §¢¨{Ñ ;Ô ;¸UÑCÔCˆØ�~Š~˜fÑ%Ô%Ð%r   c                 óP   — |                       |                      ¦   «         ¦  «        S r   )r    r   r   s    r   Úget_remainingzParser.get_remaining-   s   € Ø�~Š~˜dŸnšnÑ.Ô.Ñ/Ô/Ð/r   c                 ó^   — t          j        d|                      d¦  «        ¦  «        d         S )Nz!Br!   r   ©ÚstructÚunpackr    r   s    r   Ú	get_uint8zParser.get_uint80   ó%   € ÝŒ}˜T 4§>¢>°!Ñ#4Ô#4Ñ5Ô5°aÔ8Ð8r   c                 ó^   — t          j        d|                      d¦  «        ¦  «        d         S )Nz!Hé   r   r-   r   s    r   Ú
get_uint16zParser.get_uint163   r1   r   c                 ó^   — t          j        d|                      d¦  «        ¦  «        d         S )Nz!Ié   r   r-   r   s    r   Ú
get_uint32zParser.get_uint326   r1   r   c                 ó^   — t                                |                      d¦  «        d¦  «        S )Né   r$   r%   r   s    r   Ú
get_uint48zParser.get_uint489   s"   € Ý�~Š~˜dŸnšn¨QÑ/Ô/°Ñ7Ô7Ð7r   Úformatc                 óv   — t          j        ||                      t          j        |¦  «        ¦  «        ¦  «        S r   )r.   r/   r    Úcalcsize)r   r;   s     r   Ú
get_structzParser.get_struct<   s*   € ÝŒ}˜V T§^¢^µF´OÀFÑ4KÔ4KÑ%LÔ%LÑMÔMÐMr   NÚoriginzdns.name.Namec                 ór   — t           j                             | ¦  «        }|r|                     |¦  «        }|S r   )r   ÚnameÚfrom_wire_parserÚ
relativize)r   r?   rA   s      r   Úget_namezParser.get_name?   s5   € ÝŒx×(Ò(¨Ñ.Ô.ˆØð 	+Ø—?’? 6Ñ*Ô*ˆDØˆr   Úwherec                 óX   — |dk     s|| j         k    rt          j        j        ‚|| _        d S r   )r   r   r   r   r	   )r   rE   s     r   r   zParser.seekE   s/   € ð �1Š9ˆ9˜ ¤Ò(Ð(Ý”-Ô)Ð)ØˆŒˆˆr   c              #   ó  K  — |dk    sJ ‚||                       ¦   «         k    rt          j        j        ‚| j        }	 | j        |z   | _        d V — | j        | j        k    rt          j        j        ‚	 || _        d S # || _        w xY wr   )r   r   r   r   r   r	   )r   r   Ú	saved_ends      r   Úrestrict_tozParser.restrict_toL   s—   è è € à�qŠyˆyˆyˆyØ�$—.’.Ñ"Ô"Ò"Ð"Ý”-Ô)Ð)Ø”Hˆ	ð		!Ø”| dÑ*ˆDŒHØˆEˆEˆEð Œ|˜tœxÒ'Ð'Ý”mÔ-Ð-ð (ð !ˆDŒHˆHˆHø�yˆDŒHÐ Ð Ð Ð s   ¼4A: Á:	Bc              #   óN   K  — 	 d V — | j         | _        d S # | j         | _        w xY wr   )r   r	   r   s    r   Úrestore_furthestzParser.restore_furthest]   s6   è è € ð	)ØˆJˆJˆJàœ=ˆDŒLˆLˆLø˜4œ=ˆDŒLÐ(Ð(Ð(Ð(s   „ –$)r   )r!   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úbytesr&   r   r   r    r)   r+   r0   r4   r7   r:   Ústrr   r>   r   rD   r   Ú
contextlibÚcontextmanagerr   rI   rK   © r   r   r   r      sÿ  € € € € € Ø3Ð3ð ð  ˜Uð  ¨Sð  ð  ð  ð  ð'˜3ð 'ð 'ð 'ð 'ð˜cð  eð ð ð ð ð&ð &¨Sð &¸ð &ð &ð &ð &ð0˜uð 0ð 0ð 0ð 0ð9˜3ð 9ð 9ð 9ð 9ð9˜Cð 9ð 9ð 9ð 9ð9˜Cð 9ð 9ð 9ð 9ð8˜Cð 8ð 8ð 8ð 8ðN ð N¨ð Nð Nð Nð Nðð ˜x¨Ô8ð ÀOð ð ð ð ð˜#ð  $ð ð ð ð ð Ôð! ð !¨ð !ð !ð !ñ Ôð!ð  Ôð) (ð )ð )ð )ñ Ôð)ð )ð )r   r   )
rR   r.   Útypingr   r   r   Údns.exceptionr   Údns.namer   rT   r   r   ú<module>rX      s‹   ðð Ð Ð Ð Ø €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à Ð Ð Ð Ø €€€ðW)ð W)ð W)ð W)ð W)ñ W)ô W)ð W)ð W)ð W)r   