Ë
    ¶�/jD  ã            
       ó–  — U d 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Z	ddl
Z	ddlZ	ddlZ	ddlZ	ddlZ	ddlZ	 G d„ de	j                   j"                  «      Z G d„ d«      Z G d„ d	e«      Z G d
„ de«      Z G d„ de	j                   j"                  «      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Zej6                  eej8                  eej:                  eej<                  eej>                  eiZ eeef   e!d<   dedefd„Z"dee#z  dddefd„Z$dee#z  de%de&de&def
d „Z'd!ededdfd"„Z(ej:                  ZejR                  Z)ejT                  Z*ejV                  Z+ej6                  ZejX                  Z,ej<                  ZejZ                  Z-ej\                  Z.ej^                  Z/ej8                  Zej>                  Zy)#zEDNS Optionsé    N)ÚAnyÚDictc                   óP   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZed„ «       Zy)Ú
OptionTypezEDNS option type codesé   é   é   é   é   é	   é
   é   é   é   é   é   c                  ó   — y©Niÿÿ  © ©Úclss    úJC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\dns/edns.pyÚ_maximumzOptionType._maximum?   ó   € àó    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚNSIDÚDAUÚDHUÚN3UÚECSÚEXPIREÚCOOKIEÚ	KEEPALIVEÚPADDINGÚCHAINÚEDEÚREPORTCHANNELÚclassmethodr   r   r   r   r   r   #   sU   „ Ù ð €Dà
€Cà
€Cà
€Cà
€Cà€Fà€Fà€Ià€Gà€Eà
€Cà€Màñó ñr   r   c                   ó¢   — e Zd ZdZdeez  fd„Zddedz  dedz  fd„Z	defd„Z
dd	„Zeded
ddd fd„«       Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚOptionz%Base class for all EDNS option types.Úotypec                 ó8   — t         j                  |«      | _        y)z_Initialize an option.

        *otype*, a ``dns.edns.OptionType``, is the option type.
        N)r   Úmaker/   )Úselfr/   s     r   Ú__init__zOption.__init__G   s   € ô
  —_‘_ UÓ+ˆ�
r   NÚfileÚreturnc                 ó   — t         ‚)zUConvert an option to wire format.

        Returns a ``bytes`` or ``None``.

        ©ÚNotImplementedError©r2   r4   s     r   Úto_wirezOption.to_wireN   s
   € ô "Ð!r   c                 ó   — t         ‚©Nr7   ©r2   s    r   Úto_textzOption.to_textV   s   € Ü!Ð!r   c                 óV   — | j                  «       }|€J ‚t        | j                  |«      S )zrCreates a dns.edns.GenericOption equivalent of this rdata.

        Returns a ``dns.edns.GenericOption``.
        )r:   ÚGenericOptionr/   )r2   Úwires     r   Ú
to_genericzOption.to_genericY   s,   € ð
 �|‰|‹~ˆØÐÐÐÜ˜TŸZ™Z¨Ó.Ð.r   Úparserúdns.wire.Parserc                 ó   — t         ‚)a  Build an EDNS option object from wire format.

        *otype*, a ``dns.edns.OptionType``, is the option type.

        *parser*, a ``dns.wire.Parser``, the parser, which should be
        restructed to the option length.

        Returns a ``dns.edns.Option``.
        r7   ©r   r/   rC   s      r   Úfrom_wire_parserzOption.from_wire_parserb   s
   € ô "Ð!r   c                 ó\   — | j                  «       }|j                  «       }||k(  ry||kD  ryy)z�Compare an EDNS option with another option of the same type.

        Returns < 0 if < *other*, 0 if == *other*, and > 0 if > *other*.
        r   é   éÿÿÿÿ)r:   )r2   ÚotherrA   Úowires       r   Ú_cmpzOption._cmpo   s1   € ð
 �|‰|‹~ˆØ—‘“ˆØ�5Š=ØØ�%Š<ØØr   c                 ó€   — t        |t        «      sy| j                  |j                  k7  ry| j                  |«      dk(  S )NFr   ©Ú
