\dm 8dZdZdZdZdZdZdZdZdZd Z d Z d Z d Z d Z dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"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/dZ0dZ1dZ2dZ3dZ4dZ5dZ6d Z7d'Z8d&Z9dZ:d(Z;d)Zd,Z?ed-fed.fed/fed0fe d1fed2fed3ffe)d4ffe*d5ffe+e!zd.fe!d6fe+d7ffe-d4ffe.d5ffe/e"zd.fe"d6fe/d7ffe1d4ffe2d5ffe3e$zd8fe$d9fe3d7fff Z@d:ZAd&ZBdZCd#ZDd'ZEd ZFdZGdZHd"ZIdZJd)ZKdZLdZMdZNd ZOdZPd!ZQd(ZR dd;lSTdrrc2t|tkS)z0Return True if mode is from a FIFO (named pipe).)rS_IFIFOrs rS_ISFIFOr$Brrc2t|tkS)z,Return True if mode is from a symbolic link.)rS_IFLNKrs rS_ISLNKr'Frrc2t|tkS)z%Return True if mode is from a socket.)rS_IFSOCKrs rS_ISSOCKr*Js $<<8 ##rcdS)z#Return True if mode is from a door.Fr rs rS_ISDOORr,N 5rcdS)z*Return True if mode is from an event port.Fr rs rS_ISPORTr/Rr-rcdS)z'Return True if mode is from a whiteout.Fr rs rS_ISWHTr1Vr-riii@i8 iiiii ls-bdcprwSxtTcg}tD]?}|D]%\}}||z|kr||n&|d@d|S)z;Convert a file's mode to a string of the form '-rwxrwxrwx'.r:)_filemode_tableappendjoin)rpermtablebitchars rfilemoderNsy D   ICczS   D!!!! KK    774==r)*N)U__doc__ST_MODEST_INOST_DEVST_NLINKST_UIDST_GIDST_SIZEST_ATIMEST_MTIMEST_CTIMErrrrrr r#r&r)S_IFDOORS_IFPORTS_IFWHTrrrr!r$r'r*r,r/r1S_ISUIDS_ISGIDS_ENFMTS_ISVTXS_IREADS_IWRITES_IEXECS_IRWXUS_IRUSRS_IWUSRS_IXUSRS_IRWXGS_IRGRPS_IWGRPS_IXGRPS_IRWXOS_IROTHS_IWOTHS_IXOTH UF_NODUMP UF_IMMUTABLE UF_APPEND UF_OPAQUE UF_NOUNLINK UF_COMPRESSED UF_HIDDEN SF_ARCHIVED SF_IMMUTABLE SF_APPEND SF_NOUNLINK SF_SNAPSHOTrGrNFILE_ATTRIBUTE_ARCHIVEFILE_ATTRIBUTE_COMPRESSEDFILE_ATTRIBUTE_DEVICEFILE_ATTRIBUTE_DIRECTORYFILE_ATTRIBUTE_ENCRYPTEDFILE_ATTRIBUTE_HIDDENFILE_ATTRIBUTE_INTEGRITY_STREAMFILE_ATTRIBUTE_NORMAL"FILE_ATTRIBUTE_NOT_CONTENT_INDEXEDFILE_ATTRIBUTE_NO_SCRUB_DATAFILE_ATTRIBUTE_OFFLINEFILE_ATTRIBUTE_READONLYFILE_ATTRIBUTE_REPARSE_POINTFILE_ATTRIBUTE_SPARSE_FILEFILE_ATTRIBUTE_SYSTEMFILE_ATTRIBUTE_TEMPORARYFILE_ATTRIBUTE_VIRTUAL_stat ImportErrorr rrrsk                     ##################$$$                               ss s s s s s s s gos s ss s gos s ss s gos s s/8      "'%)"%#     DD s DDD