!0z      !"#$%&'()*+,-./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[\]^_`abcdefghijklmnopqrstuvwxyNone_m!KronAn infix form of  with arguments flipped.   ! "#$%R&uwsxtvy`_^'()*=@+,-./0123>?4CDE56789:;AB<FGIJKLMNOPQSTHUVXWYZ[\]abcdefghijklmnopqr{z|}~   ! "#$%R&uwsxtvy`_^'()*=@+,-./0123>?4CDE56789:;AB<FGIJKLMNOPQSTHUVXWYZ[\]abcdefghijklmnopqr{z|}~0None,9>m)T None_m*ronData block descriptorron"Does the descriptor refer to an op          Nonem+z{Safe,m1ronA bounded semilattice.0Bounded semilattice laws are already defined by ) and ,, so we don't define an explicit class here.ronA semilattice.EIt may be a join-semilattice, or meet-semilattice, it doesn't matter.#If it matters for you, use package lattices.In addition to (!, Semilattice defines these laws:  commutativity x <> y == y <> x idempotency x <> x == xSafe,EXm2aNonem7|ron} adapter to ~ron Variant of  with a more debuggable message.ronFApply parser and check it is applied successfully. Kinda opposite to .ronWParses a definite double, i.e. it is not an integer. For this, the double has either a L, and 'e'/'E' part or both.=}|~3None@AMagkm> 1ron'& smart constructor dropping upper bitsBron&& smart constructor dropping upper bitsCron$& smart constructor dropping upper bitsDronC specialized for 7Eron#& smart constructor dropping upper bitsFronE specialized for 8Gron"& smart constructor dropping upper bitsHronG specialized for 9Iron!& smart constructor dropping upper bitsJronI specialized for :Kron!" smart constructor checking domain2789: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKL2'-./0,+*)1&23456789:;<=>?@A(B$%CD7#EF8"GH9!IJKL: None_amMXuronBase64 alphabetvron/Check if a character is in the Base64 alphabet.wron*Convert a Base64 letter to a number [0-63]xron;Convert a subset [0-F] of Base64 letters to a number [0-15]yron"Decode a blob from a Base64 stringzron+Decode a 60-bit number from a Base64 string{ron+Decode a 60-bit number from a Base32 string|ron+Decode a 64-bit number from a Base64 string}ron+Decode a 64-bit number from a Base32 string~ron Encode a blob to a Base64 stringron0Convert a number from [0..63] to a single letterron0Convert a number from [0..15] to a single letterron)Encode a 60-bit number to a Base64 stringronCEncode a 60-bit number to a Base64 string, dropping trailing zeroesronCEncode a 64-bit number to a Base32 string, dropping trailing zeroesron)Encode a 64-bit number to a Base64 stringuvwxyz{|}~uyz{|}wx~vNone "#$%279XgmYronUUID split in partsron)Universally unique identifier of anythingronUUID with all zero fieldsronSplit UUID into partsronBuild UUID from partsron'Build former 64 bits of UUID from partsron'Build latter 64 bits of UUID from partsron#Make an unscoped (unqualified) nameron$Contruct a UUID name in compile-timeronMake a scoped (qualified) nameronConvert UUID to a nameronUUID with all zero fieldsronIncrement field  of a UUIDron Encode a UUID to a Base32 stringron"Decode a UUID from a Base32 stringronRON-Text-encodingronname, max 10 Base64 lettersronscope, max 10 Base64 lettersron!local name, max 10 Base64 lettersron (scope, name) for a scoped name;  (name, "") for a global name None "$279X_dgkmcEronObject accompanied with a frameronReference to an objectron"Frame containing only state chunksronCReduced chunk representing an object state (i. e. high-level value)ron Op terminatorron Common frameron Common chunkronCommon reduced chunkronOpen op (operation)ronevent id (usually timestamp)ron;reference to other op; actual semantics depends on the typeronpayloadron Closed oprontyperon object idron7other keys and payload, that are common with reduced opronAtom  a payload element;; None"#$_`mjL ronSerialize a frameronSerialize a chunkronSerialize a closed opronSerialize a reduced opron Serialize a ronEncode descriptorron(Prepend serialized bytes with descriptorron Serialize an ronSerialize a float atomronSerialize a reduced chunkronSerialize a string atomronbody None "#PX_`amxron for descriptorron for extended length fieldron Parse frameron for frameron for chunk sequenceronClear upper bit of 9ron for a chunkronAssert that is such as expectedron for a sequence of reduced opsron? for closed op, returning the op's terminator along with the opron@ for reduced op, returning the op's terminator along with the opron! for closed op without terminatorron" for reduced op without terminatorron2 for an op key (type, object, event, or reference)ron for UUIDron" for a payload (sequence of atoms)ron for an atomron Parse an ron for a float atomron for an integer atomron for an stringronParse a string atomronexpected input lengthronexpected input lengthronexpected input lengthronexpected input lengthronexpected input lengthNonemxq None "#$79_agmronGet current replica idronGet sequential timestamps.Laws:  ) t <- getEvents n (t !! i) == head t + i  t1 <- # t2 <- # t2 >= t1 + 1 getEvents 0 == getEvents 1ron"Make local time not less than thisron1Epoch-based Lamport time event, specific case of .ron4Calendar-based Lamport time event, specific case of .ron'Generic Lamport time event. Cannot be !b because we can't compare different types of clocks. If you want comparable events, use specific . ronReplica identifier ronReplica id assignment styleronEClock type is encoded in 2 higher bits of variety, value in uuidValueron +https://en.wikipedia.org/wiki/Logical_clockronMRFC 4122 epoch, hundreds of nanoseconds since 1582. Year range is 1582 5235.ronCalendar format. See  (https://github.com/gritzko/ron/issues/191. Year range is 2010 2350. Precision is 100 ns."ron variant for any UUID#ronGet a single event$ronGet a single event as UUID%ronGet event sequence as UUIDs(ron%Make a calendar timestamp from a date)ron4Make a calendar timestamp from a date and a day time*ronHMake a calendar timestamp from a date, a day time, and a second fraction+ronMake an ! replica id from arbitrary numberronnumber of needed timestamps(ron(date as (year, month [1..12], day [1..]))ron(date as (year, month [1..12], day [1..])ron%day time as (hours, minutes, seconds)*ron(date as (year, month [1..12], day [1..])ron%day time as (hours, minutes, seconds)ron/fraction of a second in hundreds of nanosecond,      !"#$%&'()*+,     "+'& #$%()*! NoneM_m?Gron+ReplicaSim inside Lamport clock simulation.Iron!Lamport clock simulation. Key is  3. Non-present value is equivalent to (0, initial).JronExecute network simulationUsage: runNetworkSim $ do L r1 $ do actions... L r2 $ do actions... L r1 $ ... Each JX starts its own networks. One shouldn't use in one network events generated in another.FGHIJKLMHIFGJKLMNoneMmFZronNReal epoch clock. Uses kind of global variable to ensure strict monotonicity.[ronRun Z$ action with explicit time variable.\ronLike [6, but initialize time variable with current wall time.]ronGet current time in B format (with 100 ns resolution). Monotonicity is not guaranteed.ron?Convert unix time in hundreds of milliseconds to RFC 4122 time.^ron?Convert unix time in hundreds of milliseconds to RFC 4122 time._ron.Decode date and time from UUID epoch timestampZ[\]^_`Z_`]^[\None "#%X_gm@fron.Serialize UUID without context (used for test)gron Serialize UUID in op key contexthron)Serialize UUID in op value (atom) contextgron(same key in the previous op (default is )ron(previous key of the same op (default is )ronthishronpreviousronthisfghfhgNone"#$_agmironSerialize a common framejron%Serialize a sequence of common framesronSerialize a common chunkronSerialize a reduced chunkkronSerialize a context-free raw opron5Serialize a raw op with compression in stream contextron9Serialize a reduced op with compression in stream contextlronSerialize a context-free atomron=Serialize an atom with compression for UUID in stream contextron9Serialize a float atom. If unambiguous, i.e. contains a L or an 'e'/'E' , the prefix  is skipped.ronNSerialize an integer atom. Since integers are always unambiguous, the prefix '=' is always skipped.mronSerialize a string atomron%Serialize a payload in stream contextnronSerialize a state frameoronESerialize an object. Return object id that must be stored separately.ronenclosing objectronprevious UUID (default is )fijklmnoloknmfijNone "#$_`adm^pronParse a common frameron%Returns a chunk and the last op in itron;Returns a chunk and the last op (converted to closed) in itqron!Parse a sequence of common framesrronParse a single context-free opsron Parse a single context-free UUIDtronParse a UUID in key positionuron%Parse a UUID in value (atom) positionvron Parse an atomwronParse a string atomronReturn  and  chunkIsQueryxronParse a state frameyron Parse a state frame as an objectron)Extract object states from a common frametron(same key in the previous op (default is )ron(previous key of the same op (default is )uronprevious pqrstuvwxy vyrxwstupqNonemijnopqxyyxpqonij !"#$%&"'("')%*+,-./01023456789:;:<"'=0>?@AB%C"'DEFGH.IJKLMNOP"QR"QS"QT"QUVWVXVYVZ[\]^_"Q`"Qa"Qbcdcecfcghi"Qj"Qk^l^m"Qnhohp"Qq"Qr"Qstuvwxyz{|}~3333KKKKKKKKKKKKKhwww00000::::::%%%"' "' "' "' "' "'"'"'"'"'z{ !"#"$"%&'&(&)&*+,+-././.0121314151617189:9;<=>?@ABCDEFGHIJKKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqqrstuvwxyz{|}~                                                   ! " # $ % & ' ( ) * + , - . / 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 P Q Q R R S 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 { | } ~                                  GHJKI                            ron-0.7-4uyfBSSXdv1RTdNbbIrcn RON.Prelude RON.ErrorRON.Binary.TypesRON.SemilatticeRON.Util RON.Util.Word RON.Base64RON.UUID RON.TypesRON.Binary.SerializeRON.Binary.Parse RON.EventRON.Event.Simulation RON.EpochRON.Text.Serialize.UUIDRON.Text.SerializeRON.Text.Parse Data.ZigZagAttoparsec.Extra RON.BinaryRON.TextbaseGHC.Base++GHC.Listfilterzip Data.Tuplefstsnd otherwisemap$ghc-primGHC.PrimcoerceGHC.Num- GHC.Classes==>=negate>>=>>fmapControl.Monad.FailfailGHC.Real fromIntegral realToFrac Control.Monadguard<>mempty<*>pure*>GHC.EnumBoundedEnumEqIntegralMonad Data.DataDataFunctorNumOrdGHC.ShowShowData.Typeable.InternalTypeable MonadFail Applicative Data.FoldableFoldable GHC.GenericsGeneric SemigroupMonoid GHC.TypesBoolCharDoubleIntGHC.IntInt8Int16Int32Int64 integer-gmpGHC.Integer.TypeInteger GHC.MaybeMaybeOrderingIOWordGHC.WordWord8Word16Word32Word64 Data.EitherEither CoercibleFalseNothingJustTrueLeftRightLTEQGTbytestring-0.10.8.2Data.ByteString.Internal ByteString Data.Functor<$><|>'hashable-1.3.0.0-1RsrIcitxVDKffGN1TuMlmData.Hashable.ClassHashable text-1.2.3.1Data.Text.InternalTextconst.id time-1.8.0.2 Data.Time.Clock.Internal.UTCTimeUTCTime GHC.UnicodetoLower3unordered-containers-0.2.10.0-b9YJCQLkMeLUf311RZkQDData.HashMap.BaseHashMapcontainers-0.6.0.1Data.Map.InternalMap<*String AlternativeData.BifunctorbimapData.List.NonEmptynonEmptyControl.Monad.IO.ClassliftIOMonadIOunless<=<>=>filterMData.Traversableforsequence sequenceAtraverseControl.ApplicativeoptionalData.Functor.IdentityIdentity Data.IORefatomicModifyIORef' GHC.IORef writeIORef readIORefnewIORefIORefGHC.IOevaluatethrowIOcatchFilePathGHC.Exception.Type Exception minimumByorandasumfor_ traverse_lengthnulltoListfoldl'foldrfoldMapfold Data.MonoidLast Data.OldListunwordsunlinessortOnsortBy genericLength partition intercalate isSuffixOf isPrefixOfeitherData.Ord comparingDown Data.ProxyProxytoUpper Data.Functiononvoid$><&>^^^%modroundmaxBoundminBoundfromEnumtoEnumpredsuccGHC.CharchrzipWithlookupspansplitAtdroptake takeWhile replicaterepeat Data.MaybemapMaybe catMaybes listToMaybe maybeToList fromMaybemaybeuncurrysubtract*+flipordwhen=<<sconcat<$liftA2manysome:|NonEmptyGHC.Err undefinederrorGHC.Stack.Types HasCallStack/=<=compare&&||not<>maxminhashtransformers-0.5.5.0Control.Monad.Trans.Classlift MonadTrans mtl-2.2.2Control.Monad.Writer.Classtell MonadWriterControl.Monad.State.Classgetsmodify'putget MonadStateControl.Monad.Reader.Classreaderask MonadReaderControl.Monad.Error.Class liftEither catchError throwError MonadErrorControl.Monad.Trans.ExceptExceptT runExceptTControl.Monad.Trans.ReaderReaderT runReaderT Control.Monad.Trans.State.StrictStateT runStateTStaterunState evalState evalStateT execStateT!Control.Monad.Trans.Writer.StrictWriterT runWriterTfmapLfoldr1headMaylastDef maximumDefmaxOnminOnnote replicateM2 replicateM3showwhenJust!!?:MonadEError ErrorContext errorContext liftMaybeliftEitherStringthrowErrorTextthrowErrorString$fIsStringError$fExceptionError $fEqError $fShowErrorDesc DOpClosed DOpReduced DOpHeaderDOpQueryHeader DUuidReducer DUuidObjectDUuidOpDUuidRef DAtomUuidZipDUuidZipObject DUuidZipOp DUuidZipRef DAtomUuid DAtomInteger DAtomString DAtomFloatSizedescIsOp $fEnumDesc$fEqDesc $fShowDescBoundedSemilattice Semilattice$fSemilatticeMaybe$fSemilatticeSet$fSemilatticeMaxInstance ByteStringLSafeCastsafeCastWord60Word24Word12Word6W6Word4Word2B0000B11B10B01B00b00b01b10b11leastSignificant2b0000b0001b0010b0011b0100b0101b0110b0111b1000b1001b1010b1011b1100b1101b1110b1111leastSignificant4leastSignificant6ls6leastSignificant12ls12leastSignificant24ls24leastSignificant60ls60toWord60 word60add$fHashableWord60$fBoundedWord60$fSafeCastWord64Fixed$fSafeCastWord64Integer$fSafeCastWord60Word64$fSafeCastWord24Word32$fSafeCastWord24Word64$fSafeCastWord12Word64$fSafeCastWord8Word64$fSafeCastWord8Word32$fSafeCastWord6Word64$fSafeCastWord6Word60$fSafeCastWord6Word8$fSafeCastWord6Int$fSafeCastWord4Word8$fSafeCastWord4Word64$fSafeCastWord4Int$fSafeCastWord2Word64$fSafeCastWord2Word8$fSafeCastWord2Word4$fSafeCastWord2Int $fEqWord2 $fOrdWord2 $fShowWord2 $fEqWord4 $fOrdWord4 $fShowWord4 $fEqWord6 $fOrdWord6 $fShowWord6 $fEqWord12 $fOrdWord12 $fShowWord12 $fEqWord24 $fOrdWord24 $fShowWord24 $fEnumWord60 $fEqWord60 $fOrdWord60 $fShowWord60alphabetisLetter decodeLetter decodeLetter4decodedecode60decode60base32decode64decode64base32encode encodeLetter encodeLetter4encode60 encode60shortencode64base32shortencode64 UuidFields uuidVariety uuidValue uuidVariant uuidVersion uuidOriginUUIDZerosplitbuildbuildXbuildYmkNameliftName mkScopedNamegetNamezero succValue encodeBase32 decodeBase32 $fShowUUID $fDataUUID$fEqUUID $fGenericUUID$fHashableUUID $fOrdUUID$fEqUuidFields$fShowUuidFields OpPatternRegularDeleteUndeleteCreateAck AnnotationAnnotationDerived ObjectState$sel:uuid:ObjectState$sel:frame:ObjectStateObject StateFrame StateChunk$sel:stateType:StateChunk$sel:stateVersion:StateChunk$sel:stateBody:StateChunkOpTermTClosedTReducedTHeaderTQuery WireFrame WireChunkClosedValueQueryWireReducedChunk$sel:wrcHeader:WireReducedChunk$sel:wrcBody:WireReducedChunkOp $sel:opId:Op $sel:refId:Op$sel:payload:OpClosedOp$sel:reducerId:ClosedOp$sel:objectId:ClosedOp$sel:op:ClosedOpAtomAFloatAIntegerAStringAUuid UndeletePDeletePAckPRegularPCreatePAnnotationDerivedP AnnotationP opPattern$fShowClosedOp $fShowObject $fDataAtom$fEqAtom $fGenericAtom$fHashableAtom $fShowAtom$fDataOp$fEqOp $fGenericOp $fHashableOp$fShowOp$fDataClosedOp $fEqClosedOp$fGenericClosedOp$fDataWireReducedChunk$fEqWireReducedChunk$fGenericWireReducedChunk$fShowWireReducedChunk$fDataWireChunk $fEqWireChunk$fGenericWireChunk$fShowWireChunk $fEqOpTerm $fShowOpTerm$fEqStateChunk$fShowStateChunk $fEqObject$fEqObjectState$fShowObjectState serialize serializeAtomserializeStringparse parseAtom parseString ReplicaClockgetPid getEventsadvance EpochEvent CalendarEventEvent ReplicaIdNaming TrieForked CryptoForked RecordForkedApplicationSpecific LocalTime TCalendarTLogicalTEpochTUnknown EpochTime CalendarTimemonthsdayshoursminutessecondsnanosecHundredsfromCalendarEventfromEpochEvent toEpochEvent advanceToUuidgetEvent getEventUuid getEventUuids encodeEvent decodeEventmkCalendarDatemkCalendarDateTimemkCalendarDateTimeNanoapplicationSpecific$fHashableNaming$fOrdCalendarEvent$fOrdEpochEvent$fReplicaClockWriterT$fReplicaClockStateT$fReplicaClockReaderT$fReplicaClockExceptT$fEqCalendarTime$fOrdCalendarTime$fShowCalendarTime $fEqLocalTime$fShowLocalTime$fBoundedNaming $fEnumNaming $fEqNaming $fShowNaming $fEqReplicaId$fShowReplicaId$fGenericReplicaId$fHashableReplicaId $fEqEvent $fShowEvent$fEqCalendarEvent$fShowCalendarEvent$fEqEpochEvent$fShowEpochEvent ReplicaSim ReplicaSimT NetworkSim NetworkSimT runNetworkSimrunNetworkSimT runReplicaSimrunReplicaSimT$fMonadTransNetworkSimT$fMonadFailReplicaSimT$fReplicaClockReplicaSimT$fMonadTransReplicaSimT$fApplicativeNetworkSimT$fFunctorNetworkSimT$fMonadNetworkSimT$fMonadErrorNetworkSimT$fApplicativeReplicaSimT$fFunctorReplicaSimT$fMonadReplicaSimT$fMonadErrorReplicaSimT EpochClock runEpochClockrunEpochClockFromCurrentTimegetCurrentEpochTimelocalEpochTimeFromUnix$fReplicaClockEpochClock$fApplicativeEpochClock$fFunctorEpochClock$fMonadEpochClock$fMonadIOEpochClock serializeUuidserializeUuidKeyserializeUuidAtomserializeWireFrameserializeWireFramesserializeRawOpserializeStateFrameserializeObjectparseWireFrameparseWireFramesparseOp parseUuid parseUuidKey parseUuidAtomparseStateFrame parseObjectzzEncode zzDecode64takeL*attoparsec-0.13.2.2-B14bJ66Powa2Ur6cqXb7E2#Data.Attoparsec.ByteString.Internal endOfInputExData.Attoparsec.Internal endOfInput isSuccessfuldefiniteDoubleData.Attoparsec.ByteString.Lazy eitherResult maybeResult parseTestResultFailDonematch parseOnly peekWord8' peekWord8notWord8word8anyWord8 notInClassinClass takeWhile1 runScannerscantakeLazyByteStringtakeByteStringtakeTill skipWhilestring satisfyWithskipsatisfyParserData.Attoparsec.CombinatorfeedeitherPcount skipMany1skipMany manyTill'manyTillsepBy1'sepBy1sepBy'sepBymany1'many1many'optionchoicetryatEndcompareResults parseOnlyL withInputSizelabel??char<+>serializeChunkserializeClosedOpserializeReducedOp encodeDescserializeWithDescserializeFloatserializeReducedChunk parseDescextendedLength parseFrame parseChunksleastSignificant31 parseChunk assertSizeparseReducedOpsparseDescAndClosedOpparseDescAndReducedOp parseClosedOp parseOpenOp parseOpKeyuuid parsePayloadatomfloatintegerepochTimeFromUnixserializeClosedOpZipserializeReducedOpZipserializeAtomZipserializeFloatAtomserializeIntegerAtomserializePayloadpChunkwireStateChunkheader findObjects