
    iL                        S r SSKJr  SSKJr  SSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKrSSKrSSKr SSKJr  SSKrSrSqSqSrS	 rS
 rS rS rS rS rS r S r!S r"S r#S r$S r%S r&S r'S r(Sr)S r* " S S\+5      r,S r-S r.S r/S r0S  r1S! r2S" r3S(S# jr4S$ r5S)S% jr6\7S&:X  a  \6" \Rp                  S'S 5        gg! \ a     SSKJr   N! \ a
    SSKJr    Nf = ff = f)*a8  
Basic tools for working with LMDB.

    copy: Consistent high speed backup an environment.
        %prog copy -e source.lmdb target.lmdb

    copyfd: Consistent high speed backup an environment to stdout.
        %prog copyfd -e source.lmdb > target.lmdb/data.mdb

    drop: Delete one or more sub-databases.
        %prog drop db1

    dump: Dump one or more databases to disk in 'cdbmake' format.
        Usage: dump [db1=file1.cdbmake db2=file2.cdbmake]

        If no databases are given, dumps the main database to 'main.cdbmake'.

    edit: Add/delete/replace values from a database.
        %prog edit --set key=value --set-file key=/path \
                   --add key=value --add-file key=/path/to/file \
                   --delete key

    get: Read one or more values from a database.
        %prog get [<key1> [<keyN> [..]]]

    readers: Display readers in the lock table
        %prog readers -e /path/to/db [-c]

        If -c is specified, clear stale readers.

    restore: Read one or more database from disk in 'cdbmake' format.
        %prog restore db1=file1.cdbmake db2=file2.cdbmake

        The special db name ":main:" may be used to indicate the main DB.

    rewrite: Re-create an environment using MDB_APPEND
        %prog rewrite -e src.lmdb -E dst.lmdb [<db1> [<dbN> ..]]

        If no databases are given, rewrites only the main database.

    shell: Open interactive console with ENV set to the open environment.

    stat: Print environment statistics.

    warm: Read environment into page cache sequentially.

    watch: Show live environment statistics
    )absolute_import)with_statementN)BytesIO)StringIOi   zutf-8c                 p    [        5       R                  S[        5      " U 5      R                  [        5      $ )zhGiven either a Python 2.x or 3.x str, return either a str (Python 2.x)
or a bytes instance (Python 3.x).unicode)globalsgetstrencodeENCODING)ss    I/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/lmdb/tool.py	_to_bytesr   k   s'     9==C(+228<<    c                 R    U [         R                  ;   =(       a    [        U 5      S:  $ )z}Return ``True`` if the character `c` can be printed visibly and without
adversely affecting printing position (e.g. newline).   )string	printableord)cs    r   isprintr   q   s"        0SVb[0r   c           	         [        5       n[        S5      n[        U 5       GH  u  p4[        R                  S   S:  a  [        U5      nUS-  (       dt  U(       aE  UR                  [        S5      5        UR                  U5        UR                  [        S5      5        UR                  [        SU-  5      5        [        S5      nUS-  (       d  UR                  [        S	5      5        UR                  [        S
[        U5      4-  5      5        U[        U5      (       a  [        U5      O
[        S5      -  nGM     WS-  (       ap  SUS-  -
  nUR                  [        S5      U-  5        UR                  [        S	5      US-  -  5        UR                  [        S5      5        UR                  U5        UR                  [        S5      5        UR                  5       R                  [        5      $ )zMReturn a vaguely /usr/bin/xxd formatted representation of the bytestring
`s`. r      r   z  
z%07x:    z%02x.   )r   r   	enumeratesysversion_infochrwriter   r   getvaluedecoder   )r   siopridxchneeds         r   xxdr-   w   sh    *C	2BQ<A!#RBb		)D/*		"		)D/*IIi#./2BaIIin%		)Fc"gZ/01
wr{{im	#>   RxS2X		)D/D()		)C.DAI./		)D/"		"IIio<<>  **r   c                     [         R                  " 5       n SU l        S[        R	                  5       -   U l        U R                  SSSS9  U R                  SSS	S9  U R                  S
SSS9  U R                  SSSSSS9  U R                  SSSSS9  U R                  SSSS9  U R                  SSSSS9  U R                  SSSS S!S9  U R                  S"SS#S$S9  U R                  S%5      nUR                  S&SS'S(S)9  U R                  S*5      nUR                  S+S,S-S9  UR                  S.S,S/S9  UR                  S0S,S1S9  UR                  S2S,S/S9  UR                  S3S,S4S9  U R                  S55      nUR                  S6S7SS8S9  U R                  S95      nUR                  S:SS;S9  UR                  S<SS#S=S9  UR                  S>SS?S@S9  U $ )ANzpython -mlmdbz%prog [options] <command>
z-ez--envzEnvironment file to open)helpz-dz--dbz Database to open (default: main)z-rz--readzOpen environment read-onlyz-Sz
--map_sizeint10z#Map size in megabytes (default: 10))typedefaultr/   z-sz--use-single-file
store_truez@The database was created as a single file and not a subdirectory)actionr/   z-Ez--target_envz$Target environment file for "dumpfd"z-xz--xxdzPrint values in xxd formatz-Mz	--max-dbs   zMaximum open DBs (default: 128)z--out-fd   z"copyfd" command target fdzOptions for "copy" commandz	--compactFz!Perform compaction while copying.)r5   r3   r/   zOptions for "edit" commandz--setappendzList of key=value pairs to set.z
--set-filez%List of key pairs to read from files.z--addzList of key=value pairs to add.z
--add-filez--deletez"List of key=value pairs to delete.zOptions for "readers" commandz-cz--cleanz"Clean stale readers? (default: no)zOptions for "watch" commandz--csvz(Generate CSV instead of terminal output.z
--intervalzInterval size (default: 1sec)z--window
   z!Average window size (default: 10))optparseOptionParserprog__doc__rstripusage
add_optionadd_option_group)parsergroups     r   make_parserrD      sv   ""$F!FK07>>3CCFL
dG*DE
dF)KL
dH+GH
dLud@  B
d/]  _
 dNA  C
dGL7  9
dKeS<  >
jua7  9##$@AE	[u=  ?##$@AE	WX;  =	\(A  C	WX;  =	\(A  C	Z>  @##$CDE	T9\>  @##$ABE	W\D  F	\q9  ;	ZeR=  ?Mr   c                 v    U(       a  X-  n [         R                  R                  SU < S35        [        S5      e)Nzlmdb.tool: r   r7   )r"   stderrr%   
SystemExit)fmtargss     r   dierJ      s+    JJ#/0
Q-r   c           
      \   U  H  u  p#UR                  [        S[        U5      [        U5      4-  5      5        UR                  U5        UR                  [        S5      5        UR                  U5        UR                  [        S5      5        M     UR                  [        S5      5        g )Nz+%d,%d:z->r   )r%   r   len)cursorfpkeyvalues       r   dump_cursor_to_fprQ      sy    

9C#e*'==>?

4!

4!  HHYt_r   c                 4   0 nU  Hn  nUR                  S5      u  p4nU(       d  [        SU5        US:X  a  S nX1;   a  [        SU5        [        R                  U(       a  [	        U5      OS 5      U4X'   Mp     U(       d  [        R                  S 5      S4US'   U$ )N=z DB specification missing "=": %r:main:zDB specified twice: %rzmain.cdbmake)	partitionrJ   ENVopen_dbr   )rI   db_mapargdbnameseppaths         r   db_map_from_argsr]      s    FMM#.T2C8XF(#.++6i&7tLdS  KK-~>xMr   c                 >   [        U5      S:w  a  [        S5        US   n[        R                  R	                  U5      (       a  [        SU5        [        R
                  " U[        SS5      5        [        SU< S35        [        R                  X R                  S	9  g )
Nr7   z,Please specify output directory (see --help)r   z#Output directory %r already exists.0755   zRunning copy to z....)compact)rL   rJ   osr\   existsmakedirsr0   printrV   copyra   )optsrI   
output_dirs      r   cmd_copyri      sn    
4yA~:;aJ	ww~~j!!1:>KK
CN+	j
23HHZH.r   c                 *   U(       a  [        S5         [        R                  " U R                  SS5        [        R                  U R                  5        g ! [         a2    [
        R                  " 5       S   n[        SU R                  U5         N[f = f)Nz0"copyfd" command takes no arguments (see --help)wr   r7   zBad --out-fd %d: %s)	rJ   rb   fdopenout_fdOSErrorr"   exc_inforV   copyfd)rg   rI   es      r   
cmd_copyfdrr      sk    >?3
		$++sA&
 JJt{{	  3LLN1!4;;23s   "A 9BBc                 X   [        U5      n[        R                  SS9 nUR                  5        HL  u  nu  pV[	        US[
        5       n[        SU< S35        UR                  US9n[        X5        S S S 5        MN     S S S 5        g ! , (       d  f       Mh  = f! , (       d  f       g = f)NT)bufferswbzDumping to ...db)	r]   rV   beginitemsopenBUF_SIZEre   rM   rQ   )	rg   rI   rX   txnrZ   rx   r\   rN   rM   s	            r   cmd_dumpr~     s    d#F	4	 C"(,,.FJRdD(+rD23r*!&- ,+ #1 
!	 ++ 
!	 s#   *B	+B	4B	
BB
B)c                 $  ^ UR                   n[        R                  " US5      mU4S jnSn US-  nU" S5      nUS:X  a   U$ US:w  a  [        SU5         [	        U" S5      S5      n[	        U" S	5      S5      nU" W5      n	U" S5      S:w  a  [        SU5        U" W5      n
[        U	5      [        U
5      -   Xx-   :w  a  [        SU5        U" S5      S:w  a  [        SU5        U R                  XUS9  M  ! [
         a    [        S
U5         Nf = f)Nr7   c                 :   > SR                  [        TU 5      5      $ )Nr   )joiniter)r[   read1s    r   <lambda>(restore_cursor_from_fp.<locals>.<lambda>  s    SXXd5#&67r   r      
   +z$bad or missing plus, line/record #%d   ,r9      :z&bad or missing length, line/record #%dr   s   ->z)bad or missing separator, line/record #%dz"short key or data, line/record #%dz bad line ending, line/record #%drw   )read	functoolspartialrJ   r0   
ValueErrorrL   put)r}   rN   rx   r   
read_untilrec_nrplusklendlenrO   datar   s              @r   restore_cursor_from_fpr     s!   77DdA&E7JF
!Aw5=. M- T\6?	Bz$',Dz$',D 4j7e;VDDzHs4y dk24f=7e2F;b!3   	B8&A	Bs   $C6 6DDc                 h   U(       d  [        S5        [        [        R                  [        [        U5      5      n[        U5       HW  u  p4X   nUS:X  a  [        S5        [        SU< S35        [        R                  SS9 nUR                  U5        S S S 5        MY     g ! , (       d  f       Mk  = f)Nz3Must specify at least one sub-database (see --help)rT   zCannot drop main DBzDropping DB rv   Tr%   )	rJ   maprV   rW   r   r!   re   ry   drop)rg   rI   dbsr*   rx   namer}   s          r   cmd_dropr   5  s    AB
ckkC	40
2CS>y8%&T+,YYTY"cHHRL #" "
 #"s   B""
B1	c                     U R                   (       a!  [        S[        R                  5       4-  5        [        [        R	                  5       5        g )NzCleaned %d stale entries.)cleanre   rV   reader_checkreadersrg   rI   s     r   cmd_readersr   C  s1    zz)S-=-=-?,AAB	#++-r   c                 \   [        U5      n[        R                  SSS9 nUR                  5        HM  u  nu  pV[	        US[
        5       n[        SU< S35        [        X7U5      n[        SX4-  5        S S S 5        MO     S S S 5        g ! , (       d  f       Mi  = f! , (       d  f       g = f)NT)rt   r%   rbzRestoring from rv   zLoaded %d keys from %r)r]   rV   ry   rz   r{   r|   re   r   )	rg   rI   rX   r}   rZ   rx   r\   rN   counts	            r   cmd_restorer   I  s    d#F	4t	,"(,,.FJRdD(+r67.s;.%>? ,+ #1 
-	,++ 
-	,s#   *B
,B6B
BB
B+c                 l    [        S[        U 5      5       Vs/ s H  oU   XS-
     -
  PM     sn$ s  snf )Nr7   )rangerL   )hstis     r   deltar   S  s4    +0CH+=>+=aVca%j +=>>>s   1z
/sys/blockc                 (  ^ [         R                  R                  [        5      (       d  g [         R                  " U 5      nUR
                  S-	  < SUR
                  S-  < 3mU4S jn[         R                  " [        5       H  n[         R                  R                  [        U5      nU" U5      nU(       a  Us  $ [         R                  " U5       H7  n[         R                  R                  XC5      nU" U5      nU(       d  M3  Us  s  $    M     g )Nr`   :   c                 r  > [         R                  R                  U S5      n[         R                  R                  U5      (       aa  [	        U5       nUR                  5       R                  5       T:X  a)  [         R                  R                  U S5      sS S S 5        $  S S S 5        g g ! , (       d  f       g = f)Ndevstat)rb   r\   r   rc   r{   r   strip)rootpathdpathrN   devss      r   maybe_find_diskstat.<locals>.maybe`  sv    Xu-77>>%  e779??$,77<<&9 ,  !s   AB((
B6)rb   r\   rc   	SYS_BLOCKr   st_devlistdirr   )r\   str   r   basepathstatpath	base2pathr   s          @r   _find_diskstatr   Z  s    77>>)$$	Bii1nbii$&67D: 

9%77<<	40?OJJx(DX4IY'Hx	 ) &r   c                   $    \ rS rSrSrS rS rSrg)DiskStatteris  )readsreads_mergedsectors_readread_mswriteswrites_mergedsectors_writtenwrite_msio_countio_mstotal_msc                 D    [        U5      U l        U R                  5         g N)r{   rN   refresh)selfr\   s     r   __init__DiskStatter.__init__  s    t*r   c                    ^  T R                   R                  S5        [        T 5      R                  U 4S j[	        T R                   R                  5       R                  5       5       5       5        g )Nr   c              3   \   >#    U  H!  u  pTR                   U   [        U5      4v   M#     g 7fr   )FIELDSr0   ).0r   r   r   s      r   	<genexpr>&DiskStatter.refresh.<locals>.<genexpr>  s,      I&Gda  ;;q>3q62&Gs   ),)rN   seekvarsupdater!   r   split)r   s   `r   r   DiskStatter.refresh  sL    QT
 I&/0D0D0F&GI 	Ir   )rN   N)__name__
__module____qualname____firstlineno__r   r   r   __static_attributes__ r   r   r   r   s  s    FIr   r   c                   ^ ^^^ S mS mU 4S jnUU4S jnSSU4S j4SSU4S j4SSU4S	 j4S
SU" U4S j5      4SSU4S j4S
SU" U4S j5      4SSU4S j4S
SU" U4S j5      4SSU4S j4SSU4SSU" U5      4SSU4S j4SSU" U4S j5      4/nS m[        [        R                  5       5      nU(       a,  [        U5      mUS
SU" U4S  j5      4S
S!U" U4S" j5      4/-  nS#nU VVs/ s H  u  pxn[	        U5      PM     n	nnT R
                  (       aW  [
        R                  " [        R                  [
        R                  S$9n
U
R                  U VVs/ s H  u  pxoxPM	     snn5        S#n  [        R                  5       m[        R                  5       mT(       a  TR                  5         / n[        U5       H<  u  nu  pnX" 5       -  nUR                  U5        [!        X   [	        U5      5      X'   M>     T R
                  (       a  W
R                  U5        OU["        :w  d  U[$        S%-
  -  (       dp  [        U5       H<  u  nu  pn[        R                  R'                  UR)                  X   S&-   5      5        M>     [        R                  R'                  S'5        ["        n[        U5       H9  u  nn[        R                  R'                  UR)                  X   S&-   5      5        M;     [        R                  R'                  S'5        [*        R,                  " T R.                  5        US&-  nGM  s  snnf s  snnf ! [0         a     g f = f)(Nc                 F   >^ ^ [         R                  " 5       mU UU4S jnU$ )Nc                    > TR                  T" 5       5        [        T5      TR                  :  a  TR                  5         [        T5      S::  a  g[	        [        T5      5      [        [        T5      S-
  5      -  n U TR                  -  $ )Nr7   r   )r8   rL   windowpopleftsumr   floatinterval)nfunchistoryrg   s    r   
windowfunc-cmd_watch.<locals>.window.<locals>.windowfunc  sj    NN46"7|dkk)!7|q E'N#eCL1,<&==At}}$$r   )collectionsdeque)r   r   r   rg   s   ` @r   r   cmd_watch.<locals>.window  s    ##%	% r   c                      > T S   TS   -  S-  $ )N	last_pgnopsize      0Ar   )infor   s   r   r   cmd_watch.<locals>.<lambda>  s    T+&g6(Br   z%dDepthc                     > T S   $ )Ndepthr   r   s   r   r   r     s	    4=r   Branchc                     > T S   $ )Nbranch_pagesr   r   s   r   r   r     s
    D$8r   Leafc                     > T S   $ N
leaf_pagesr   r   s   r   r   r     s
    $|"4r   z%+dzLeaf/sc                     > T S   $ r  r   r   s   r   r   r     s
    4+=r   Oflowc                     > T S   $ Noverflow_pagesr   r   s   r   r   r     s    4(8#9r   zOflow/sc                     > T S   $ r  r   r   s   r   r   r     s    D1A,Br   Recsc                     > T S   $ Nentriesr   r   s   r   r   r     s	    $y/r   zRecs/sc                     > T S   $ r  r   r   s   r   r   r     s	    4	?r   Rdrsc                     > T S   $ )Nnum_readersr   r   s   r   r   r     s
    $}"5r   z%.2fEnvMbz%+.2fzEnvMb/sTxsc                     > T S   $ N
last_txnidr   r  s   r   r   r     s
    l!3r   zTxs/sc                     > T S   $ r  r   r  s   r   r   r     s
    $|*<r   zSctRd/sc                     > T R                   $ r   )r   statters   r   r   r     s    g.B.Br   zSctWr/sc                     > T R                   $ r   )r   r  s   r   r   r     s    g.E.Er   r   )quotingr   r7   r   )r   rV   r\   r   rL   csvwriterr"   stdout	QUOTE_ALLwriterowr   r   r   r!   r8   max_TERM_WIDTH_TERM_HEIGHTr%   rjusttimesleepr   KeyboardInterrupt)rg   rI   r   envmbcolsr   
term_width_headwidthsr   cntvalsr   rH   r   valr   r   r  s   `                @@@r   	cmd_watchr4    s   DD CE 
'01	(89	&45	(F#=>?	'9:	)V$BCD	&12	(F#:;<	&56	'5!	)VE]+	%34	'6"<=>D  Gchhj)Hh'Iv&BCDIv&EFG
 	

 J*./$JAQc$i$F/xxCJJ>5*!156
C88:D88:D!D(1$$$CtDFlC 	3s84	 )8
 xx%,SL1<L5M09$,,Ct

((FIM)BC 1@JJ$$T*!,J'oFAsJJ$$SYYvy1}%=> .

  &JJt}}%1HC3  0 6<  s   /L?M
5G
M 
MMc                 2   [         R                  5       n[         R                  5       nSnUS   US   -  n[        R                  " S[	        SU-  5      5      n[
        R
                  " 5       nU R                  (       a  [        U R                  SU5      nO[        U R                  S-   SU5      nUR                  5       U:  a'  UR                  U5        UR                  5       U:  a  M'  [        SUS	-  S
[
        R
                  " 5       U-
  -  4-  5        g )Ni   r   r   B r   z	/data.mdbzWarmed %.2fmb in %dmsr   i  )rV   r   r   arrayr   r(  use_single_filer{   envtellreadintore   )	rg   rI   r   r   bufsizelast_offsetbuft0rN   s	            r   cmd_warmrA    s    88:D88:DGw-${"33K
++c9Vg%56
7C	B$((D'*$(([($8
'')k
!
C '')k
!	
!!4499;+;#<
=> ?r   c           
      z   U R                   (       d  [        S5        [        R                  5       n[        R
                  " U R                   US   S-  U R                  SSSSS9n/ nU HX  nUS:X  a  S OUn[        R                  [        U5      5      nUR                  [        U5      5      nUR                  XWU45        MZ     U(       d6  UR                  S[        R                  S 5      UR                  S 5      45        U Hu  u  pgn[        SU< S	35        UR                  USS
9 n	[        R                  USS9 n
U
R                  5        H  u  pU	R                  XSS9  M     S S S 5        S S S 5        Mw     [        S5        UR                  S5        g ! , (       d  f       N7= f! , (       d  f       M  = f)Nz,Must specify target environment path with -Emap_sizer   FT)rC  max_dbssyncwritemap	map_asyncmetasyncrT   zWriting rv   )rx   r%   )rx   rt   )r8   z	Syncing..)
target_envrJ   rV   r   lmdbr{   rD  rW   r   r8   re   ry   rM   r   rE  )rg   rI   src_inforI  r   rY   r   src_dbdst_dbwtxnrtxnrO   rP   s                r   cmd_rewriterP    sh   ??:;xxzH4??$,Z$81$<#'<<e$(D$)	+J ChtCYt_-##IdO4

C()	  

Hckk$/1C1CD1IJK #f'(t4fd3t"&++-JCHHSH5 #0 4 54 !$ 
+OOD 43 54s$   *F+?*F)F+
F($F++
F:	c                    [        U5      S:  n[        R                  S[        S9 nU H  nUR	                  [        U5      5      nUc  [        U< S35        M1  U(       a  [        U< S35        U R                  (       a  [        [        U5      5        Mn  [        [        U5      5        M     S S S 5        g ! , (       d  f       g = f)Nr7   T)rt   rx   z	: missingr   )	rL   rV   ry   DBr
   r   re   r-   bytes)rg   rI   print_headerr}   rY   rP   s         r   cmd_getrU    s    t9q=L	4B	'3CGGIcN+E}s,-sn%xxc%j!eEl#  
(	'	's   B	B99
Cc           	         U(       a  [        S5        [        R                  SS9 nUR                  [        S9nU R
                  =(       d    /  H9  n[        U5      R                  [        S5      5      u  pVnUR                  XWSS9  M;     U R                  =(       d    /  H:  n[        U5      R                  [        S5      5      u  pVnUR                  XW5        M<     U R                  =(       d    /  H   nUR                  [        U5      [        S9  M"     U R                  =(       d    /  H\  n[        U5      R                  [        S5      5      u  pVn[        US5       n	UR                  XYR                  5       SS9  S S S 5        M^     U R                  =(       d    /  H]  n[        U5      R                  [        S5      5      u  pVn[        US5       n	UR                  XYR                  5       5        S S S 5        M_     S S S 5        g ! , (       d  f       M  = f! , (       d  f       M  = f! , (       d  f       g = f)	Nz;Edit command only takes options, not arguments (see --help)Tr   rw   rS   F)	overwriter   )rJ   rV   ry   rM   rR  addr   rU   r   setdeleteadd_filer{   r   set_file)
rg   rI   r}   rM   elemrO   r.  rP   r\   rN   s
             r   cmd_editr^  #  s   IJ		#r"HHNND%dO55inEMCEJJsUJ3 # HHNND%dO55inEMCEJJs" # ;;$"$CJJy~"J- % MM'R'D$T?44Ys^DLCDdD!R

3	U
; "! (
 MM'R'D$T?44Ys^DLCDdD!R

3	* "! (% 
	 "!
 "!) 
	s=   D<H0"HAH0 H7H0
HH0
H-(H00
H>c                 b    SS K nSS KnUR                  [        5       5      R	                  5         g )Nr   )codereadlineInteractiveConsoler	   interact)rg   rI   r`  ra  s       r   	cmd_shellrd  ?  s!    GI&//1r   c                     [         R                   " [        R                  5       5        [         R                   " [        R                  5       5        g r   )pprintrV   r   r   r   s     r   cmd_statrg  E  s&    
MM#((*
MM#((*r   c                      SS K nSS KnUR                  [        R                  R                  5       UR                  S5      n[        R                  " SU5      u  pEXT4$ ! [         a    U s $ f = f)Nr   1234hh)
fcntltermiosioctlr"   r!  fileno
TIOCGWINSZstructunpack	Exception)r3   rk  rl  r   heightwidths         r   _get_term_widthru  J  s`    KK

))+W-?-?HdA.} s   AA A.-A.c                      [        5       u  qqg r   )ru  r%  r&  )rI   s    r   _on_sigwinchrw  U  s     / 1Kr   c           	         [        5       nUR                  U 5      u  p#U(       d  [        S5        UR                  (       d  [        S5        [        R
                  " UR                  UR                  S-  UR                  (       + UR                  SUR                  S:H  S9q
UR                  (       a(  [        R                  [        UR                  5      5      q[        [         S5      (       a)  [         R                   " [         R"                  [$        5        [%        5         ['        5       R)                  SUS	   -   5      nU(       d  [        S
US	   < 35        U" X#SS  5        g )Nz%Please specify a command (see --help)z"Please specify environment (--env)i   FREAD)rC  subdirrD  createreadonlySIGWINCHcmd_r   zNo such command: r7   )rD   
parse_argsrJ   r:  rJ  r{   rC  r9  rD  r   rV   rx   rW   r   rR  hasattrsignalr}  rw  r	   r
   )argvrB   rg   rI   r   s        r   mainr  Z  s    ]F""4(JD348801 ))DHHt}}w'>4K_K_G_ LLfATVC ww[[477+,vz""foo|4N9==$q')*DT!W./ABxr   __main__r7   ))P      r   )9r=   
__future__r   r   r8  r   r  r   r:   rb   rf  r  r   rp  r"   r(  ior   r   ImportError	cStringIOrJ  r|   rV   rR  r   r   r   r-   rD   rJ   rQ   r]   ri   rr   r~   r   r   r   r   r   r   r   objectr   r4  rA  rP  rU  r^  rd  rg  ru  rw  r  r   r  r   r   r   <module>r     sJ  ./b ' %   
   	     
 &&  
	 =1+@.b&
/
."J@? 	 2I& I2Pf?&@$"+82
2
8 z!" y  &&& &%%&&s*    C C1CC-)C1,C--C1