I      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H NoneIJK LMNOPQRSTUVWX   IJK LMNOPQRSTUVWXNone    None    None!"None !"3B'2The operations that can be applied to JSON values. Splice is used to manipulate ArrayGs. It can remove and insert multiple elements in a single operation.$Set is applied to RNs. It is used for adding, updating and deleting properties from the object.'ObjectId(*Object which contains authorization rules.)>An object describing a particualar release of the base object.*;The base object whose snapshots contain the actual content.+RevId.ObjId1Path4<Pk - Types which can be converted to a database primary key.6>This path refers to the root of an object. It is only used in $ operations.7aThe root object id is used for object created internally or when there is no applicable creator.8The +( which is used for the initial snapshot.^PatchgSnapshotnSecretA n> is a password (encrypted with scrypt) that is attached to a r (for example the . of an account).It is up to you to ensure that rs are unique. If you use .s then they by definition are.rSecretIduReleasewDThe 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.Configuration of the  monad.YH which describes the connection details to the RethinkDB database. The Y' *MUST* include at least the hostname (Z) 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 R.qAction which generates a new id. This is so that object types can have different strategies how to generate ids. !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;RSTUVWXYZ[^_`abcdghijknopqrstuvw45Q123PONML6./0KJIHG7+,-FEDCBA8'*)(@?>=<9:;$ %&%!"#]]]]Z[YRSTUVWX\ffff^_`abcdemmmmghijklwuv~rst}|{zynopqxg$ %&%!"#'*)(+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ NoneNone 3=K9The 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 3=K^_`abcdefgh ^_`abcdefgh None !"3BhConstruct the table name for the given view. The table names look something like this: "view_openGames"   NoneWApply 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 ig (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. jklmnop jklmnop None3MTrue if the object exists. Lookup an R 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.1=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 .FgBootstrap the Avers handle: Create necessary tables, indexes, views etc. This operation is idempotent.A      !"#$%&'()*+,-./012#The object which you want to updateThe +* against which the operations were created CommitterThe operations to apply$True if validation should be skipped3456789:;<=>?@ABCDEFGHA      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHA !"#$%&'()*+,-./012     3456789:;<=>?@ABCDEFGH6      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH None  !"#$%&'()*+,-./01234578RSTUVWXZ[^_`abcdghijknopqrstuv !+,012589:;<>?@ABCG12345./07+,-8'*)($ %&%!"#RSTUVWXBC^_`abcdZ[0ghijk! uv>?@89:1GA5rstnopq+,2;< q      !"#$%&'())**+,-./01234567899:;;<==>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]]^_`abcdefghhijklmnoppqrstuvvwxyyz{{|}~  d                                       ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < =>?@ABCDEFGHIJKLMNOPNOQNORNOSNOTUUVWXYZ[\]^ _` a b c d e f gh avers-0.0.11Avers.THAvers.Metrics.THAvers.Metrics.Measurements Avers.Index Avers.Types Avers.MetricsAvers.Storage.ExpressionsAvers.Storage.Backend Avers.ViewsAvers.Patching Avers.StorageAvers aeson-0.9.0.1 Data.Aeson.TH deriveJSONData.Aeson.Types.ClasstoJSONToJSON parseJSONFromJSONderiveJSONOptionsvariantOptionsdefaultVariantOptionsderiveEncodingderiveRecordEncodingtoLabels toMetricsmkMeasurements MeasurementM_avers_storage_exists_duration5M_avers_storage_applyObjectUpdates_numPreviousPatches0M_avers_storage_applyObjectUpdates_numOperations+M_avers_storage_applyObjectUpdates_duration$M_avers_storage_lookupPatch_duration-M_avers_storage_patchesAfterRevision_duration'M_avers_storage_newestSnapshot_duration-M_avers_storage_lookupLatestSnapshot_duration'M_avers_storage_lookupSnapshot_duration%M_avers_storage_lookupObject_durationmeasurementLabels SomeIndexIndex indexNameindexExpression OperationSpliceopIndexopRemoveopInsertSetopPathopValueObjectIdAuthorizationObjectIdReleaseObjectId BaseObjectIdRevIdunRevIdObjIdunObjIdPathunPathPktoPkrootPath 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$fToJSONOperationPatch patchObjectIdpatchRevisionId patchAuthorIdpatchCreatedAtpatchOperation $fPkPatch$fToJSONObjectSnapshotsnapshotObjectIdsnapshotRevisionIdsnapshotContent $fPkSnapshot $fToJSONPatchSecretsecretId secretValueSecretId unSecretIdReleaseinitialSnapshot $fPkSecret$fToDatumSecretId$fFromDatumSecretId$fFromJSONSecretId$fToJSONSecretId $fPkSecretId$fFromJSONRelease$fToJSONRelease$fToJSONSnapshotBlobblobIdblobSizeblobContentTypeBlobIdunBlobId$fPkBlob$fToDatumBlobId$fFromDatumBlobId$fFromJSONBlobId$fToJSONBlobId $fPkBlobId$fToJSONSecretSession sessionId sessionObjIdsessionCreatedAtsessionLastAccessedAt SessionId unSessionId $fPkSession$fToDatumSessionId$fFromDatumSessionId$fFromJSONSessionId$fToJSONSessionId $fPkSessionId $fToJSONBlobSomeViewViewviewName viewParserviewObjectTransformer viewIndices MonadAvers liftAversrunAversHandleconfigdatabaseHandlePoolrecentRevisionCacheConfig databaseURIputBlob objectTypesemitMeasurementSomeObjectType ObjectTypeotTypeotIdotViews AversError NotAuthorizedDocumentNotFoundObjectNotFoundUnknownObjectType ParseError DatabaseError InternalError internalErrorinternal databaseError patchError parseErrordocumentNotFoundstrErr parseValueAs databaseHost databasePort databaseAuthextractDatabaseNamenewDatabaseHandlePoolnewState evalAvers$fMonadAversStateT$fMonadAversAvers$fToJSONSessionmeasureDurationreportMeasurement blobsTable objectsTable patchesTable secretsTable sessionsTablesnapshotsTableprimaryKeyFieldprimaryKeyFieldE objectFieldEobjectFieldEqE primaryKeyEqEheadElimitEmkBoundsmkBoundobjectSnapshotSequenceEobjectPatchSequenceE parseValue parseDatumrunQuerySingleSelection runQueryDatumrunQueryrunQueryCollectexistsDocumentlookupDocumentinsertDocumentdeleteDocumentupsertDocumentRecordrecId recContent viewTableName viewTableupdateObjectViews updateView$fToDatumRecord$fToJSONRecord $fPkRecordapplyOperation resolvePathInopOTrebaseOperation 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 dropPrefix dasherizeTagderiveEncodingWithDefaultsderiveJSONWithDefaultsderiveFromJSONWithDefaults modifyObjectmkInsertDefaultsderiveDatumWithDefaultsderiveFromDatumWithDefaultsmodifyDatumObjectmkInsertDatumDefaultsmkAppsmkAppTys getTyInfotyVarBndrNames getFieldNamesnetwork-uri-2.6.0.3 Network.URIURI uriRegNameuriPathuriPort uriUserInfo WriteResponsewriteResponseInsertedwriteResponseDeletedwriteResponseReplacedwriteResponseUnchangedwriteResponseSkippedwriteResponseErrorscheckWriteResponsemergePk$fToDatumWriteResponseData.Aeson.Types.InternalValueisString hasObjectId pathElements changeObject changeArraychangeObjectAt matchObjectId