isinstancer.   r/   rM   ©r2   rK   s     r   Ú__eq__zOption.__eq__|   s6   € Ü˜%¤Ô(ØØ�:‰:˜Ÿ™Ò$ØØ�y‰y˜Ó 1Ñ$Ð$r   c                 ó€   — t        |t        «      sy| j                  |j                  k7  ry| j                  |«      dk7  S )NTr   rO   rQ   s     r   Ú__ne__zOption.__ne__ƒ   s6   € Ü˜%¤Ô(ØØ�:‰:˜Ÿ™Ò$ØØ�y‰y˜Ó 1Ñ$Ð$r   c                 óˆ   — t        |t        «      r| j                  |j                  k7  rt        S | j	                  |«      dk  S ©Nr   ©rP   r.   r/   ÚNotImplementedrM   rQ   s     r   Ú__lt__zOption.__lt__Š   ó5   € Ü˜%¤Ô(¨D¯J©J¸%¿+¹+Ò,EÜ!Ð!Ø�y‰y˜Ó !Ñ#Ð#r   c                 óˆ   — t        |t        «      r| j                  |j                  k7  rt        S | j	                  |«      dk  S rV   rW   rQ   s     r   Ú__le__zOption.__le__�   ó5   € Ü˜%¤Ô(¨D¯J©J¸%¿+¹+Ò,EÜ!Ð!Ø�y‰y˜Ó 1Ñ$Ð$r   c                 óˆ   — t        |t        «      r| j                  |j                  k7  rt        S | j	                  |«      dk\  S rV   rW   rQ   s     r   Ú__ge__zOption.__ge__”   r]   r   c                 óˆ   — t        |t        «      r| j                  |j                  k7  rt        S | j	                  |«      dkD  S rV   rW   rQ   s     r   Ú__gt__zOption.__gt__™   rZ   r   c                 ó"   — | j                  «       S r<   )r>   r=   s    r   Ú__str__zOption.__str__ž   s   € Ø�|‰|‹~Ðr   r<   ©r5   r@   )r   r   r   r   r   Ústrr3   r   Úbytesr:   r>   rB   r,   rG   rM   rR   rT   rY   r\   r_   ra   rc   r   r   r   r.   r.   D   s”   „ Ù/ð,˜j¨3Ñ.ó ,ñ"˜C $™Jð "°%¸$±,ó "ð"˜ó "ó/ð ð
" Zð 
"Ð9Jð 
"Èxò 
"ó ð
"òò%ò%ò$ò
%ò
%ò
$ó
r   r.   c                   óŽ   ‡ — e Zd ZdZdeez  deez  fˆ fd„Zddedz  dedz  fd„Z	defd	„Z
dd
„Zedeez  dddefd„«       Zˆ xZS )r@   zwGeneric Option Class

    This class is used for EDNS option types for which we have no better
    implementation.
    r/   Údatac                 ó‚   •— t         ‰| �  |«       t        j                  j                  j                  |d«      | _        y )NT)Úsuperr3   ÚdnsÚrdataÚRdataÚ	_as_bytesrh   )r2   r/   rh   Ú	__class__s      €r   r3   zGenericOption.__init__©   s,   ø€ Ü‰Ñ˜ÔÜ—I‘I—O‘O×-Ñ-¨d°DÓ9ˆ�	r   Nr4   r5   c                 óV   — |r|j                  | j                  «       y | j                  S r<   )Úwriterh   r9   s     r   r:   zGenericOption.to_wire­   ó"   € ÙØ�J‰J�t—y‘yÔ!Øà—9‘9Ðr   c                 ó    — d| j                   › �S )NzGeneric )r/   r=   s    r   r>   zGenericOption.to_text´   s   € Ø˜$Ÿ*™*˜Ð&Ð&r   c                 ó   — | S r<   r   r=   s    r   rB   zGenericOption.to_generic·   s   € Øˆr   rC   rD   c                 ó0   —  | ||j                  «       «      S r<   ©Úget_remainingrF   s      r   rG   zGenericOption.from_wire_parserº   s   € ñ �5˜&×.Ñ.Ó0Ó1Ð1r   r<   rd   )r   r   r   r   r   re   rf   r3   r   r:   r>   rB   r,   r.   rG   Ú__classcell__©ro   s   @r   r@   r@   ¢   s�   ø„ ñð:˜j¨3Ñ.ð :°e¸c±kõ :ñ˜C $™Jð °%¸$±,ó ð'˜ó 'óð ð2Ø Ñ$ð2Ø.?ð2à	ò2ó ô2r   r@   c                   ó    ‡ — e Zd ZdZddededz  defˆ fd„Zdefd„Zed	ede	fd
