ٳ[Y      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXNone!"OT(Function to send raw data to the server.FFunction to block reading a datachunk of a given size from the server.-Initiates a RawHttp2Connection with a server.>The current code does not handle closing the connexion, yikes.Server's hostname.Server's port to connect to.TLS parameters. The Y7 hook is overwritten to always return ["h2", "h2-17"].None!"OT qSends a frame to the server. The first argument is a FrameFlags modifier (e.g., to sed the end-of-stream flag).Starts a new client stream.Receives frames from a server.0Function that will close the network connection.)Closes the Http2FrameConnection abruptly.Creates a client stream.Sends a frame to the server.1Sends multiple back-to-back frames to the server.)Waits for the next frame from the server.Creates a new  4 to a given host for a frame-to-frame communication.       None!"OT3Z@A function able to split a header block into multiple fragments.-Type synonym for functions that modify flags.Typical FlagSetter for library users are HTTP2.setEndHeader when sending headers HTTP2.setEndStream to signal that there the client is not willing to send more data. We might use Endo in the future.[EHelper to carry around the HPACK encoder for outgoing header blocks..6Handler upon receiving a PUSH_PROMISE from the server.The functions for = are similar to those used in ''. But callers shall not use @ to initialize the PUSH_PROMISE stream. Rather, callers should \ or  to reject the PUSH_PROMISE.The StreamId corresponds to the parent stream as PUSH_PROMISEs are tied to a client-initiated stream. Longer term we may move passing this handler to the 0 instead of I (as it is for now).FRecord holding functions one can call while in an HTTP2 client stream.=Starts the stream with HTTP headers. Flags modifier can use ]m if no data is required passed the last block of headers. Usually, this is the only call needed to build an <.$Changes the PRIORITY of this stream.SResets this stream with a RST frame. You should not use this stream past this call.Waits for HTTP headers from the server. This function also passes the last frame header of the PUSH-PROMISE, HEADERS, or CONTINUATION sequence of frames. Waiting more than once per stream will hang as headers are sent only one time. Waits for a DATA frame chunk. A user should testEndStream on the frame header to know when the server is done with the stream.!Sends a DATA frame chunk. You can use send empty frames with only headers modifiers to close streams. This function is oblivious to framing and hence does not respect the RFC if sending large blocks. Use M to chunk and send naively according to server's preferences. This function can be useful if you intend to handle the framing yourself.#2Opaque proof that a client stream was initialized.*This type is only useful to force calling  in < and contains no information.^,Couples client and server settings together.$,Set of Async threads running an Http2Client.6If you add other asyncs here, you should also modify G.&+Async waiting for the initial settings ACK.'KAsync responsible for crediting the connection incoming flow control. See _.(/Async responsible for serializing every HEADERS PUSH_PROMISECONTINUATION. See `.)AAsync responsible for handling control frames (e.g., PING). See a.*|Async responsible for ingesting all frames, increasing the maximum-received streamID and starting the frame dispatch. See b.+GRecord holding functions one can call while in an HTTP2 client session.-Send a PING, the payload size must be exactly eight bytes. Returns an IO to wait for a ping reply. No timeout is provided. Only the first call to this IO will return if a reply is received. Hence we recommend wrapping this IO in an Async (e.g., with race (threadDelay timeout).).Sends a SETTINGS. Returns an IO to wait for a settings reply. No timeout is provided. Only the first call to this IO will return if a reply is received. Hence we recommend wrapping this IO in an Async (e.g., with race (threadDelay timeout).)/Sends a GOAWAY.0Spawns new streams. See 9.1Simple getter for the B" for the whole client connection.2Simple getter for the >" for the whole client connection.3&Returns a function to split a payload.4 Asynchronous operations threads.5Closes the network connection.64Whether or not the client library believes the server will reject the new stream. The Int content corresponds to the number of streams that should end before accepting more streams. A reason this number can be more than zero is that servers can change (and hence reduce) the advertised number of allowed c at any time.9=Type alias for callback-based functions starting new streams.*The callback a user must provide takes an  and returns a :-. This construction may seem wrong because a := contains an initialization and a handler functions. The explanation for this twistedness is as follows: in HTTP2 stream-ids must be monotonically increasing, if we want to support multi-threaded clients we need to serialize access to a critical region of the code when clients send HEADERS+CONTINUATIONs frames. Passing the j object as part of the callback avoids leaking the implementation of the critical region, meanwhile, the : delimits this critical region.:Defines a client stream.7Please red the doc for this record fields and then see 9.<Function to initialize a new client stream. This function runs in a exclusive-access section of the code and may prevent other threads to initialize new streams. Hence, you should ensure this IO does not wait for long periods of time.=Function to operate with the stream. IncomingFlowControl currently is credited on your behalf as soon as a DATA frame arrives (and before you handle it with  .). However we do not send WINDOW_UPDATE with FM. This design may change in the future to give more leeway to library users.>,Receives credit-based flow-control or block.There is no way to observe the total amount of credit and receive/withdraw are atomic hence this object is thread-safe. However we plan to propose an STM-based API to allow withdrawing atomically from both the connection and a per-stream > objects at a same time. Without such atomicity one must ensure consumers do not exhaust the connection credit before taking the per-stream credit (else they might prevent others sending data without taking any).Longer term we plan to hide outgoing-flow-control increment/decrement altogether because exception between withdrawing credit and sending DATA could mean lost credit (and hence hanging streams).@9Add credit (using a hidden mutable reference underneath).AWait until we can take credit from stash. The returned value correspond to the amount that could be withdrawn, which is min(current, wanted). A caller should withdraw credit to send DATA chunks and put back any unused credit with _receiveCredit.B!Offers credit-based flow-control.TAny mutable changes are atomic and hence work as intended in a multithreaded setup.The design of the flow-control mechanism is subject to changes. One important thing to keep in mind with current implementation is that both the connection and streams are credited with D as soon as DATA frames arrive, hence no-need to account for the DATA frames (but you can account for delay-bandwidth product for instance).DAdd credit (using a hidden mutable reference underneath). This function only does accounting, the IO only does mutable changes. See F.E1Consumes some credit and returns the credit left.FSends a WINDOW_UPDATE frame crediting it with the whole amount credited since the last _updateWindow call. The boolean tells whether an update was actually sent or not. A reason for not sending an update is if there is no credit in the flow-control system.G;Links all asyncs threads of a client to the current thread.See d.H Synonym of /. ,https://github.com/http2/http2-spec/pull/366IStarts a new Http2Client with a remote Host/Port. TLS ClientParams are mandatory because we only support TLS-protected streams for now.J=Starts a new stream (i.e., one HTTP request + server-pushes).%You will typically call the returned 9A immediately to define what you want to do with the Http2Stream.  _  -$(withHttp2Stream myClient $ stream - StreamDefinition _ _)Please refer to 9 and : for more.K-Sends the HTTP2+HTTP headers of your chosing.You must add HTTP2 pseudo-headers first, followed by your typical HTTP headers. This function makes no verification of this ordering/exhaustinevess.WHTTP2 pseudo-headers replace the HTTP verb + parsed url as follows: ":method" such as GET0, ":scheme" such as "https", ":path" such as "blog7post/1234?foo=bar", ":authority" such as "haskell.org"#Note that we currently enforce the eP but this design choice may change in the future. Hence, we recommend you use e as well.L,Prepares a client around a frame connection.This is mostly useful if you want to muck around the Http2FrameConnection (e.g., for tracing frames) as well as for unit testing purposes. If you want to create a new connection you should likely use I instead._We currently need a specific loop for crediting streams because a client user may programmatically reset and stop listening for a stream and stop calling waitData (which credits streams).TODO: modify the X function to wait and credit all the remaining data that could have been sent in flightfDSplit headers like so that no payload exceeds server's maxFrameSize.g,Breaks a ByteString into fixed-sized chunks. . fixedSizeChunks 2 "hello" = ["he", "ll", "o"]MCSends data, chunked according to the server's preferred chunk size.This function does not respect HTTP2 flow-control and send chunks sequentially. Hence, you should first ensure that you have enough flow-control credit (with A) or risk a connection failure. When you call _withdrawCredit keep in mind that HTTP2 has flow control at the stream and at the connection level. If you use `http2-client`Z in a multithreaded conext, you should avoid starving the connection-level flow-control.>If you want to send bytestrings that fit in RAM, you can use - as a function that implements flow-control.This function does not send frames back-to-back, that is, other frames may get interleaved between two chunks (for instance, to give priority to other streams, although no priority queue exists in `http2-client` so far).Please refer to ! and A as well.dZhijklmno[pqr !"#s^tuv$%&'()*+,-./0123456789:;<=>?@ABCDEFGwHIHost to connect to.3Port number to connect to (usually 443 on the web).-The buffersize for the Network.HPACK encoder.-The buffersize for the Network.HPACK decoder.=The TLS client parameters (e.g., to allow some certificates)..Initial SETTINGS that are sent as first frame.JKLA frame connection.-The buffersize for the Network.HPACK encoder.-The buffersize for the Network.HPACK decoder..Initial SETTINGS that are sent as first frame.xba_`yz{fgM|}~\K  !"#$%&'()*+,5-./012346789:;<=>?@ABCDEFGHIJKLM6IJKM+,-./012345:;<=9678# !"BCDEF>?@AG$%&'()*LH7Zhijklmno[pqr !"#s^tuv$%&'()*+ ,-./0123456789:;<=>?@ABCDEFGwHIJKLxba_`yz{fgM|}~\None OIAn HTTP2 response, once fully received, is made of headers and a payload.PTResult containing the unpacked headers and all frames received in on a stream. See O and V to get a higher-level utility.Q Result for a S.R1Opaque type to express an action which timed out.S Performs a S@ and waits for a reply up to a given timeout (in microseconds).T$Uploads a whole HTTP body at a time.!This function should be called at most once per stream. This function closes the stream with HTTP2.setEndStream chunk at the end. If you want to post data (e.g., streamed chunks) your way to avoid loading a whole bytestring in RAM, please study the source code of this function first.This function sends one chunk at a time respecting by preference: - server's flow control desires - server's chunking preference^Uploading an empty bytestring will send a single DATA frame with setEndStream and no payload.U#Wait for a stream until completion.LThis function is fine if you don't want to consume results in chunks. See V to collect the complicated P into a simpler  StramResponse.VrConverts a StreamResult to a StramResponse, stopping at the first error using the `Either HTTP2.ErrorCode` monad.W8Sequentially wait for every push-promise with a handler.7This function runs forever and you should wrap it with  withAsync. OPQRSclient connectiontimeout in microseconds.8-bytes message to uniquely identify the replyT HTTP body. The client.The outgoing flow control for this client. (We might remove this argument in the future because we can get it from the previous argument.The corresponding HTTP stream.!The flow control for this stream.UVW OPQRSTUVW TUVWPOSRQ OPQRSTUVW        !"#$%%&'()*++,-./0123 44567789::;<==>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_XY`abcXYdefghijklmnVopq[rstuvwxyz{|}~RSL+http2-client-0.3.0.2-8xNrJKe25HM2O8KN0dlKIK"Network.HTTP2.Client.RawConnection$Network.HTTP2.Client.FrameConnectionNetwork.HTTP2.ClientNetwork.HTTP2.Client.HelpersuploadRawHttp2Connection_sendRaw_nextRaw_closenewRawHttp2ConnectionHttp2ServerStream_nextHeaderAndFrameHttp2FrameClientStream _sendFrames _getStreamIdHttp2FrameConnection_makeFrameClientStream _serverStream_closeConnectioncloseConnectionmakeFrameClientStreamsendOnesendBackToBacknextnewHttp2FrameConnection FlagSetterPushPromiseHandler Http2Stream_headers_prio_rst _waitHeaders _waitData_sendDataChunk_waitPushPromise StreamThreadHttp2ClientAsyncs_waitSettingsAsync_creditFlowsAsync _HPACKAsync_controlFramesAsync_incomingFramesAsync Http2Client_ping _settings_goaway _startStream_incomingFlowControl_outgoingFlowControl_paylodSplitter_asyncsTooMuchConcurrency_getStreamRoomNeeded StreamStarterStreamDefinition _initStream _handleStreamOutgoingFlowControl_receiveCredit_withdrawCreditIncomingFlowControl _addCredit_consumeCredit _updateWindowlinkHttp2Client_gtfonewHttp2ClientwithHttp2StreamheaderswrapFrameClientsendData$fShowTooMuchConcurrencyStreamResponse StreamResult PingReplyTimedOutping waitStreamfromStreamResult onPushPromise$fShowTimedOut tls-1.4.0-4OcdobSkjM2FtryXCqBlTANetwork.TLS.Parameters onSuggestALPNPayloadSplitterHpackEncoderContext waitHeaders"http2-1.6.3-7Ze900qxsdZ4ZsLE9Kkc1wNetwork.HTTP2.Types setEndStreamConnectionSettingscreditDataFramesLoopincomingHPACKFramesLoopincomingControlFramesLoopincomingFramesLoopmaxConcurrentStreams$async-2.1.1.1-8yywY4inVGRLJSCg60gBXjControl.Concurrent.Asynclink setEndHeadersettingsPayloadSplitterfixedSizeChunksPushPromisesChanPushPromisesChanContent HeadersChanHeadersChanContent FramesChanHPACKLoopDecision ForwardHeaderOpenPushPromise_encodeHeaders_applySettingsCST_clientSettings_serverSettingsdefaultConnectionSettingsinitializeStreamnewIncomingFlowControlnewOutgoingFlowControl sendHeaders sendDataFramesendResetFrame sendGTFOFramerfcError sendPingFramesendWindowUpdateFramesendSettingsFramesendPriorityFramewaitFrameWithStreamIdwaitFrameWithTypeIdwaitFrameWithTypeIdForStreamId waitFrame isPingReplyisSettingsReplywaitHeadersWithStreamId!waitPushPromiseWithParentStreamId&network-2.6.3.2-IsLM4TXcLoRI0fmmBYVyQzNetwork.SocketHostNameNetwork.Socket.Types PortNumber ClientParams