`      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_None!"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 `7 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!"OT8a@A function able to split a header block into multiple fragments.8An exception thrown when the server sends a GoAwayFrame.(A Handler for exceptional circumstances.A fallback handler for frames.-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.bEHelper 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 c 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 4 instead of newHttp2Client (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 dm 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 R 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.e,Couples client and server settings together.(,Set of Async threads running an Http2Client.This asyncs are linked to the thread where the Http2Client is created. If you modify this structure to add more Async, please also modify K accordingly.*+Async waiting for the initial settings ACK.+KAsync responsible for crediting the connection incoming flow control. See f.,/Async responsible for serializing every HEADERS PUSH_PROMISECONTINUATION. See g.-AAsync responsible for handling control frames (e.g., PING). See h..|Async responsible for ingesting all frames, increasing the maximum-received streamID and starting the frame dispatch. See i./GRecord holding functions one can call while in an HTTP2 client session.1Send 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).)2Sends 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).)3Sends a GOAWAY.4Spawns new streams. See =.5Simple getter for the F" for the whole client connection.6Simple getter for the B" for the whole client connection.7&Returns a function to split a payload.8 Asynchronous operations threads.9Closes the network connection.:4Whether 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 j at any time.==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 =.@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.AFunction 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 JM. This design may change in the future to give more leeway to library users.B,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 B 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).D9Add credit (using a hidden mutable reference underneath).EWait 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.F!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 H 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).HAdd credit (using a hidden mutable reference underneath). This function only does accounting, the IO only does mutable changes. See J.I1Consumes some credit and returns the credit left.JSends 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.K,Links all client's asyncs to current thread.L Synonym of 3. ,https://github.com/http2/http2-spec/pull/366M=Starts a new stream (i.e., one HTTP request + server-pushes).%You will typically call the returned =A immediately to define what you want to do with the Http2Stream.  _  -$(withHttp2Stream myClient $ stream - StreamDefinition _ _)Please refer to = and > for more.N-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 kP but this design choice may change in the future. Hence, we recommend you use k as well.O3Starts a new Http2Client 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 newHttp2Client instead.l0Runs an action, rethrowing exception 50ms later.In a context where asynchronous are likely to occur this function gives a chance to other threads to do some work before Async linking reaps them all.DIn particular, servers are likely to close their TCP connection soon after sending a GoAwayFrame and we want to give a better chance to clients to observe the GoAwayFrame in their handlers to distinguish GoAwayFrames followed by TCP disconnection and plain TCP resets. As a result, this function is mostly used to delay i. A more involved and future design will be to inline the various loop-processes for incomingFramesLoop and GoAwayHandlers in a same thread (e.g., using pipe/conduit to retain composability).P1Default FallBackFrameHandler that ignores frames.QDefault GoAwayHandler throws a  in the current thread.UA probably sharper handler if you want to abruptly stop any operation is to get the ThreadId& of the main client thread and using .There's an inherent race condition when receiving a GoAway frame because the server will likely close the connection which will lead to TCP errors as well.fWe 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 flightmDSplit headers like so that no payload exceeds server's maxFrameSize.n,Breaks a ByteString into fixed-sized chunks. . fixedSizeChunks 2 "hello" = ["he", "ll", "o"]RCSends 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 E) 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 E as well.kaopqrstuvbwxy !"#$%&'ze{|}()*+,-./0123456789:;<=>?@ABCDEFGHIJK~LMNOA frame connection.-The buffersize for the Network.HPACK encoder.-The buffersize for the Network.HPACK decoder..Initial SETTINGS that are sent as first frame.2Actions to run when the remote sends a GoAwayFramedActions to run when a control frame is not yet handled in http2-client lib (e.g., PRIORITY frames).Actions to run on the client.ilhPQfgmnRcSP  !"#$%&'()*+,-./0912345678:;<=>?@ABCDEFGHIJKLMNOPQR;OMNR/0123456789>?@A=:;<' !"#$%&FGHIJBCDEKQP()*+,-.L=aopqrstuvbwxy !"#$%&'ze{|}()*+,-./ 0123456789:;<=>?@ABCDEFGHIJK~LMNOilhPQfgmnRcSNone VIAn HTTP2 response, once fully received, is made of headers and a payload.WTResult containing the unpacked headers and all frames received in on a stream. See V and ] to get a higher-level utility.X Result for a Z.Y1Opaque type to express an action which timed out.Z Performs a Z@ and waits for a reply up to a given timeout (in microseconds).[$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.\#Wait for a stream until completion.LThis function is fine if you don't want to consume results in chunks. See ] to collect the complicated W into a simpler  StramResponse.]rConverts a StreamResult to a StramResponse, stopping at the first error using the `Either HTTP2.ErrorCode` monad.^8Sequentially wait for every push-promise with a handler.7This function runs forever and you should wrap it with  withAsync. VWXYZclient connectiontimeout in microseconds.8-bytes message to uniquely identify the reply[ 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.\]^ VWXYZ[\]^ [\]^WVZYX VWXYZ[\]^       !!"#$%&'()**+,-./0012345678 99:;<<=>??@ABBCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg`ah`aijklmnopqrst^uvwcxyz{|}~Z[T+http2-client-0.4.0.0-AYg5pdbTjCv3jdOyvY8KI1"Network.HTTP2.Client.RawConnection$Network.HTTP2.Client.FrameConnectionNetwork.HTTP2.ClientNetwork.HTTP2.Client.HelpersControl.Exception.BasethrowTouploadRawHttp2Connection_sendRaw_nextRaw_closenewRawHttp2ConnectionHttp2ServerStream_nextHeaderAndFrameHttp2FrameClientStream _sendFrames _getStreamIdHttp2FrameConnection_makeFrameClientStream _serverStream_closeConnectioncloseConnectionmakeFrameClientStreamsendOnesendBackToBacknextnewHttp2FrameConnectionRemoteSentGoAwayFrame GoAwayHandlerFallBackFrameHandler 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 _updateWindow linkAsyncs_gtfowithHttp2StreamheadersrunHttp2ClientignoreFallbackHandlerdefaultGoAwayHandlersendData $fExceptionRemoteSentGoAwayFrame$fShowTooMuchConcurrency$fShowRemoteSentGoAwayFrameStreamResponse StreamResult PingReplyTimedOutping waitStreamfromStreamResult onPushPromise$fShowTimedOut tls-1.4.0-7LEq2wWyyRZHSSD3ZsgHajNetwork.TLS.Parameters onSuggestALPNPayloadSplitterHpackEncoderContext waitHeaders"http2-1.6.3-7Ze900qxsdZ4ZsLE9Kkc1wNetwork.HTTP2.Types setEndStreamConnectionSettingscreditDataFramesLoopincomingHPACKFramesLoopincomingControlFramesLoopincomingFramesLoopmaxConcurrentStreams setEndHeaderdelayExceptionsettingsPayloadSplitterfixedSizeChunksPushPromisesChanPushPromisesChanContent 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