„«       Z
ddedz  dedz  fd„Zedeez  ddde	fd„«       Zˆ xZS )Ú	ECSOptionz!EDNS Client Subnet (ECS, RFC7871)NÚaddressÚsrclenÚscopelenc                 ó‚  •— t         ‰	| �  t        j                  «       t        j
                  j                  |«      }|t        j                  k(  r‹d| _	        |€d}t        j                  j                  j                  |«      }t        j                  j                  j                  |dd«      }t        j                  j                  j                  |dd«      }n©|t        j                  k(  r‹d| _	        |€d}t        j                  j                  j                  |«      }t        j                  j                  j                  |dd«      }t        j                  j                  j                  |dd«      }nt!        d	«      ‚|€J ‚|| _        || _        || _        t        j
                  j)                  ||«      }t+        t-        j.                  |d
z  «      «      }|d| | _        |dz  }|dk7  rMt3        j4                  dt7        | j0                  dd «      dd|z
  z  z  «      }| j0                  dd |z   | _        yy)aŠ  *address*, a ``str``, is the client address information.

        *srclen*, an ``int``, the source prefix length, which is the
        leftmost number of bits of the address to be used for the
        lookup.  The default is 24 for IPv4 and 56 for IPv6.

        *scopelen*, an ``int``, the scope prefix length.  This value
        must be 0 in queries, and should be set in responses.
        é   Né8   r   é€   rI   é   é    zBad address familyç       @r   ÚBrJ   éÿ   )rj   r3   r   r$   rk   ÚinetÚaf_for_addressÚsocketÚAF_INET6Úfamilyrl   rm   Ú_as_ipv6_addressÚ_as_intÚAF_INETÚ_as_ipv4_addressÚ
