
    d{Ig,X                        d Z ddlmZmZ ddlmZ 	 ddlmZm	Z	m
Z
 n# e$ r ddlmZm	Z	m
Z
 Y nw xY wddlZej        dk    ZereZeZn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! G d de"          Z# G d de$          Z% G d de%          Z& G d de%          Z' G d de&          Z( G d de&          Z) G d d e&          Z* G d! d"e&          Z+ G d# d$e&          Z, G d% d&e&          Z- G d' d(e%e	          Z. G d) d*e%e	          Z/ G d+ d,e%e	          Z0 G d- d.e%e
          Z1 G d/ d0e%e	          Z2 G d1 d2e%e          Z3ee'ee(ee)ee*ee+ee,ee-ee.ee1ee2ee3e e/e!e0iZ4 G d3 d4e3          Z5dS )5z
Handle the NBT (Named Binary Tag) data format

For more information about the NBT format:
https://minecraft.gamepedia.com/NBT_format
    )Structerror)GzipFile)MutableMappingMutableSequenceSequenceN)         r	                  	   
         c                       e Zd ZdZdS )MalformedFileErrorz Exception raised on parse error.N)__name__
__module____qualname____doc__     I/var/www/CMSBlueprintStation/venv/lib/python3.11/site-packages/nbt/nbt.pyr   r   &   s        **Dr   r   c                   V    e Zd ZdZdZddZd Zd Zd Zd Z	d Z
dd
Zd Zd Zd ZdS )TAGz'TAG, a variable with an intrinsic name.Nc                 "    || _         || _        d S N)namevalue)selfr#   r"   s      r   __init__zTAG.__init__/   s    	


