h&[XS      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ 2016@present Mark Karpov BSD 3 clause$Mark Karpov  experimentalportable Safe-InferredNzip Decode a R containing CP 437 encoded text.Szip+Decode a single byte of CP437 encoded text. 2016@present Mark Karpov BSD 3 clause$Mark Karpov  experimentalportable Safe-Inferred6 zip8The bad things that can happen when you use the library.zip9Thrown when you try to get contents of non-existing entryzipThrown when attempting to decompress an entry compressed with an unsupported compression method or the library is compiled without support for it.zip/Thrown when archive structure cannot be parsed.zip-The information about the archive as a whole.zip!The comment of the entire archivezip1Absolute offset of the start of central directory zip$The size of central directory record zip"The supported compression methods. zipStore file uncompressed zipDeflate zip Compressed using BZip2 algorithmzip$Compressed using Zstandard algorithmzipThe information about archive entry that can be stored in a zip archive. It does not mirror local file header or central directory file header, but their binary representations can be built given this data structure and the archive contents.zipVersion made byzipVersion needed to extractzipCompression methodzipLast modification date and timezipCRC32 check sumzipSize of compressed entryzipSize of uncompressed entryzip$Absolute offset of local file headerzip Entry commentzipAll extra fields foundzipExternal file attributeszip"The problems you can have with an .zip! cannot be created from this pathzipThis data type serves for naming and selection of archive entries. It can be created only with the help of the smart constructor , and it's the only @key@ that can be used to refer to files in the archive or to name new archive entries.The abstraction is crucial for ensuring that created archives are portable across operating systems, file systems, and platforms. Since on some operating systems, file paths are case-insensitive, this selector is also case-insensitive. It makes sure that only relative paths are used to name files inside archive, as it's recommended in the specification. It also guarantees that forward slashes are used when the path is stored inside the archive for compatibility with Unix-like operating systems (as recommended in the specification). On the other hand, in can be rendered as an ordinary relative file path in OS-specific format when needed.Tzip+Path pieces of relative path inside archivezip Create an  from a U. To avoid problems with distribution of the archive, characters that some operating systems do not expect in paths are not allowed. Argument to  should pass these checks:.it is a relative path without slash at the endbinary representations of normalized path should be not longer than 65535 bytesThis function can throw an . zipRestore a relative path from . Every  corresponds to a U.!zipGet an entry name in the from that is suitable for writing to file header, given an .!   ! 2016@present Mark Karpov BSD 3 clause$Mark Karpov  experimentalportable Safe-Inferredn"zip-Convert external attributes to the file info.toFileMode 21797928960o0755#zipConvert external attributes to the file info. The function assumes a regular file and keeps DOS attributes untouched.fromFileMode 0o0755 2179792896"#"# 2016@present Mark Karpov BSD 3 clause$Mark Karpov  experimentalportable Safe-Inferred%&6VzipMS-DOS date-time: a pair of W, (date, time) with the following structure: DATE bit 0 - 4 5 - 8 9 - 15 value day (1 - 31) month (1 - 12) years from 1980 TIME bit 0 - 4 5 - 10 11 - 15 value seconds* minute hour *stored in two-second incrementsXzipA temporary data structure to hold Zip64 extra data field information.Yzip#The data descriptor representation.Zzip8The type of the file header: local or central directory.[zip8The origin of entries that can be streamed into archive.\zipA collection of editing actions, that is, actions that modify already existing entries.]zipA collection of maps describing how to produce entries in the resulting archive.^zipThe sum type describes all possible actions that can be performed on an archive._zipAdd an entry given its Source`zip9Copy an entry form another archive without re-compressionazip+Change the name of the entry inside archivebzipDelete an entry from archiveczip)Change the compression method on an entrydzip&Set the comment for a particular entryezip)Delete theh comment of a particular entryfzip/Set the modification time of a particular entrygzip)Add an extra field to the specified entryhzip,Delete an extra filed of the specified entryizip&Set the comment for the entire archivejzip(Delete the comment of the entire archivekzip6Set an external file attribute for the specified entrylzip:@Version created by@ to specify when writing archive data.mzipScan the central directory of an archive and return its description ( as well as a collection of its entries.This operation may fail with:isAlreadyInUseError9 if the file is already open and cannot be reopened;isDoesNotExistError if the file does not exist;isPermissionError< if the user does not have permission to open the file; when specified archive is something this library cannot parse (this includes multi-disk archives, for example).Please note that entries with invalid (non-portable) file names may be missing in the list of entries. Files that are compressed with unsupported compression methods are skipped as well. Also, if several entries would collide on some operating systems (such as Windows, because of its case-insensitivity), only one of them will be available, because  is case-insensitive. These are the consequences of the design decision to make it impossible to create non-portable archives with this library.nzipGiven location of the archive and information about a specific archive entry  , return Source of its data. The actual data can be compressed or uncompressed depending on the third argument.ozip Undertake all actions specified as the fourth argument of the function. This transforms the given pending actions so they can be performed in one pass, and then they are applied in the most efficient way.pzipCreate a new file with the guarantee that in the case of an exception the old file will be intact. The file is only updated/replaced if the second argument finishes without exceptions.qzipDetermine what comment in new archive will look like given its original value and a collection of pending actions.rzipTransform a map representing existing entries into a collection of actions that re-create those entires.szipTransform a collection of ^s into ] and \5@data that describes how to create resulting archive.tzipCopy entries from another archive and write them into the file associated with the given handle. This can throw , if there is no such entry in that archive.uzipSink an entry from the given stream into the file associated with the given v.wzip Create a Sink; to stream data there. Once streaming is finished, return Y# for the streamed data. The action does not close the given v.xzipAppend central directory entries and the end of central directory record to the file that given v is associated with. Note that this automatically writes Zip64 end of central directory record and Zip64 end of central directory locator when necessary.yzipExtract the number of bytes between the start of file name in local header and the start of actual data.zzip9Parse central directory file headers and put them into a {.|zipParse a single central directory file header. If it's a directory or file compressed with unsupported compression method, } is returned.~zipParse an extra-field.zipGet signature. If the extracted data is not equal to the provided signature, fail.zipParse X from its binary representation.zip!Produce binary representation of X.zipCreate R representing an extra field.zipCreate R+ representing the entire central directory.zipCreate R representing either a local file header or a central directory file header.zipCreate R4 representing Zip64 end of central directory record.zipCreate R: representing Zip64 end of the central directory locator.zipParse end of the central directory record or Zip64 end of the central directory record depending on signature binary data begins with.zip Create a R2 representing the end of central directory record.zipFind the absolute offset of the end of central directory record or, if present, Zip64 end of central directory record.zipRename an entry (key) in a {.zipLike 8, but with saturation when converting to bounded types.zip(Determine the target entry of an action.zip Decode a R. The first argument indicates whether we should treat it as UTF-8 (in case bit 11 of general-purpose bit flag is set), otherwise the function assumes CP437. Note that since not every stream of bytes constitutes valid UTF-8 text, this function can fail. In that case } is returned.zipDetect if the given text needs newer Unicode-aware features to be properly encoded in the archive.zipConvert numeric representation (as per the .ZIP specification) of version into .zipCovert > to its numeric representation as per the .ZIP specification.zip;Get the compression method form its numeric representation.zipConvert  > to its numeric representation as per the .ZIP specification.zipCheck if an entry with these parameters needs the Zip64 extension.zipDetermine @version needed to extract@ that should be written to the headers given the need of the Zip64 feature and the compression method.zipReturn a decompressing Conduit0 corresponding to the given compression method.zipA sink that calculates the CRC32 check sum for an incoming stream.zipConvert  to the MS-DOS time format.zipConvert MS-DOS date-time to .zipThe default permissions for the files, permissions not set on Windows, and are set to rw on Unix. This mimics the behavior of the zip utility.mzipPath to archive to scannzip'Path to archive that contains the entryzip/Information needed to extract entry of interestzip#Should we stream uncompressed data?zipSource of uncompressed dataozip*Location of archive file to edit or createzipArchive descriptionzipCurrent list of entireszipCollection of pending actionspzipName of file to createzipAction that writes to given vrzip0Name of the archive file where entires are foundzipActual list of entireszip)Actions that recreate the archive entriesszipCollection of pending actionszipOptimized datatzipOpened v of zip archive filezip)Path to the file to copy the entries fromzip{1 from original name to name to use in new archivezip)Additional info that can influence resultzip5Info to generate central directory file headers lateruzipOpened v of zip archive filezipName of the entry to addzip1Origin of the entry (can contain additional info)zipSource of the entry contentszip)Additional info that can influence resultzip9Info to generate the central directory file headers laterwzipOpened v of zip archive filezipCompression method to applyzipSink where to stream dataxzip!Opened handle of zip archive filezip Commentary to the entire archivezip7Info about already written local headers and entry datazip/What is read from central directory file headerzipActual binary representationzipResultzip.Is this for local or central directory header?zipZip64 extra field's datazipResulting representationzipType of header to generatezipName of entry to writezipDescription of entryzipTotal number of entrieszipSize of the central directoryzip"Offset of central directory recordzip(Offset of Zip64 end of central directoryzipTotal number of entrieszipSize of the central directoryzip"Offset of central directory recordzipZip file commentzip1Whether bit 11 of general-purpose bit flag is setzipBinary data to decodezipDecoded  in case of success^_`abcdefghijkmno 2016@present Mark Karpov BSD 3 clause$Mark Karpov  experimentalportable Safe-Inferred W1$zip&The internal state record used by the %, monad. This is only exported for use with  methods, you can't look inside.zipPath to zip archivezipActual collection of entrieszipInfo about the whole archivezipPending actions%zipMonad that provides context necessary for performing operations on zip archives. It's intentionally opaque and not a monad transformer to limit the actions that can be performed in it to those provided by this module and their combinations.&zipCreate a new archive given its location and an action that describes how to create contents of the archive. This will silently overwrite the specified file if it already exists. See '/ if you want to work with an existing archive.'zip#Work with an existing archive. See &. if you want to create a new archive instead.This operation may fail with:isAlreadyInUseError9 if the file is already open and cannot be reopened;isDoesNotExistError if the file does not exist;isPermissionError< if the user does not have permission to open the file; when specified archive is something this library cannot parse (this includes multi-disk archives, for example).Please note that entries with invalid (non-portable) file names may be missing in the list of entries. Files that are compressed with unsupported compression methods are skipped as well. Also, if several entries would collide on some operating systems (such as Windows, because of its case-insensitivity), only one of them will be available, because  is case-insensitive. These are the consequences of the design decision to make it impossible to create non-portable archives with this library.(zipRetrieve a description of all archive entries. This is an efficient operation that can be used for example to list all entries in the archive. Do not hesitate to use the function frequently: scanning of the archive happens only once.Please note that the returned value only reflects the current contents of the archive in file system, non-committed actions are not reflected, see H for more information.)zipCheck whether the specified entry exists in the archive. This is a simple shortcut defined as: ,doesEntryExist s = M.member s <$> getEntries*zipGet > for a specified entry. This is a simple shortcut defined as: *getEntryDesc s = M.lookup s <$> getEntries+zip5Get contents of a specific archive entry as a strict R. It's not recommended to use this on big entries, because it will suck out a lot of memory. For big entries, use conduits: -.Throws: .,zipGet an entry source.Throws: .-zip1Stream contents of an archive entry to the given Sink.Throws: ..zip;Save a specific archive entry as a file in the file system.Throws: ./zipCalculate CRC32 check sum and compare it with the value read from the archive. The function returns  when the check sums are the same@that is, the data is not corrupted.Throws: .0zipUnpack the archive into the specified directory. The directory will be created if it does not exist.1zipGet the archive comment.2zip#Get the archive description record.3zipAdd a new entry to the archive given its contents in binary form.4zip:Stream data from the specified source to an archive entry.5zip Load an entry from a given file.6zipCopy an entry @as is@ from another zip archive. If the entry does not exist in that archive,  will be thrown.7zipAdd an directory to the archive. Please note that due to the design of the library, empty sub-directories will not be added.The action can throw .8zip The same as 7 but allows us to perform modifying actions on the created entities as we go.9zipRename an entry in the archive. If the entry does not exist, nothing will happen.:zipDelete an entry from the archive, if it does not exist, nothing will happen.;zipChange compression method of an entry, if it does not exist, nothing will happen.<zipSet an entry comment, if that entry does not exist, nothing will happen. Note that if binary representation of the comment is longer than 65535 bytes, it will be truncated on writing.=zipDelete an entry's comment, if that entry does not exist, nothing will happen.>zipSet the last modification date/time. The specified entry may be missing, in that case the action has no effect.?zipAdd an extra field. The specified entry may be missing, in that case this action has no effect.@zipDelete an extra field by its type (tag). The specified entry may be missing, in that case this action has no effect.AzipSet external file attributes. This function can be used to set file permissions. See also: Codec.Archive.Zip.Unix.Bzip0Perform an action on every entry in the archive.Czip&Set the comment of the entire archive.Dzip-Delete the archive's comment if it's present.Ezip-Undo the changes to a specific archive entry.Fzip?Undo the changes to the archive as a whole (archive's comment).Gzip.Undo all changes made in this editing session.HzipArchive contents are not modified instantly, but instead changes are collected as @pending actions@ that should be committed, in order to efficiently modify the archive in one pass. The actions are committed automatically when the program leaves the % monad (i.e. as part of & or '), or can be forced explicitly with the help of this function. Once committed, changes take place in the file system and cannot be undone.zip7Get the path of the actual archive file from inside of % monad.zip&Get the collection of pending actions.zip)Modify the collection of pending actions.zip0Add a new action to the list of pending actions.zipRecursively list a directory. Do not return paths to empty directories.zip6Perform an action ignoring IO exceptions it may throw.IzipJzip&zip&Location of the archive file to createzip)Actions that create the archive's content'zip$Location of the archive to work withzipActions on that archive+zip&Selector that identifies archive entryzipContents of the entry,zip&Selector that identifies archive entry-zip*Selector that identifies the archive entryzip#Sink where to stream entry contentszip Contents of the entry (if found).zip*Selector that identifies the archive entryzipWhere to save the file/zip*Selector that identifies the archive entryzipIs the entry intact?3zipThe compression method to usezipEntry contentszipName of the entry to add4zipThe compression method to usezipSource of entry contentszipName of the entry to add5zipThe compression method to usezipName of the entry to addzipPath to the file to add6zip Path to the archive to copy fromzip1Name of the entry (in the source archive) to copyzip0Name of the entry to insert (in current archive)7zipThe compression method to usezipHow to get the ; from a path relative to the root of the directory we packzipPath to the directory to add8zipThe compression method to usezipHow to get the ; from a path relative to the root of the directory we packzip%How to modify an entry after creationzipPath to the directory to add9zipThe original entry namezipThe new entry name;zipThe new compression methodzip Name of the entry to re-compress<zipText of the commentzipName of the entry to comment on>zipNew modification timezipName of the entry to modify?zip)Tag (header id) of the extra field to addzipBody of the fieldzipName of the entry to modify@zip,Tag (header id) of the extra field to deletezipName of the entry to modifyAzipExternal file attributeszipName of the entry to modifyBzipThe action to perform   !$%&'()*+,-./0123456789:;<=>?@ABCDEFGH !   %$&'()*+,-./0123456789:;<=>?@ABCDEFGH      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a^bcdefghijklmnopqrstuvwxy4Oz{|}~;^^^^ zip-2.0.0-HuywwvDrgCtHROtFo5AjAVCodec.Archive.Zip.CP437Codec.Archive.ZipCodec.Archive.Zip.UnixCodec.Archive.Zip.TypeSystem.FilePath.PosixisValidSystem.FilePath.WindowsCodec.Archive.Zip.Internal decodeCP437 ZipExceptionEntryDoesNotExistUnsupportedCompressionMethod ParsingFailedArchiveDescription adComment adCDOffsetadCDSizeCompressionMethodStoreDeflateBZip2ZstdEntryDescriptionedVersionMadeByedVersionNeeded edCompression edModTimeedCRC32edCompressedSizeedUncompressedSizeedOffset edComment edExtraFieldedExternalFileAttrsEntrySelectorExceptionInvalidEntrySelector EntrySelectormkEntrySelectorunEntrySelector getEntryName toFileMode fromFileModeZipState ZipArchive createArchive withArchive getEntriesdoesEntryExist getEntryDescgetEntrygetEntrySource sourceEntry saveEntry checkEntry unpackIntogetArchiveCommentgetArchiveDescriptionaddEntry sinkEntry loadEntry copyEntry packDirRecur packDirRecur' renameEntry deleteEntry recompresssetEntryCommentdeleteEntryComment setModTime addExtraFielddeleteExtraFieldsetExternalFileAttrs forEntriessetArchiveCommentdeleteArchiveCommentundoEntryChangesundoArchiveChangesundoAllcommit$fMonadBaseControlIOZipArchive$fMonadBaseIOZipArchive$fFunctorZipArchive$fApplicativeZipArchive$fMonadZipArchive$fMonadIOZipArchive$fMonadThrowZipArchive$fMonadCatchZipArchive$fMonadMaskZipArchivebytestring-0.11.3.1Data.ByteString.Internal ByteStringdecodeByteCP437unESbaseGHC.IOFilePath MsDosTimeGHC.WordWord16Zip64ExtraFieldDataDescriptor HeaderType EntryOriginEditingActionsProducingActions PendingAction SinkEntry CopyEntry RenameEntry DeleteEntry RecompressSetEntryCommentDeleteEntryComment SetModTime AddExtraFieldDeleteExtraFieldSetArchiveCommentDeleteArchiveCommentSetExternalFileAttributes zipVersion scanArchive withNewFilepredictCommenttoRecreatingActionsoptimize copyEntriesGHC.IO.Handle.TypesHandlesinkDatawriteCDgetLocalHeaderGapgetCDcontainers-0.6.5.1Data.Map.InternalMap getCDHeader GHC.MaybeNothing getExtraField getSignatureparseZip64ExtraFieldmakeZip64ExtraField putExtraFieldputCD putHeader putZip64ECDputZip64ECDLocatorgetECDputECD locateECD renameKeywithSaturationGHC.Real fromIntegral targetEntry decodeText needsUnicode toVersion Data.VersionVersion fromVersiontoCompressionMethodfromCompressionMethod needsZip64 getZipVersiondecompressingPipe crc32Sink toMsDosTime time-1.11.1.1 Data.Time.Clock.Internal.UTCTimeUTCTime fromMsDosTimedefaultFileMode text-1.2.5.0Data.Text.InternalText,monad-control-1.0.3.1-8cTxnktplxILi7bGYZXxIVControl.Monad.Trans.ControlMonadBaseControl zsFilePath zsEntries zsArchive zsActionsghc-prim GHC.TypesTrue getFilePath getPending modifyActions addPending listDirRecurignoringAbsence