ValueErrorr|   r}   r~   Ú	inet_ptonÚintÚmathÚceilÚaddrdataÚstructÚpackÚord)
r2   r|   r}   r~   Úafr–   ÚnbytesÚnbitsÚlastro   s
            €r   r3   zECSOption.__init__Ä   sÈ  ø€ ô 	‰ÑœŸ™Ô(Ü�X‰X×$Ñ$ WÓ-ˆà”—‘Ò ØˆDŒKØˆ~Ø�Ü—i‘i—o‘o×6Ñ6°wÓ?ˆGÜ—Y‘Y—_‘_×,Ñ,¨V°Q¸Ó<ˆFÜ—y‘y—‘×.Ñ.¨x¸¸CÓ@‰HØ”6—>‘>Ò!ØˆDŒKØˆ~Ø�Ü—i‘i—o‘o×6Ñ6°wÓ?ˆGÜ—Y‘Y—_‘_×,Ñ,¨V°Q¸Ó;ˆFÜ—y‘y—‘×.Ñ.¨x¸¸BÓ?‰HäÐ1Ó2Ð2àÐ!Ð!Ð!ØˆŒØˆŒØ ˆŒä—8‘8×%Ñ% b¨'Ó2ˆÜ”T—Y‘Y˜v¨™|Ó,Ó-ˆð !  &Ð)ˆŒØ˜‘
ˆØ�AŠ:Ü—;‘;˜s¤C¨¯©°b°cÐ(:Ó$;¸tÈÈEÉ	Ñ?RÑ$SÓTˆDØ ŸM™M¨#¨2Ð.°Ñ5ˆD�Mð r   r5   c                 óT   — d| j                   › d| j                  › d| j                  › �S )NzECS Ú/z scope/)r|   r}   r~   r=   s    r   r>   zECSOption.to_textó   s'   € Ø�d—l‘l�^ 1 T§[¡[ M°¸¿¹¸ÐHÐHr   Útextc                 ó:  — d}| j                  «       }d}t        |«      dk(  r|d   }n:t        |«      dk(  r|d   |k7  rt        d| › d�«      ‚|d   }nt        d| › d�«      ‚|j                  d«      }|dk(  r|j                  d«      \  }}d	}n*|dk(  r|j                  d«      \  }}}nt        d| › d�«      ‚	 t	        |«      }	 t	        |«      }	t        ||	|«      S # t        $ r t        d
d|› d�z   «      ‚w xY w# t        $ r t        dd|› d�z   «      ‚w xY w)a€  Convert a string into a `dns.edns.ECSOption`

        *text*, a `str`, the text form of the option.

        Returns a `dns.edns.ECSOption`.

        Examples:

        >>> import dns.edns
        >>>
        >>> # basic example
        >>> dns.edns.ECSOption.from_text('1.2.3.4/24')
        >>>
        >>> # also understands scope
        >>> dns.edns.ECSOption.from_text('1.2.3.4/24/32')
        >>>
        >>> # IPv6
        >>> dns.edns.ECSOption.from_text('2001:4b98::1/64/64')
        >>>
        >>> # it understands results from `dns.edns.ECSOption.to_text()`
        >>> dns.edns.ECSOption.from_text('ECS 1.2.3.4/24/32')
        r$   NrI   r   r€   zcould not parse ECS from "Ú"rŸ   Ú0zinvalid scope z": scope must be an integerzinvalid srclen z": srclen must be an integer)ÚsplitÚlenr‘   Úcountr“   r{   )
r    Úoptional_prefixÚtokensÚecs_textÚ	n_slashesr|   ÚtsrclenÚtscopeÚscoper}   s
             r   Ú	from_textzECSOption.from_textö   sb  € ð0  ˆØ—‘“ˆØˆÜˆv‹;˜!ÒØ˜a‘y‰HÜ�‹[˜AÒØ�a‰y˜OÒ+Ü Ð#=¸d¸VÀ1Ð!EÓFÐFØ˜a‘y‰HäÐ9¸$¸¸qÐAÓBÐBØ—N‘N 3Ó'ˆ	Ø˜Š>Ø'Ÿ~™~¨cÓ2ÑˆG�WØ‰FØ˜!Š^Ø'/§~¡~°cÓ':Ñ$ˆG�W™fäÐ9¸$¸¸qÐAÓBÐBð	YÜ˜“KˆEð	Ü˜“\ˆFô
 ˜ &¨%Ó0Ð0øô ò 	YÜÐ-°!°F°8Ð;VÐ0WÑWÓXÐXð	Yûô ò 	ÜØ! a¨ yÐ0LÐ$MÑMóð ð	ús   Â;C ÃC> ÃC;Ã>Dr4   c                 ó´   — t        j                  d| j                  | j                  | j                  «      | j
                  z   }|r|j                  |«       y |S )Nú!HBB)r—   r˜   rŒ   r}   r~   r–   rq   ©r2   r4   Úvalues      r   r:   zECSOption.to_wire-  sG   € ä�K‰K˜ §¡¨T¯[©[¸$¿-¹-ÓHÈ4Ï=É=ÑXð 	ñ Ø�J‰J�uÔØàˆLr   r/   rC   rD   c                 óz  — |j                  d«      \  }}}t        t        j                  |dz  «      «      }|j	                  |«      }|dk(  r+d|z
  }t
        j                  j                  |d|z  z   «      }	n;|dk(  r+d|z
  }t
        j                  j                  |d|z  z   «      }	nt        d«      ‚ | |	||«      S )	Nr°   r…   rI   é   ó    r€   é   zunsupported family)
