˟z      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Safe 9;<=DR !"#$%& !"#$%&None9:;<=DIOPRT5Basically Wai's unexported 0 type.ExReads the entirety of the request body in a single string. This turns the chunks obtained from repeated invocations of  into a lazy .GHelper function for building a 7 out of HTML-escaped text.H Returns the # that is currently being processed.IReturns the route path that was matched during route evaluation. This is not the path specified in the request, but rather the route in the  RoutingSpecB that matched the request URL. Variables names are prefixed with :., and free ("star") paths are designated with *.JLReturns the bound routing parameters extracted from the routing system (see  Airship.Route).L8Returns the time at which this request began processing.MReturns the current .NReturns the current 5.O Given a new 5,, replaces the stored body with the new one.PStores the provided N as the responseBody. This is a shortcut for creating a response body with a 7 and a bytestring .Q/Immediately halts processing with the provided  code. The contents of the  Webmachine'\s response body will be streamed back to the client. This is a shortcut for constructing a 0 with M and N and passing that response to R.R5Immediately halts processing and writes the provided 0 back to the client.S9Adds the provided ByteString to the Airship-Trace header.U2Map both the return value and wrapped computation m.;'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYB '()*+,-./0123459678:<;=>?@ABCDEFGHIJKLMNOPQRSTUVB:;<'=>?@ ABCD01234)*+,-./56789(SEFTGUVHLIMNJKOPQR!'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYNone:OT!eBWhether to allow HTTP POSTs to a missing resource. Default: false.f<The set of HTTP methods that this resource allows. Default: GET and HEADA. If a request arrives with an HTTP method not included herein, 501 Not Implemented is returned.gAn association list of s and '* actions that correspond to the accepted  Content-Type> values that this resource can accept in a request body. If a  Content-Type- header is present but not accounted for in g, processing will halt with 415 Unsupported Media Type . Otherwise, the corresponding '6 action will be executed and processing will continue.hAn association list of  values and 58 values. The response will be chosen by looking up the  that most closely matches the Accept> header. Should there be no match, processing will halt with 406 Not Acceptable.iWhen a DELETE request is enacted (via a True value returned from j), a False value returns a  202 Accepted response. Returning True5 will continue processing, usually ending up with a 204 No Content response. Default: False.jWhen processing a DELETE request, a True/ value allows processing to continue. Returns  500 Forbidden if False. Default: false.kReturns 413 Request Entity Too Large if true. Default: false.lIChecks if the given request is allowed to access this resource. Returns  403 Forbidden if true. Default: false.mIf this returns a non- :9, its value will be added to every HTTP response in the ETag: field.n]Checks if this resource has actually implemented a handler for a given HTTP method. Returns 501 Not Implemented if false. Default: true.oReturns 401 Unauthorized if false. Default: true.pWhen processing PUT requests, a True1 value returned here will halt processing with a  409 Conflict.qReturns 415 Unsupported Media Type$ if false. We recommend you use the contentTypeMatches+ helper function, which accepts a list of D values, so as to simplify proper MIME type handling. Default: true.rIn the presence of an If-Modified-Since header, returning a Just value from  lastModifed! allows the server to halt with 304 Not Modified if appropriate.sIf an Accept-LanguageA value is present in the HTTP request, and this function returns False, processing will halt with 406 Not Acceptable.tReturns 400 Bad Request if true. Default: false.u%When processing a resource for which { returned False, returning a Just value halts with a 301 Moved Permanently response. The contained / will be added to the HTTP response under the  Location: header.vLike u, except with a 307 Moved Temporarily response.wWhen handling a PUT request, returning True here halts processing with 300 Multiple Choices. Default: False.xAs gG, but checked and executed specifically in the case of a PATCH request.y$When processing a request for which { returned False , returning True here allows the u and v" functions to process the request.zWhen handling POSTK requests, the value returned determines whether to treat the request as a PUT, a PUT and a redirect, or a plain POST. See the documentation for < for more information. The default implemetation returns a  with an empty handler.{SDoes the resource at this path exist? Returning false from this usually entails a  404 Not Found response. (If e returns True or an  If-Match: * header is present, it may not).|Returns 503 Service Unavailable if false. Default: true.}Returns 414 Request URI Too Long if true. Default: false.~Returns 501 Not Implemented if false. Default: true.Used when processing POST requests so as to handle the outcome of the binary decisions between handling a POST as a create request and whether to redirect after the POST is done. Credit for this idea goes to Richard Wallace (purefn) on Webcrank.0For processing the POST, an association list of s and '7 actions are required that correspond to the accepted  Content-Type? values that this resource can accept in a request body. If a  Content-TypeE header is present but not accounted for, processing will halt with 415 Unsupported Media Type.Treat this request as a PUT.+Treat this request as a PUT, then redirect.&Process as a POST, but don't redirect.Process and redirect.1A helper function that terminates execution with 500 Internal Server Error.The default Airship resource, with "sensible" values filled in for each entry. You construct new resources by extending the default resource with your own handlers.$cdefghijklmnopqrstuvwxyz{|}~$cdefghijklmnopqrstuvwxyz{|}~$cdefghijklmnopqrstuvwxyz{|}~cdefghijklmnopqrstuvwxyz{|}~ None:<=IJRepresents a fully-specified set of routes that map paths (represented as s) to cs. (s are declared with do-notation, to wit: z myRoutes :: RoutingSpec IO () myRoutes = do root #> myRootResource "blog"  var "date" k var "post" #> blogPostResource "about" #> aboutResource "anything" + star #> wildcardResource ms represent chunks of text used to match over URLs. You match hardcoded paths with string literals (and the -XOverloadedStrings' extension), named variables with the  combinator, and wildcards with .Turns the list of routes in a  into a  for efficient routinga  b separates the path components a and b4 with a slash. This is actually just a synonym for .Represents the root resource (/7). This should usually be the first path declared in a ./Captures a named in a route and adds it to the  routingParams hashmap under the provided  value. For example,  "blog"   "date"   "post" "will capture all URLs of the form /blog/$date/$post , and add date and post to the  routingParams3 contained within the resource this route maps to.'Captures a wildcard route. For example,  "emcees"  star  will match /emcees, /emcees/biggie, /emcees/earl/vince, and so on and so forth.None None?Parse a list of Etags, returning an empty list if parsing fails  None  NoneOT"Applies the given function to the  present in this handlers ). Adds a given  to this handler's ). None!"OPTN      !"#$%&'()*+,-./0123456789:;<=>J      !"#$%&'()*+,-./0123456789:;<=>None!":?@ABCDEFGHI ?@ABCDEFGHISafeMAn opaque data type encapsulating all Airship-specific configuration options.We use lenses to modify n values -- though Airship only depends on the microlens library, its lenses are compatible with Control.Lens.Determines whether or not the  Airship-Trace header, which traces the execution of a given request in the Airship decision tree, is included in every HTTP response. While exposing the decision tree is usually innocuous (and makes for significantly easier debugging), you may want to turn it off in certain circumstances. Defaults to  (enabled).Determines whether or not the  Airship-Quipd header, which includes a pithy quote in your response headers, is included in every HTTP response. Defaults to  (enabled).jThe default configuration. Use this, in conjunction with the lenses declared above, to get and modify an  to pass to  resourceToWai. JKLJKL None!":OT  Parse form data uploaded with a  Content-Type of either www-form-urlencoded or multipart/form-datae to return a list of parameter names and values and a list of uploaded files and their information.Returns True if the request's  Content-Type4 header is one of the provided media types. If the  Content-Type8 header is not present, this function will return True.)Issue an HTTP 302 (Found) response, with location as the destination.7Issue an HTTP 301 (Moved Permantently) response, with location as the destination.Given a #, a 404 resource, and a user state s, construct a WAI  Application.1Given a 'AirshipConfig, a function to modify the 0 based on the = and the 0- (like WAI middleware), a 'RoutingSpec, and ( construct a WAI  Application.Like , but expects the  to have been evaluated with . This is more efficient than 8, as the routes will not be evaluated on every request.Given routes :: RoutingSpec IO (),  can be invoked like so: 8resourceToWaiT' cfg (const id) (runRouter routes) errorsM!If the Response body is Empty the response body is set based on the error responses provided by the application and resource. If the response body is not Empty or there are no error response configured for the status code in the Response then no action is taken. The contents of the  Webmachine'5 response body will be streamed back to the client.Lookup routing parameter and return 500 Internal Server Error if not found. Not finding the paramter usually means the route doesn't match what the resource is expecting.Lookup routing parameter. NMOP  NMOPNone NoneOT '()*+,-./0123459678:<;=>?@ABCDEFGHIJKLMNOPQRSTUVcdefghijklmnopqrstuvwxyz{|}~Q !"#$%&''()*+,-./0123456789:;<<=>?@ABBCDEFGHIJKLMNNOPQQRSTUVWXYZ[\]^_`abcdefghijklmnopqrrstuvwxyz{|}~      :                                                ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M NOOPQRSTUVWXY Z [ \ ]^$airship-0.9.2-Ek9QRIE6KJVBD3VPioGyBx Airship.Route Airship.Types Airship.RSTAirship.ResourceAirship.HeadersAirship.HelpersAirship.Resource.StaticAirship.ConfigAirship.Internal.RouteAirship.Internal.ParsersAirship.Internal.DateAirship.Internal.DecisionAirship.Internal.HelpersAirship.bytestring-trie-0.2.4.1-Ghs2mhl5SXu6AHDgfvDeGUData.Trie.InternalTrie"wai-3.2.1.1-Hnf0jy3I1OTEqy7mr2vFRB Network.WaidefaultRequestNetwork.Wai.InternalrequestHeaderUserAgentrequestHeaderRefererrequestHeaderRangerequestHeaderHostrequestBodyLengthvault requestBody queryStringpathInfo remoteHostisSecurerequestHeadersrawQueryString rawPathInfo httpVersion requestMethodRequestRSTrunRSTevalRSTexecRSTwithRSTmapRSTfailure$fMonadTransControlRST$fMonadBaseControlbRST$fMonadBasebRST$fMonadTransRST $fMonadIORST$fMonadPlusRST $fMonadRST$fMonadStatesRST$fAlternativeRST$fApplicativeRST $fFunctorRST$fMonadReaderrRST WebmachineErrorResponses ResponseState stateHeaders stateBody_params _dispatchPath decisionTraceResponse_responseStatus_responseHeaders _responseBody ResponseBody ResponseFileResponseBuilderResponseStreamEmptyETagStrongWeakAirshipRequest_request _routePath RequestReader_now_airshipRequestentireRequestBodyetagToByteStringescapedResponserequest routePathparams dispatchPath requestTimegetResponseHeadersgetResponseBodyputResponseBody putResponseBShalt finishWithaddTraceeitherResponse mapWebmachine runWebmachine$fMonadBaseControlbWebmachine$fMonadTransWebmachine $fShowETag$fEqETag $fOrdETag$fFunctorWebmachine$fApplicativeWebmachine$fMonadWebmachine$fMonadIOWebmachine$fMonadBaseWebmachine$fMonadReaderWebmachine$fMonadStateWebmachineResourceallowMissingPostallowedMethodscontentTypesAcceptedcontentTypesProvideddeleteCompleteddeleteResourceentityTooLarge forbidden generateETag implemented isAuthorized isConflictknownContentType lastModifiedlanguageAvailablemalformedRequestmovedPermanentlymovedTemporarilymultipleChoicespatchContentTypesAcceptedpreviouslyExisted processPostresourceExistsserviceAvailable uriTooLongvalidContentHeaderserrorResponses PostResponse PostCreatePostCreateRedirect PostProcessPostProcessRedirect serverErrordefaultResource RoutingSpec RouteLeafRoute runRouterrootvarstar#>#>=modifyResponseHeadersaddResponseHeaderappendRequestPath StaticOptionsCacheNoCacheFileInfo_path_size _lastModified_etagepochToUTCTimeallFilesAtRoot directoryTreestaticResource$fShowFileInfo $fEqFileInfo $fOrdFileInfo$fEqStaticOptionsHeaderInclusion IncludeHeader OmitHeader AirshipConfigincludeTraceHeaderincludeQuipHeaderdefaultAirshipConfig$fEqHeaderInclusion$fShowHeaderInclusion parseFormDatacontentTypeMatchesredirectTemporarilyredirectPermanently resourceToWairesourceToWaiTresourceToWaiT' lookupParam lookupParam'rwsBindbytestring-0.10.8.1Data.ByteString.Internal ByteString'http-types-0.9.1-2ceQFN60HufCrAhURPOSnqNetwork.HTTP.Types.HeaderResponseHeaders Data.ByteString.Builder.InternalBuilderNetwork.HTTP.Types.StatusStatus StMWebmachineunStMWebmachine getWebmachineTracemodify''both)http-media-0.7.1.1-EF8eNDSGehOC6YiXyoI6WP%Network.HTTP.Media.MediaType.Internal MediaTypebaseGHC.BaseNothingmappend#text-1.2.2.2-KC7dWoG09dA1F6jKj5GSqhData.Text.InternalText getRouter RouteMatchRVarRouteMatchOrVarWildcardRoutedResourceBoundOrUnboundBoundVar RestUnboundgetRoute routeTextboundOrUnboundTextroute matchRoute'$fIsStringRoute parseEtagListcomma doubleQuote insideQuotesoptionalWhitespaceinsideWhitespaceweakETag strongETageTag parseEtag httpDateToUtcparseRfc1123DateutcTimeToRfc1123int2int4i2w8monthsweekDaysspccolonzeroHeader IfNoneMatchIfMatchFlow FlowStateT FlowState _contentTypehAcceptCharsethAcceptEncodinghIfMatchhIfUnmodifiedSince hIfNoneMatch initFlowStateflowtracenegotiateContentTypesAcceptedrequestHeaderDatewriteCacheTagsb13b12b11b10b09b08b07b06b05b04b03c04c03d05d04e06e05f07f06g11g09g08g07h12h11h10h07i13i12i07i04j18k13k07k05l17l15l14l13l07l05m20m16m07m05n16n11createprocessPostActionn05o20o18o16o17o14p11p03FileTreetreefileETagfilteredDirectoryregularFileStatus fileInfos statusToInfostaticResource'addNoCacheHeaders_includeTraceHeader_includeQuipHeader errorResponse toWaiResponsegetQuip traceHeader