h*!M{      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu2.2.0.1 Safe-Inferred"twain%Parse values from request parameters. twain4Default implementation parses comma-delimited lists.twain is an Either-like monad that can "short-circuit" and return a response, or pass control to the next middleware. This provides convenient branching with do notation for redirects, error responses, etc."twainUseful for creating - instances for things that already implement v.   !"   ! " Safe-Inferred"hwtwainParse form request body.xtwainParse JSON request body.yz{|}~wx Safe-Inferred"+Jtwain Route request matching optional  and   to .Ktwain#Respond if no other route responds.Sets the status to 404.Mtwain+Specify maximum request body size in bytes.Defaults to 64KB.NtwainSpecify " to use when parsing request body.OtwainGet a parameter. Looks in query, path, cookie, and body (in that order).7If no parameter is found, or parameter fails to parse, g is called which passes control to subsequent routes and middleware.Ptwain5Get a parameter or error if missing or parse failure.QtwainGet an optional parameter.Returns  for missing parameter. Throws   on parse failure.RtwainGet all parameters from query, path, cookie, and body (in that order).StwainGet a query parameter.7If no parameter is found, or parameter fails to parse, g is called which passes control to subsequent routes and middleware.Ttwain;Get a query parameter or error if missing or parse failure.Utwain Get an optional query parameter.Returns  for missing parameter. Throws   on parse failure.VtwainGet all query parameters.WtwainGet a path parameter.7If no parameter is found, or parameter fails to parse, g is called which passes control to subsequent routes and middleware.Xtwain:Get a path parameter or error if missing or parse failure.YtwainGet an optional path parameter.Returns  for missing parameter. Throws   on parse failure.ZtwainGet all path parameters.[twainGet a cookie parameter.7If no parameter is found, or parameter fails to parse, g is called which passes control to subsequent routes and middleware.\twainHello, World!" Modify the n: *send $ status status404 $ text "Not Found"Send a response o: :send $ withHeader (hServer, "Twain + Warp") $ text "Hello"Send a response p: ,send $ withCookie "key" "val" $ text "Hello"gtwain-Pass control to the next route or middleware.htwain Construct a  response.1Sets the Content-Type and Content-Length headers.itwainConstruct an HTML response.1Sets the Content-Type and Content-Length headers.jtwain Construct a JSON response using .1Sets the Content-Type and Content-Length headers.ktwainConstruct a CSS response.1Sets the Content-Type and Content-Length headers.ltwainConstruct an XML response.1Sets the Content-Type and Content-Length headers.mtwain%Construct a raw response from a lazy .*Sets the Content-Length header if missing.ntwainSet the  for a .otwainAdd a  to response.ptwain:Add a cookie to the response with the given key and value.Note: This uses .qtwainAdd a  to the response.rtwain;Add a header to expire (unset) a cookie with the given key.stwain?Create a redirect response with 301 status (Moved Permanently).ttwain3Create a redirect response with 302 status (Found).utwain2Create a redirect response 303 status (See Other).EFGHIJKOPQRSUTVWYXZ[]\^_`abcdefgstuhijlkmnopqr LNM <EFGHIJKOPQRSUTVWYXZ[]\^_`abcdefgstuhijlkmnopqr LNM        !!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~w$twain-2.2.0.1-9kBVhJGCKm31oNOhPjfG8L Web.TwainWeb.Twain.TypestwainWeb.Twain.Internal'wai-extra-3.1.15-7XlpJBcO1P7DXpihxZjv0lNetwork.Wai.ParseFileInfofileNamefileContentType fileContentHTTP2Exception ParsableParam parseParamparseParamList PathPattern MatchPathParam HttpError ParsedBodyFormBodyJSONBodyResponderOptionsoptsMaxBodySize optsParseBody ParsedRequestpreqBodypreqCookieParamspreqPathParamspreqQueryParams RouteActionRespondNext ResponderM matchPath readEither$fMonadCatchResponderM$fMonadThrowResponderM$fMonadIOResponderM$fMonadResponderM$fApplicativeResponderM$fFunctorResponderM$fExceptionHttpError$fIsStringPathPattern$fParsableParamNatural$fParsableParamWord64$fParsableParamWord32$fParsableParamWord16$fParsableParamWord8$fParsableParamWord$fParsableParamInteger$fParsableParamInt64$fParsableParamInt32$fParsableParamInt16$fParsableParamInt8$fParsableParamInt$fParsableParamFloat$fParsableParamDouble$fParsableParamBool$fParsableParamList$fParsableParam()$fParsableParamChar$fParsableParamByteString$fParsableParamByteString0$fParsableParamText$fParsableParamText0$fExceptionHTTP2Exception$fShowHTTP2Exception $fEqHttpError$fShowHttpErrorgetputpatchpostdeleteroutenotFound onExceptionwithMaxBodySizewithParseBodyOptsparam paramEither paramMaybeparams queryParamqueryParamEitherqueryParamMaybe queryParams pathParampathParamEitherpathParamMaybe pathParams cookieParamcookieParamEithercookieParamMaybe cookieParamsfile fileMaybefilesfromBodyheaderheadersrequestsendnexttexthtmljsoncssxmlrawstatus withHeader withCookie withCookie' expireCookie redirect301 redirect302 redirect303baseGHC.ReadRead parseBodyForm parseBodyJson parsedReqKeyresponderOptsKeydefaultResponderOpts getRequest setRequest concatParams parseRequestmatchwrapErr wrapMaxReqErr wrapParseErrparseCookieParamssetCookieByteStringdecodeQueryParam decodeBsParam(http-types-0.12.4-9gtavp8KoLGJbmEnFA2HrGNetwork.HTTP.Types.MethodMethodParseRequestBodyOptions GHC.MaybeNothingNetwork.HTTP.Types.HeaderHeader wai-3.2.4-A2VRqp6gYcQ4R75g2ykQ0rNetwork.Wai.InternalRequestResponse text-2.0.2Data.Text.InternalText$aeson-2.2.3.0-4E5TuKYso2bIlU0YQguhqBData.Aeson.Types.ToJSONToJSONbytestring-0.11.5.2Data.ByteString.Internal.Type ByteStringNetwork.HTTP.Types.StatusStatus#cookie-0.5.0-ItpeLGzK3vnAgRnTJJT3G9 Web.CookiedefaultSetCookie SetCookie ByteRanges ByteRange ByteRangeFromByteRangeFromToByteRangeSuffixResponseHeadersRequestHeaders HeaderName StdMethodGETPOSTHEADPUTDELETETRACECONNECTOPTIONSPATCH statusCode statusMessageNetwork.HTTP.Types.URIPartialEscapeQueryPartialEscapeQueryItem EscapeItemQEQN SimpleQuerySimpleQueryItem QueryTextQuery QueryItemNetwork.HTTP.Types.QueryLike QueryLiketoQueryNetwork.HTTP.Types.Version HttpVersion httpMajor httpMinorhAccepthAcceptLanguagehAuthorization hCacheControl hConnectionhContentEncodinghContentLength hContentMD5 hContentTypehDatehIfModifiedSincehIfRange hLastModified hLocationhRangehRefererhServer hUserAgenthCookierenderByteRangeBuilderrenderByteRangerenderByteRangesBuilderrenderByteRangesparseByteRanges methodGet methodPost methodHead methodPut methodDelete methodTrace methodConnect methodOptions methodPatch parseMethod renderMethodrenderStdMethodmkStatus status100 continue100 status101switchingProtocols101 status200ok200 status201 created201 status202 accepted202 status203nonAuthoritative203 status204 noContent204 status205resetContent205 status206partialContent206 status300multipleChoices300 status301movedPermanently301 status302found302 status303 seeOther303 status304notModified304 status305 useProxy305 status307temporaryRedirect307 status308permanentRedirect308 status400 badRequest400 status401unauthorized401 status402paymentRequired402 status403 forbidden403 status404 notFound404 status405methodNotAllowed405 status406notAcceptable406 status407proxyAuthenticationRequired407 status408requestTimeout408 status409 conflict409 status410gone410 status411lengthRequired411 status412preconditionFailed412 status413requestEntityTooLarge413 status414requestURITooLong414 status415unsupportedMediaType415 status416requestedRangeNotSatisfiable416 status417expectationFailed417 status418 imATeapot418 status422unprocessableEntity422 status428preconditionRequired428 status429tooManyRequests429 status431requestHeaderFieldsTooLarge431 status500internalServerError500 status501notImplemented501 status502 badGateway502 status503serviceUnavailable503 status504gatewayTimeout504 status505httpVersionNotSupported505 status511 networkAuthenticationRequired511statusIsInformationalstatusIsSuccessfulstatusIsRedirectionstatusIsClientErrorstatusIsServerErrorqueryTextToQueryrenderQueryTextqueryToQueryTextparseQueryTextsimpleQueryToQueryrenderQueryBuilder renderQueryrenderSimpleQuery parseQueryparseQueryReplacePlusparseSimpleQueryurlEncodeBuilder urlEncode urlDecodeencodePathSegmentsencodePathSegmentsRelativedecodePathSegments extractPath encodePath decodePathrenderQueryPartialEscaperenderQueryBuilderPartialEscapehttp09http10http11http20 Network.Wai Applicationvault requestMethodrequestHeaders httpVersion rawPathInforawQueryStringisSecure remoteHostpathInfo queryString requestBodyrequestBodyLengthrequestHeaderHostrequestHeaderRangerequestHeaderRefererrequestHeaderUserAgentResponseReceivedFilePartfilePartOffsetfilePartByteCountfilePartFileSizeRequestBodyLength ChunkedBody KnownLength StreamingBody MiddlewaregetRequestBodyChunk responseFileresponseBuilderresponseStatusresponseHeaderssetRequestBodyChunks responseLBSresponseStream responseRawresponseToStreammapResponseHeadersmapResponseStatusdefaultRequest modifyRequestmodifyResponse ifRequeststrictRequestBodyconsumeRequestBodyStrictlazyRequestBodyconsumeRequestBodyLazymapRequestHeaders