Ú
get_structr“   r”   r•   Ú	get_bytesrk   Úipv4Ú	inet_ntoaÚipv6r‘   )
r   r/   rC   rŒ   Úsrcr­   ÚaddrlenÚprefixÚpadÚaddrs
             r   rG   zECSOption.from_wire_parser7  s·   € ð $×.Ñ.¨vÓ6Ñˆ��UÜ”d—i‘i  c¡	Ó*Ó+ˆØ×!Ñ! 'Ó*ˆØ�QŠ;Ø�g‘+ˆCÜ—8‘8×%Ñ% f¨w¸©}Ñ&<Ó=‰DØ�qŠ[Ø�w‘,ˆCÜ—8‘8×%Ñ% f¨w¸©}Ñ&<Ó=‰DäÐ1Ó2Ð2á�4˜˜eÓ$Ð$r   rV   r<   )r   r   r   r   re   r“   r3   r>   Ústaticmethodr.   r®   r   rf   r:   r,   r   rG   rx   ry   s   @r   r{   r{   Á   s¢   ø„ Ù+ñ-6 ð -6¨S°4©Zð -6È#õ -6ð^I˜ó Ið ð41˜ð 41 ò 41ó ð41ñl˜C $™Jð °%¸$±,ó ð ð%Ø Ñ$ð%Ø.?ð%à	ò%ó ô%r   r{   c                   ó„   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZed„ «       Zy)ÚEDECodezExtended DNS Error (EDE) codesr   rI   r€   r   r´   r   r	   r
   r   r   r   r   r   r   é   r   r¶   é   r   é   é   é   é   é   rƒ   c                  ó   — yr   r   r   s    r   r   zEDECode._maximumg  r   r   N)r   r   r   r   ÚOTHERÚUNSUPPORTED_DNSKEY_ALGORITHMÚUNSUPPORTED_DS_DIGEST_TYPEÚSTALE_ANSWERÚFORGED_ANSWERÚDNSSEC_INDETERMINATEÚDNSSEC_BOGUSÚSIGNATURE_EXPIREDÚSIGNATURE_NOT_YET_VALIDÚDNSKEY_MISSINGÚRRSIGS_MISSINGÚNO_ZONE_KEY_BIT_SETÚNSEC_MISSINGÚCACHED_ERRORÚ	NOT_READYÚBLOCKEDÚCENSOREDÚFILTEREDÚ
