
    hm                        d Z dZdZdZdZdZd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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ddlZdd	lmZmZ dd
lmZ ddlmZ ddlZddlZej                  dk(  Z  ejB                         dk(  Z"ejF                  Z$d Z% e%djM                   ejN                         djQ                  ejR                  D  cg c]
  }  e*|        c}       ejV                               d Z,e,xa-a.da/	 ddl0m1Z1m2Z2m3Z3 d Z6d Z7i Z8d Z9d Z:d Z;i Z<i Z=d Z>d Z? G d d e@      ZAd! ZBd" ZC G d# d$e@      ZD G d% d&e@      ZE G d' d(e3      ZF G d) d*ej                  ej                        ZId+ ZJeKd,k(  r eJ        yyc c} w #  e rdZ4ne"rdZ4ndZ4dZ5 e%e5jM                  ejV                  e4              xY w)-z1partyfuse: remote copyparty as a local filesystemzed <copyparty@ocv.me>i  MITz"https://github.com/9001/copyparty/z2.0z
2024-10-01    N)datetimetimezone)quote_from_bytes)unquote_to_byteswin32Darwinc            	          	 t        j                  t        |       i | y #  t        j                  t        dj	                  d | D                    fi | Y y xY w)N c              3   2   K   | ]  }t        |        y wN)str.0xs     N/jellyfin/media/venv/lib/python3.12/site-packages/copyparty/web/a/partyfuse.py	<genexpr>zprint.<locals>.<genexpr>F   s     (>AQ(>s   )builtinsprintlisttermsafejoin)argskwargss     r   r   r   B   sJ    KT
-f-Kx(>(> >?J6Js	   ! 7Az{} v{} @ {}.c                       y r    )as    r   nullfunr   R   s        F)FUSEFuseOSError
Operationsz=install https://github.com/billziss-gh/winfsp/releases/latestz"install https://osxfuse.github.io/z(apt install libfuse3-3
    modprobe fusez^[33m
  could not import fuse; these may help:
    {} -m pip install --user fusepy
    {}
[0mc                     t         j                  j                  }	 | j                  |d      j	                  |      S #  | j                  |d      j	                  |      cY S xY w)Nbackslashreplacereplace)sysstdoutencodingencodedecode)txtencs     r   r   r   m   sV    
**

C6zz#1299#>>6zz#y)0055s	    = #A"c                 6    | dz  } t        |r| |z  n| d       y )N
 end)r   )fmtr   s     r   threadless_logr4   u   s    4KC	Q#'CR(r    c                     t        j                         j                  } 	 t        |    S #  t	        j
                  dt	        j                  d|       dd        }dj                  d |D              dz   }|t        | <   |cY S xY w)Ns   BBBBBs   >Qr0   c              3   *   K   | ]  }d ||fz    yw)z[1;37;48;5;%dm%02xNr   r   s     r   r   zrice_tid.<locals>.<genexpr>   s     CA.!Q7Cs   z[0m)	threadingcurrent_threadident
riced_tidsstructunpackpackr   )tidcrets      r   rice_tidrB   }   su    

"
"
$
*
*C#MM(FKKs$;BC$@AggCCCiO
3
s
   ) AB c                 v    |r| |z  n| }t        dt        j                         dz  t               |fz  d       y )N%10.6f %s %s
  r0   r1   )r   timerB   )r3   r   msgs      r   	fancy_logrH      s3    #'CC	
