!|8[G      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"""""""""""""""""""""""""""""""""##################### # # # # ################### #!#"###$#%#&#'#(#)#*#+#,#-#.#/#0#1#2#3#4#5#6#7#8#9#:#;#<#=#>#?#@#A#B$C$D$E$F$G$H%I%J%K%L%M%N%O%P%Q%R%S%T%U%V%W%X%Y%Z%[%\&]&^&_&`&a&b&c&d&e&f&g&h&i&j&k&l&m&n&o&p&q&r&s&t&u&v&w&x&y&z{|}~'''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()))))))))))))))))))) ) ) ) ) ))))))))))))))))))) )!)")#)$)%)&)')()))*)+),)-).)/)0)1)2)3)4)5)6)7)8*9*:*;*<*=*>*?*@*A*B*C*D*E*F*+Safe@' haskus-binary Bit orderMThe first letter indicates the outer bit ordering, i.e. how bytes are filled:+B?: from left to right (B is for BigEndian).L?: from right to left (L is for LittleEndian)NThe second letter indicates the inner bit ordering, i.e. how words are stored:F?B: the most significant bit is stored first (in the outer bit order!)G?L: the least-significant bit is stored first (in the outer bit order!)3E.g. two successive words of 5 bits: ABCDE, VWXYZ  BB: ABCDEVWX YZxxxxxx   BL: EDCBAZYX WVxxxxxx   LB: XWVEDCBA xxxxxxZY   LL: XYZABCDE xxxxxxVW '*()+'*()+None .>HUVXG<0 haskus-binary%Offset obtained when following path p1 haskus-binary#Type obtained when following path p2 haskus-binaryLayout path root3 haskus-binaryLayout path element4 haskus-binaryAddressing via a numeric index5 haskus-binaryAddressing via a symbol6 haskus-binaryPath in a layout8 haskus-binaryIndex in the layout path&Helper for ``ptr --> lPath @p`` until ./012345678 673458102/.None.>HIXkT9 haskus-binaryPointer operations: haskus-binary'Cast a pointer from one type to another; haskus-binaryNull pointer (offset is 0)< haskus-binary@Advance a pointer by the given amount of bytes (may be negative)= haskus-binary0Distance between two pointers in bytes (p2 - p1)> haskus-binaryUse the pointer? haskus-binary Malloc the given number of bytes@ haskus-binary$Add offset to the given layout fieldA haskus-binaryA finalized pointerpWe use an offset because we can't modify the pointer directly (it is passed to the foreign pointer destructors)C haskus-binaryNull foreign pointerG haskus-binaryNull finalized pointerD haskus-binaryUse a finalized pointerE haskus-binaryGeneralized version of <F haskus-binaryMalloc a foreign pointerG haskus-binaryUse a foreign pointerH haskus-binaryFree a malloced memory! 9;:?<=>@ABCDEFGH9;:?<=>@E!HABDGFC None.FHUVY&L haskus-binaryReturn a Int with exactly n bitsM haskus-binaryReturn a Word with exactly n bitsN haskus-binaryReturn a Int with at least n bitsO haskus-binaryReturn a Word with at least n bitstHIJKLMNOPQRSTUVWXYZ[ \]^_`abcdefghijklmnopqrstuvwxyz{|}~"LMNOONML    "None .8>HUVXk'P haskus-binaryStorable data-typesECurrently we cannot automatically derive a Storable class with type-level naturals for "alignment" and "sizeOf". Instead we define a Storable class isomorphic to the Foreign.Storable's one but with default methods using DefaultSignatures (i.e., the Storable instance can be automatically derived from a Generic instance).V haskus-binaryOCompute the required padding between the size sz and b to respect b's alignmentW haskus-binaryECompute the required padding between a and b to respect b's alignmentX haskus-binaryEA storable data in constant space whose size is known at compile timeY haskus-binary"Size of the stored data (in bytes)Z haskus-binary Alignment requirement (in bytes)[ haskus-binary)Peek (read) a value from a memory address\ haskus-binary0Poke (write) a value at the given memory address] haskus-binary)Peek (read) a value from a memory address^ haskus-binary0Poke (write) a value at the given memory address_ haskus-binaryGet statically known size` haskus-binaryGet statically known alignmenta haskus-binary"Get bytes in host-endianness orderb haskus-binaryPeek a value from a pointerc haskus-binaryPoke a value to a pointerd haskus-binary Generalized Te haskus-binarySizeOf (for type-application)f haskus-binarySizeOf' (for type-application)g haskus-binary Generalized Sh haskus-binary Alignment (for type-application)i haskus-binary!Alignment' (for type-application)j haskus-binaryPeek with byte offsetk haskus-binaryPoke with byte offsetl haskus-binaryPeek with element size offsetm haskus-binaryPoke with element size offsetn haskus-binaryAllocate some byteso haskus-binaryAllocate some aligned bytesp haskus-binaryp f executes the computation fo, passing as argument a pointer to a temporarily allocated block of memory sufficient to hold values of type a.The memory is freed when fM terminates (either normally or via an exception), so the pointer passed to f must not be used after this.q haskus-binaryFAllocate a block of memory that is sufficient to hold values of type a6. The size of the area allocated is determined by the T method from the instance of P for the appropriate type.$The memory may be deallocated using H or  finalizerFree when no longer required.r haskus-binaryr val f executes the computation fX, passing as argument a pointer to a temporarily allocated block of memory into which val) has been marshalled (the combination of p and c).The memory is freed when fM terminates (either normally or via an exception), so the pointer passed to f must not be used after this.s haskus-binaryCTemporarily allocate space for the given number of elements (like p, but for multiple elements).t haskus-binary7Allocate space for the given number of elements (like q, but for multiple elements).u haskus-binary~Convert an array of given length into a Haskell list. The implementation is tail-recursive and so uses constant stack space.v haskus-binary/Write the list elements consecutive into memoryw haskus-binary=Temporarily store a list of storable values in memory (like r, but for multiple elements).x haskus-binaryLike wF, but the action gets the number of values as an additional parametery haskus-binary Replicates a withXXXJ combinator over a list of objects, yielding a list of marshalled objects haskus-binaryGeneralize FS.peek haskus-binaryGeneralize FS.poke*PTSQRUVWXZY[\]^_`abcdefghijklmnopqrstuvwxy*XZY[\]^WVU_`aPTSQRbcdefghijklmpnoqrystwxuv None 8FHMVXk haskus-binary Extended EnumHBy default, use dataToTag and toEnum to convert from and to an Integral.But it can be overloaded to perform transformation before using fromEnum/toEnum. E.g. if values are shifted by 1 compared to Enum values, define fromCEnum = (+1) . fromIntegral . dataToTag haskus-binary Store enum a as a b haskus-binaryRead an enum field haskus-binaryCreate an enum field haskus-binaryTMake an enum with the last constructor taking a parameter for the rest of the range data T = A | B | C | D Word8 makeEnumWithCustom :: Int -> T makeEnumWithCustom x = case x of 0 -> A 1 -> B 2 -> C n -> D (n - 3)  haskus-binaryzMake an enum with the last constructor taking a parameter for the rest of the range, but don't build the last constructor data T = A | B | C | D Word8 makeEnumMaybe :: Int -> T makeEnumMaybe x = case x of 0 -> Just A 1 -> Just B 2 -> Just C n -> Nothing  haskus-binary&Make an enum from a number (0 indexed) haskus-binaryRetrieve data tagdata D = A | B | C dataToTag B1 NoneM[ haskus-binary8-bit character (ASCII, etc.) NoneF haskus-binarySigned bit shiftsSigned means that the sign bit (the higher order bit): - propagates to the right during right shifts and - keeps its value during left shifts (except when all other bits are 0)Checked means that there is an additional test to ensure that the shift offset is valid (less than the bit count). If you are sure that the offset is valid, use the "unchecked" version which should be faster. haskus-binaryChecked signed right shift haskus-binaryChecked signed left shift haskus-binaryUnchecked signed right shift haskus-binaryUnchecked signed left shift haskus-binaryFChecked signed shift to the left if positive, to the right if negative haskus-binaryHUnchecked signed shift to the left if positive, to the right if negative haskus-binary Bit shiftsChecked means that there is an additional test to ensure that the shift offset is valid (less than the bit count). If you are sure that the offset is valid, use the "unchecked" version which should be faster.To shift signed numbers, see  class methods. haskus-binaryChecked right shift haskus-binaryChecked left shift haskus-binaryUnchecked right shift haskus-binaryUnchecked left shift haskus-binary?Checked shift to the left if positive, to the right if negative haskus-binaryAUnchecked shift to the left if positive, to the right if negative None.8>@FHVXk haskus-binary,Type representable by a fixed amount of bits haskus-binaryNumber of bits haskus-binary%Number of bits (the value is ignored) haskus-binaryAll bits set to 0 haskus-binaryAll bits set to 1 haskus-binary@Count number of zero bits preceding the most significant set bit haskus-binaryACount number of zero bits following the least significant set bit haskus-binary Complement NoneFÃ haskus-binaryBitwise bit operations haskus-binary Bitwise "and" haskus-binary Bitwise "or" haskus-binary Bitwise "xor"None8>7 haskus-binaryTypes whose bits can be rotated haskus-binary*Rotate left if positive, right if negative haskus-binaryChecked left bit rotation haskus-binaryChecked right bit rotation haskus-binary4Unchecked rotate left if positive, right if negative haskus-binaryUnchecked left bit rotation haskus-binaryUnchecked right bit rotationNone,>Xk haskus-binaryMake a mask dynamically haskus-binarymakeMaskFinite 3 = 00000111 haskus-binaryMake a mask statically haskus-binary9Keep only the n least-significant bits of the given value  haskus-binary9Keep only the n least-significant bits of the given value  None.kГ haskus-binary$Compute bit offset (equivalent to x  8 but faster) haskus-binary%Compute byte offset (equivalent to x  8 but faster)None8Fן haskus-binaryType whose bits are indexable haskus-binarybit i is a value with the i$th bit set and all other bits clear. haskus-binary x `setBit` i is the same as  x .|. bit i haskus-binaryx `clearBit` i is the same as x .&. complement (bit i) haskus-binaryx `complementBit` i is the same as  x `xor` bit i haskus-binaryReturn  if the nth bit of the argument is 1 haskus-binaryReturn the number of set bitsNone %&'-.=?@ACFHSVX_/I4( haskus-binary%Wrapper containing any kind of buffer+ haskus-binaryGet contents as a list of bytes- haskus-binaryGet buffer size. haskus-binary?Buffer that can be thawed (converted from immutable to mutable)/ haskus-binary{Convert an immutable buffer to a mutable one without copying. The original buffer should not be used after the conversion.0 haskus-binary?Buffer that can be frozen (converted from mutable to immutable)1 haskus-binaryvConvert a mutable buffer to an immutable one without copying. The buffer should not be modified after the conversion.3 haskus-binaryEA buffer with an additional phantom type indicating its binary formatN haskus-binaryIs the buffer mutable or not?O haskus-binaryMemory cells are mutableP haskus-binaryMemory cells are immutableQ haskus-binaryAllocation heapR haskus-binaryGHC heapS haskus-binary External heapT haskus-binary.Is the buffer automatically garbage collected?U haskus-binary0Automatically collected by the garbage-collectorV haskus-binaryFinalizers are run just before the garbage collector collects the buffer entity. The memory used by the buffer may be collected too (Internal heap), explicitly freed by a finalizer or not freed at all.W haskus-binary]The buffer contents is not automatically freed and we can't attach finalizers to the buffer.X haskus-binary!Is the buffer pinned into memory?Y haskus-binary0The buffer has a fixed associated memory addressZ haskus-binary:The buffer contents can be freely moved to another address[ haskus-binary%Allocate a buffer (mutable, unpinned)b <- newBuffer 1024\ haskus-binary#Allocate a buffer (mutable, pinned)] haskus-binary,Allocate an aligned buffer (mutable, pinned) haskus-binary@Insert a finalizer. Return True if there was no finalizer before^ haskus-binaryAdd a finalizer.The latest added finalizers are executed first. Finalizers are not guaranteed to run (e.g. if the program exits before the buffer is collected). haskus-binary,Internal function used to execute finalizers haskus-binaryCreate empty Finalizers_ haskus-binaryTouch a buffer` haskus-binaryMake a buffer finalizable6The new buffer liveness is used to trigger finalizers.a haskus-binaryZSome buffers managed by GHC can be pinned as an optimization. This function reports this.b haskus-binaryhTransform type-level NotPinned buffers into type-level Pinned if the buffer is dynamically pinned (see a).c haskus-binary"Do something with a buffer addressRNote: don't write into immutable buffer as it would break referential consistencyd haskus-binary"Do something with a buffer pointerRNote: don't write into immutable buffer as it would break referential consistencye haskus-binary"Do something with a buffer addressf haskus-binary"Do something with a buffer pointerg haskus-binaryGet buffer sizeh haskus-binaryGet contents as a list of bytesi haskus-binaryRead a Word8, offset in bytes'We don't check that the offset is valid let b = [25,26,27,28] :: BufferIbufferReadWord8IO b 227j haskus-binary4Read a Word8 in an immutable buffer, offset in bytes'We don't check that the offset is valid let b = [25,26,27,28] :: BufferI@putStrLn $ "Word8 at offset 2 is " ++ show (bufferReadWord8 b 2)Word8 at offset 2 is 27k haskus-binaryWrite a Word8, offset in bytes'We don't check that the offset is validb <- newBuffer 10bufferWriteWord8IO b 1 123bufferReadWord8IO b 1123l haskus-binaryRead a Word16, offset in bytes'We don't check that the offset is valid(let b = [0x12,0x34,0x56,0x78] :: BufferIx <- bufferReadWord16IO b 0(x == 0x1234) || (x == 0x3412)Truem haskus-binary5Read a Word16 in an immutable buffer, offset in bytes'We don't check that the offset is validn haskus-binaryWrite a Word16, offset in bytes'We don't check that the offset is validb <- newBuffer 10let v = 1234 :: Word16bufferWriteWord16IO b 1 vbufferReadWord16IO b 112347(x :: Word16) <- fromIntegral <$> bufferReadWord8IO b 17(y :: Word16) <- fromIntegral <$> bufferReadWord8IO b 2B(((x `shiftL` 8) .|. y) == v) || (((y `shiftL` 8) .|. x) == v)Trueo haskus-binaryRead a Word32, offset in bytes'We don't check that the offset is valid(let b = [0x12,0x34,0x56,0x78] :: BufferIx <- bufferReadWord32IO b 0&(x == 0x12345678) || (x == 0x78563412)Truep haskus-binary5Read a Word32 in an immutable buffer, offset in bytes'We don't check that the offset is validq haskus-binaryWrite a Word32, offset in bytes'We don't check that the offset is validb <- newBuffer 10let v = 1234 :: Word32bufferWriteWord32IO b 1 vbufferReadWord32IO b 11234r haskus-binaryRead a Word64, offset in bytes'We don't check that the offset is valid<let b = [0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF0] :: BufferIx <- bufferReadWord64IO b 06(x == 0x123456789ABCDEF0) || (x == 0xF0DEBC9A78563412)Trues haskus-binary5Read a Word64 in an immutable buffer, offset in bytes'We don't check that the offset is validt haskus-binaryWrite a Word64, offset in bytes'We don't check that the offset is validb <- newBuffer 10let v = 1234 :: Word64bufferWriteWord64IO b 1 vbufferReadWord64IO b 11234u haskus-binary4Copy a buffer into another from/to the given offsetsWe don't check buffer limits.&let b = [0,1,2,3,4,5,6,7,8] :: BufferIb2 <- newBuffer 8copyBuffer b 4 b2 0 4copyBuffer b 0 b2 4 4"forM [0..7] (bufferReadWord8IO b2)[4,5,6,7,0,1,2,3]v haskus-binarySupport for OverloadedLists:set -XOverloadedLists let b = [25,26,27,28] :: BufferIu haskus-binary Source buffer haskus-binaryOffset in source buffer haskus-binary Target buffer haskus-binaryOffset in target buffer haskus-binaryNumber of Word8 to copye()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuNABCDEFGHIJKLM34()XYZTUVWNOPQRS@?>=<;:98765[\]g,-01./abefcdijlmoprsknqtu2^`_h*+None &'F6C haskus-binary$Allocate a new Buffer using system `malloc` haskus-binary.Allocate a new finalized buffer using system `malloc` and finalized with ``. haskus-binaryMake a buffer finalized with `` haskus-binaryFree a malloc-ed BufferNone "#&'.Fh haskus-binaryAAn embedding entry. Used to embed binary files into an executable haskus-binaryType of data access haskus-binaryAlignement to respect haskus-binarySymbol to associate to the data haskus-binaryInput file path haskus-binaryOffset in the input file haskus-binarySize limit in the input file haskus-binary Section type haskus-binary Read-only haskus-binaryWritable haskus-binary Uninitialized haskus-binary8Embed bytes at compile time using GHC's literal strings.:set -XTemplateHaskell'let b = $$(embedBytes [72,69,76,76,79]) bufferSize b5 haskus-binary-Load a buffer from a symbol. Return a BufferE-Note: we can't use Typed TH because of #13587 <> -- Test.c > const char mydata[9] = {1,2,30,40,50,6,7,8,9}; L> let b = $(loadSymbol 9 "mydata") > print (fmap (bufferReadWord8 b) [0..8]) 1,2,30,40,50,6,7,8,9 haskus-binary.Load a buffer from a symbol. Return a BufferME-Note: we can't use Typed TH because of #13587 m> -- Test.c > const char mydata[9] = {1,2,30,40,50,6,7,8,9}; > char mywrtdata[9] = {1,2,30,40,50,6,7,8,9}; > let w = $(loadMutableSymbol 9 "mywrtdata") > forM_ [0..8] (\i -> bufferWriteWord8IO w i (fromIntegral i)) > print =<< forM [0..8] (bufferReadWord8IO w) 0,1,2,3,4,5,6,7,8|Trying to write into constant memory: >> let err = $(loadMutableSymbol 9 "mydata") >> bufferWriteWordIO err 0 10 SEGFAULT haskus-binary+Create a GAS entry to include a binary file haskus-binary8Create an assembler file for the given embedding entries haskus-binary0Embed a file in the executable. Return a BufferE haskus-binaryfEmbed a file in the executable. Return a BufferE or a BufferME depending on the mutability parameter.nodep parameter is used to indicate if we want to add a dependency on the input file (e.g. we don't want to do this for temporary files TH generated). haskus-binaryPEmbed a pinned buffer in the executable. Return either a BufferE or a BufferME. haskus-binaryREmbed a unpinned buffer in the executable. Return either a BufferE or a BufferME. haskus-binaryHEmbed a buffer in the executable. Return either a BufferE or a BufferME. haskus-binary File to embed haskus-binaryMutable buffer or not haskus-binary Alignment haskus-binaryOffset in the file in bytes haskus-binary>Size to include in bytes (otherwise up to the end of the file) haskus-binary+BufferE or BufferME depending on mutability haskus-binary Source buffer haskus-binary%Should the embedded buffer be mutable haskus-binary Alignement haskus-binaryOffset in the buffer haskus-binaryNumber of Word8 to write haskus-binary6BufferE or BufferME, depending on mutability parameter haskus-binary Source buffer haskus-binary%Should the embedded buffer be mutable haskus-binary Alignement haskus-binaryOffset in the buffer haskus-binaryNumber of Word8 to write haskus-binary6BufferE or BufferME, depending on mutability parameter haskus-binary Source buffer haskus-binary,Should the embedded buffer be mutable or not haskus-binaryOptional alignement constraint haskus-binary$Optional offset in the source buffer haskus-binary#Optional number of bytes to include haskus-binary6BufferE or BufferME, depending on mutability parameterNone&'.SX_ haskus-binaryA view pattern haskus-binaryThe whole buffer haskus-binary1D slice haskus-binary2D slice haskus-binaryComposed pattern haskus-binaryOffset of the first cell haskus-binaryNumber of cells haskus-binaryOffset of the first line haskus-binaryWidth (line size) haskus-binaryHeight (number of lines) haskus-binary Stride (space between two lines) haskus-binaryA view on a buffer haskus-binaryThe source of a viewWeak views are used so that the underlying buffer can be freed by the GC. When it happens and if the view is still alive the contents of the buffer used by the view is copied into a fresh (usually smaller) buffer.Weak views can also be used as sources: in this case, when the source view is GCed, the current view is updated to point to the source of the source. haskus-binary7The source is a buffer. The view keeps the buffer alive haskus-binaryThe source is a weak buffer. If the buffer is collected, its contents is copied in to a new buffer and the view is updated to use it. haskus-binaryThe source is a weak view. If the source view is collected, the current view is updated to use whatever the source view uses as a source (another view or a buffer). This mechanism makes buffer contents cascade into smaller views while preserving some sharing. haskus-binary9Compute an actual offset when used with the given pattern haskus-binary0Compute the effective size occupied by a pattern haskus-binary0Compute the effective size occupied by a pattern haskus-binaryCombine two patterns$Remove trivial patterns combinations haskus-binaryRead a Word8 from a view haskus-binaryWait for a view to be valid then use one of the 3 passed functions on it depending on its source type (Buffer, WeakBuffer, WeakView). haskus-binaryCreate a view on a buffer haskus-binaryCreate a weak view on a bufferlThe buffer is weakly referenced and can be GCed. When it happens, its contents is stored into a new buffer.You should only use this for views that are much smaller than the original buffer so that the copying cost is balanced by the memory occupation difference. haskus-binaryCreate a weak view on a view haskus-binaryhAllocate a new buffer initialized with the contents of the source buffer according to the given pattern haskus-binary$Convert a view into an actual buffer haskus-binaryDisplay the state of a View:set -XOverloadedListsimport System.MemMv <- newBufferWeakView ([10,11,12,13,14,15,16,17] :: BufferI) (Pattern1D 2 4)'v2 <- newViewWeakView v (Pattern1D 1 1) putStr =<< showViewState v2View source: weak view Source size: 4 View pattern: Pattern1D {pattern1DOffset = 1, pattern1DSize = 1} Wasted space: 75% Source: View source: weak buffer Source size: 8 View pattern: Pattern1D {pattern1DOffset = 2, pattern1DSize = 4} Wasted space: 50% %performGC putStr =<< showViewState v2View source: weak view Source size: 4 View pattern: Pattern1D {pattern1DOffset = 1, pattern1DSize = 1} Wasted space: 75% Source: View source: buffer Source size: 4 View pattern: PatternFull Wasted space: 0% haskus-binary Source buffer haskus-binary View pattern haskus-binaryWeak IORef of the viewNone  haskus-binarymemset haskus-binarymemcpy haskus-binary Copy memory haskus-binary Set memory haskus-binaryAllocate several arrays haskus-binaryPeek several arrays haskus-binaryPoke several arrays haskus-binaryAllocate several arrays haskus-binaryExecute f with a pointer to a or NULLNone.=>?@AHUVXk haskus-binary An union &We use a list of types as a parameter.The union is just a pointer to a buffer containing the value(s). The size of the buffer is implicitly known from the types in the list. haskus-binary%Retrieve a union member from its type haskus-binary.Create a new union from one of the union types haskus-binaryLike ! but set the remaining bytes to 0 haskus-binary.Create a new union from one of the union types haskus-binary?Get the union size (i.e. the maximum of the types in the union) haskus-binaryDGet the union alignment (i.e. the maximum of the types in the union)None./=>?@AEHUVXk# haskus-binaryReturn type from a field path haskus-binaryReturn offset from a field path haskus-binaryRecord alignment haskus-binary'Record size (with ending padding bytes) haskus-binary0Get record size without the ending padding bytes haskus-binaryField haskus-binaryRecord haskus-binaryGet record size haskus-binaryGet record alignment haskus-binaryGet a field offset haskus-binary Get a field haskus-binary Get a field offset from its path haskus-binaryGet a field from its path haskus-binaryConvert a record into a HList Z ZNone@AXk+- haskus-binaryA buffer haskus-binaryDuplicate a buffer haskus-binaryBuffer filled with zero haskus-binary'Zip two buffers with the given function haskus-binary_Unsafe: be careful if you modify the buffer contents or you may break referential transparency haskus-binaryTest if the buffer is empty haskus-binary Empty buffer haskus-binary Buffer size haskus-binaryPeek a storable haskus-binary#Peek a storable at the given offset haskus-binary(Pop a Storable and return the new buffer haskus-binary Poke a buffer haskus-binaryMap haskus-binaryReverse haskus-binaryDrop some bytes O(1) haskus-binarySplit on the given Byte values haskus-binaryTail haskus-binaryAppend haskus-binaryCons haskus-binarySnoc haskus-binaryInit haskus-binaryHead haskus-binaryIndex haskus-binaryUnpack haskus-binaryUnpack haskus-binaryTake some bytes O(1) haskus-binaryTake some bytes O(n) haskus-binaryTake some bytes O(1) haskus-binaryPack a ByteString haskus-binaryPack a list of bytes haskus-binaryPack a Storable  haskus-binaryPack a list of Storable  haskus-binaryPack from a pointer (copy)  haskus-binary#Pack from a pointer (add finalizer)  haskus-binary"Unsafe drop (don't check the size)  haskus-binary"Unsafe take (don't check the size) haskus-binary"Unsafe tail (don't check the size) haskus-binary"Unsafe head (don't check the size) haskus-binary"Unsafe last (don't check the size) haskus-binary"Unsafe init (don't check the size) haskus-binary#Unsafe index (don't check the size) haskus-binary Map memory haskus-binaryUse buffer pointer haskus-binary Read file haskus-binary Write file.     .     None  haskus-binary Execute Put haskus-binary Put a buffer haskus-binaryPut a ByteString haskus-binaryPut null bytes  haskus-binary5Put null bytes to align the given value to the second! haskus-binary Put a Word8" haskus-binaryPut a Word16 little-endian# haskus-binaryPut a Word16 big-endian$ haskus-binaryPut a Word32 little-endian% haskus-binaryPut a Word32 big-endian& haskus-binaryPut a Word64 little-endian' haskus-binaryPut a Word64 big-endian # !"#$%&' # !"#$%&'Noneڧ( haskus-binary BufferList* haskus-binaryConvert to a buffer+ haskus-binaryConvert from a buffer, haskus-binaryConvert to a lazy ByteString()*+,()*+,None1M)- haskus-binaryBuffer builder. haskus-binaryEmpty buffer builder/ haskus-binaryCreate a Builder denoting the same sequence of bytes as a strict ByteString. The Builder inserts large ByteStrings directly, but copies small ones to ensure that the generated chunks are large on average.0 haskus-binary$Encode a single unsigned byte as-is.1 haskus-binaryExecute a Builder and return the generated chunks as a BufferList. The work is performed lazily, i.e., only when a chunk of the BufferList is forced.2 haskus-binary>Execute a Builder and return the generated chunks as a Buffer.-./012-.12/0None>X 5 haskus-binaryData whose bits can be reversed7 haskus-binaryReverse bits in a Word8 haskus-binaryObvious recursive version9 haskus-binary?Reverse bits in a Word8 (3 64-bit operations, modulus division): haskus-binary:Reverse bits in a Word8 (4 64-bit operations, no division); haskus-binary!Reverse bits using a lookup table< haskus-binary=Reverse bits in a Word8 (7 no 64-bit operations, no division)= haskus-binaryParallel recursive version> haskus-binary>Convert a function working on Word8 to one working on any Word6The number of bits in the Word must be a multiple of 8 56789:;<=> 56789:;<=>None,.>XkJ haskus-binary Reverse the nH least important bits of the given value. The higher bits are set to 0.K haskus-binary'Convert bits into a string composed of '0' and '1' charsL haskus-binary=Convert a specified amount of bits into a string composed of '0' and '1' charsM haskus-binaryConvert a string of '0' and '1' chars into a wordN haskus-binaryq`getBitRange bo offset n c` takes n bits at offset in c and put them in the least-significant bits of the result8 567IJKLMN8I567J KLMNNone%,-.1=>?@AHUVXgkR haskus-binaryBitNat backing typeS haskus-binary A natural on b bitsU haskus-binaryMCreate a natural number with the minimal number of bits required to store itnat @5 BitNat @3 5nat @0 BitNat @1 0nat @158748521123465897456465#BitNat @78 158748521123465897456465V haskus-binary Zero naturalW haskus-binary One naturalX haskus-binaryConvert a BitNat into a NaturalY haskus-binaryCreate a naturalZ haskus-binary!Create a natural (check overflow) haskus-binary4Create a natural (check overflow and throw on error)[ haskus-binaryExtract the primitive value\ haskus-binaryWiden a naturalwiden @7 (BitNat @5 25) BitNat @7 25] haskus-binaryNarrow a naturalnarrow @3 (BitNat @5 25) BitNat @3 1^ haskus-binaryCompare two naturals_ haskus-binaryAdd two NaturalsBitNat @5 25 .+. BitNat @2 3 BitNat @6 28` haskus-binarySub two NaturalsBitNat @5 25 .-. BitNat @2 3Just (BitNat @5 22)BitNat @5 2 .-. BitNat @2 3Nothinga haskus-binaryMultiply two NaturalsBitNat @5 25 .*. BitNat @2 3 BitNat @7 75b haskus-binary)Divide two Naturals, return (factor,rest)BitNat @5 25 ./. BitNat @2 3Just (BitNat @5 8,BitNat @2 1)BitNat @5 25 ./. BitNat @2 0Nothing BitNat @2 3 ./. BitNat @5 25 Just (BitNat  2 0,BitNat 5 3)c haskus-binaryShift-left naturalslet x = BitNat @5 25x .<<. NatVal @2 BitNat @7 1003show (x .<<. NatVal @2) == show (x .*. BitNat @3 4)False.x .<<. NatVal @2 == narrow (x .*. BitNat @3 4)Trued haskus-binaryShift-right naturalsBitNat @5 25 .>>. NatVal @2 BitNat @3 6g haskus-binaryShow instance for naturals&%OPQRSTUVWXYZ[\]^_`abcd&%P\O]STUYZVW[^_`abcdRQXNone%,-.1=>?@AHUVXgkA h haskus-binary'A natural number in the specified rangei haskus-binaryNatural range patternNatRange @10 @12 11NatRange @10 @12 11j haskus-binary!Create a value in a Natural rangek haskus-binary2Create a value in a Natural range (check validity)l haskus-binaryECreate a value in a Natural range (check validity and throw on error)m haskus-binary!Create a value in a Natural range haskus-binary!Convert a NatRange into a Naturaln haskus-binaryWiden a naturallet a = NatRange @18 @100 25widenNatRange @16 @200 aNatRange @16 @200 25o haskus-binaryAdd two natural ranges(NatRange @2 @4 3 .++. NatRange @7 @17 13NatRange @9 @21 16p haskus-binaryShow instance for natural rangehijklmnohimkljno+None &%OPQRSTUVWXYZ[\]^_`abcdhijklmnoNone.=>?@AHUVX`k) haskus-binary-Offset of the i-th element in a stored vectorq haskus-binaryVector with type-checked sizes haskus-binary$Return the buffer backing the vectort haskus-binaryReverse a vectoru haskus-binaryYield the first n elementsv haskus-binaryDrop the first n elementsw haskus-binaryO(1)7 Index safely into the vector using a type level index.x haskus-binary>Convert a list into a vector if the number of elements matchesy haskus-binary0Take at most n element from the list, then use zz haskus-binary4Take at most (n-1) element from the list, then use z{ haskus-binaryConvert a vector into a list| haskus-binary&Create a vector by replicating a value} haskus-binary(Concat several vectors into a single one~ haskus-binaryZip two vectors haskus-binarymapqrstuvwxyz{|}~qrstuvwxyz{|}~ None &'.>HSX`kA haskus-binary Kinded PositgGADT that can be used to ensure at the type level that we deal with non-infinite/non-zero Posit values haskus-binary+Get the kind of the posit at the type level haskus-binaryCheck if a posit is zero haskus-binaryCheck if a posit is infinity haskus-binaryCheck if a posit is positive haskus-binaryCheck if a posit is negative haskus-binaryPosit absolute value haskus-binaryDecode posit fields haskus-binaryConvert a Posit into a Rational haskus-binary-Convert a rational into the approximate Posit haskus-binarycFactor of approximation for a given Rational when encoded as a Posit. The closer to 1, the better.Usage:)positApproxFactor @(Posit 8 2) (52 % 137) haskus-binaryFCompute the decimal error if the given Rational is encoded as a Posit.Usage:)positDecimalError @(Posit 8 2) (52 % 137) haskus-binaryXCompute the number of decimals of accuracy if the given Rational is encoded as a Posit.Usage:,positDecimalAccuracy @(Posit 8 2) (52 % 137) haskus-binaryECompute the binary error if the given Rational is encoded as a Posit.Usage:(positBinaryError @(Posit 8 2) (52 % 137) haskus-binaryTCompute the number of bits of accuracy if the given Rational is encoded as a Posit.Usage:+positBinaryAccuracy @(Posit 8 2) (52 % 137) haskus-binary[Compute the number of bits of accuracy if the given Rational is encoded as a Float/Double.Usage:&floatBinaryAccuracy @Double (52 % 137) haskus-binary Show posit''!None8>HMV\ haskus-binaryBit set indexed with a haskus-binary#Return the bit offset of an element haskus-binary-Return the value associated with a bit offset haskus-binaryPA bit set: use bitwise operations (fast!) and minimal storage (sizeOf basetype)b is the base type (Bits b)a is the element type (Enum a)mThe elements in the Enum a are flags corresponding to each bit of b starting from the least-significant bit. haskus-binaryIndicate if the set is empty haskus-binary Empty bitset haskus-binary%Create a BitSet from a single element haskus-binaryInsert an element in the set haskus-binaryRemove an element from the set haskus-binaryUnwrap the bitset haskus-binary Wrap a bitset haskus-binary Test if an element is in the set haskus-binary Test if an element is in the set haskus-binary$Test if an element is not in the set haskus-binaryRetrieve elements in the set haskus-binaryIntersection of two sets haskus-binaryIntersection of two sets haskus-binaryIntersection of several sets haskus-binaryConvert a list of enum elements into a bitset Warning: b must have enough bits to store the given elements! (we don't perform any check, for performance reason) haskus-binary-Convert a bitset into a list of Enum elements haskus-binaryWConvert a bitset into a list of Enum elements by testing the Enum values successively.The difference with 5 is that extra values in the BitSet will be ignored. haskus-binaryConvert a set into a list haskus-binaryConvert a Foldable into a set haskus-binary3It can be useful to get the indexes of the set bits haskus-binary3It can be useful to get the indexes of the set bits"None.=>?@AHMUVXkk1 haskus-binary!Get the whole size of a BitFields haskus-binary$Get the size of a field from it name haskus-binary%Get the type of a field from its name haskus-binary+Get the bit offset of a field from its name haskus-binaryA field of n bits haskus-binaryBit fields on a base type b haskus-binaryGet backing word haskus-binaryGet the value of a field haskus-binary1Get the value of a field (without checking sizes) haskus-binarySet the value of a field haskus-binary1Set the value of a field (without checking sizes) haskus-binaryModify the value of a field haskus-binary4Modify the value of a field (without checking sizes) haskus-binaryGet values in a tuple haskus-binary%Get field names and values in a tuple haskus-binary%Get field names and values in a tuple haskus-binary%Get field names and values in a tuple#None,.=>?@AHUVXk1 haskus-binary Add two Unums haskus-binary Add two SORNs haskus-binaryAdd a SORN with itself haskus-binarySubtract two Unums haskus-binarySubtract two SORNS haskus-binarySubtract a SORN with itself haskus-binaryUncertainty bit haskus-binary Exact number haskus-binary#OpenInterval above the exact number haskus-binaryBacking word for the unum  haskus-binary#Compute the number of bits required haskus-binaryAll unum members haskus-binaryIndexable numbers haskus-binaryPositive numbers in the unums  haskus-binaryCompute the precise numbers set haskus-binaryAn UnumO0 (and its reciprocal) is always included. Numbers have to be >= 1 and sorted.e.g., Unum '[] =>  0 .. 0 .. 0 Unum '[I 1] => 0 .. -1 .. 0 .. 1 .. 0 Unum '[I 1, I 2] => 0 .. -2 .. -1 .. - 2 .. 0 .. 2 .. 1 .. 2 .. 0 Unum '[I 1, PI] => 0 .. -PI .. -1 .. - PI .. 0 .. PI .. 1 .. PI .. 0 haskus-binary Unum labels haskus-binarySize of an unum in bits haskus-binaryZero haskus-binaryInfinite haskus-binaryEncode a number haskus-binaryNegate a number haskus-binaryReciprocate a number haskus-binary Get unum sign haskus-binaryShow SORN bits haskus-binarySize of a SORN in bits haskus-binary Empty SORN haskus-binary Full SORN  haskus-binaryFull SORN without infinite! haskus-binaryFull SORN without infinite" haskus-binarySORN singleton# haskus-binaryInsert in a SORN$ haskus-binaryRemove in a SORN% haskus-binaryTest membership in a SORN& haskus-binaryUnion of two SORNs' haskus-binaryIntersection of two SORNs( haskus-binaryComplement the SORN) haskus-binary Negate a SORN* haskus-binaryElements in the SORN+ haskus-binaryCreate a SORN from its elements, haskus-binary*Create a contiguous SORN from two elements- haskus-binary%Convert a contiguous SORN into a SORN. haskus-binary!Size of a contiguous SORN in bits/ haskus-binaryShow contiguous SORN bits0 haskus-binaryEmpty contigiuous SORN1 haskus-binary#Test if a contigiuous SORN is empty2 haskus-binaryContiguous SORN build3 haskus-binaryFull contiguous SORN4 haskus-binaryContiguous SORN singletonA      !"#$%&'()*+,-./01234A      !"#%$&'()*+,./-01234$None.1>EHMUVXkTB haskus-binaryFixed-point number * w is the backing type * iH is the number of bits for the integer part (before the radix point) * fF is the number of bits for the fractional part (after the radix point)C haskus-binaryConvert to a fixed point valueD haskus-binary Convert from a fixed-point valueBCDBCD%None>3H haskus-binary BitPut monadI haskus-binaryBitPut monad transformerJ haskus-binary BitPut stateL haskus-binaryBuilderM haskus-binary Current byteN haskus-binaryCurrent offsetO haskus-binary Bit orderP haskus-binaryCreate a new BitPut stateQ haskus-binaryPut bitsR haskus-binary Put a Buffer:Examples: 3 bits are already written in the current byte 6 BB: ABCDEFGH IJKLMNOP -> xxxABCDE FGHIJKLM NOPxxxxx  6 LL: ABCDEFGH IJKLMNOP -> LMNOPxxx DEFGHIJK xxxxxABC  6 BL: ABCDEFGH IJKLMNOP -> xxxPONML KJIHGFED CBAxxxxx  6 LB: ABCDEFGH IJKLMNOP -> EDCBAxxx MLKJIHGF xxxxxPON  haskus-binaryFlush the current byteS haskus-binaryGet a buffer listT haskus-binary Get a BufferU haskus-binaryEvaluate a BitPut monadV haskus-binaryEvaluate a BitPut monadW haskus-binaryPut bits (monadic)X haskus-binaryPut a single bit (monadic)Y haskus-binaryPut a Buffer (monadic)Z haskus-binaryChange the current bit orderingBe careful to change the outer bit ordering (B* to L* or the inverse) only on bytes boundaries! Otherwise, you will write the same bits more than once.[ haskus-binary.Change the bit ordering for the wrapped BitPut<Be careful, this function uses changeBitPutOrder internally.HIJKLMNOPQRSTUVWXYZ[JKLMNOPQRTSHIVUWXYZ[&None>\ haskus-binary BitGet monad] haskus-binaryBitGet monad transformer^ haskus-binary BitGet state` haskus-binaryInputa haskus-binaryBit offset (0-7)b haskus-binary Bit orderc haskus-binaryCreate a new BitGetStated haskus-binary!Indicate that the source is emptye haskus-binary,Skip the given number of bits from the inputf haskus-binary8Skip the required number of bits to be aligned on 8-bitsg haskus-binary:Read the given number of bits and put the result in a wordh haskus-binary*Perform some checks before calling getBitsMCheck that the number of bits to read is not greater than the first parameteri haskus-binary:Read the given number of Word8 and return them in a Buffer Examples: 6 BB: xxxABCDE FGHIJKLM NOPxxxxx -> ABCDEFGH IJKLMNOP  6 LL: LMNOPxxx DEFGHIJK xxxxxABC -> ABCDEFGH IJKLMNOP  6 BL: xxxPONML KJIHGFED CBAxxxxx -> ABCDEFGH IJKLMNOP  6 LB: EDCBAxxx MLKJIHGF xxxxxPON -> ABCDEFGH IJKLMNOP j haskus-binaryEvaluate a BitGet monadk haskus-binaryEvaluate a BitGet monadl haskus-binary3Evaluate a BitGet monad, return the remaining statem haskus-binary3Evaluate a BitGet monad, return the remaining staten haskus-binaryResume a BitGet evaluationo haskus-binaryResume a BitGet evaluationp haskus-binary#Indicate if all bits have been readq haskus-binary>Skip the given number of bits from the input (monadic version)r haskus-binaryJSkip the required number of bits to be aligned on 8-bits (monadic version)s haskus-binary:Read the given number of bits and put the result in a wordt haskus-binary+Perform some checks before calling getBitsMu haskus-binary$Get a bit and convert it into a Boolv haskus-binaryGet the given number of Word8w haskus-binaryChange the current bit orderingBe careful to change the outer bit ordering (B* to L* or the inverse) only on bytes boundaries! Otherwise, you will read the same bits more than once.x haskus-binary.Change the bit ordering for the wrapped BitGet<Be careful, this function uses changeBitGetOrder internally.\]^_`abcdefghijklmnopqrstuvwx^_`abcdefghi\]kjlmnopqrstuvwxNone_wz haskus-binary?Test whether all input *in the current chunk* has been consumed{ haskus-binaryAGet the number of remaining unparsed bytes *in the current chunk*| haskus-binary>Skip ahead n bytes. Fails if fewer than n bytes are available.} haskus-binary9Skip ahead n bytes. No error if there isn't enough bytes.~ haskus-binaryASkip to align n to al. Fails if fewer than n bytes are available. haskus-binaryASkip to align n to al. Fails if fewer than n bytes are available. haskus-binary=Run the getter without consuming its input. Fails if it fails haskus-binaryGRun the getter. Consume its input if Just _ returned. Fails if it fails haskus-binaryHRun the getter. Consume its input if Right _ returned. Fails if it fails haskus-binaryORequire an action to consume exactly the given number of bytes, fail otherwise haskus-binaryORequire an action to consume at most the given number of bytes, fail otherwise haskus-binary(Pull n bytes from the input, as a Buffer haskus-binary Get Word8 haskus-binaryGet Word16 little-endian haskus-binaryGet Word16 big-endian haskus-binaryGet Word32 little-endian haskus-binaryGet Word32 big-endian haskus-binaryGet Word64 little-endian haskus-binaryGet Word64 big-endian haskus-binary4Get while True (read and discard the ending element) haskus-binary.Repeat the getter to read the whole bytestring haskus-binaryGet remaining bytes haskus-binary.Count the number of bytes consumed by a getter haskus-binary9Execute the getter and align on the given number of Word8 haskus-binary(Get Buffer terminated with 0 (consume 0) haskus-binaryRun the Get monad haskus-binary,Run a getter and throw an exception on error haskus-binaryGet bits from a BitGet. .Discard last bits to align on a Word8 boundaryLFIXME: we use a continuation because Data.Serialize.Get doesn't export "put" haskus-binaryApply the getter at most  times haskus-binaryApply the getter at least  times and at most  times$z{|}~$z{|}~'None>o haskus-binary.Get an unsigned word in Little Endian Base 128 haskus-binary.Put an unsigned word in Little Endian Base 128 haskus-binary*Get a signed int in Little Endian Base 128 haskus-binary*Put a signed int in Little Endian Base 128 haskus-binary3Get a bytestring containing a decoded LEB128 string(None >HMVXk% haskus-binary/Force a data to be read/stored as little-endian haskus-binary,Force a data to be read/stored as big-endian haskus-binaryReverse bytes in a word haskus-binaryExtended word putters haskus-binary Write a Word8 haskus-binaryWrite a Word16 haskus-binaryWrite a Word32 haskus-binaryWrite a Word64 haskus-binary&Write a Word64 into a native size word haskus-binaryExtended word getters haskus-binary Read a Word8 haskus-binary Read a Word16 haskus-binary Read a Word32 haskus-binary Read a Word64 haskus-binary%Read a native size word into a Word64 haskus-binarySize of a machine word haskus-binary32-bit haskus-binary64-bit haskus-binary Word putters haskus-binary Write a Word8 haskus-binaryWrite a Word16 haskus-binaryWrite a Word32 haskus-binaryWrite a Word64 haskus-binary Word getter haskus-binary Read a Word8 haskus-binary Read a Word16 haskus-binary Read a Word32 haskus-binary Read a Word64 haskus-binary Endianness haskus-binaryLess significant bytes first haskus-binaryMost significant bytes first haskus-binary$Get getters for the given endianness haskus-binary$Get putters for the given endianness haskus-binaryReturn extended getters haskus-binaryReturn extended putters haskus-binary(Detect the endianness of the host memory haskus-binaryDetected host endiannessLTODO: use targetByteOrder in GHC.ByteOrder (should be introduced in GHC 8.4)00)None .=>?HVX/98 haskus-binaryBinary serializable data haskus-binarySize of the data in bytes haskus-binarySensible to endianness haskus-binary!Dynamic size of the data in bytes haskus-binarySerialize a value haskus-binaryDeserialize a value haskus-binary Size in bytes haskus-binaryExactly the given size haskus-binaryAt least the given size haskus-binaryDynamically known size haskus-binary(Monad which can read a sequence of bytes haskus-binary Read a Word8 haskus-binary"Read a Word16 with host endianness haskus-binary"Read a Word32 with host endianness haskus-binary"Read a Word64 with host endianness haskus-binaryRead some Word8 haskus-binary%Read some Word16 with host endianness haskus-binary%Read some Word32 with host endianness haskus-binary%Read some Word64 with host endianness haskus-binary0Read the given amount of bytes into a new buffer  haskus-binary8Read the given amount of bytes into the specified buffer  haskus-binary)Monad which can build a sequence of bytes  haskus-binary Write a Word8  haskus-binaryWrite a Word16  haskus-binaryWrite a Word32 haskus-binaryWrite a Word64 haskus-binaryWrite some Word8 haskus-binaryWrite some Word16 haskus-binaryWrite some Word32 haskus-binaryWrite some Word64 haskus-binaryWrite the contents of a buffer haskus-binary/Pre-allocate at least the given amount of bytesBThis is a hint for the putter to speed up the allocation of memory haskus-binary'Write a Word16 with little-endian order haskus-binary'Write a Word32 with little-endian order haskus-binary'Write a Word64 with little-endian order haskus-binary$Write a Word16 with big-endian order haskus-binary$Write a Word32 with big-endian order haskus-binary$Write a Word64 with big-endian order haskus-binary*Write some Word16 with little-endian order haskus-binary*Write some Word32 with little-endian order haskus-binary*Write some Word64 with little-endian order haskus-binary'Write some Word16 with big-endian order haskus-binary'Write some Word32 with big-endian order  haskus-binary'Write some Word64 with big-endian order! haskus-binary&Read a Word16 with little-endian order" haskus-binary&Read a Word32 with little-endian order# haskus-binary&Read a Word64 with little-endian order$ haskus-binary#Read a Word16 with big-endian order% haskus-binary#Read a Word32 with big-endian order& haskus-binary#Read a Word64 with big-endian order' haskus-binary)Read some Word16 with little-endian order( haskus-binary)Read some Word32 with little-endian order) haskus-binary)Read some Word64 with little-endian order* haskus-binary&Read some Word16 with big-endian order+ haskus-binary&Read some Word32 with big-endian order, haskus-binary&Read some Word64 with big-endian order8      !"#$%&'()*+,8      $%&!"#*+,'()*None.;=?M8 9 haskus-binaryJA Put monad than fails when there is not enough space in the target buffer haskus-binaryBuffer used for writing haskus-binaryCurrent offset; haskus-binaryRun a buffer put< haskus-binaryGet current offset= haskus-binary Get buffer> haskus-binaryGet current offset haskus-binary8Called when there is not enough space left in the buffer haskus-binaryHelper to put something haskus-binaryHelper to put some things89:;<=>9:8<=>;,-.,-/012013,-4,-5,-6,-7,-8,-9,-:,-;,-<,-=,->,-?,-@,-A0BC0DE0DF0DG0DH0DI0DJ0DK0DK0LM0LN0LO01P01Q01R012,STUVWUXYZ[\Z[\]^_`abcdefghijkllmnopqrstuvvwxyz{|}~                                        ! " # $%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[[\]^_`abcdeefghijklmnopqrrponmlkjihgfstuvwxyz{|}~  rr   _ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFFGHIJKLMHGNOPQRSTUVWXYZ[\]^_`abcdefghijklmnnopqrstuvwxyz{|}~                                            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""" """"######## # # # # #################### #!#"###$#%#&#'#(#)#*#+#,#-#.#/#0#1#2#3#4#5#6#7#8#9#:#;#<#=#>#?#@#A#B#C#D#E#F#G#H#I#J#K#L#M#N$O$P$Q$R$S$T%U%V%W%W%X%Y%Z%[%\%]%^%_%`%a%b%c%d%e%f%g&h&i&j&j&k&l&m&n&o&p&q&r&s&t&u&v&w&x&y&z&{&|&}&~&&&&&&o'''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))) ) )?) ) ) )))));))))))))))))))) )!)")#)$)%)&)')()))*)+),)-).)/)0)1)2)3)4)5*6*7*7*8*9*:*;*<*=*>*?*@*A*B*CD,SE,SF0GH0GI0GJ0GK0GL0GM0GN0GO,SP,SQ0RS0RT0RU0RV0RW0RX0RY0RZ0G[0G\0G]0G^0G_0G`0Ga0Gb0Gc0Gd0Ge0Gf0Gg0Gh0Gi0Gj0Gk0Gl0Gm0Gn0Go0Gp0Gq0Gr0Rs0Rt0Ru0Rv0Rw0Rx0Ry0Rz0R{0R|0R}0R~0R0R0R0R0R0R0R0R0R0R0R0R,,,,,,,,,,,,0G0G0R0R0R0R0R00,S,-|"""""###%,,*****(haskus-binary-1.4-4sX642VMORm5buj7XsFUX4Haskus.Format.Binary.WordHaskus.Format.Binary.PtrHaskus.Format.Binary.PutHaskus.Format.Binary.GetHaskus.Format.Number.BitNatHaskus.Format.Binary.Bits.OrderHaskus.Format.Binary.LayoutHaskus.Format.Binary.StorableHaskus.Format.Binary.EnumHaskus.Format.Binary.CharHaskus.Format.Binary.Bits.Shift Haskus.Format.Binary.Bits.Finite!Haskus.Format.Binary.Bits.Bitwise Haskus.Format.Binary.Bits.RotateHaskus.Format.Binary.Bits.Mask Haskus.Format.Binary.Bits.HelperHaskus.Format.Binary.Bits.IndexHaskus.Memory.BufferHaskus.Memory.Allocator.MallocHaskus.Memory.EmbedHaskus.Memory.ViewHaskus.Utils.MemoryHaskus.Format.Binary.UnionHaskus.Format.Binary.RecordHaskus.Format.Binary.BufferHaskus.Format.Binary.BufferList"Haskus.Format.Binary.BufferBuilder!Haskus.Format.Binary.Bits.ReverseHaskus.Format.Binary.Bits!Haskus.Format.Number.NaturalRangeHaskus.Format.Binary.VectorHaskus.Format.Binary.PositHaskus.Format.Binary.BitSetHaskus.Format.Binary.BitFieldHaskus.Format.Binary.UnumHaskus.Format.Binary.FixedPointHaskus.Format.Binary.Bits.PutHaskus.Format.Binary.Bits.Get#Haskus.Format.Binary.VariableLengthHaskus.Format.Binary.EndiannessHaskus.Format.Binary.Serialize%Haskus.Format.Binary.Serialize.BufferHaskus.Format.Numberghc-primGHC.PrimInt#Word#baseGHC.PtrPtrFunPtr+#-#>#>=#==#<#<=# plusWord# minusWord#gtWord#geWord#eqWord#ltWord#leWord#GHC.ForeignPtr ForeignPtrForeign.C.TypesCShortCUShortCIntCUIntCLongCULongCSize Foreign.Ptr wordPtrToPtr ptrToWordPtrWordPtrcastPtrToFunPtrcastFunPtrToPtr nullFunPtr GHC.TypesisTrue#%cereal-0.5.8.0-GaBg9CPzXaNJC4BIy7cegvData.Serialize.PutPutData.Serialize.GetGet/haskus-utils-types-1.4.1-LGBTCGkt7xfBRiF0JDoJULHaskus.Utils.Types.ProxyNatValBitOrderBBLBBLLL$fShowBitOrder $fEqBitOrder:#>:-> LPathOffset LPathTypeLRootPathElemLIndexLSymbolLPathlPathPtrLikecastPtrnullPtrindexPtr ptrDistancewithPtr mallocBytes--> FinalizedPtrnullForeignPtrwithFinalizedPtr indexPtr'mallocForeignPtrByteswithForeignPtrfree$fPtrLikeFinalizedPtr $fPtrLikePtr$fShowFinalizedPtrIntNWordN IntAtLeast WordAtLeastStorablepeekIOpokeIO alignmentsizeOf PaddingExPaddingRequiredPaddingStaticStorableSizeOf Alignment staticPeekIO staticPokeIO staticPeek staticPoke staticSizeOfstaticAlignment wordBytespeekpokesizeOf'sizeOfTsizeOfT' alignment' alignmentT alignmentT' peekByteOff pokeByteOff peekElemOff pokeElemOff allocaBytesallocaBytesAlignedallocamallocwith allocaArray mallocArray peekArray pokeArray withArray withArrayLenwithMany$fStaticStorableInt64$fStaticStorableInt32$fStaticStorableInt16$fStaticStorableInt8$fStaticStorableWord64$fStaticStorableWord32$fStaticStorableWord16$fStaticStorableWord8 $fGStorableM1$fGStorable:*: $fGStorableU1$fStorableWordPtr$fStorableCShort$fStorableCUShort$fStorableCInt$fStorableCUInt$fStorableCLong$fStorableCULong$fStorableCChar$fStorableCSize $fStorablePtr $fStorableInt$fStorableWord$fStorableChar$fStorableDouble$fStorableFloat$fStorableInt64$fStorableInt32$fStorableInt16$fStorableInt8$fStorableWord64$fStorableWord32$fStorableWord16$fStorableWord8 $fGStorableK1CEnum fromCEnumtoCEnum EnumField fromEnumField toEnumFieldmakeEnumWithCustom makeEnumMaybemakeEnum dataToTag$fStaticStorableEnumField$fShowEnumField $fEqEnumField$fStorableEnumFieldChar8 $fShowChar8 $fEqChar8 $fOrdChar8$fStorableChar8SignedShiftableBits signedShiftR signedShiftLuncheckedSignedShiftRuncheckedSignedShiftL signedShiftuncheckedSignedShift ShiftableBitsshiftRshiftLuncheckedShiftRuncheckedShiftLshiftuncheckedShift$fShiftableBitsNatural$fShiftableBitsInteger$fShiftableBitsInt64$fShiftableBitsInt32$fShiftableBitsInt16$fShiftableBitsInt8$fShiftableBitsInt$fShiftableBitsWord64$fShiftableBitsWord32$fShiftableBitsWord16$fShiftableBitsWord8$fShiftableBitsWord$fSignedShiftableBitsInt64$fSignedShiftableBitsInt32$fSignedShiftableBitsInt16$fSignedShiftableBitsInt8$fSignedShiftableBitsInt FiniteBitsBitSizebitSizezeroBitsoneBitscountLeadingZeroscountTrailingZeros complement$fFiniteBitsInt64$fFiniteBitsInt32$fFiniteBitsInt16$fFiniteBitsInt8$fFiniteBitsInt$fFiniteBitsWord64$fFiniteBitsWord32$fFiniteBitsWord16$fFiniteBitsWord8$fFiniteBitsWordBitwise.&..|.xor$fBitwiseNatural$fBitwiseInteger$fBitwiseInt64$fBitwiseInt32$fBitwiseInt16 $fBitwiseInt8 $fBitwiseInt$fBitwiseWord64$fBitwiseWord32$fBitwiseWord16$fBitwiseWord8 $fBitwiseWord RotatableBitsrotaterotateLrotateRuncheckedRotateuncheckedRotateLuncheckedRotateR$fRotatableBitsInt64$fRotatableBitsInt32$fRotatableBitsInt16$fRotatableBitsInt8$fRotatableBitsInt$fRotatableBitsWord64$fRotatableBitsWord32$fRotatableBitsWord16$fRotatableBitsWord8$fRotatableBitsWordMaskableMaskBits makeMaskDynmakeMaskFinitemakeMaskmaskDynmask$fMaskBitsInt64$fMaskBitsInt32$fMaskBitsInt16$fMaskBitsInt8 $fMaskBitsInt$fMaskBitsWord64$fMaskBitsWord32$fMaskBitsWord16$fMaskBitsWord8$fMaskBitsWord$fMaskBitsNatural bitOffset byteOffset IndexableBitsbitsetBitclearBit complementBittestBitpopCount$fIndexableBitsInt64$fIndexableBitsInt32$fIndexableBitsInt16$fIndexableBitsInt8$fIndexableBitsInt$fIndexableBitsWord64$fIndexableBitsWord32$fIndexableBitsWord16$fIndexableBitsWord8$fIndexableBitsWord AnyBuffer BufferToList bufferToList BufferSize bufferSizeThawableunsafeBufferThaw FreezableunsafeBufferFreeze Finalizers TypedBufferBufferEF BufferMEF BufferMPFBufferMFBufferPFBufferFBufferEBufferMEBufferMPBufferMBufferPBufferIBuffer MutabilityMutable ImmutableHeapInternalExternal Finalization Collected Finalized NotFinalizedPinningPinned NotPinned newBuffernewPinnedBuffernewAlignedPinnedBuffer addFinalizer touchBuffermakeFinalizablebufferIsDynamicallyPinnedbufferDynamicallyPinnedunsafeWithBufferAddr#unsafeWithBufferPtrwithBufferAddr# withBufferPtr bufferSizeIObufferToListIObufferReadWord8IObufferReadWord8bufferWriteWord8IObufferReadWord16IObufferReadWord16bufferWriteWord16IObufferReadWord32IObufferReadWord32bufferWriteWord32IObufferReadWord64IObufferReadWord64bufferWriteWord64IO copyBuffer$fIsListBuffer$fFreezableBufferBuffer$fFreezableBufferBuffer0$fThawableBufferBuffer$fThawableBufferBuffer0$fBufferSizeBuffer$fBufferSizeBuffer0$fBufferSizeBuffer1$fBufferSizeBuffer2$fBufferSizeBuffer3$fBufferSizeBuffer4$fBufferSizeBuffer5$fBufferSizeBuffer6$fBufferToListBuffer$fBufferToListBuffer0$fBufferToListBuffer1$fBufferToListBuffer2 $fShowPinning $fEqPinning$fShowFinalization$fEqFinalization$fShowMutability$fEqMutabilitynewFinalizedBuffer makeFinalized freeBuffer EmbedEntryembedEntryTypeembedEntryAlignementembedEntrySymbolembedEntryFilePathembedEntryOffsetembedEntrySize SectionTypeReadOnlySectionWriteableSectionUninitializedSection embedBytes loadSymbolloadMutableSymbol toBufferE toBufferE' toBufferME toBufferME'makeEmbeddingFile embedFileembedPinnedBufferembedUnpinnedBuffer embedBuffer$fShowSectionType$fEqSectionType$fOrdSectionType$fShowEmbedEntry$fEqEmbedEntry$fOrdEmbedEntry ViewPattern PatternFull Pattern1D Pattern2D PatternOnpattern1DOffset pattern1DSizepattern2DOffsetpattern2DWidthpattern2DHeightpattern2DStrideView ViewSource SourceBufferSourceWeakBufferSourceWeakViewunsafePatternSize patternSize viewReadWord8 newBufferViewnewBufferWeakViewnewViewWeakViewcopyBufferWithPattern viewToBuffer showViewState$fShowViewPatternmemCopymemSet allocaArrays peekArrays pokeArrays withArrayswithMaybeOrNullUnion fromUniontoUnion toUnionZero$fStaticStorableUnion$fApplyFoldSizeOf(,)r$fStorableUnion$fStorableUnion0$fApplyFoldAlignment(,)r $fShowUnionPath RecordSizeFieldRecord recordSizerecordAlignmentrecordFieldOffset recordFieldrecordFieldPathOffsetrecordFieldPath recordToList$fStaticStorableRecord $fShowRecord$fApplyExtract(,)r bufferDup bufferZero bufferZipWith isBufferEmpty emptyBufferbufferPeekStorablebufferPeekStorableAtbufferPopStorable bufferPoke bufferMap bufferReverse bufferDrop bufferSplitOn bufferTail bufferAppend bufferCons bufferSnoc bufferInit bufferHead bufferIndexbufferUnpackByteListbufferUnpackByteString bufferTakebufferTakeWhilebufferTakeAtMostbufferPackByteStringbufferPackByteListbufferPackStorablebufferPackStorableList bufferPackPtrbufferUnsafePackPtrbufferUnsafeDropbufferUnsafeTakebufferUnsafeTailbufferUnsafeHeadbufferUnsafeLastbufferUnsafeInitbufferUnsafeIndexbufferUnsafeMapMemorybufferUnsafeUsePtrbufferReadFilebufferWriteFile$fIndexableBitsBuffer$fBitwiseBuffer $fShowBuffer $fEqBuffer $fOrdBufferrunPut putBuffer putByteString putPaddingputPaddingAlignputWord8 putWord16le putWord16be putWord32le putWord32be putWord64le putWord64be BufferListtoBuffer toBufferListtoLazyByteString BufferBuilderemptyBufferBuilder fromBuffer fromWord8$fSemigroupBufferBuilder$fMonoidBufferBuilderReversableBits reverseBitsreverseBitsGenericreverseBitsObviousreverseBits3OpsreverseBits4OpsreverseBitsTablereverseBits7OpsreverseBits5LgNliftReverseBits$fReversableBitsInt$fReversableBitsInt64$fReversableBitsInt32$fReversableBitsInt16$fReversableBitsInt8$fReversableBitsWord$fReversableBitsWord64$fReversableBitsWord32$fReversableBitsWord16$fReversableBitsWord8BitsreverseLeastBits bitsToString bitsToStringNbitsFromString getBitRangeNarrowWidenMakeW BitNatWordBitNatnatzeroWoneW toNaturalW unsafeMakeW safeMakeWextractWwidennarrowcompareW.+..-..*../..<<..>>. $fOrdBitNat $fEqBitNat $fShowBitNatNatRangeunsafeMakeNatRangesafeMakeNatRange makeNatRangenatRange widenNatRange.++.$fShowNatRangeVector vectorBuffer vectorReversetakedropindexfromListfromFilledListfromFilledListZtoList replicateconcatzipWith$fRotatableBitsVector$fIndexableBitsVector$fShiftableBitsVector$fFiniteBitsVector$fBitwiseVector $fEqVector$fStorableVector$fStaticStorableVector $fShowVector$fApplyStoreVector(,)r PositEncoding PositInfinity PositZero PositFields positNegativepositRegimeBitCountpositExponentBitCountpositFractionBitCount positRegime positExponent positFractionPositKZeroInfinityValue PositKindZeroK InfinityKNormalKPosit positKindisZero isInfinity isPositive isNegativepositAbs positEncoding positFieldspositToRationalpositFromRationalpositApproxFactorpositDecimalErrorpositDecimalAccuracypositBinaryErrorpositBinaryAccuracyfloatBinaryAccuracy $fShowPosit$fShowPositKind $fEqPositKind$fShowPositFields$fShowPositEncodingCBitSet toBitOffset fromBitOffsetBitSetnullempty singletoninsertdeletetoBitsfromBitsmemberelem notMemberelems intersectionunionunionsfromListToBitstoListFromBitsenumerateSetBits$fIsListBitSet $fCBitSetWord $fCBitSetInt $fShowBitSet $fEqBitSet $fOrdBitSet$fStorableBitSetBitField BitFields bitFieldsBits extractField extractField' updateField updateField' withField withField' matchFieldsmatchNamedFields$fFieldEnumField $fFieldBitSet $fFieldInt64 $fFieldInt32 $fFieldInt16 $fFieldInt8 $fFieldInt $fFieldWord64 $fFieldWord32 $fFieldWord16 $fFieldWord8 $fFieldWord $fFieldBool $fEqBitFields$fShowBitFields$fApplyName(,)r$fStorableBitFields$fStorableBitFieldCSORNSornAddsornAddUsornAdd sornAddDepsornSubUsornSub sornSubDepSORNSORNBackingWordSignPositiveNegativeNoSignUBit ExactNumber OpenIntervalU BackingWordLog2UnumSize UnumNumbersInfiniteRcpNegIUnumNum unumLabelUnum unumLabelsunumSizeunumZero unumInfiniteunumBits unumEncode unumNegateunumReciprocateunumSignsornBitssornSize sornEmptysornFullsornNonInfinite sornNonZero sornSingle sornInsert sornRemove sornMember sornUnion sornIntersectsornComplement sornNegate sornElems sornFromElems sornFromTo csornToSorn csornSize csornBits csornEmpty csornIsEmpty csornFromTo csornFull csornSingle $fUnumNumI $fUnumNumNeg $fUnumNumRcp$fUnumNumUncertain$fApplyGetLabel(,)r$fShowU$fEqU $fShowSORN $fShowCSORN $fShowUBit$fEqUBit $fShowSign$fEqSign FixedPoint toFixedPointfromFixedPoint$fStorableFixedPoint$fShowFixedPoint$fEqFixedPointBitPutBitPutT BitPutStatebitPutStateBuilderbitPutStateCurrentbitPutStateOffsetbitPutStateBitOrdernewBitPutStateputBits putBitsBuffergetBitPutBufferListgetBitPutBuffer runBitPutT runBitPutputBitsM putBitBoolMputBitsBufferMchangeBitPutOrderwithBitPutOrderBitGetBitGetT BitGetStatebitGetStateInputbitGetStateBitOffsetbitGetStateBitOrdernewBitGetStateisEmptyskipBitsskipBitsToAlignOnWord8getBitsgetBitsChecked getBitsBuffer runBitGetT runBitGetrunBitGetPartialTrunBitGetPartialresumeBitGetPartialTresumeBitGetPartialisEmptyM skipBitsMskipBitsToAlignOnWord8MgetBitsMgetBitsCheckedM getBitBoolM getBitsBSMchangeBitGetOrderwithBitGetOrder$fShowBitGetState remainingskip uncheckedSkip skipAlignuncheckedSkipAlign lookAhead lookAheadM lookAheadEconsumeExactly consumeAtMost getBuffergetWord8 getWord16le getWord16be getWord32le getWord32be getWord64le getWord64begetWhilegetWhole getRemaining countBytes alignAfter getBufferNulrunGet runGetOrFail getBitGet getManyAtMostgetManyBounded getULEB128 putULEB128 getSLEB128 putSLEB128getLEB128BufferAsLittleEndian AsBigEndianByteReversable reverseByteshostToBigEndianbigEndianToHosthostToLittleEndianlittleEndianToHostExtendedWordPuttersextwordPutter8extwordPutter16extwordPutter32extwordPutter64extwordPutterNExtendedWordGettersextwordGetter8extwordGetter16extwordGetter32extwordGetter64extwordGetterNWordSize WordSize32 WordSize64 WordPutters wordPutter8 wordPutter16 wordPutter32 wordPutter64 WordGetters wordGetter8 wordGetter16 wordGetter32 wordGetter64 Endianness LittleEndian BigEndiangetWordGettersgetWordPuttersgetExtendedWordGettersgetExtendedWordPuttersgetHostEndiannesshostEndianness$fCEnumEndianness$fByteReversableWord64$fByteReversableWord32$fByteReversableWord16$fByteReversableWord8$fStorableAsBigEndian$fStaticStorableAsBigEndian$fShowAsBigEndian$fStorableAsLittleEndian$fStaticStorableAsLittleEndian$fShowAsLittleEndian$fEqEndianness$fShowEndianness$fEnumEndianness$fShowWordSize $fEqWordSize$fEqAsBigEndian$fOrdAsBigEndian$fEnumAsBigEndian$fNumAsBigEndian$fIntegralAsBigEndian$fRealAsBigEndian$fBitwiseAsBigEndian$fFiniteBitsAsBigEndian$fReversableBitsAsBigEndian$fRotatableBitsAsBigEndian$fShiftableBitsAsBigEndian$fIndexableBitsAsBigEndian$fEqAsLittleEndian$fOrdAsLittleEndian$fEnumAsLittleEndian$fNumAsLittleEndian$fIntegralAsLittleEndian$fRealAsLittleEndian$fBitwiseAsLittleEndian$fFiniteBitsAsLittleEndian$fReversableBitsAsLittleEndian$fRotatableBitsAsLittleEndian$fShiftableBitsAsLittleEndian$fIndexableBitsAsLittleEndian SerializableEndianputgetSizeExactlyAtLeastDynamicGetMonad getWord16 getWord32 getWord64 getWord8s getWord16s getWord32s getWord64s getBufferIntoPutMonad putWord16 putWord32 putWord64 putWord8s putWord16s putWord32s putWord64spreAllocateAtLeast putWord16LE putWord32LE putWord64LE putWord16BE putWord32BE putWord64BE putWord16LEs putWord32LEs putWord64LEs putWord16BEs putWord32BEs putWord64BEs getWord16LE getWord32LE getWord64LE getWord16BE getWord32BE getWord64BE getWord16LEs getWord32LEs getWord64LEs getWord16BEs getWord32BEs getWord64BEs$fSerializableAsLittleEndian$fSerializableAsBigEndian$fSerializableBuffer$fSerializableInt64$fSerializableInt32$fSerializableInt16$fSerializableInt8$fSerializableWord64$fSerializableWord32$fSerializableWord16$fSerializableWord8 BufferPut BufferPutT runBufferPut getPutOffset getPutBuffer setPutOffset$fPutMonadBufferPutT$fFunctorBufferPutT$fApplicativeBufferPutT$fMonadBufferPutT$fMonadFailBufferPutT$fMonadFixBufferPutT$fMonadIOBufferPutT$fMonadTransBufferPutTnullFinalizedPtrIntI#GHC.IntInt8I8#Int16I16#Int32I32#Int64I64#WordW#GHC.WordWord8W8#Word16W16#Word32W32#Word64W64#leInt64ltInt64geInt64gtInt64neInt64eqInt64leInt32ltInt32geInt32gtInt32neInt32eqInt32leInt16ltInt16geInt16gtInt16neInt16eqInt16leInt8ltInt8geInt8gtInt8neInt8eqInt8leWord64ltWord64geWord64gtWord64neWord64eqWord64leWord32ltWord32geWord32gtWord32neWord32eqWord32leWord16ltWord16geWord16gtWord16neWord16eqWord16leWord8ltWord8geWord8gtWord8neWord8eqWord8 GHC.ClasseseqWordneWordeqIntneIntgtIntgeIntltIntleIntgtWordgeWordltWordleWorduncheckedIShiftRA64#uncheckedIShiftL64# byteSwap64uncheckedShiftRL64#uncheckedShiftL64# byteSwap32 byteSwap16fsPeekfsPokeGHC.RealmoddivTrueinsertFinalizer runFinalizers newFinalizers RealWorld(primitive-0.6.4.0-1mvPxVOk6Q6KOkWCZxqESfControl.Monad.Primitive PrimMonad PrimState primitiveevalPrimtouchunsafeInlineSTunsafeInlineIOunsafeInlinePrimunsafeIOToPrimunsafeSTToPrimunsafePrimToIOunsafePrimToSTunsafePrimToPrimstToPrimioToPrimprimToSTprimToIO primToPrimliftPrim primitive_PrimBaseinternalmakeEmbedEntry embedFile' patternOffsetpatternApplyOn withValidViewbufferWeakViewFinaliermemsetmemcpytoUnion' unionSizeunionAlignment FieldPathTypeFieldPathOffsetRecordAlignmentFullRecordSizemakeWtoNaturalNatRange ElemOffsetmap WholeSizeOutputOffsetmatchNamedFields' UnumMembersUnumIndexables UnumPositivesflushIncompletemaxminbufferPutBufferbufferPutOffsetbufferPutNotEnoughSpace putSomething putSomeThings