úÎ-¨(ç\      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[None0:DIR#4Core user datatype. Store custom information in the  field?Password representation. When updating or creating a user, use ;e to create one. The implementation details of this type are ONLY for use in backend implementations. /Plaintext passsword. Used for authentification. *A session id for identifying user sessions9An activation token to send out to users via email or sms<A password reset token to send out to users via email or smsAn abstract backend for managing users. A backend library should implement the interface and an end user should build applications on top of this interface.The storage backends userideInitialise the backend. Call once on application launch to for example create missing database tablesWDestory the backend. WARNING: This is only for testing! It deletes all tables and data.NThis cleans up invalid sessions and other tokens. Call periodically as needed.$Retrieve a user id from the database!Retrieve a user from the database&List all users (unlimited, or limited)Count all users Create a user  Modify a user!Modify details of a user" Delete a user#=Authentificate a user using username/email and password. The \ describes the session duration$2Authentificate a user and execute a single action.% Verify a  *. The session duration can be extended by \&wForce create a session for a user. This is useful for support/admin login. If the user does not exist, this will fail.'Destroy a session( Request a  for a given user, valid for \) Check if a , is still valid and retrieve the owner of it*%Apply a new password to the owner of  iff the token is still valid+ Request an  for a given user, valid for \,Activate the owner of  iff the token is still valid-8Errors that happen on storage level during token actions/8Errors that happen on storage level during user updating58Errors that happen on storage level during user creation;1Construct a password from plaintext by hashing it<-Check a plaintext password against a password=&Strip the password from the user type.@  !"#$%&'()*+,-./0123456789:;<=>?> & !"#$%'()*+,-./0312456789:;<=> !"#$%&'()*+, ;= < 56789:/01234-.   !"#$%&'()*+,-./0123456789:;<=>?]        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\$users-0.4.0.0-DFXPX1ojPki87PkcijwnNVWeb.Users.TypesUseru_nameu_email u_passwordu_activeu_morePassword PasswordHashPasswordHidden PasswordPlainunPasswordPlain SessionId unSessionIdActivationTokenunActivationTokenPasswordResetTokenunPasswordResetTokenUserStorageBackendUserIdinitUserBackenddestroyUserBackendhousekeepBackendgetUserIdByName getUserById listUsers countUsers createUser updateUserupdateUserDetails deleteUserauthUser withAuthUser verifySession createSessiondestroySessionrequestPasswordResetverifyPasswordResetTokenapplyNewPasswordrequestActivationToken activateUser TokenError TokenInvalidUpdateUserErrorUsernameOrEmailAlreadyExistsUsernameAlreadyExistsEmailAlreadyExistsUserDoesntExitUserDoesntExistCreateUserErrorUsernameOrEmailAlreadyTakenInvalidPasswordUsernameAlreadyTakenEmailAlreadyTakenUsernameAndEmailAlreadyTaken makePasswordverifyPassword hidePassword$fFromJSONUser $fToJSONUser$fShowCreateUserError$fEqCreateUserError$fShowUpdateUserError$fEqUpdateUserError$fShowTokenError$fEqTokenError$fShowPasswordResetToken$fEqPasswordResetToken$fToJSONPasswordResetToken$fFromJSONPasswordResetToken$fPathPiecePasswordResetToken$fShowActivationToken$fEqActivationToken$fToJSONActivationToken$fFromJSONActivationToken$fPathPieceActivationToken$fShowSessionId $fEqSessionId$fToJSONSessionId$fFromJSONSessionId$fPathPieceSessionId$fShowPasswordPlain$fEqPasswordPlain$fIsStringPasswordPlain$fShowPassword $fEqPassword $fShowUser$fEqUser time-1.6.0.1Data.Time.Clock.UTCNominalDiffTime