diikC/SA
ArJr    c                  J    d d fd} t        j                  |        y )Nc                 N    t        |       j                  dd      t        |       fS Nutf-8surrogateescape)r   r*   len)texts    r   wtf8_enczregister_wtf8.<locals>.wtf8_enc   s#    4y):;SYFFr    c                 N    t        |       j                  dd      t        |       fS rK   )bytesr+   rN   )binarys    r   wtf8_deczregister_wtf8.<locals>.wtf8_dec   s#    V}##G->?VLLr    c                 4    t        j                  d      S )Nwtf-8)name)codecs	CodecInfo)encoding_namerT   rP   s    r   wtf8_searchz"register_wtf8.<locals>.wtf8_search   s    (AAr    )rX   register)r[   rT   rP   s    @@r   register_wtf8r]      s#    GMB OOK r    c           	      r    dj                  | D cg c]  }t        j                  ||       c}      S c c}w Nr0   )r   bad_goodgetr,   r   s     r   enwinrc      *    7741HLLA&4554   4c           	      r    dj                  | D cg c]  }t        j                  ||       c}      S c c}w r_   )r   good_badra   rb   s     r   dewinrh      rd   re   c                       e Zd Zd Zd Zd Zy)	RecentLogc                    || _         t        j                         | _        |j                  rt        |j                  d      nd | _        g | _        t        j                  | j                        }d|_
        |j                          y )Nwb)targetT)arr8   LockmtxlogfopenfqThreadprinterdaemonstart)selfrn   thrs      r   __init__zRecentLog.__init__   s\    >>#(*bggt$Tdll3
		r    c                    |r||z  n|}dt        j                          dz  t               |fz  }| j                  rt        j                  t
              }d|j                  |j                  dz  |j                  z   |j                  dz  |j                  z   dz  |j                  z   |j                  |fz  }| j                  j                  |j                  d             | j                  5  | j                   j#                  |       t%        | j                         dkD  r| j                   dd  | _        d d d        y # 1 sw Y   y xY w)NrD   rE   z%d-%04d-%06d.%06d %sd   rL      i)rF   rB   rs   r   nowUTCyearmonthdayhourminutesecondmicrosecondwriter*   rp   rt   appendrN   )ry   r3   r   rG   zdfmsgs         r   putzRecentLog.put   s    cAg$))+"3XZ!EE66c"B)3'3*c1BII=- D FFLLW-.XX 	&FFMM#466{S 	& 	& 	&s   ,AD==Ec                     	 t        j                  d       | j                  5  | j                  }|s
	 d d d        ;g | _        d d d        t	        dj                        d       f# 1 sw Y   &xY w)Ng?r0   r1   )rF   sleeprp   rt   r   r   )ry   rt   s     r   rv   zRecentLog.printer   sh    JJt FF 
  "''!*"%  s   A(A((A1N)__name__
__module____qualname__r{   r   rv   r   r    r   rj   rj      s    &&
&r    rj   c                  >    t        j                         j                  S r   )r8   r9   r:   r   r    r   get_tidr      s    ##%+++r    c                     | j                  dd      j                  dd      j                  dd      j                  dd      j                  d	d
      j                  dd      S )Nz&lt;<z&gt;>z&quot;"z&#13;z&#10;r/   z&amp;&)r&   )r,   s    r   html_decr      sQ    FC 			3		$		$		#	r    c                       e Zd Zd Zy)	CacheNodec                 R    || _         || _        t        j                         | _        y r   )tagdatarF   ts)ry   r   r   s      r   r{   zCacheNode.__init__   s    	))+r    N)r   r   r   r{   r   r    r   r   r      s    r    r   c                   L    e Zd Zd Zd ZddZddZd Zd Zd Z	d	 Z
d
 Zd Zy)Gatewayc                    |j                   }d|vrd|z   }|| _         |j                  | _        t        j                  j                  |      }|j                  j                  d      | _        | j                  rd| j                  dnd| _	        	 |j                  j                  d      \  | _        | _        t        | j                        | _        d | _        |j                  j%                         dk(  | _        | j&                  rwd
d l}|j*                  r|j-                         | _        nQ|j.                  rE|j1                  |j2                        | _        | j"                  j5                  |j.                         i | _        d| _        d| _        y #  |j                  | _        |j                  dk(  rd| _        n"|j                  dk(  rd| _        nt!        d	      Y xY w)Nz://zhttp:///:httpP   httpsi  zbad url?r   z?rawz?ls&lt&dots)base_urlr   passwordurllibparseurlparsepathstripweb_rootSRSnetlocsplitweb_hostweb_portintscheme	Exceptionssl_contextloweruse_tlsssltd_create_unverified_contextte
SSLContextPROTOCOL_TLSload_verify_locationsconnsfsufdsuf)ry   rn   zsuir   s        r   r{   zGateway.__init__   sl   [[?RB\\""2&c*04T]],3
	,+-99??3+?(DM4=.DM  yy(G3<<uu#&#A#A#C #&>>#2B2B#C   66ruu=
	!	/	,IIDMyyF" "g% #
++s   AF AG$c                 >    |j                  d      }t        |d      S )NrV   r   )safe)r*   quotery   r   s     r   quotepzGateway.quotep$  s    {{7#T$$r    Nc                    |xs
 t               }	 | j                  |   S #  t        dj                  | j                  | j
                               i }| j                  st        j                  j                  }n4t        j                  j                  }| j                  rd| j                  i} || j                  | j
                  fddi|}|| j                  |<   |cY S xY w)Nznew conn [{}] [{}]contexttimeouti  )r   r   infoformatr   r   r   r   clientHTTPConnectionHTTPSConnectionr   )ry   r?   r   Cconns        r   getconnzGateway.getconn(  s    WY	::c?"	%,,T]]DMMJKD<<KK..KK//##%t'7'78DT]]DMMG3G$GD"DJJsOKs
    B?C c                     |xs
 t               }	 | j                  |   j                          | j                  |= y #  Y y xY wr   )r   r   close)ry   r?   s     r   	closeconnzGateway.closeconn<  s<    WY	JJsO!!#

