@,bi9GSrSrSrSrSrSrSrSrSrSSK r SSK r SSK r SSK r SSK r SS K 7 /S QrS rS rS rSrSrSr\ R*R\lSrSSKJr SrSrSrSrSrSq Sq!Sr"SSKJ#r$ Sr%SS.Sjr&\ RNS :Hr(S#S!jr)S"r*g!\a SrNIf=f!\a Sr$Nr9 startswith)r?r%s r8r r =s' ! A 1+C << r:cx[R"U5n[U5nUnUH]n[R"U5nURU5(dU(dUnM:UR U5(aX4- nMVX2U-- nM_ U$![ [ [4a [R"SU/UQ76 ef=f)zJoin two or more pathname components, inserting '/' as needed. If any component is an absolute path, all previous path components will be discarded. An empty last part will result in a path that ends with a separator.r ) r=r>r9rAendswith TypeErrorAttributeError BytesWarning genericpath_check_arg_types)apr%r7bs r8r r Hs ! A 1+C D A ! A||C  s## a K ~| 4$$VQ33 s A#B /B9c[R"U5n[U5nURU5S-nUSUXSpCU(a"X1[ U5-:waUR U5nX44$)z|Split a pathname. Returns tuple "(head, tail)" where "tail" is everything after the final slash. Either part may be empty.Nr=r>r9rfindlenrstrip)rJr%iheadtails r8r r dsc ! A 1+C  qA2A"$ CI %{{3 :r:c[R"U5n[U[5(aSnSnOSnSn[R "XSU5$)Nr3.rr)r=r>r4r5rG _splitext)rJr%r)s r8rrusE ! A!U  v 66r:c<[R"U5nUSSU4$)zFSplit a pathname into drive and path. On Posix, drive is always empty.Nrr<)rJs r8r r s  ! A Ra5!8Or:)_path_splitroot_exc[R"U5n[U[5(aSnSnOSnSnUSSU:waX"U4$USSU:wd USSU:XaX!USS4$X SSUSS4$) zWSplit a pathname into drive, root and tail. The tail contains anything after the root.r3r:rNrM)r=r>r4r5)rJr%emptys r8r r s IIaL a  CECE Ra5C<? " qVs]a!fmqu$ $BQ%12& &r:ct[R"U5n[U5nURU5S-nXS$)z)Returns the final component of a pathnamerMN)r=r>r9rO)rJr%rRs r8rrs3 ! A 1+C  qA R5Lr:c[R"U5n[U5nURU5S-nUSUnU(a"X1[ U5-:waUR U5nU$)z-Returns the directory component of a pathnamerMNrN)rJr%rRrSs r8rrsX ! A 1+C  qA Ra5D CI %{{3 Kr:cX[R"U5n[R"UR5(ag[R"U5n[U[5(a [US5nO [US5n[R"U5nURUR:g=(d URUR:H$![ [ 4a gf=f![ a6 [U5n[R"U5nN}![ a gf=ff=f)z$Test whether a path is a mount pointF..r)r=lstatstatS_ISLNKst_modeOSError ValueErrorr>r4r5r r+st_devst_ino)r7s1parents2s r8rrs XXd^ << # # $ 99T?D$dE"dD! XXf  99 ! ;RYY"))%;;/ Z  &! &!B   s;CC)C&%C&)D)?D D%!D)$D%%D)c[R"U5n[U[5(aSnOSnUR U5(dU$[ U5nUR US5nUS:a [U5nUS:Xa]S[R;a5SSK nUR[R"55RnOg[RSnOSSSK nUSUn[U[5(a[R"U5nUR!U5nURnUc["R$S:XaU$[U[5(a[R&"U5nUR)U5nXPUS-=(d U$![a Us$f=f![a Us$f=f![a Us$f=f![a Us$f=f)zKExpand ~ and ~user constructions. If user or $HOME is unknown, do nothing.~~rMrHOMENvxworks)r=r>r4r5rAr9findrPenvironpwd ImportErrorgetpwuidgetuidpw_dirKeyErrorfsdecodegetpwnamsysplatformfsencoderQ)r7tilder%rRruuserhomenamepwents r8rrs 99T?D$ ??5 ! ! 4.C #qA1u IAv  #  << 4;; zz&)H  Aay dE " ";;t$D LL&E <<CLLI5 $;;x(s#H ABx  'C'C        K  K sHF.F$F6G F! F!$ F32F36 GG GGz\$(\w+|\{[^}]*\}?)c ^^^[R"U5n[U[5(akSU;aU$[(d<SSKnUR [R5UR5Rq[nSmSm[[SS5mO[SU;aU$[(d.SSKnUR [UR5Rq [nSmS m[RmUUU4S jnU"X05$) zVExpand shell variables of form $var and ${var}. Unknown variables are left unchanged.$rN{}environb${}c6>USnURT5(a URT5(dUS$USSnTc=[R"[R[R "U55nU$TUnU$![ a USs$f=f)NrMr)rArCr=rrtr{rz)mrvalueendrtstarts r8replexpandvars..repl=st ??5 ! !==%%t ":D  BJJr{{4/@$AB L   L Q4K s>B>BBB)r=r>r4r5_varsubbrecompile _varpatternencodeASCIIsubgetattr_varsubrt)r7rrrrrtrs @@@r8rr#s 99T?D$ t Kx zz+"4"4"6AEEH"j$/ d?Kw jjbhh7;;G** t?r:)_path_normpathc[R"U5n[U[5(aSnSnSnOSnSnSnU(dU$[ U5upEnUR U5n/nUH`nU(aX:XaMX:wdU(dU(aU(aUSU:XaUR U5 MGU(dMPUR5 Mb UnXQRU5-nU=(d U$)z0Normalize path, eliminating double slashes, etc.r3rVrbrrrr) r=r>r4r5r r appendpopr ) r7r%dotdotdot_initial_slashescomps new_compscomps r8rrXsyy dE " "CCFCCFJ#,T? D 3 D4;y "  7  & %0{sr:cD[R"U5n[U[5(a6UR S5(d[ [R "5U5nO5UR S5(d[ [R"5U5n[U5$)zReturn an absolute path.r3r) r=r>r4r5rAr getcwdbgetcwdrr6s r8rrusi 99T?D$t$$ d+Ds## T*D D>r:F)strictct[R"U5n[U[5(aSnSnSn[RnOSnSnSn[R nU[ La [nSnOU(aSnO[nS nURU5S S S 2n[U5n URU5(aUOU"5n 0n U (GaUR5n U cXUR5'M/U S -n U (aX:XaMBX:XaU S U RU5=(d Un MfX:XaX-n OX-U -n [R"U 5Rn[ R""U5(dkU(a_U (aX[ R$"U5(d=[[&R([R*"[&R(5U 5eU n GMX;a,Xn U bGM-U(a[R "U 5 U n GMO[R,"U 5nURU5(aUn Uc&S X'UR/U 5 UR/S 5 URU5S S S 2nUR1U5 U [U5- n GMU $!Ua Of=fU n U (aGMN) zlReturn the canonical path of the specified filename, eliminating any symbolic links encountered in the path.r3rVrbrrrTNrrM)r=r>r4r5rrr1FileNotFoundErrorrgr rPrArrindexrcrfrdreS_ISDIRerrnoENOTDIRstrerrorreadlinkrextend)filenamerr%r#r$r ignored_errormaxlinksrest part_countr7seenrnewpathrftarget target_partss r8r+r+skyy"H(E"" )    H >># tt $DTJ%%c**3D D xxz <#  a t~  >)S)*1cD  ;kGj4'G( hhw'//G<<((jg1F1F!%--U]]1K")++}#GGG$[[)F   %% $  G$ D!!<<,TrT2L KK % #l+ +J  K/   *y *s%8B#J! J!-J!J!!J*)J*darwinc[R"U5nU(d [S5e[U[5(aSnSnSnOSnSnSnUcUnO[R"U5n[ U5R U5n[ U5R U5nU(aURU5O/nU(aURU5O/n[[Xx/55n U/[U5U - -XS-n U (dU$URU 5$![[[[4a [R "S X5 ef=f) z#Return a relative version of a pathzno path specifiedrVr3rbrrrNr-)r=r>rhr4r5rlstripr rPrr rDrErFDeprecationWarningrGrH) r7rr#r%r$ start_tail path_tail start_list path_listrRrel_lists r8r-r-s) 99T?D ,--$ } % U^**3/ DM((- .8Z%%c*b ,5IOOC(2  j45 68s:q01IbMAMxx!! ~|5G H$$Y< s(BDD3E c  [[[RU55nU(d [ S5e[ US[ 5(aSnSnOSnSnUVs/sHo3RU5PM nnUVs1sHoURU5iM snunUVVs/sH$owVs/sHo(dM X:wdMUPM snPM& nnn[U5n [U5n U n [U 5HupXU :wdMU SU n O U(aUOUSSn XRU 5-$s snfs snf![a [ S5Sef=fs snfs snnf![[4a [R "S /UQ76 ef=f) zDGiven a sequence of path names, returns the longest common sub-path.z%commonpath() arg is an empty sequencerr3rVrrz%Can't mix absolute and relative pathsNr.)tuplemapr=r>rhr4r5r rAminmax enumerater rDrErGrH)pathsr%r#r7 split_pathsrJr r?crkrmcommonrRprefixs r8r.r.s} #bii' (E @AA%(E""38954zz#5 9 P167All3'7FEEPPKq1:1aak1:K P    bMDAqEzBQ" 3r7(((#:8 PDE4 O P;P ~ &$$\:E: s~ED+6E9D5=D0D5E! E* E 8E ?E E 1E)E+E0D55E  EEE)F)N)+__doc__r#r$r)r%r&r'r(r*rr=r}rdrG__all__r9rr r r rrWr posixrYr rvrrrrrrrrrrrr+r~r,r-r.rr:r8rs           D8 "7((00 '56