PROHIBITEDÚSTALE_NXDOMAIN_ANSWERÚNOT_AUTHORITATIVEÚNOT_SUPPORTEDÚNO_REACHABLE_AUTHORITYÚNETWORK_ERRORÚINVALID_DATAr,   r   r   r   r   rÃ   rÃ   J  s�   „ Ù(à€EØ#$Ð Ø!"ÐØ€LØ€MØÐØ€LØÐØÐØ€NØ€NØÐØ€LØ€LØ€IØ€GØ€HØ€HØ€JØÐØÐØ€MØÐØ€MØ€Làñó ñr   rÃ   c                   ó�   ‡ — e Zd ZdZh d£Zddeez  dedz  fˆ fd„Zdefd„Zdd	e	dz  de
dz  fd
„Zedeez  dddefd„«       Zˆ xZS )Ú	EDEOptionz!Extended DNS Error (EDE, RFC8914)>   ÚDSÚNSECÚDNSKEYÚDNSSECÚRRSIGsÚNXDOMAINNÚcoder    c                 ó¼   •— t         ‰| �  t        j                  «       t        j                  |«      | _        |�t        |t        «      st        d«      ‚|| _
        y)zÃ*code*, a ``dns.edns.EDECode`` or ``str``, the info code of the
        extended error.

        *text*, a ``str`` or ``None``, specifying additional information about
        the error.
        Nztext must be string or None)rj   r3   r   r*   rÃ   r1   rí   rP   re   r‘   r    )r2   rí   r    ro   s      €r   r3   zEDEOption.__init__q  sH   ø€ ô 	‰ÑœŸ™Ô(ä—L‘L Ó&ˆŒ	ØÐ¤J¨t´SÔ$9ÜÐ:Ó;Ð;Øˆ�	r   r5   c                 ó(  ‡ — d‰ j                   › �}‰ j                   t        v rQt        j                  ‰ j                   «      }dj                  ˆ fd„|j	                  d«      D «       «      }|d|› d�z  }‰ j
                  �|d‰ j
                  › �z  }|S )NzEDE Ú c              3   ó^   •K  — | ]$  }|‰j                   v r|n|j                  «       –— Œ& y ­wr<   )Ú_preserve_caseÚtitle)Ú.0Úwordr2   s     €r   Ú	<genexpr>z$EDEOption.to_text.<locals>.<genexpr>„  s1   øè ø€ ð á+�Dð  × 3Ñ 3Ñ3‘¸¿¹»ÓEÙ+ùs   ƒ*-Ú_z (Ú)z: )rí   rÃ   r>   Újoinr¤   r    )r2   ÚoutputÚdescs   `  r   r>   zEDEOption.to_text€  sŒ   ø€ Ø˜Ÿ	™	�{Ð#ˆØ�9‰9œÑÜ—?‘? 4§9¡9Ó-ˆDØ—8‘8ó à ŸJ™J sœOóó ˆDð ˜˜4˜& �lÑ"ˆFØ�9‰9Ð Ø˜˜4Ÿ9™9˜+Ð&Ñ&ˆFØˆr   r4   c                 óÂ   — t        j                  d| j                  «      }| j                  �|| j                  j	                  d«      z  }|r|j                  |«       y |S )Nz!HÚutf8)r—   r˜   rí   r    Úencoderq   r±   s      r   r:   zEDEOption.to_wire�  sP   € Ü—‘˜D $§)¡)Ó,ˆØ�9‰9Ð Ø�T—Y‘Y×%Ñ% fÓ-Ñ-ˆEáØ�J‰J�uÔØàˆLr   r/   rC   rD   c                 óÀ   — t         j                  |j                  «       «      }|j                  «       }|r|d   dk(  r|d d }|j	                  d«      }nd } | ||«      S )NrJ   r   rý   )rÃ   r1   Ú
get_uint16rw   Údecode)r   r/   rC   rí   r    Úbtexts         r   rG   zEDEOption.from_wire_parser˜  sb   € ô �|‰|˜F×-Ñ-Ó/Ó0ˆØ×#Ñ#Ó%ˆáØ�B‰x˜1Š}Ø˜C˜R�y�Ø—K‘K Ó'‰EàˆEá�4˜ÓÐr   r<   )r   r   r   r   rò   rÃ   re   r3   r>   r   rf   r:   r,   r   r.   rG   rx   ry   s   @r   ræ   ræ   l  s~   ø„ Ù+âM€Nñ˜W s™]ð °#¸±*õ ð˜ó ñ	˜C $™Jð 	°%¸$±,ó 	ð ð Ø Ñ$ð Ø.?ð à	ò ó ô r   ræ   c                   ó”   ‡ — e Zd Zdefˆ fd„Zddededz  fd„Zdefd„Ze	de
ez  d	ej                  j                  defd
„«       Zˆ xZS )Ú
NSIDOptionÚnsidc                 óN   •— t         ‰| �  t        j                  «       || _        y r<   )rj   r3   r   r    r  )r2   r  ro   s     €r   r3   zNSIDOption.__init__ª  s   ø€ Ü‰ÑœŸ™Ô)Øˆ�	r   Nr4   r5   c                 óV   — |r|j                  | j                  «       y | j                  S r<   )rq   r  r9   s     r   r:   zNSIDOption.to_wire®  rr   r   c                 óÔ   — t        d„ | j                  D «       «      r| j                  j                  «       }n-t        j                  | j                  «      j                  «       }d|› �S )Nc              3   ó4   K  — | ]  }|d k\  xr |dk  –— Œ y­w)r„   é~   Nr   )rô   Úcs     r   rö   z%NSIDOption.to_text.<locals>.<genexpr>¶  s!   è ø€ Ð:±	¨1ˆq�D‰yÒ&˜Q $™YÓ&±	ùs   ‚zNSID )Úallr  r  ÚbinasciiÚhexlify)r2   r²   s     r   r>   zNSIDOption.to_textµ  sO   € ÜÑ:°·	²	Ó:Ô:à—I‘I×$Ñ$Ó&‰Eä×$Ñ$ T§Y¡YÓ/×6Ñ6Ó8ˆEØ�u�gˆÐr   r/   rC   c                 ó.   —  | |j                  «       «      S r<   rv   rF   s      r   rG   zNSIDOption.from_wire_parser½  s   € ñ �6×'Ñ'Ó)Ó*Ð*r   r<   ©r   r   r   rf   r3   r   r:   re   r>   r,   r   rk   rA   ÚParserr.   rG   rx   ry   s   @r   r  r  ©  sk   ø„ ð˜Uõ ñ˜Cð ¨5°4©<ó ð˜ó ð ð+Ø Ñ$ð+Ø.1¯h©h¯o©oð+à	ò+ó ô+r   r  c                   ó˜   ‡ — e Zd Zdedefˆ fd„Zddededz  fd„Zdefd„Ze	d	e
ez  d
ej                  j                  defd„«       Zˆ xZS )ÚCookieOptionÚclientÚserverc                 óú   •— t         ‰| �  t        j                  «       || _        || _        t        |«      dk7  rt        d«      ‚t        |«      dk7  r(t        |«      dk  st        |«      dkD  rt        d«      ‚y y )Nr   zclient cookie must be 8 bytesr   r„   z5server cookie must be empty or between 8 and 32 bytes)rj   r3   r   r&   r  r  r¥   r‘   )r2   r  r  ro   s      €r   r3   zCookieOption.__init__Å  sr   ø€ Ü‰Ñœ×*Ñ*Ô+ØˆŒØˆŒÜˆv‹;˜!ÒÜÐ<Ó=Ð=Üˆv‹;˜!Ò¤ V£¨q¢´C¸³KÀ"Ò4DÜÐTÓUÐUð 5EÐr   Nr4   r5   c                 óÖ   — |rO|j                  | j                  «       t        | j                  «      dkD  r|j                  | j                  «       y | j                  | j                  z   S rV   )rq   r  r¥   r  r9   s     r   r:   zCookieOption.to_wireÎ  sL   € ÙØ�J‰J�t—{‘{Ô#Ü�4—;‘;Ó !Ò#Ø—
‘
˜4Ÿ;™;Ô'Øà—;‘; §¡Ñ,Ð,r   c                 óú   — t        j                  | j                  «      j                  «       }t	        | j
                  «      dkD  r.t        j                  | j
                  «      j                  «       }nd}d|› |› �S )Nr   Ú zCOOKIE )r  r  r  r  r¥   r  )r2   r  r  s      r   r>   zCookieOption.to_text×  sc   € Ü×!Ñ! $§+¡+Ó.×5Ñ5Ó7ˆÜˆt�{‰{Ó˜aÒÜ×%Ñ% d§k¡kÓ2×9Ñ9Ó;‰FàˆFØ˜˜  Ð)Ð)r   r/   rC   c                 óN   —  | |j                  d«      |j                  «       «      S )Nr   )r¸   rw   rF   s      r   rG   zCookieOption.from_wire_parserß  s%   € ñ �6×#Ñ# AÓ&¨×(<Ñ(<Ó(>Ó?Ð?r   r<   r  ry   s   @r   r  r  Ä  sz   ø„ ðV˜uð V¨eõ Vñ-˜Cð -¨5°4©<ó -ð*˜ó *ð ð@Ø Ñ$ð@Ø.1¯h©h¯o©oð@à	ò@ó ô@r   r  c                   ó¼   ‡ — e Zd Zdej                  j
                  fˆ fd„Zddededz  fd„Z	de
fd„Zedee
z  d	ej                  j                  defd
„«       Zˆ xZS )ÚReportChannelOptionÚagent_domainc                 óN   •— t         ‰| �  t        j                  «       || _        y r<   )rj   r3   r   r+   r  )r2   r  ro   s     €r   r3   zReportChannelOption.__init__è  s   ø€ Ü‰Ñœ×1Ñ1Ô2Ø(ˆÕr   Nr4   r5   c                 ó8   — | j                   j                  |«      S r<   )r  r:   r9   s     r   r:   zReportChannelOption.to_wireì  s   € Ø× Ñ ×(Ñ(¨Ó.Ð.r   c                 ó<   — d| j                   j                  «       z   S )NzREPORTCHANNEL )r  r>   r=   s    r   r>   zReportChannelOption.to_textï  s   € Ø $×"3Ñ"3×";Ñ";Ó"=Ñ=Ð=r   r/   rC   c                 ó.   —  | |j                  «       «      S r<   )Úget_namerF   s      r   rG   z$ReportChannelOption.from_wire_parserò  s   € ñ �6—?‘?Ó$Ó%Ð%r   r<   )r   r   r   rk   ÚnameÚNamer3   r   rf   r:   re   r>   r,   r   rA   r  r.   rG   rx   ry   s   @r   r  r  æ  ss   ø„ ð) S§X¡X§]¡]õ )ñ/˜Cð /¨5°4©<ó /ð>˜ó >ð ð&Ø Ñ$ð&Ø.1¯h©h¯o©oð&à	ò&ó ô&r   r  Ú_type_to_classr/   r5   c                 ó@   — t         j                  | «      }|€t        }|S )z„Return the class for the specified option type.

    The GenericOption class is used if a more specific class is not
    known.
    )r%  Úgetr@   )r/   r   s     r   Úget_option_classr(    s#   € ô ×
Ñ
˜UÓ
#€CØ
€{ÜˆØ€Jr   rC   rD   c                 óf   — t         j                  | «      } t        | «      }|j                  | |«      S )a  Build an EDNS option object from wire format.

    *otype*, an ``int``, is the option type.

    *parser*, a ``dns.wire.Parser``, the parser, which should be
    restricted to the option length.

    Returns an instance of a subclass of ``dns.edns.Option``.
    )r   r1   r(  rG   )r/   rC   r   s      r   Úoption_from_wire_parserr*    s/   € ô �O‰O˜EÓ"€EÜ
˜5Ó
!€CØ×Ñ  vÓ.Ð.r   rA   ÚcurrentÚolenc                 ó¨   — t         j                  j                  ||«      }|j                  |«      5  t	        | |«      cddd«       S # 1 sw Y   yxY w)ar  Build an EDNS option object from wire format.

    *otype*, an ``int``, is the option type.

    *wire*, a ``bytes``, is the wire-format message.

    *current*, an ``int``, is the offset in *wire* of the beginning
    of the rdata.

    *olen*, an ``int``, is the length of the wire-format option data

    Returns an instance of a subclass of ``dns.edns.Option``.
    N)rk   rA   r  Úrestrict_tor*  )r/   rA   r+  r,  rC   s        r   Úoption_from_wirer/     s<   € ô  �X‰X�_‰_˜T 7Ó+€FØ	×	Ñ	˜DÕ	!Ü& u¨fÓ5÷ 
"×	!Ò	!ús   ²AÁAÚimplementationc                 ó   — | t         |<   y)z«Register the implementation of an option type.

    *implementation*, a ``class``, is a subclass of ``dns.edns.Option``.

    *otype*, an ``int``, is the option type.
    N)r%  )r0  r/   s     r   Úregister_typer2  5  s   € ð +„N�5Òr   )0r   r  r”   rŠ   r—   Útypingr   r   Údns.enumrk   Údns.inetÚdns.ipv4Údns.ipv6Údns.nameÚ	dns.rdataÚdns.wireÚenumÚIntEnumr   r.   r@   r{   rÃ   ræ   r  r  r  r$   r*   r    r&   r+   r%  Ú__annotations__r(  re   r*  rf   r“   r/  r2  r!   r"   r#   r%   r'   r(   r)   r   r   r   Ú<module>r>     sþ  ðò$ ã Û Û Û ß ã Û Û Û Û Û Û ô�—‘×!Ñ!ô ÷B[ñ [ô|2�Fô 2ô>F%�ô F%ôRˆc�h‰h×Ñô ôD: �ô : ôz+�ô +ô6@�6ô @ôD&˜&ô &ð( ‡N�N�IØ‡N�N�IØ‡O�O�ZØ×Ñ�|Ø×ÑÐ1ð)€��Z �_Ñ%ó ð
˜Jð 
¨3ó 
ð/Ø˜Ñð/Ø%6ð/àó/ð"6Ø˜Ñð6Ø#(ð6Ø36ð6Ø>Að6àó6ð*+ #ð +¨jð +¸Tó +ð ‡�€Ø‡n�n€Ø‡n�n€Ø‡n�n€Ø‡n�n€Ø	×	Ñ	€Ø	×	Ñ	€Ø× Ñ €	Ø
×
Ñ
€Ø×Ñ€Ø‡n�n€Ø×(Ñ(�r   