o
    ¤�ZÍ  ã                   @   s¦   d dl T d dlZdd„ Zdd„ Zddd	„Zdd
d„Zdd„ edƒD ƒZdd„ Zdd„ edƒD ƒZ	dd„ Z
dd„ Zdd„ Zdd„ edƒD ƒZdd„ Zdd„ Zdd„ ZdS ) é    )Ú*Nc                 C   s€   |dk rt dƒ‚t| ƒ} | dk r| d|> 7 } dg| }|d }| r;|dkr;t| d@ ƒ||< | dL } |d8 }| r;|dks%d |¡S )a  
    Converts an integer into its binary representation in a bit-string. Width is the amount of bits to generate. If width is larger than the actual amount of bits required to represent number in binary, sign-extension is used. If it's smaller, the representation is trimmed to width bits. Each bit is represented as either \\x00 or \\x01. The most significant is first, big-endian. This is reverse to `bits2integer`.

    Examples:

        >>> integer2bits(19, 8)
        b'\x00\x00\x00\x01\x00\x00\x01\x01'
    r   úwidth must be non-negativeé   ó    ó    ©Ú
ValueErrorÚintÚint2byteÚjoin)ÚnumberÚwidthÚbitsÚi© r   úF/var/www/html/env/lib/python3.10/site-packages/construct/lib/binary.pyÚinteger2bits   s   	
ý
r   c                 C   s|   |dk rt dƒ‚t| ƒ} | dk r| d|d > 7 } dg| }|d }| dkr9t| d@ ƒ||< | dL } |d8 }| dks%d |¡S )z¡
    Converts a bytes-string into an integer. This is reverse to `bytes2integer`.

    Examples:

        >>> integer2bytes(19,4)
        '\x00\x00\x00\x13'
    r   r   r   é   r   éÿ   r   r   )r   r   Úaccr   r   r   r   Úinteger2bytes   s   	
ý
r   Fc                 C   sJ   d}t | ƒD ]}|d> |B }q|r#t| dd… ƒr#dt| ƒ> }|| S |S )zå
    Converts a bit-string into an integer. Set sign to interpret the number as a 2-s complement signed integer. This is reverse to `integer2bits`.

    Examples:

        >>> bits2integer(b"\x01\x00\x00\x01\x01")
        19
    r   r   )ÚiterateintsÚbyte2intÚlen©ÚdataÚsignedr   ÚbÚbiasr   r   r   Úbits2integer3   s   	r   c                 C   sZ   d}t | ƒD ]}|d> |B }q|r+tt| dd… ƒdd… ƒr+dt| ƒd > }|| S |S )zŸ
    Converts a byte-string into an integer. This is reverse to `integer2bytes`.

    Examples:

        >>> bytes2integer(b'\x00\x00\x00\x13')
        19
    r   r   r   )r   r   Ú
bytes2bitsr   r   r   r   r   Úbytes2integerG   s   	 r!   c                 C   s   i | ]}|t |d ƒ“qS )r   )r   ©Ú.0r   r   r   r   Ú
<dictcomp>[   s    r$   é   c                 C   ó   d  dd„ t| ƒD ƒ¡S )z¿ 
    Converts between bit and byte representations in b-strings.

    Example:

        >>> bytes2bits(b'ab')
        b"\x00\x01\x01\x00\x00\x00\x00\x01\x00\x01\x01\x00\x00\x00\x01\x00"
    r   c                 s   ó   � | ]}t | V  qd S ©N)ÚBYTES2BITS_CACHE©r#   r   r   r   r   Ú	<genexpr>e   ó   € zbytes2bits.<locals>.<genexpr>©r   r   ©r   r   r   r   r    \   ó   	r    c                 C   s   i | ]}t t|ƒƒt|ƒ“qS r   )r    r
   r"   r   r   r   r$   h   s    c                    s8   t ˆ ƒd@ r
tdƒ‚d ‡ fdd„tdt ˆ ƒdƒD ƒ¡S )z¿ 
    Converts between bit and byte representations in b-strings.

    Example:

        >>> bits2bytes(b"\x00\x01\x01\x00\x00\x00\x00\x01\x00\x01\x01\x00\x00\x00\x01\x00")
        b'ab'
    é   z#data length must be a multiple of 8r   c                 3   s$   � | ]}t ˆ ||d  …  V  qdS ©r   N)ÚBITS2BYTES_CACHEr"   r.   r   r   r+   t   s   €" zbits2bytes.<locals>.<genexpr>r   r   )r   r   r   Úranger.   r   r.   r   Ú
bits2bytesi   s   	$r4   c                 C   s   | ddd… S )zs
    Performs an endianness swap on byte-string.

    Example:

        >>> swapbytes(b'abcd')
        b'dcba'
    Néÿÿÿÿr   r.   r   r   r   Ú	swapbytesw   s   	r6   c                    s<   t ˆ ƒd@ r
tdƒ‚d ‡ fdd„ttdt ˆ ƒdƒƒD ƒ¡S )z²
    Performs an byte-swap within a bit-string. Its length must be multiple of 8.

    Example:

        >>> swapbytesinbits(b'0000000011111111')
        b'1111111100000000'
    r0   z!data length must be multiple of 8r   c                 3   s    � | ]}ˆ ||d  … V  qdS r1   r   r"   r.   r   r   r+   Ž   s   € z"swapbytesinbits.<locals>.<genexpr>r   r   )r   r   r   Úreversedr3   r.   r   r.   r   Úswapbytesinbitsƒ   s   	(r8   c                 C   s(   i | ]}|t tt|ƒƒd d d… ƒ“qS )Nr5   )r4   r    r
   r"   r   r   r   r$   ‘   s   ( c                 C   r&   )zt
    Performs a bit-reversal within a byte-string.

    Example:

        >>> swapbits(b'\xf0')
        b'\x0f'
    r   c                 s   r'   r(   )ÚSWAPBITSINBYTES_CACHEr*   r   r   r   r+   ›   r,   z"swapbitsinbytes.<locals>.<genexpr>r-   r.   r   r   r   Úswapbitsinbytes’   r/   r:   c                 C   ó
   t  | ¡S )zReturns binascii.hexlify(data).)ÚbinasciiÚhexlifyr.   r   r   r   r=   ž   ó   
r=   c                 C   r;   )z!Returns binascii.unhexlify(data).)r<   Ú	unhexlifyr.   r   r   r   r?   £   r>   r?   )F)Úconstruct.lib.py3compatr<   r   r   r   r!   r3   r)   r    r2   r4   r6   r8   r9   r:   r=   r?   r   r   r   r   Ú<module>   s     