r   c                 4    t          | j        j                  r!   NotImplementedError	__class__r   r$   buffers     r   _parse_bufferzTAG._parse_buffer4       !$."9:::r   c                 4    t          | j        j                  r!   r'   r*   s     r   _render_bufferzTAG._render_buffer7   r-   r   c                 r    | j         j        | j        r
d| j        z  ndz   dz   |                                 z   S )z:Return Unicode string with class, name and unnested value.z(%r) z: )r)   r   r"   valuestrr$   s    r   tag_infozTAG.tag_info;   sE    ~&"&) FTY"mmoo. 	.r   c                 *    t          | j                  S )zWReturn Unicode string of unnested value. For iterators, this
        returns a summary.unicoder#   r3   s    r   r2   zTAG.valuestrA   s     tz"""r   c                 *    t          | j                  S )z"Return Unicode string of tag name.)r7   r"   r3   s    r   namestrzTAG.namestrF   s    ty!!!r   r   c                 6    d|z  |                                  z   S )zfReturn formated Unicode string of self, where iterable items are
        recursively listed in detail.	r4   )r$   indents     r   pretty_treezTAG.pretty_treeJ   s     v00r   c                 *    t          | j                  S )zReturn a unicode string with the result in human readable format.
        Unlike valuestr(), the result is recursive for iterators till at least
        one level deep.r6   r3   s    r   __unicode__zTAG.__unicode__P   s     tz"""r   c                 *    t          | j                  S )zReturn a string (ascii formated for Python 2, unicode for Python 3)
        with the result in human readable format. Unlike valuestr(), the result
         is recursive for iterators till at least one level deep.)strr#   r3   s    r   __str__zTAG.__str__V   s     4:r   c                 J    d| j         j        | j        t          |           fz  S )zReturn a string (ascii formated for Python 2, unicode for Python 3)
        describing the class, name and id for debugging purposes.z<%s(%r) at 0x%x>)r)   r   r"   idr3   s    r   __repr__zTAG.__repr__`   s*     "N#TY4%: : 	:r   NNr   )r   r   r   r   rE   r%   r,   r/   r4   r2   r9   r>   r@   rC   rF   r   r   r   r   r   +   s        11	B   
; ; ;; ; ;. . .# # #
" " "1 1 1 1# # #  : : : : :r   r   c                   0     e Zd ZdZd fd	Zd Zd Z xZS )_TAG_Numericz6_TAG_Numeric, comparable to int with an intrinsic nameNc                     t          t          |                               ||           |r|                     |           d S d S r!   )superrJ   r%   r,   r$   r#   r"   r+   r)   s       r   r%   z_TAG_Numeric.__init__j   sO    lD!!**5$777 	'v&&&&&	' 	'r   c                     | j                             |                    | j         j                            d         | _        d S )Nr   )fmtunpackreadsizer#   r*   s     r   r,   z_TAG_Numeric._parse_bufferp   s2     X__V[[%?%?@@C


r   c                 j    |                     | j                            | j                             d S r!   )writerO   packr#   r*   s     r   r/   z_TAG_Numeric._render_bufferu   s*    TX]]4:../////r   NNN)r   r   r   r   r%   r,   r/   __classcell__r)   s   @r   rJ   rJ   g   sd        @@' ' ' ' ' 'D D D
0 0 0 0 0 0 0r   rJ   c                   4    e Zd ZeZ ed          Zd Zd ZdS )_TAG_End>bc                     | j                             |                    d                    d         }|dk    rt          d|z            d S )Nr
   r   z/A Tag End must be rendered as '0', not as '%d'.)rO   rP   rQ   
ValueError)r$   r+   r#   s      r   r,   z_TAG_End._parse_buffer}   sS     A//2A::AEIK K K :r   c                 0    |                     d           d S N    )rT   r*   s     r   r/   z_TAG_End._render_buffer   s    Wr   N)	r   r   r   TAG_ENDrE   r   rO   r,   r/   r   r   r   rZ   rZ   y   sG        	B
&,,CK K K    r   rZ   c                   ,    e Zd ZdZeZ ed          ZdS )TAG_Bytez&Represent a single tag storing 1 byte.r[   N)r   r   r   r   TAG_BYTErE   r   rO   r   r   r   rc   rc      &        00	B
&,,CCCr   rc   c                   ,    e Zd ZdZeZ ed          ZdS )	TAG_Shortz'Represent a single tag storing 1 short.z>hN)r   r   r   r   	TAG_SHORTrE   r   rO   r   r   r   rg   rg      s&        11	B
&,,CCCr   rg   c                   ,    e Zd ZdZeZ ed          ZdS )TAG_Intz%Represent a single tag storing 1 int.z>iN)r   r   r   r   TAG_INTrE   r   rO   r   r   r   rj   rj      s(        //	B
&,,C33r   rj   c                   ,    e Zd ZdZeZ ed          ZdS )TAG_Longz&Represent a single tag storing 1 long.z>qN)r   r   r   r   TAG_LONGrE   r   rO   r   r   r   rm   rm      re   r   rm   c                   ,    e Zd ZdZeZ ed          ZdS )	TAG_Floatz@Represent a single tag storing 1 IEEE-754 floating point number.z>fN)r   r   r   r   	TAG_FLOATrE   r   rO   r   r   r   rp   rp      s&        JJ	B
&,,CCCr   rp   c                   ,    e Zd ZdZeZ ed          ZdS )
TAG_DoublezURepresent a single tag storing 1 IEEE-754 double precision floating
    point number.z>dN)r   r   r   r   
TAG_DOUBLErE   r   rO   r   r   r   rs   rs      s*         	B
&,,CCCr   rs   c                   p     e Zd ZdZeZd f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 xZS )TAG_Byte_Arrayzt
    TAG_Byte_Array, comparable to a collections.UserList with
    an intrinsic name whose values must be bytes
    Nc                     t          t          |                               |           |r|                     |           d S d S Nr"   )rL   rv   r%   r,   r$   r"   r+   r)   s      r   r%   zTAG_Byte_Array.__init__   sP    nd##,,$,777 	'v&&&&&	' 	'r   c                 ~    t          |          }t          |                    |j                            | _        d S Nr+   )rj   	bytearrayrQ   r#   r$   r+   lengths      r   r,   zTAG_Byte_Array._parse_buffer   s3    '''v{{6<8899


r   c                     t          t          | j                            }|                    |           |                    t          | j                             d S r!   )rj   lenr#   r/   rT   bytesr   s      r   r/   zTAG_Byte_Array._render_buffer   sM    TZ))f%%%U4:&&'''''r   c                 *    t          | j                  S r!   r   r#   r3   s    r   __len__zTAG_Byte_Array.__len__       4:r   c                 *    t          | j                  S r!   iterr#   r3   s    r   __iter__zTAG_Byte_Array.__iter__       DJr   c                     || j         v S r!   r#   r$   items     r   __contains__zTAG_Byte_Array.__contains__       tz!!r   c                     | j         |         S r!   r   r$   keys     r   __getitem__zTAG_Byte_Array.__getitem__       z#r   c                     || j         |<   d S r!   r   r$   r   r#   s      r   __setitem__zTAG_Byte_Array.__setitem__   s    
3r   c                     | j         |= d S r!   r   r   s     r   __delitem__zTAG_Byte_Array.__delitem__       Z___r   c                 <    | j                             ||           d S r!   r#   insertr   s      r   r   zTAG_Byte_Array.insert   s     
#u%%%%%r   c                 0    dt          | j                  z  S )Nz[%i byte(s)]r   r3   s    r   r2   zTAG_Byte_Array.valuestr       DJ//r   c                 V    dd                     d | j        D                       z   dz   S )N[,c                 ,    g | ]}t          |          S r   )r7   .0xs     r   
<listcomp>z.TAG_Byte_Array.__unicode__.<locals>.<listcomp>   s    >>>awqzz>>>r   ]joinr#   r3   s    r   r@   zTAG_Byte_Array.__unicode__   s/    SXX>>4:>>>???#EEr   c                 V    dd                     d | j        D                       z   dz   S )Nr   r   c                 ,    g | ]}t          |          S r   )rB   r   s     r   r   z*TAG_Byte_Array.__str__.<locals>.<listcomp>   s    :::!s1vv:::r   r   r   r3   s    r   rC   zTAG_Byte_Array.__str__   s/    SXX::tz:::;;;cAAr   rG   )r   r   r   r   TAG_BYTE_ARRAYrE   r%   r,   r/   r   r   r   r   r   r   r   r2   r@   rC   rW   rX   s   @r   rv   rv      s         
B' ' ' ' ' ': : :( ( (       " " "         & & &
0 0 0F F FB B B B B B Br   rv   c                   j     e Zd ZdZeZd fd	Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Z xZS )TAG_Int_Arrayzv
    TAG_Int_Array, comparable to a collections.UserList with
    an intrinsic name whose values must be integers
    Nc                     t          t          |                               |           |r|                     |           d S d S rx   )rL   r   r%   r,   rz   s      r   r%   zTAG_Int_Array.__init__   sP    mT""+++666 	'v&&&&&	' 	'r   c                 T    t          dt          |          z   dz             | _        dS )2 Adjust struct format description to length given >iNr   rB   rO   r$   r   s     r   
update_fmtzTAG_Int_Array.update_fmt   %    #F+c122r   c                     t          |          j        }|                     |           t          | j                            |                    | j        j                                      | _        d S r|   rj   r#   r   listrO   rP   rQ   rR   r   s      r   r,   zTAG_Int_Array._parse_buffer   X    '''-$(//&++dhm*D*DEEFF


r   c                     t          | j                  }|                     |           t          |                              |           |                     | j        j        | j                    d S r!   r   r#   r   rj   r/   rT   rO   rU   r   s      r   r/   zTAG_Int_Array._render_buffer  `    TZ&&v...]TX]DJ/00000r   c                 *    t          | j                  S r!   r   r3   s    r   r   zTAG_Int_Array.__len__  r   r   c                 *    t          | j                  S r!   r   r3   s    r   r   zTAG_Int_Array.__iter__  r   r   c                     || j         v S r!   r   r   s     r   r   zTAG_Int_Array.__contains__  r   r   c                     | j         |         S r!   r   r   s     r   r   zTAG_Int_Array.__getitem__  r   r   c                     || j         |<   d S r!   r   r   s      r   r   zTAG_Int_Array.__setitem__      
3r   c                     | j         |= d S r!   r   r   s     r   r   zTAG_Int_Array.__delitem__  r   r   c                 <    | j                             ||           d S r!   r   r   s      r   r   zTAG_Int_Array.insert       
#u%%%%%r   c                 0    dt          | j                  z  S )Nz[%i int(s)]r   r3   s    r   r2   zTAG_Int_Array.valuestr  s    s4:..r   rG   )r   r   r   r   TAG_INT_ARRAYrE   r%   r   r,   r/   r   r   r   r   r   r   r   r2   rW   rX   s   @r   r   r      s          
B' ' ' ' ' '3 3 3
G G G
1 1 1       " " "         & & &/ / / / / / /r   r   c                   j     e Zd ZdZeZd fd	Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Z xZS )TAG_Long_Arrayzw
    TAG_Long_Array, comparable to a collections.UserList with
    an intrinsic name whose values must be integers
    Nc                     t          t          |                               |           |r|                     |           d S d S rx   )rL   r   r%   r,   rz   s      r   r%   zTAG_Long_Array.__init__)  sP    nd##,,$,777 	'v&&&&&	' 	'r   c                 T    t          dt          |          z   dz             | _        dS )r   r   qNr   r   s     r   r   zTAG_Long_Array.update_fmt.  r   r   c                     t          |          j        }|                     |           t          | j                            |                    | j        j                                      | _        d S r|   r   r   s      r   r,   zTAG_Long_Array._parse_buffer3  r   r   c                     t          | j                  }|                     |           t          |                              |           |                     | j        j        | j                    d S r!   r   r   s      r   r/   zTAG_Long_Array._render_buffer8  r   r   c                 *    t          | j                  S r!   r   r3   s    r   r   zTAG_Long_Array.__len__?  r   r   c                 *    t          | j                  S r!   r   r3   s    r   r   zTAG_Long_Array.__iter__B  r   r   c                     || j         v S r!   r   r   s     r   r   zTAG_Long_Array.__contains__E  r   r   c                     | j         |         S r!   r   r   s     r   r   zTAG_Long_Array.__getitem__H  r   r   c                     || j         |<   d S r!   r   r   s      r   r   zTAG_Long_Array.__setitem__K  r   r   c                     | j         |= d S r!   r   r   s     r   r   zTAG_Long_Array.__delitem__N  r   r   c                 <    | j                             ||           d S r!   r   r   s      r   r   zTAG_Long_Array.insertQ  r   r   c                 0    dt          | j                  z  S )Nz[%i long(s)]r   r3   s    r   r2   zTAG_Long_Array.valuestrU  r   r   rG   )r   r   r   r   TAG_LONG_ARRAYrE   r%   r   r,   r/   r   r   r   r   r   r   r   r2   rW   rX   s   @r   r   r   "  s          
B' ' ' ' ' '
3 3 3
G G G
1 1 1       " " "         & & &0 0 0 0 0 0 0r   r   c                   R     e Zd ZdZeZd fd	Zd Zd Zd Z	d Z
d Zd	 Zd
 Z xZS )
TAG_StringzW
    TAG_String, comparable to a collections.UserString with an
    intrinsic name
    Nc                     t          t          |                               ||           |r|                     |           d S d S r!   )rL   r   r%   r,   rM   s       r   r%   zTAG_String.__init__`  sO    j$((555 	'v&&&&&	' 	'r   c                     t          |          }|                    |j                  }t          |          |j        k    rt	                      |                    d          | _        d S )Nr}   utf-8)rg   rQ   r#   r   StructErrordecode)r$   r+   r   rQ   s       r   r,   zTAG_String._parse_bufferf  sY    &))){{6<((t99$$--[[))


r   c                     | j                             d          }t          t          |                    }|                    |           |                    |           d S )Nr   )r#   encoderg   r   r/   rT   )r$   r+   save_valr   s       r   r/   zTAG_String._render_bufferm  sV    :$$W--3x==))f%%%Xr   c                 *    t          | j                  S r!   r   r3   s    r   r   zTAG_String.__len__t  r   r   c                 *    t          | j                  S r!   r   r3   s    r   r   zTAG_String.__iter__w  r   r   c                     || j         v S r!   r   r   s     r   r   zTAG_String.__contains__z  r   r   c                     | j         |         S r!   r   r   s     r   r   zTAG_String.__getitem__}  r   r   c                     | j         S r!   r   r3   s    r   rF   zTAG_String.__repr__  s
    zr   rV   )r   r   r   r   
TAG_STRINGrE   r%   r,   r/   r   r   r   r   rF   rW   rX   s   @r   r   r   Y  s          
B' ' ' ' ' '* * *         " " "        r   r   c                        e Zd ZdZeZd f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 fd	Z xZS )TAG_ListzO
    TAG_List, comparable to a collections.UserList with an intrinsic name
    Nc                     t          t          |                               ||           |r|j        | _        nd | _        g | _        |r|                     |           d S d S r!   )rL   r   r%   rE   tagIDtagsr,   )r$   typer#   r"   r+   r)   s        r   r%   zTAG_List.__init__  sp    h&&ud333 	DJJDJ	 	'v&&&&&	' 	'r   c                     t          |          j        | _        g | _        t	          |          }t          |j                  D ]5}| j                            t          | j                 |                     6d S r|   )rc   r#   r   r   rj   rangeappendTAGLIST)r$   r+   r   r   s       r   r,   zTAG_List._parse_buffer  s    V,,,2
	'''v|$$ 	A 	AAIWTZ0???@@@@	A 	Ar   c                 ~   t          | j                                      |           t          t	          | j                            }|                    |           t          | j                  D ]J\  }}|j        | j        k    r t          d|||j        | j        fz            |                    |           Kd S )Nz4List element %d(%s) has type %d != container type %d)	rc   r   r/   rj   r   r   	enumeraterE   r]   )r$   r+   r   r   tags        r   r/   zTAG_List._render_buffer  s    ++F333TY((f%%%	** 	' 	'FAsv## JSVTZ012 2 2 v&&&&	' 	'r   c                 *    t          | j                  S r!   r   r   r3   s    r   r   zTAG_List.__len__      49~~r   c                 *    t          | j                  S r!   )r   r   r3   s    r   r   zTAG_List.__iter__  s    DIr   c                     || j         v S r!   r   r   s     r   r   zTAG_List.__contains__  s    ty  r   c                     | j         |         S r!   r   r   s     r   r   zTAG_List.__getitem__  s    y~r   c                     || j         |<   d S r!   r   r   s      r   r   zTAG_List.__setitem__  s    	#r   c                     | j         |= d S r!   r   r   s     r   r   zTAG_List.__delitem__  s    Ys^^^r   c                 <    | j                             ||           d S r!   )r   r   r   s      r   r   zTAG_List.insert  s     	e$$$$$r   c                 ^    dt          | j                  t          | j                 j        fz  S )Nz%i entries of type %sr   r   r   r   r   r3   s    r   rF   zTAG_List.__repr__  s+    &	NNGDJ/8*: : 	:r   c                 ^    dt          | j                  t          | j                 j        fz  S )Nz
[%i %s(s)]r  r3   s    r   r2   zTAG_List.valuestr  s$    s49~~wtz/B/KLLLr   c                 V    dd                     d | j        D                       z   dz   S )Nr   , c                 6    g | ]}|                                 S r   r<   r   r   s     r   r   z(TAG_List.__unicode__.<locals>.<listcomp>       DDD3DDDr   r   r   r   r3   s    r   r@   zTAG_List.__unicode__  /    TYYDD$)DDDEEEKKr   c                 V    dd                     d | j        D                       z   dz   S )Nr   r	  c                 6    g | ]}|                                 S r   r<   r  s     r   r   z$TAG_List.__str__.<locals>.<listcomp>  r  r   r   r  r3   s    r   rC   zTAG_List.__str__  r  r   r   c                 b   t          t          |                                         g}t          | j                  r\|                    dz  dz              |                    fd| j        D                        |                    dz  dz              d                    |          S )Nr;   {c                 @    g | ]}|                     d z             S r
   r>   r   r   r=   s     r   r   z(TAG_List.pretty_tree.<locals>.<listcomp>  )    LLL33??6A:66LLLr   }
)rL   r   r>   r   r   r   extendr   r$   r=   outputr)   s    ` r   r>   zTAG_List.pretty_tree  s    $''33F;;<ty>> 	1MM4&=C/000MMLLLL$)LLLMMMMM4&=C/000yy   r   )NNNNrH   )r   r   r   r   TAG_LISTrE   r%   r,   r/   r   r   r   r   r   r   r   rF   r2   r@   rC   r>   rW   rX   s   @r   r   r     s;         
B' ' ' ' ' 'A A A	' 	' 	'    ! ! !      % % %: : :
M M ML L LL L L! ! ! ! ! ! ! ! ! !r   r   c                        e Zd ZdZeZd f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 fd	Z xZS )TAG_CompoundzZ
    TAG_Compound, comparable to a collections.OrderedDict with an
    intrinsic name
    Nc                     t          t          |                                            g | _        |r|| _        nd| _        |r|                     |           d S d S )Nr1   )rL   r  r%   r   r"   r,   )r$   r+   r"   r)   s      r   r%   zTAG_Compound.__init__  sj    lD!!**,,,	 	DIIDI 	'v&&&&&	' 	'r   c                 `   	 t          |          }|j        t          k    rd S t          |          j        }	 t	          |j                             }n%# t
          $ r t          d|j        z            w xY w||_        | j        	                    |           |
                    |           )NTr}   zUnrecognised tag type %d)rc   r#   ra   r   r   KeyErrorr]   r"   r   r   r,   )r$   r+   r   r"   r   s        r   r,   zTAG_Compound._parse_buffer  s    	*6***DzW$$!0006N!$*-//CC N N N$%?$*%LMMMN	  %%%!!&)))	*s   A "A6c                 
   | j         D ]e}t          |j                                      |           t	          |j                                      |           |                    |           f|                    d           d S r_   )r   rc   rE   r/   r   r"   rT   )r$   r+   r   s      r   r/   zTAG_Compound._render_buffer  s~    9 	' 	'CSV++F333sx  //777v&&&&Wr   c                 *    t          | j                  S r!   r   r3   s    r   r   zTAG_Compound.__len__  r   r   c              #   0   K   | j         D ]}|j        V  d S r!   r   r"   r   s     r   r   zTAG_Compound.__iter__  s.      9 	 	C(NNNN	 	r   c                     t          |t                    r|t          | j                  k    S t          |t                    r| j        D ]}|j        |k    r dS dS t          |t                    r	|| j        v S dS )NTF)
isinstanceintr   r   
basestringr"   r   r$   r   r   s      r   r   zTAG_Compound.__contains__  s    c3 	$#di..((Z(( 	$y    8s??44 #5S!! 	$$)##ur   c                    t          |t                    r| j        |         S t          |t                    r+| j        D ]}|j        |k    r|c S t          d|z            t          dt          |          j        z            )NzTag %s does not existz=key needs to be either name of tag, or index of tag, not a %s)	r(  r)  r   r*  r"   r"  	TypeErrorr   r   r+  s      r   r   zTAG_Compound.__getitem__  s    c3 	19S>!Z(( 		1y > >8s??JJJ # 6<===!#YY/01 1 1r   c                 Z   t          |t                    s
J d            t          |t                    r|| j        |<   d S t          |t                    rU||_        t          | j                  D ]\  }}|j        |k    r|| j        |<    d S | j                            |           d S d S )Nzvalue must be an nbt.TAG)r(  r   r)  r   r*  r"   r   r   )r$   r   r#   r   r   s        r   r   zTAG_Compound.__setitem__%  s    %%%AA'AAA%c3 		$"DIcNNNZ(( 	$EJ#DI..  38s??#(DIaLFF # IU#####	$ 	$r   c                     t          |t                    r
| j        |= d S t          |t                    r/| j                            |                     |                     d S t          d          )Nz3key needs to be either name of tag, or index of tag)r(  r)  r   r*  remover   r]   r   s     r   r   zTAG_Compound.__delitem__2  sw    c3 	G3Z(( 	GIT--c2233333EG G Gr   c                 $    d | j         D             S )Nc                     g | ]	}|j         
S r   ry   r  s     r   r   z%TAG_Compound.keys.<locals>.<listcomp><  s    ...S...r   r   r3   s    r   keyszTAG_Compound.keys;  s    ..DI....r   c              #   4   K   | j         D ]}|j        |fV  d S r!   r&  )r$   r   s     r   	iteritemszTAG_Compound.iteritems>  s6      9 	" 	"C8S/!!!!	" 	"r   c                 V    dd                     d | j        D                       z   dz   S )Nr  r	  c                 6    g | ]}|                                 S r   r<   r  s     r   r   z,TAG_Compound.__unicode__.<locals>.<listcomp>D  r  r   r  r  r3   s    r   r@   zTAG_Compound.__unicode__C  r  r   c                 V    dd                     d | j        D                       z   dz   S )Nr  r	  c                 6    g | ]}|                                 S r   r<   r  s     r   r   z(TAG_Compound.__str__.<locals>.<listcomp>G  r  r   r  r  r3   s    r   rC   zTAG_Compound.__str__F  r  r   c                 0    dt          | j                  z  S )Nz{%i Entries}r   r3   s    r   r2   zTAG_Compound.valuestrI  s    DI..r   r   c                 b   t          t          |                                         g}t          | j                  r\|                    dz  dz              |                    fd| j        D                        |                    dz  dz              d                    |          S )Nr;   r  c                 @    g | ]}|                     d z             S r  r  r  s     r   r   z,TAG_Compound.pretty_tree.<locals>.<listcomp>P  r  r   r  r  )rL   r  r>   r   r   r   r  r   r  s    ` r   r>   zTAG_Compound.pretty_treeL  s    d++77??@ty>> 	1MM4&=C/000MMLLLL$)LLLMMMMM4&=C/000yy   r   rG   rH   )r   r   r   r   TAG_COMPOUNDrE   r%   r,   r/   r   r   r   r   r   r   r3  r5  r@   rC   r2   r>   rW   rX   s   @r   r  r    s8         
B	' 	' 	' 	' 	' 	'* * *       
 
 
1 1 1$ $ $G G G/ / /" " "
L L LL L L/ / /! ! ! ! ! ! ! ! ! !r   r  c                   :     e Zd ZdZd fd	ZddZddZd Z xZS )NBTFilezRepresent an NBT file object.Nc                 R   t          t          |                                            || _        t	          | j                  | _        d}|r|| _        t          |d          | _        ne|r&t          |d          r|j
        | _        || _        d}n=|r2t          |d          r|j
        | _        t          |          | _        n	d| _        d}| j        rQ|                                  |r2	 | j                                         n# t          t          f$ r Y nw xY wd| _        dS dS )a  
        Create a new NBTFile object.
        Specify either a filename, file object or data buffer.
        If filename of file object is specified, data should be GZip-compressed.
        If a data buffer is specified, it is assumed to be uncompressed.

        If filename is specified, the file is closed after reading and writing.
        If file object is specified, the caller is responsible for closing the
        file.
        Trbr"   FfileobjN)rL   r?  r%   filenamerc   rE   r   r   filehasattrr"   
parse_filecloseAttributeErrorIOError)r$   rD  r+   rC  	closefiler)   s        r   r%   zNBTFile.__init__`  sJ    	gt%%''' TW%%		 	$DM 400DII 	vv&& , &DIII 	w'' - ' 111DIIDII9 		OO IOO%%%%&0   DDIII		 		s   -D DDc                 v   d}|rt          |d          | _        n[|r&t          |d          r|j        | _        || _        d}n3|r1t          |d          r|j        | _        t          |          | _        | j        r	 t          | j                  }|j        | j        k    rWt          | j                  j        }| 	                    | j                   || _        |r| j        
                                 nt          d          d	S # t          $ r}t          d          d	}~ww xY wt          d
          )z-Completely parse a file, extracting all tags.TrA  r"   FrB  r}   z"First record is not a Compound Tagz,Partial File Parse: file possibly truncated.NzHNBTFile.parse_file(): Need to specify either a filename or a file object)r   rE  rF  r"   rD  rc   r#   rE   r   r,   rH  r   r   r]   )r$   rD  r+   rC  rK  r   r"   es           r   rG  zNBTFile.parse_file  ss   	 
	2 400DII 	2vv&& , &DIII 	2w'' - ' 111DI9 	Dty111:((%TY777=D&&ty111 $DI  *	))),<> > >   D D D(BD D DD ,  s   >BD 
D)D$$D)c                    d}|rd| _         || _        d}nw|r|| _         t          |d          | _        nX|rd| _         t          |d          | _        n8| j         rt          | j         d          | _        n| j        st          d          t	          | j                                      | j                   t          | j                                      | j                   |                     | j                   	 | j        	                                 n# t          t          f$ r Y nw xY w|r4	 | j                                         dS # t          t          f$ r Y dS w xY wdS )zWrite this NBT file to a file.TNFwb)rC  modezHNBTFile.write_file(): Need to specify either a filename or a file object)rD  rE  r   r]   rc   rE   r/   r   r"   flushrI  rJ  rH  )r$   rD  r+   rC  rK  s        r   
write_filezNBTFile.write_file  s   	 	 DMDIII 	$DM 400DII 		 DM t<<<DII] 	 55DII 	,  
 	((33349,,TY777DI&&&	IOO( 	 	 	D	 		!!!!!"G,   	 	s$    D D.-D.4E E$#E$c                     | j         r5d| j        j        | j         t          j        | j        t          |           fz  S d| j        j        t          j        | j        t          |           fz  S )z
        Return a string (ascii formated for Python 2, unicode
        for Python 3) describing the class, name and id for
        debugging purposes.
        z<%s(%r) with %s(%r) at 0x%x>z<%s with %s(%r) at 0x%x>)rD  r)   r   r  r"   rE   r3   s    r   rF   zNBTFile.__repr__  sl     = 		1'%ty"T((5  
 .')>	2d881  r   rV   )	r   r   r   r   r%   rG  rR  rF   rW   rX   s   @r   r?  r?  ]  s}        '') ) ) ) ) )V! ! ! !F! ! ! !F      r   r?  )6r   structr   r   r   gzipr   collections.abcr   r   r   ImportErrorcollectionssysversion_info_PY3rB   r7   r*  xranger   ra   rd   rh   rk   rn   rq   rt   r   r   r  r=  r   r   	Exceptionr   objectr   rJ   rZ   rc   rg   rj   rm   rp   rs   rv   r   r   r   r   r  r   r?  r   r   r   <module>r_     sa    0 / / / / / / /      FIIIIIIIIIII F F FEEEEEEEEEEEEF 




4 GJJE
	
	

	 	 	 	 	 	 	 	
9: 9: 9: 9: 9:& 9: 9: 9:x0 0 0 0 03 0 0 0$    s   "    |          4 4 4 4 4l 4 4 4    |                 7B 7B 7B 7B 7BS/ 7B 7B 7Bt5/ 5/ 5/ 5/ 5/C 5/ 5/ 5/p40 40 40 40 40S/ 40 40 40n) ) ) ) )h ) ) )ZP! P! P! P! P!sO P! P! P!fy! y! y! y! y!3 y! y! y!x Hh)YGXxIz>>z8X}m>+C C C C Cl C C C C Cs   
 //