3	s   *; ?c                    t               }| j                  r dj                  d| j                  g      |d<   	 | j                  |      } |j                  ||fd|i| |j                         S # t        $ r}t        d|       Y d }~nd }~ww xY w| j                  |       	 | j                  |      } |j                  ||fd|i| |j                         S #  t        dt        j                         z          | j                  rE| j                  s9dd l}|j                  | j                  | j                   f      }	t        d|	z           xY w)	N=cppwdCookieheaderszHTTP %rzhttp connection failed:
r   z)server certificate probably not trusted:
)r   r   r   r   requestgetresponser   r   r   	traceback
format_excr   r   r   get_server_certificater   r   )
ry   methr   r   r   r?   r@   exr   certs
             r   sendreqzGateway.sendreqD  s'   i== #'4==)A BGH	 S!AAIIdD<'<V<==?" 	 B	  	s	S!AAIIdD<'<V<==?"	,y/C/C/EEF||D$4$4114==$--2PQADHIs$   6A/ /	B8B		B#6C A4Ec                    t         rt        |      }|rdnd}| j                  || j                  |fz        | j                  z   }| j                  d|i       }|j                  dk7  ra| j                          t        d|j                  |       |j                  dk(  rt        j                  nt        j                  }t        |      |j                  dd      }|d	k(  r| j                  }n&t        d
