, e      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcd 2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone!"05L8The bad things that can happen when you use the library.9Thrown when you try to get contents of non-existing entry.Thrown when archive structure cannot be parsed%Information about archive as a whole.Comment of entire archive-Absolute offset of start of central directory Size of central directory recordSupported compression methods. Store file uncompressed Deflate  Compressed using BZip2 algorithm This record represents all 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 representation can be built given this data structure and the actual archive contents.Version made byVersion needed to extractCompression methodLast modification date and timeCRC32 check sumSize of compressed entrySize of uncompressed entry$Absolute offset of local file header Entry commentAll extra fields found=The exception describing various troubles you can have with .)Selector cannot be created from this pathThis 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 select files in archive or to name new files.The abstraction is crucial for ensuring that created archives are portable across operating systems, file systems, and different 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 archive for compatibility with Unix-like operating systems (as it is recommended in the specification). On the other hand, in can be rendered as ordinary relative file path in OS-specific format, when needed.e+Path pieces of relative path inside archive Create an  from f g h. To avoid problems with distribution of the archive, characters that some operating systems do not expect in paths are not allowed. Proper paths should pass these checks:Ubinary representation of normalized path should be not longer than 65535 bytesThis function can throw an .Make a relative path from . Every  produces a single f g h that corresponds to it.UGet an entry name in the from that is suitable for writing to file header, given an .% ie !"    ie !" 2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableSafe!"L8 Decode a j containing CP 437 encoded text.k+Decode a single byte of CP437 encoded text.8k888k 2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone!"LT?lMS-DOS date-time: a pair of m, (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 incrementsnFA temporary data structure to hold Zip64 extra data field information.oData descriptor representation.p0Type of file header: local or central directory.q4Origin of entries that can be streamed into archive.rVCollection of editing actions, that is, actions that modify already existing entries.sKCollection of maps describing how to produce entries in resulting archive.tNThe sum type describes all possible actions that can be performed on archive.uAdd entry given its vw9Copy an entry form another archive without re-compressionx$Change name the entry inside archiveyDelete entry from archivez%Change compression method on an entry{"Set comment for a particular entry|"Delete comment of particular entry})Set modification time of particular entry~%Add an extra field to specified entry(Delete an extra filed of specified entrySet comment for entire archive Delete comment of entire archive: Version created by  to specify when writing archive data.EScan 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;u when specified archive is something this library cannot parse (this includes multi-disk archives, for example).cPlease 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.HGiven location of archive and information about specific archive entry   , return v] of its data. Actual data can be compressed or uncompressed depending on the third argument. Undertake all actions specified as the fourth argument of the function. This transforms given pending actions so they can be performed in one pass, and then they are performed in the most efficient way.sDetermine what comment in new archive will look like given its original value and a collection of pending actions.iTransform a map representing existing entries into a collection of actions that re-create those entires.Transform a collection of ts into s and r5 data that describes how to create resulting archive.mCopy entries from another archive and write them into the file associated with given handle. This can throw , if there is no such entry in that archive.BSink entry from given stream into the file associated with given .Create ; to stream data there. Once streaming is finished, return o# for the streamed data. The action does not close given .]Append central directory entries and end of central directory record to the file that given  is associated with. Note that this automatically writes Zip64 end of central directory record and Zip64 end of central directory locator when necessary.aExtract the number of bytes between start of file name in local header and start of actual data.7Parse central directory file headers and put them into .{Parse a single central directory file header. If it's a directory or file compressed with unsupported compression method,  is returned.Parse an extra-field.OGet signature. If the extracted data is not equal to provided signature, fail.Parse n from its binary representation.!Produce binary representation of n.Create j representing an extra field.Create j' representing entire central directory.Create j: representing local file header if the first argument is - and central directory file header otherwise.Create j4 representing Zip64 end of central directory record.Create j6 representing Zip64 end of central directory locator.Parse end of central directory record or Zip64 end of central directory record depending on signature binary data begins with.Create j. representing end of central directory record.oFind absolute offset of end of central directory record or, if present, Zip64 end of central directory record.Rename an entry (key) in a .Like 8, but with saturation when converting to bounded types.!Determine target entry of action.Decode j. 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._Detect if the given text needs newer Unicode-aware features to be properly encoded in archive.LConvert numeric representation (as per .ZIP specification) of version into .Covert : to its numeric representation as per .ZIP specification.7Get compression method form its numeric representation.Convert : to its numeric representation as per .ZIP specification.>Check if an entry with these parameters needs Zip64 extension.|Determine version needed to extract  that should be written to headers given need of Zip64 feature and compression method.Return decompressing 0 corresponding to the given compression method.9Sink that calculates CRC32 check sum for incoming stream.Convert  to MS-DOS time format.Convert MS-DOS date-time to .!We use the constants of the type L instead of literals to protect ourselves from overflows on 32 bit systems.!We use the constants of the type L instead of literals to protect ourselves from overflows on 32 bit systems.Xlnopqrstuwxyz{|}~Path to archive to scan'Path to archive that contains the entry/Information needed to extract entry of interest#Should we stream uncompressed data?Source of uncompressed data*Location of archive file to edit or createArchive descriptionCurrent list of entiresCollection of pending actions0Name of the archive file where entires are foundActual list of entires)Actions that recreate the archive entriesCollection of pending actionsOptimized dataOpened  of zip archive file+Path to file from which to copy the entries1 from original name to name to use in new archive)Additional info that can influence result5Info to generate central directory file headers laterOpened  of zip archive fileName of entry to add-Origin of entry (can contain additional info)Source of entry contents)Additional info that can influence result5Info to generate central directory file headers laterOpened  of zip archive fileCompression method to apply where to stream data!Opened handle of zip archive fileCommentary to entire archive7Info about already written local headers and entry data/What is read from central directory file headerActual binary representationResult.Is this for local or central directory header?Zip64 extra field's dataResulting representationType of header to generateName of entry to writeDescription of entryTotal number of entriesSize of the central directory"Offset of central directory record(Offset of Zip64 end of central directoryTotal number of entriesSize of the central directory"Offset of central directory recordZip file comment1Whether bit 11 of general-purpose bit flag is setBinary data to decodeDecoded  in case of successtuwxyz{|}~3lnopqrst uwxyz{|}~ 2016 2017 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone !"<=DILR-9"Internal state record used by the :, monad. This is only exported for use with  methods, you can't look inside.Absolute path to zip archiveActual collection of entriesInfo about the whole archivePending actions:Monad 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.;Create 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.<#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;u when specified archive is something this library cannot parse (this includes multi-disk archives, for example).cPlease 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.=Retrieve description of all archive entries. This is an efficient operation that can be used for example to list all entries in an archive. Do not hesitate to use the function frequently: scanning of archive happens only once anyway.Please note that the returned value only reflects actual contents of the archive in file system, non-committed actions do not influence the list of entries, see [ for more information.>_Check whether the specified entry exists in the archive. This is a simple shortcut defined as: ,doesEntryExist s = M.member s <$> getEntries?Get  < for specified entry. This is a simple shortcut defined as: *getEntryDesc s = M.lookup s <$> getEntries@5Get contents of a specific archive entry as a strict j~. It's not recommended to use this on big entries, because it will suck out a lot of memory. For big entries, use conduits: B.Throws: .AGet an entry source.Throws: .B1Stream contents of an archive entry to the given .Throws: .C;Save a specific archive entry as a file in the file system.Throws: .DeCalculate CRC32 check sum and compare it with the value read from the archive. The function returns F when the check sums are the same that is, the data is not corrupted.Throws: .ElUnpack the entire archive into the specified directory. The directory will be created if it does not exist.FGet the archive comment.G#Get the archive description record.HAAdd a new entry to the archive given its contents in binary form.I:Stream data from the specified source to an archive entry.J Load an entry from a given file.K^Copy an entry as is  from another zip archive. If the entry does not exist in that archive,  will be eventually thrown.LAdd an entire directory to the archive. Please note that due to the design of the library, empty sub-directories won't be added.,The action can throw the same exceptions as  and .MRRename an entry in the archive. If the entry does not exist, nothing will happen.NMDelete an entry from the archive, if it does not exist, nothing will happen.ORChange compression method of an entry, if it does not exist, nothing will happen.PSet 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.QNDelete an entry's comment, if that entry does not exist, nothing will happen.RrSet the last modification  date/time. The specified entry may be missing, in that case the action has no effect.S`Add an extra field. The specified entry may be missing, in that case this action has no effect.TuDelete an extra field by its type (tag). The specified entry may be missing, in that case this action has no effect.U0Perform an action on every entry in the archive.V"Set comment of the entire archive.W+Delete the archive comment if it's present.X)Undo changes to a specific archive entry.Y;Undo changes to the archive as a whole (archive's comment).Z.Undo all changes made in this editing session.[Archive 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 realm of : 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.7Get the path of the actual archive file from inside of : monad.&Get the collection of pending actions.5Modify the collection of pending actions in some way.0Add a new action to the list of pending actions.\]09:;"Location of archive file to create#Actions that form archive's content< Location of archive to work withActions on that archive=>?@&Selector that identifies archive entryContents of the entryAB&Selector that identifies archive entry#Sink where to stream entry contents Contents of the entry (if found)C&Selector that identifies archive entryWhere to save the fileD&Selector that identifies archive entryIs the entry intact?EFGHCompression method to useEntry contentsName of entry to addICompression method to useSource of entry contentsName of entry to addJCompression method to use How to get Path to file to addKPath to archive to copy from)Name of entry (in source archive) to copy+Name of entry to insert (in actual archive)LCompression method to use How to get Path to directory to addMOriginal entry nameNew entry nameNONew compression methodName of entry to re-compressPText of the commentName of entry to comment onQRNew modification timeName of entry to modifyS%Tag (header id) of extra field to addBody of the fieldName of entry to modifyT(Tag (header id) of extra field to deleteName of entry to modifyUAction to performVWXYZ[\]A 9:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[A  :9;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[)9:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnlnolnp qrstuvwxyz{|}~HaOvvvvvuyz}~?@ zip-0.2.0-91ftIvzL0NvD5PISoXUnLgCodec.Archive.Zip.TypeCodec.Archive.Zip.CP437Codec.Archive.ZipSystem.FilePath.PosixisValidSystem.FilePath.WindowsCodec.Archive.Zip.Internal ZipExceptionEntryDoesNotExist ParsingFailedArchiveDescription adComment adCDOffsetadCDSizeCompressionMethodStoreDeflateBZip2EntryDescriptionedVersionMadeByedVersionNeeded edCompression edModTimeedCRC32edCompressedSizeedUncompressedSizeedOffset edComment edExtraFieldEntrySelectorExceptionInvalidEntrySelector EntrySelectormkEntrySelectorunEntrySelector getEntryName$fExceptionZipException$fShowZipException!$fExceptionEntrySelectorException$fShowEntrySelectorException$fShowEntrySelector$fEqEntrySelector$fOrdEntrySelector$fDataEntrySelector$fGenericEntrySelector$fEqEntrySelectorException$fOrdEntrySelectorException$fShowCompressionMethod$fReadCompressionMethod$fEqCompressionMethod$fOrdCompressionMethod$fEnumCompressionMethod$fBoundedCompressionMethod$fDataCompressionMethod$fEqEntryDescription$fShowArchiveDescription$fReadArchiveDescription$fEqArchiveDescription$fOrdArchiveDescription$fDataArchiveDescription$fEqZipException$fOrdZipException decodeCP437ZipState ZipArchive createArchive withArchive getEntriesdoesEntryExist getEntryDescgetEntrygetEntrySource sourceEntry saveEntry checkEntry unpackIntogetArchiveCommentgetArchiveDescriptionaddEntry sinkEntry loadEntry copyEntry packDirRecur renameEntry deleteEntry recompresssetEntryCommentdeleteEntryComment setModTime addExtraFielddeleteExtraField forEntriessetArchiveCommentdeleteArchiveCommentundoEntryChangesundoArchiveChangesundoAllcommit$fMonadBaseControlIOZipArchive$fMonadBaseIOZipArchive$fFunctorZipArchive$fApplicativeZipArchive$fMonadZipArchive$fMonadIOZipArchive$fMonadThrowZipArchive$fMonadCatchZipArchive$fMonadMaskZipArchiveunES!path-0.6.1-5PsmbvwXUawBI8ctYZxxBE Path.InternalPathRelFilebytestring-0.10.8.1Data.ByteString.Internal ByteStringdecodeByteCP437 MsDosTimebaseGHC.WordWord16Zip64ExtraFieldDataDescriptor HeaderType EntryOriginEditingActionsProducingActions PendingAction SinkEntry%conduit-1.2.11-3auGqiRcr70Go5gCoSRkzSData.Conduit.Internal.ConduitSource CopyEntry RenameEntry DeleteEntry RecompressSetEntryCommentDeleteEntryComment SetModTime AddExtraFieldDeleteExtraFieldSetArchiveCommentDeleteArchiveComment zipVersion scanArchivepredictCommenttoRecreatingActionsoptimize copyEntriesGHC.IO.Handle.TypesHandlesinkDataSinkwriteCDgetLocalHeaderGapgetCDcontainers-0.5.7.1 Data.Map.BaseMap getCDHeaderGHC.BaseNothing getExtraField getSignatureparseZip64ExtraFieldmakeZip64ExtraField putExtraFieldputCD putHeaderghc-prim GHC.TypesFalse putZip64ECDputZip64ECDLocatorgetECDputECD locateECD renameKeywithSaturationGHC.Real fromIntegral targetEntry decodeText needsUnicode toVersion Data.VersionVersion fromVersiontoCompressionMethodfromCompressionMethod needsZip64 getZipVersiondecompressingPipeConduit crc32Sink toMsDosTime time-1.6.0.1Data.Time.Clock.UTCUTCTime fromMsDosTimeffff GHC.NaturalNaturalffffffff msDosDate msDosTimez64efUncompressedSizez64efCompressedSize z64efOffsetddCRC32ddCompressedSizeddUncompressedSize LocalHeaderCentralDirHeader GenericOriginBorrowed eaCompressioneaEntryCommenteaDeleteComment eaModTime eaExtraField eaDeleteField paCopyEntry paSinkEntry#text-1.2.2.2-KC7dWoG09dA1F6jKj5GSqhData.Text.InternalText,monad-control-1.0.2.2-9aTLeaO4El6L4t2OM8GECcControl.Monad.Trans.ControlMonadBaseControl zsFilePath zsEntries zsArchive zsActionsTrue$path-io-1.3.3-1S3PnH6TGwvHjfw0mzbFvJPath.IO listDirRecur getFilePath getPending modifyActions addPending unZipArchive