L      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K NoneLM N OPQRSTUVWXYZ[   LM N OPQRSTUVWXYZ[None    None    None!"None !"04C* 2The operations that can be applied to JSON values.!Set is applied to SNs. It is used for adding, updating and deleting properties from the object.$Splice is used to manipulate ArrayGs. It can remove and insert multiple elements in a single operation.(ObjectId);The base object whose snapshots contain the actual content.*>An object describing a particualar release of the base object.+*Object which contains authorization rules.,RevId/ObjId2Path5<Pk - Types which can be converted to a database primary key.7>This path refers to the root of an object. It is only used in ! operations.8aThe root object id is used for object created internally or when there is no applicable creator.9The ,( which is used for the initial snapshot._PatchhSnapshotoSecretA o> is a password (encrypted with scrypt) that is attached to a s (for example the / of an account).It is up to you to ensure that ss are unique. If you use /s then they by definition are.sSecretIdvReleasexDThe initial snapshot on top of which all future patches are applied.BlobBlobId2The session record that is stored in the database.A session is a unique identifier attached to a particular object. It contains the creation date and when it was last accessed. If you need to store additional data for a session, we recommend to use cookies. SessionId_The table name is derived from the view name. Therefore it should be unique amongst all views.2Function which parses objects stored in this view.JFunction which transforms an Avers Object into a type stored in the view.&Secondary indices defined on the view.3A reference to the config, just in case we need it.8A pool of handles which are used to access the database. Map from ( to a recent ,2. It may be the latest or a few revisions behind.Changes in the system (new patches, objects, releases etc), even those created through other handles, are streamed into this channel. If you want to be informed of those changes, duplicate the channel and read from the copy.KA change in the system, for example a new object, patch, release, blob etc.A new patch was created.Configuration of the  monad.\H which describes the connection details to the RethinkDB database. The \' *MUST* include at least the hostname (]) and database name (^( without the leading slash). The port (_) and credentials (`C) *MAY* be left empty. in that case the default port will be used.Function which saves the given blob in the blob store. This can be the local filesystem or an external service such as Amazon S3.-All the object types which Avers knows about.MThis is called when the internal instrumentation code creates a measurement.An A describes a particular type of object that is managed by Avers.The value of the type field of the S.qAction which generates a new id. This is so that object types can have different strategies how to generate ids. !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<STUVWXYZ[\_`abcdehijklopqrstuvwx56R234QPONM7/01LKJIH8,-.GFEDCB9()*+A@?>=:;< !$"#"%&'^^^^[\ZSTUVWXY]gggg_`abcdefnnnnhijklmxvwstu~}|{zopqryc !$"#"%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ NoneNoneWApply the given op on the value. Can throw an exception if the operation is invalid.Resolve the path in the object. Given an  ( which was created against a particular ag (content), rebase it on top of patches which were created against the very same content in parallel.pThis function assumes that the patches apply cleanly to the content. Failure to do so results in a fatal error. bcdefgh bcdefghNone 4>L9The primary key in all our documents is the default "id".2Expression which represents the primary key field.EExpression which represents the value of a field inside of an Object.1True if the object field matches the given value.:True if the object's primary key matches the given string.dTake the first item out of a sequence. Beware that this throws an error when the sequence is empty.Limit a sequence to the first n items. None 4>Lijklmnopqrs ijklmnopqrs None !"4ChConstruct the table name for the given view. The table names look something like this: "view_openGames"   None4NTrue if the object exists. Lookup an S by its / . Throws  if the object doesn't exist.<Create a new object of the given type. An initial snapshot (,* 0) is created from the supplied content.A more low-level version of Y, for use when you want to generate your own ObjId or create objects at a specific time.Mark the object as deleted.Prune the object from the database. This is only allowed if the object is marked as deleted. Note that this is a very dangerous operation, it can not be undone.5TODO: Prune related Release and Authoriation objects.Create a checkpoint for for the given object. All patches (and of course snapshots) before the checkpoint can be dropped. Use  to do that.Drop all patches and snapshots before the most recent checkpoint. This effectively drops the object's history, and frees space in the database.4Fetch the content of the object and try to parse it.This function will fail with a : if the content can not be decoded into the desired type. <Get the snapshot of the newest revision of the given object.%MLookup the latest snapshot within the given range. The bounds are inclusive.&Get the newest snapshot which is stored in the database. The object may be at a higher revision if the later snapshots are missing from the database.OThis is an internal function. If you want the latest snapshot, you should use  .'-Lookup the snapshot at a particular revision.+XVerify the value against the secret. If that fails, then this function throws an error.bThis function automatically updates the secret in the database if the scrypt params have changed.,@Internal function which actually saves a secret in the database.0=Lookup an object type which is registered in the Avers monad.>\Create a new release of the given revision. If the object doesn't exist, it will fail with .EgBootstrap the Avers handle: Create necessary tables, indexes, views etc. This operation is idempotent.H6Stream new patches from the database into the channel.I Return a tb to which all changes in the system are streamed. Make sure to continuously drain items from the tL, otherwise they will accumulate in memory and you will run OOM eventually.Do not write into the channel!C      !"#$%&'()*+,-./01#The object which you want to updateThe ,* against which the operations were created CommitterThe operations to apply$True if validation should be skipped23456789:;<=>?@ABCDEFGHIC      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIC !"#$%&'()*+,-./01     23456789:;<=>?@ABCDEFGHI8       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI NoneJKuvwxyJKJKJKuvwxy None !"#$%&'()*+,-./012345689STUVWXY[\_`abcdehijklopqrstuvw *+/014789:;=>?@ABFIJK23456/018,-.9()*+ !$"#"%&'STUVWXYAB_`abcde[\/hijkl vw=>?7890JKF@4stuopqr*+1:;Iz !"#$%&'()*++,,-./0123456789:;;<==>??@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^__`abcdefghijjklmnopqrrstuvwxxyz{{|}}~  f                                       ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ ABCDEFGHIJKLMNOPQRSTRSURSVRSWRSXYZ[\]^_`a b b c d e f g h i j klmn o p q r stavers_BY4UJslPYU4A3QWf9BtBjyAvers.THAvers.Metrics.THAvers.Metrics.Measurements Avers.Index Avers.Types Avers.MetricsAvers.PatchingAvers.Storage.ExpressionsAvers.Storage.Backend Avers.Views Avers.Storage Avers.HandleAversaeson_FnADcKFoDWeK9YK1Yvshsy Data.Aeson.TH deriveJSONData.Aeson.Types.Class toEncodingtoJSONToJSON parseJSONFromJSONderiveJSONOptionsvariantOptionsdefaultVariantOptionsderiveEncodingderiveRecordEncodingtoLabels toMetricsmkMeasurements Measurement%M_avers_storage_lookupObject_duration'M_avers_storage_lookupSnapshot_duration-M_avers_storage_lookupLatestSnapshot_duration'M_avers_storage_newestSnapshot_duration-M_avers_storage_patchesAfterRevision_duration$M_avers_storage_lookupPatch_duration+M_avers_storage_applyObjectUpdates_duration0M_avers_storage_applyObjectUpdates_numOperations5M_avers_storage_applyObjectUpdates_numPreviousPatchesM_avers_storage_exists_durationmeasurementLabels SomeIndexIndex indexNameindexExpression OperationSetopPathopValueSpliceopIndexopRemoveopInsertObjectId BaseObjectIdReleaseObjectIdAuthorizationObjectIdRevIdunRevIdObjIdunObjIdPathunPathPktoPkrootPath rootObjId zeroRevIdobjectIdParser parseObjectId objectIdBase$fToDatumObjectId$fFromDatumObjectId$fFromJSONObjectId$fToJSONObjectId $fPkObjectId$fToDatumRevId$fFromDatumRevId$fFromJSONRevId $fToJSONRevId $fPkRevId $fEnumRevId$fToDatumObjId$fFromDatumObjId$fFromJSONObjId $fToJSONObjId $fPkObjId $fToDatumPath$fFromDatumPath$fFromJSONPath $fToJSONPath$fIsStringPath$fPkTextObjectobjectId objectTypeobjectCreatedAtobjectCreatedBy objectDeletedPatchM PatchErrorUnknownPatchError $fPkObject$fFromDatumOperationPatch patchObjectIdpatchRevisionId patchAuthorIdpatchCreatedAtpatchOperation $fPkPatch$fFromDatumObjectSnapshotsnapshotObjectIdsnapshotRevisionIdsnapshotContent $fPkSnapshot$fFromDatumPatchSecretsecretId secretValueSecretId unSecretIdReleaseinitialSnapshot $fPkSecret$fToDatumSecretId$fFromDatumSecretId$fFromJSONSecretId$fToJSONSecretId $fPkSecretId$fFromJSONRelease$fToJSONRelease$fFromDatumSnapshotBlobblobIdblobSizeblobContentTypeBlobIdunBlobId$fPkBlob$fToDatumBlobId$fFromDatumBlobId$fFromJSONBlobId$fToJSONBlobId $fPkBlobId$fFromDatumSecretSession sessionId sessionObjIdsessionCreatedAtsessionLastAccessedAt SessionId unSessionId $fPkSession$fToDatumSessionId$fFromDatumSessionId$fFromJSONSessionId$fToJSONSessionId $fPkSessionId$fFromDatumBlobSomeViewViewviewName viewParserviewObjectTransformer viewIndices MonadAvers liftAversrunAversHandlehConfighDatabaseHandlePoolhRecentRevisionCachehChangesChangeCPatchConfig databaseURIputBlob objectTypesemitMeasurementSomeObjectType ObjectTypeotTypeotIdotViews AversError InternalError DatabaseError ParseErrorUnknownObjectTypeObjectNotFoundDocumentNotFound NotAuthorized internalErrorinternal databaseError patchError parseErrordocumentNotFoundstrErr parseValueAs evalAvers$fMonadAversStateT$fMonadAversAvers$fToJSONChange$fFromDatumSessionmeasureDurationreportMeasurementapplyOperation resolvePathInopOTrebaseOperation blobsTable objectsTable patchesTable secretsTable sessionsTablesnapshotsTableprimaryKeyFieldprimaryKeyFieldE objectFieldEobjectFieldEqE primaryKeyEqEheadElimitEmkBoundsmkBoundobjectSnapshotSequenceEobjectPatchSequenceE parseValue parseDatumrunQuerySingleSelection runQueryDatumrunQueryrunQueryCollectexistsDocumentlookupDocumentinsertDocumentdeleteDocumentupsertDocumentRecordrecId recContent viewTableName viewTableupdateObjectViews updateView$fToDatumRecord$fToJSONRecord $fPkRecord AversPatch PatchState psObjectType psObjectId psRevisionId psCommitterId psOperationspsNumConsumedOperationspsBaseSnapshotpsLatestSnapshotpsPreviousPatches psPatches requireResultexists lookupObject createObject createObject' deleteObject pruneObjectcreateCheckpointisCheckpointPatchlatestCheckpointPatch vacuumObject objectContentlookupLatestSnapshotapplyPatchToSnapshot applyPatcheslookupRecentRevisionupdateRecentRevisionlatestSnapshotBetweennewestSnapshotlookupSnapshot savePatch saveSnapshot updateSecret verifySecretsaveSecretValue objectPatchespatchesAfterRevision lookupPatchlookupObjectTypeapplyObjectUpdates patchHandler existsBlob lookupBlob insertBlobsaveBlobContent saveSession lookupSession dropSessionnewIdvalidateObjectvalidateWithType lookupRelease createReleaselookupLatestRelease createBlob objectsOfTypeallObjectsOfType isNotDeletedmapIdindexF bootstrap createTable streamPatches changeChannel newHandlenewState dropPrefix dasherizeTagderiveEncodingWithDefaultsderiveJSONWithDefaultsderiveFromJSONWithDefaults modifyObjectmkInsertDefaultsderiveDatumWithDefaultsderiveFromDatumWithDefaultsmodifyDatumObjectmkInsertDatumDefaultsmkAppsmkAppTys getTyInfotyVarBndrNames getFieldNamesnetwo_DarCcUHK1BCJHlIYOjXe67 Network.URIURI uriRegNameuriPathuriPort uriUserInfoData.Aeson.Types.InternalValueisString hasObjectId pathElements changeObject changeArraychangeObjectAt matchObjectId WriteResponsewriteResponseInsertedwriteResponseDeletedwriteResponseReplacedwriteResponseUnchangedwriteResponseSkippedwriteResponseErrorscheckWriteResponsemergePk$fFromDatumWriteResponsestm_EyxFXFfnfY05IrjGaqCxeDControl.Concurrent.STM.TChanTChannewDatabaseHandlePool databaseHost databasePort databaseAuthextractDatabaseName