||       t        t        j                        	  ||      S #  t        d|t        j                                 t        t        j                        xY w)Nz%s%s/z%s%sGETr~   zhttp error %s reading dir %ri  zContent-Typer0   zapplication/jsonzlistdir on file (%s): %rzparser: %r
%s)r`   rh   r   r   r   r   statusr   r   errnoENOENTEIOr"   	getheader	parse_jlsr   r   )ry   r   r   web_pathrerrctypeparsers           r   listdirzGateway.listdir_  s   ;DW&;;rTXXt$445		ALL"-88s?NN/8D"#((c/%,,uyyCc""NB/&&^^F+UD9ell++	)!9	)!4)=)=)?@eii((s   D :Ec                    t         rt        |      }| j                  | j                  |      | j                  z   }d||dz
  fz  }d}t        |||z
  dz  ||dz
  |       | j                  d|d|i      }|j                  t        j                  j                  k7  rLd}t        ||j                  ||t                      | j                          t        t        j                        |j!                         S )Nzbytes=%d-%d   zDL %4.0fK[36m%9d-%-9d[0m%rg      @r   Rangez,http error %d reading file %r range %s in %s)r`   rh   r   r   r   r   r   r   r   r   PARTIAL_CONTENTrB   r   r"   r   r   read)ry   r   ofs1ofs2r   	hdr_rangetr   s           r   download_file_rangezGateway.download_file_rangey  s    ;D;;489DIIE!T4!8$44	0Q&dQh=LL7I*>?88t{{222>AAHHh	8:>NNeii((vvxr    c                    d}	 |j                  d      }|sn||z  }t        j                  |j                  d            }i }| j                  |d   g| j
                  |d   gfD ]m  \  }}|D ]c  }t        |d   j                  d      d         j                  d	      j                  d
      }t        rt        |      } ||d   |d         ||<   e o |S )Nr    i   rL   dirsfileshref?r      /rV   r   sz)r   jsonloadsr+   stat_dir	stat_fileunquoter   rstripr`   rc   )	ry   sckrspbufrA   statfunnodesnfnames	            r   r   zGateway.parse_jls  s    ((9%C3JC	  jjG,-]]CK(^^S\*
 		7NGU  7&	 4Q 78??ELLWU!%LE$QtWag6E
7			7 
r    c                 X    t         j                  dz  dd||||t        |dz   dz        dS )Nim         st_modest_uidst_gidst_sizest_atimest_mtimest_ctime	st_blocks)statS_IFDIRr   ry   r   r  s      r   r
  zGateway.stat_dir  ;    ||e+b3h#-.	
 		
r    c                 X    t         j                  dz  dd||||t        |dz   dz        dS )Ni$  r  r  r  r  )r"  S_IFREGr   r$  s      r   r  zGateway.stat_file  r%  r    r   )r   r   r   r{   r   r   r   r   r   r   r   r
  r  r   r    r   r   r      s5    %"P%(6)4&0



r    r   c                       e Zd Zd Zd Zd Zd Zd ZddZddZ	dd	Z
dd
ZdZdZdZdZdZdZdZdZdZej,                  dk(  rd Zd Zd Zd Zd Zd Zd Zyy)CPPFc                 .   t        |      | _        d| _        |j                  | _        |j
                  | _        |j                  | _        g | _	        t        j                         | _        g | _        t        j                         | _        t        d       y )N   up)r   gwjunk_fh_ctrcds
t_dircachecdn
n_dircachecfn_filecachedircacher8   ro   dircache_mtx	filecachefilecache_mtxr   )ry   rn   s     r   r{   zCPPF.__init__  sj    "+&&&&55%NN,&^^-T
r    c                    g }| j                   5  t        | j                        D ]  \  }}|j                  \  }}|t	        |j
                        z   }dj                  |t	        |j
                        |||j                  dd      j                  dd            }|j                  |        	 d d d        dj                  |      S # 1 sw Y   xY w)Nz
{:<2} {:>7} {:>10}:{:<9} {}r   z\rr/   z\nr0   )
r8  	enumerater7  r   rN   r   r   r&   r   r   )ry   rG   r  cn
cache_pathcache1cache2r   s           r   	_describezCPPF._describe  s     	"4>>2 
2%'VV"
F#bgg,.3::L&&tU3;;D%H 

1
	 wws|	 	s   BCCc                 H   t        j                          }d}| j                  D ]%  }||j                  z
  | j                  k  r n|dz  }' |dkD  r| j                  |d | _        yt	        | j                        | j
                  kD  r| j                  j                  d       yy)znot threadsafer   r   N)rF   r5  r   r0  rN   r2  pop)ry   r   cutoffr;  s       r   clean_dircachezCPPF.clean_dircache  s    iik-- 	BRUU{doo-aKF	
 A: MM&'2DM$//1MMa  2r    c                     | j                   5  | j                  D ]N  }|j                  |k(  st        j                         |j                  z
  | j
                  k  r|c cd d d        S  n d d d        y # 1 sw Y   y xY wr   )r6  r5  r   rF   r   r0  )ry   dirpathr;  s      r   get_cached_dirzCPPF.get_cached_dir  ss     	mm 66W$yy{RUU*doo=!			 	
 		 	 s   A41A4(A44A=c                 	   d }d }d}t         rt        d|||| j                                | j                  5  | j                  D ]  }|dz  }|j
                  \  }	}
|	|k7  r|
t        |j                        z   }||
k  s||k\  rA||
k  r||kD  rL||
k\  r||k  rz| j                  d | | j                  |dz   d  z   |gz   | _        ||
z
  }|||z
  z   }t        d||
|t        |j                        ||||z
         |j                  || c cd d d        S ||k  ra|j                  d ||
z
   }|rt        |      t        |      k  r4t        d||
|t        |j                        ||
||
z
  t        |      	       |}6||
k\  rl|j                  t        d||z
         d  }|rt        |      t        |      k  r4t        d||
|t        |j                        ||||z
  t        |      	       |}d||||z
  |
|||
z
  ||
z
  ||z
  | j                         f	z  }t        |       t        t        j                         	 d d d        |r/|r-t        |      t        |      z   ||z
  k(  rt        d	       ||z   S |r|rt        |      t        |      k  r|||z
  z   t        |      z
  }t        ||d
z
        }|dk  rd}||z
  }t        rd}t        |t        |      ||||z
  |       | j                  j                  |||      }t        |      ||z
  k(  r
||d  |z   }nJ|||z
  d  }d}t        |||t        |      t        |             n|r|t        |      z   }|dk  rt        ||dz         }nt        ||dz         }||kD  r|}||z
  t        |      z
  }d}t        |t        |      ||||z
  |       | j                  j                  |||      }||d | z   }n||z
  dk  r/||dz
  k  r|dz
  }n|dz
  }|dk\  r|dz   }n|dkD  r|dz   }n
|dz   }n|}|}|dk  rd}||kD  r|}||z
  }||z   |z
  }d}t        |||||z
  ||       | j                  j                  |||      }||| }t!        ||g|      }| j                  5  t        | j                        | j"                  k\  r| j                  dd  |gz   | _        n| j                  j%                  |       d d d        |S # 1 sw Y   xY w# 1 sw Y   |S xY w)Nzcache request %d:%d |%d|%sr   z'found all (#%d %d:%d |%d|) [%d:%d] = %dz0found cdr (#%d %d:%d |%d|) [:%d-%d] = [:%d] = %dr   z4found car (#%d %d:%d |%d|) [-(%d-%d):] = [-%d:] = %dz/cache fallthrough
%d %d %d
%d %d %d
%d %d --
%sz<cache> have bothi   z$<cache> cdr %d, car %d:%d |%d| [%d:]z0remote truncated %d:%d to |%d|, will return |%d|i      z$<cache> car %d, cdr %d:%d |%d| [:%d]i  P i   i   i  @ z<cache> %d:%d |%d| [%d:%d])is_dbgdbgr?  r8  r7  r   rN   r   maxr   r"   r   r   minr-  r   r   r4  r   )ry   r   get1get2file_szcarcdrncnr;  r<  r=  r>  buf_ofsbuf_endr   rG   h_endh_ofsr   r  rA   s                        r   get_cached_filezCPPF.get_cached_file  s   ,dD'4>>CST U	-nn T-q%'VV"
F%#bgg,.6>TV^&=TF] 6>dfn t,t~~cAgi/HHB4O N #VmG%5GABGG')	 777733GU	- U	-J 6>$-0A#c(SV"3N""L " 6MF
  6>#a$"7 8 :;A#c(SV"3R""L" "TMF
  K4KVO6M6MNN$
O 
 S	!%)),,iT-U	-n 33s8c#h.$+=#$9#SCH!4D4K(3s83Eego.EqyUlG:As3xuu}gF''--dE5AC3x55=('(mc)$,.)FQuc#hC93s8OEhD%("23 D%("23wd{c#h.G6A3s8UE55='B''--dE5ACHW%C d{X% 'A+% 7NE 7NE 8# 8OEAX 8OE 7NE qywUlGnt+G,A5%A''--dE5ACgg&Ce}c* 	*4>>"d&6&66!%!3rd!:%%b)		* 
_U	- U	-R	* 
s    CSD$S;AS)S&)S3Nc                 F   |j                  d      }t        d||       | j                  j                  |      }| j                  s|S | j
                  5  t        ||      }| j                  j                  |       | j                          d d d        |S # 1 sw Y   |S xY w)Nr   zreaddir %r [%s])
r   rK  r-  r   r2  r6  r   r5  r   rC  )ry   r   fhrA   r;  s        r   _readdirzCPPF._readdir  s    zz#tR(ggood#J 	"4%BMM  $!	" 
	" 
s   8BB c                 B    ddgt        | j                  ||            z   S )Nr   z..)r   r[  ry   r   rZ  s      r   readdirzCPPF.readdir  s!    T{T$--b"9:::r    c                 |   d}d}||kD  rt        d||dz	         |}|j                  d      }||z   }| j                  |      d   }t        d|||||       ||kD  r|}t        d||z
  |       |d	k(  s||k\  ry
| j                  r||k  r| j                  ||||      }	|	S | j                  j                  |||      }	|	S )NrI  i    ztruncate |%d| to %dMiB   r   r  zread %r |%d| %d:%d max %dztruncate to |%d| :%dr   r    )r   r   getattrrK  r4  rX  r-  r   )
ry   r   lengthoffsetrZ  req_max	cache_maxr   rP  rA   s
             r   r   z	CPPF.read  s    !#	G)67b=AFzz#,,t$Y/'vvtWM'>D&vt<a<6T>) 3&&tVT7CC 
 ''--dFDAC
r    c                 x   t        d|       t        rt        |      }|j                  d      }|s<| j                  j                  t        j                         d      }t        d|       |S 	 |j                  dd      \  }}| j                  |      }|r|j                  }nt        d       | j                  |      }	 ||   }t        d|       |S #  d}|}Y XxY w#  Y nxY wt        }t        r)|j                  d      d	   j                  d
      rt         } |d|       t        t         j"                        )Nz
getattr %rr   i   z/=%rr   r0   z
cache misszs=%rrH  z._z
=ENOENT %r)rK  WINDOWSrc   r   r-  r
  rF   rsplitrF  r   r[  r   MACOSr   
startswithr"   r   r   )	ry   r   rZ  rA   rE  r  r;  dentsfuns	            r   ra  zCPPF.getattr  s   L$;Dzz#''""499;5CJ	![[a0NGU
   )GGEMM'*E	,CJ	GE	TZZ_R(33D9CL$%,,''s   .C  C CC"r   c                 $   	 | j                  |      }|d   dk  r
t               | xj                  dz  c_        | j                  dkD  rd| _        | j                  S # t        $ r*}t        d|       t	        t
        j                        d }~ww xY w)Nr  r   r   i }     zopen ERR %r)ra  r   r.  r   r"   r   r   )ry   r   r   r   s       r   _openz
CPPF._open  s    0LL&Y<1$#+%  A% ##e+'(D$''' 0]B'!%,,//0s   AA 	B%%B

Bc                 >    t        d||       | j                  |      S )Nzopen %r [%s]rK  ro  )ry   r   flagss      r   rr   z	CPPF.open  s    e,::d##r    c                 <    t        d|       | j                  |      S )Nz
opendir %rrq  r   s     r   opendirzCPPF.opendir"  s    d#::d##r    c                     t        d||       y )Nzflush %r [%s]rK  r]  s      r   flushz
CPPF.flush&  s    r*r    c                     t        d||       y )Nzrelease %r [%s]rv  ry   inofis      r   releasezCPPF.release)  s    !3+r    c                     t        d||       y )Nzreleasedir %r [%s]rv  ry  s      r   
releasedirzCPPF.releasedir,  s    $c2.r    c                     t        d||       	 | j                  |      }|d   dk  r
t               y #  t        t        j
                        xY w)Nzaccess %r [%s]r  r   )rK  ra  r   r"   r   r   )ry   r   moder   s       r   accesszCPPF.access/  sQ     $-0LL&Y<1$#+% %0!%,,//s	   #3 Ar   )r   r   r   r{   r?  rC  rF  rX  r[  r^  r   ra  r  rw  getxattr	listxattrrr   rt  r|  r~  statfsr'   platformro  r   r    r   r)  r)    s     !un ;8$(L FEHIDGGJF ||w	0 	$	$	+	,	/	0G r    r)  c                       e Zd Zy)TheArgparseFormatterN)r   r   r   r   r    r   r  r  9  s     	r    r  c                     t        j                  dd       dj                  t        t              } dt
        j                  v rt        d|        y d}d}d}d	}t        r|d
z  }dt        j                  j                  t              z   dz   }dg}t        r|j                  d       t        j                  t         d| z   d|z   |j#                  |      z         }|j%                  dt&        d       |j%                  dt&        |dz          |j%                  ddd       |j)                  d      }|j%                  ddd       |j%                  dd d!"       |j)                  d#      }|j%                  d$d%t*        |d&'       |j%                  d(d)t*        |d*'       |j%                  d+d,t,        |d-'       |j)                  d.      }|j%                  d/d d0"       |j%                  d1d d2"       |j%                  d3d d4"       |j%                  d5d6t&        d7d8'       |j)                  d9      }|j%                  d:d d;"       |j%                  d<d d="       |j/                         }	|	j0                  rd>|	_        |	j2                  rt5        |	      j6                  nt8        }
|	j:                  r|
a|
ad>a n|	jB                  s|
a|	jD                  r}|	jD                  jG                  d?      rb|	jD                  dd  }t=        d@|       tI        |dA      5 }|jK                         jM                  dB      jO                         |	_"        d d d        t        rt        jP                  dC       dDD ]   }tS        tU        |      dEz         tV        |<   " tY        dFdG      D ]#  }tS        |dHz         tV        tS        |dIz         <   % tV        j[                         D ]  \  }}|t\        |<    t_                d>d>dJ}|	j`                  rd>|dK<   |	jb                  rd>|dL<   te        tg        |	      |	jh                  fdMdNi| y # 1 sw Y   xY w)ON19970815z%Y%m%dz	{0}, v{1}z	--version	partyfuse      r   zlocal directoryz
 or DRIVE:z
  z  z(http://192.168.1.69:3923/music/  ./musicz#http://192.168.1.69:3923/music/  M:z2mount a copyparty server as a local filesystem -- zexample:)formatter_classdescriptionepilogr   zremote copyparty URL to mount)typehelp
local_pathz to mount it onz-aPASSWORDzpassword or $filepath)metavarr  z	https/TLSz-tePEMFILEzcertificate to expect/verifyz-td
store_truezdisable certificate check)actionr  z
cache/perfz-cdnDIRSz(directory-cache, max num dirs; 0=disable)r  r  defaultr  z-cdsSECSz directory-cache, expiration timez-cfBLOCKSz"file cache; each block is <= 1 MiBloggingz-qquietz-dzdebug/verbosez
--slowtermz'only most recent msgs; good for windowsz--logfFILEr0   zlog to FILE; enables --slowtermfusez--othztell FUSE to '-o allow_other'z
--nonemptyztell FUSE to '-o nonempty'T$zreading password from file %rrbrL   remz<>:"\|?*i   r      i   i   )
foreground	nothreadsallow_othernonemptyr)   rV   )5rF   strptimer   
S_BUILD_DT	S_VERSIONr'   argvr   rg  osr   basename__file__r   argparseArgumentParserr  r   add_argumentr   add_argument_groupfloatr   
parse_argsrq   slowtermrj   r   rH   dr   rK  rJ  rt   r   rj  rr   r   r+   r   systemchrordr`   rangeitemsrg   r]   othr  r!   r)  r  )vernfr1  r/  whereex_preexamplesapap2rn   loggerfnrs   chr  kvr   s                     r   mainr  ?  s   MM*h'


Z
3Cchhk3 
B C
CEbgg&&x0047F:;H=>		 	 ,H3NF"V[[%::
B OOJS/NOOOOLs9J1JOKOOD*3JOK 


,CUI4RSU<6QR



-CVV%KuvVV%KmnUH3Imn


	
*CT,W=T,_E\,=fgXvCJkl



'CW\8WX\,=YZ	B 
ww #%++Yr]9F	ttTT	tt$TT!"X,b1"d^ 	4q668??7+113BD	4 
		% 	1B s2w/0HRL	1
 q% 	8A(+AJHSV_%	8 NN$ 	DAqHQK	 OT2D	vv"]	{{Zb2==;7;d;5	4 	4s   3P88Q__main__)L__doc__
__author____copyright____license____url__r  r  r  calendarrX   r   r  r  r  rer"  r<   r'   r8   rF   r   urllib.parser   r   r   r   r   r   r  r   http.clientr   rg  r  ri  utcr   r   r   python_implementationr   version_infor   
executabler   r   rK  rJ  r  r!   r"   r#   libfusemr   r4   r;   rB   rH   r]   r`   rg   rc   rh   objectrj   r   r   r   r   r)  RawTextHelpFormatterArgumentDefaultsHelpFormatterr  r  r   )r   s   0r   <module>r     s   8$

.	
4      	  	   
     ' 2 4  
,,'
!X%llK &&&(#"2"23Q#a&34	  s	
22$6)
 
K

! 66(& (&~, 
f 
Dy0: y0x	!!8#I#I	h<V zF } 4 
Q	6=	A
 
!((3>>7
+,	s   F
F 3G