}x      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                       None-6:BM IA Parser should be able to extract params and regenerate URL from params.$A minimal type for WhebOptions&A minimal type for WhebT-!The main option datatype for Wheb4"Global ctx shared between requests5 Handler state given each request< Monoid to use in InitM's WriterTNOur  portion of c uses this.SOur  portion of c uses this.\'A Wheb response that represents a file.^Converts a type to a WAI `Writer Monad to build options.c WhebT g s mKg -> The global confirgured context (Read-only data shared between threads)$s -> Handler state for each request.m -> Monad we are transformingj  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkd  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdejcdekj`ab^_\]Z[STUVWXYNOPQRLMEKJIHGF<=>?@ABCDi-./0123456789:;,+*)('&%$"#! h  gf$    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEKJIHGFLMNOPQRSTUVWXYZ[\]^_`abcdefghijkNonepShow and pack into Lazy TextqShow and pack into Strict TextrSee a Zs as Text lmnopqrstuvwx lmnopqrstu lmnopqrsxwvtu lmnopqrstuvwxNoneyBuild a  from a z Convert a  to a {Represents root path /|YAllows for easier building of URL patterns This should be the primary URL constructor. N(\"blog\" '</>' ('grabInt' \"pk\") '</>' \"edit\" '</>' ('grabText' \"verb\"))}$Parses URL parameter and matches on ~$Parses URL parameter and matches on Text)Constructors to use w/o OverloadedStringsBLookup and cast a URL parameter to its expected type if it exists.?Convert URL chunks (split on /) Runs a  with ! to a URL path4Sort through a list of routes to find a Handler and !*Sort through socket routes to find a matchGTest a parser to make sure it can match what it produces and vice versaImplementation for a  using pseudo-typed URL composition. Pattern will match path when the pattern is as long as the path, matching on a trailing slash. If the path is longer or shorter than the pattern, it should not match. Example: Given a url = "blog"  / (grabInt "pk")  /# "edit" This will match on "blog1 edit" and blog9999edit/" But not "blog1", "blog 1", "blogfooedit", "blog9editd", nor "blog9edit/"yz{|}~yz{|}~|}~yz{yz{|}~None /Catch all requests regardless of method or path Add generic WAI middlewareAdd Wheb specific middlewareWrapped 9 to help prevent monomorphism errors for simple settings.=Adds a setting value, replacing it if its key already exists.MReads a file line by line and splits keys and values by ":". Uses default  Text.Read to try to match ,  or 3 and will add specific typed settings for those.0IO Actions to run after server has been stopped. Generate - from ` in >Generate options for an application without a context or stateNoneHMConvert - to   +Run all inner wheb monads to the top level.7Same as above but returns arbitrary type for debugging.=Runs middlewares in order, stopping if one returns a responseNoneHMGet the g in  WhebT g s m gd. This is a read-only state so only thread-safe resources such as DB connections should go in here.Get the s in  WhebT g s m g. This is a read and writable state so you can get and put information in your state. Each request gets its own fresh state duplicated from our options 55Help prevent monomorphism errors for simple settings.:Open up underlying support for polymorphic global settingsGet a setting or a defaultGet all settings.Get all route params.!Cast a route param into its type.!!Cast a route param into its type.Convert " from  into an error in the Monad,Generate a route from a name and param list.Generate the raw routeAccess the request-Get the raw parsed POST data including files.Get POST params as Text!Maybe get one param if it exists.+Get params from URL (e.g. from '/foo/?q=4')Get a request header/Set a Strict ByteString header for the responseSet a header for the response=Give filepath and content type to serve a file via lazy text.!Return simple HTML from lazy TextReturn simple lazy Text #Give content type and Blaze BuilderRedirect to a given URLThow a redirect as an error+Running a Handler with a custom TransformerConvenience wrapper for  function in XRun a server with a function to run your inner Transformer to IO and generated optionsConvenience wrapper for  function in IO#!""#!NoneSet a cookie. Looks up setting "enable-secure-cookies" to control turning HTTPS only cookies on. This should be enabled on production environments.##None  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdepz{|}~Bz{|}~p None:HM$fInitial pass on abstract plugin for Sessions. Possibly add support for Typable to ease typecasting.$%& $%& None:HM $Interface for creating Auth backendsMinimal implementation for a $Interface for creating Auth backendsRegister a user Log a user inLog a user outQGet the current user from the handler state (Needs to be populated first with )mExplicitly query a user with the backend. Since this is an IO hit, it is better to use the middleware and #Checks if a user is logged in with $ and throws a 500 if they aren't.7Auto-populates the handler state with the current user.#'() '() None:HM/Set a cache value with an expiration of an hour,Set a cache value with expiration in seconds*   * NoneLIn memory auth backend. User values will not persist after server restart.RIn memory session backend. Session values will not persist after server restart.lIn memory cache backend. Cache value will not persist after server restart and will never clear old values.                       NoneeA middleware to protect ALL incoming POST requests aginst CSRF, throwing the handler upon failureNTakes a handler to throw when CSRF fails and a handler to run when it succeedsCSRF reads a cookie value ("csrf_token") and compares it to either submitted post data (param "csrf_token") or request header ( X-CSRF-TOKEN)AThis will get or generate and set a new CSRF Token in the Cookies+ !"#$$%&'()*+,-.//01234567899:;<=>?@ABCDEFGGHIJKLMNOPQRSTUVWXXYZ[\\]^_`abbccdeffghhijklmnopqrstuvwxyz{|}~                                             !"#$%&'() * + , - + . +/ Wheb-0.3.1.0Web.WhebWeb.Wheb.TypesWeb.Wheb.UtilsWeb.Wheb.RoutesWeb.Wheb.InitMWeb.Wheb.InternalWeb.Wheb.WhebTWeb.Wheb.CookieWeb.Wheb.Plugins.SessionWeb.Wheb.Plugins.AuthWeb.Wheb.Plugins.Cache$Web.Wheb.Plugins.Debug.MemoryBackendWeb.Wheb.Plugins.Securitytransformers-0.4.1.0Control.Monad.IO.ClassliftIOMonadIOUrlPat FuncChunkchunkParamName chunkFunc chunkTypeComposedChunk ChunkType TextChunkIntChunk SocketRoute srouteParser srouteHandlerRoute routeName routeMethod routeParser routeHandler UrlParser parseFuncgenFunc UrlBuildErrorUrlNameNotFoundParamTypeMismatchNoParam ParsedChunkMkChunk MethodMatchRouteParamList PackedSiteMinOpts MinHandlerMinWheb WhebSocketWhebMiddleware WhebHandlerT WhebHandler CSettings EResponse WhebOptions appRoutesappWhebSocketsappSitesrunTimeSettings warpSettings startingCtx startingStatewaiStackwhebMiddlewaresdefaultErrorHandler shutdownTVaractiveConnectionscleanupActions InitOptions initRoutesinitWhebSockets initSites initSettings initWaiMw initWhebMw initCleanup WhebErrorURLErrorRouteParamDoesNotExist ErrorStatusError403Error404Error500 SettingsValueMkVal InternalStatereqState respHeaders curCookies HandlerData globalCtxrequestpostData routeParamsglobalSettingsHandlerResponseWhebFile WhebContent toResponseInitMrunInitMWhebTrunWhebT$fIsStringUrlPat $fShowUrlPat$fShowParsedChunk$fMonoidInitOptions$fMonadErrorWhebErrorWhebT$fMonadTransWhebT lazyTextToSBS sbsToLazyText builderToTextbuilderToStrictTextspackspacksshowResponseBodymakeUUID defaultErruhOh$fWhebContentWhebFile$fWhebContentText$fWhebContentBuilderpatRoute compilePatrootPatgrabIntgrabTextpTpSgetParammatchUrl generateUrl findUrlMatchfindSocketMatch findSiteMatch testUrlParseraddGETaddPOSTaddPUT addDELETEaddRoute addRoutesaddSite addWhebSocketcatchAlladdWAIMiddlewareaddWhebMiddleware addSetting addSetting' addSettingsreadSettingsFileaddCleanupHookgenerateOptions genMinOptsoptsToApplicationrunWhebHandlerrunDebugHandlerrunMiddlewaresrunWhebMiddlewaregetApp getWithAppgetHandlerStateputHandlerStatemodifyHandlerStatemodifyHandlerState' getSetting getSetting' getSetting'' getSettingsgetRouteParams getRouteParamgetRoute getRoute' getRawRoute getRequestgetWithRequest getRawPOST getPOSTParams getPOSTParamgetQueryParamsgetRequestHeader setRawHeader setHeaderfilehtmltextbuilderredirect throwRedirectrunRawHandlerT runRawHandlerrunWhebServerT runWhebServer setCookie setCookie' getCookies getCookie removeCookieSessionBackendbackendSessionPutbackendSessionGetbackendSessionDeletebackendSessionClear SessionAppgetSessionContainerSessionContainerdeleteSessionValuesetSessionValuegetSessionValuegetSessionValue'generateSessionKeygetCurrentSessionKeyclearSessionKey AuthBackend backendLoginbackendRegisterbackendGetUser backendLogout AuthState getAuthUsermodifyAuthUserAuthAppgetAuthContainer AuthContainerAuthUser uniqueUserKey AuthErrorInvalidPasswordUserDoesNotExistDuplicateUsernamePwHashPasswordUserKeyregisterloginlogoutgetCurrentUserqueryCurrentUser loginRequiredauthMiddlewaregetUserSessionKey makePwHashverifyPw CacheBackendbackendCachePutbackendCacheGetbackendCacheDeleteCacheAppgetCacheContainerCacheContainerdeleteCacheValue setCacheValuesetCacheValue' getCacheValuegetCacheValue' CacheData cacheStorageUserData userStorage SessionData sessionMemoryinitSessionMemoryinitAuthMemoryinitCacheMemory$fAuthBackendUserData$fSessionBackendSessionData$fCacheBackendCacheDatacsrfMiddleware csrfProtect csrfPassed getCSRFTokenControl.Monad.Trans.State.LazyStateTControl.Monad.Trans.ReaderReaderT wai-3.0.1.1Network.Wai.InternalResponseghc-prim GHC.TypesIntmatchPatbuildPat showParamBoolFloatIO Network.Wai ApplicationgetRouteParam'base Data.EitherEithergetDefaultCookiesession_cookie_keyrunWithContainergetSessionCookie PossibleUser authSetUser