2      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe08(The data type for HTTP/2 frame payloads. 'The data type for HTTP/2 frame headers. The data type for HTTP/2 frames.!The type for padding in payloads.6The type for fragments of a header encoded with HPACK.The type for stream identifierThe type for flags.The type for frame type.%The type for raw frame type.&Type for stream priority+>The type for weight in priority. Its values are from 1 to 256.,The type for window size.-NCooked version of settings. This is suitable to be stored in a HTTP/2 context.5Association list of SETTINGS.6 The type for raw SETTINGS value.7The type for SETTINGS key.>)The connection error or the stream error.AThe type for error code. See  -https://tools.ietf.org/html/rfc7540#section-7.QThe type for raw error code.R"The length of HTTP/2 frame header.frameHeaderLength9S Converting A to Q.fromErrorCodeId NoError0"fromErrorCodeId InadequateSecurity12T Converting Q to A.toErrorCodeId 0NoErrortoErrorCodeId 0xcInadequateSecuritytoErrorCodeId 0xeUnknownErrorCode 14U Obtaining A from >.V Converting 7 to raw value.)fromSettingsKeyId SettingsHeaderTableSize1,fromSettingsKeyId SettingsMaxHeaderBlockSize6WConverting raw value to 7.toSettingsKeyId 0NothingtoSettingsKeyId 1Just SettingsHeaderTableSizetoSettingsKeyId 6Just SettingsMaxHeaderBlockSizetoSettingsKeyId 7NothingX Checking 5 and reporting an error if any.*checkSettingsList [(SettingsEnablePush,2)]AJust (ConnectionError ProtocolError "enable push must be 0 or 1")YThe default settings.defaultSettingsSettings {headerTableSize = 4096, enablePush = True, maxConcurrentStreams = Nothing, initialWindowSize = 65535, maxFrameSize = 16384, maxHeaderBlockSize = Nothing}ZUpdating settings.XupdateSettings defaultSettings [(SettingsEnablePush,0),(SettingsMaxHeaderBlockSize,200)]Settings {headerTableSize = 4096, enablePush = False, maxConcurrentStreams = Nothing, initialWindowSize = 65535, maxFrameSize = 16384, maxHeaderBlockSize = Just 200}[ The default initial window size.defaultInitialWindowSize65535\The maximum window size. maxWindowSize 2147483647]:Checking if a window size exceeds the maximum window size.isWindowOverflow 10FalseisWindowOverflow maxWindowSizeFalse$isWindowOverflow (maxWindowSize + 1)True^Default concurrency.recommendedConcurrency100_+Default priority which depends on stream 0.defaultPriority?Priority {exclusive = False, streamDependency = 0, weight = 16}`+Highest priority which depends on stream 0.highestPriority@Priority {exclusive = False, streamDependency = 0, weight = 256}a Converting  to %.fromFrameTypeId FrameData0!fromFrameTypeId FrameContinuation9!fromFrameTypeId (FrameUnknown 10)10b Converting % to .toFrameTypeId 0 FrameDatatoFrameTypeId 9FrameContinuationtoFrameTypeId 10FrameUnknown 10c%The maximum length of HTTP/2 payload.maxPayloadLength16384d-The initial value of flags. No flags are set. defaultFlags0eDChecking if the END_STREAM flag is set. >>> testEndStream 0x1 Truef7Checking if the ACK flag is set. >>> testAck 0x1 Trueg(Checking if the END_HEADERS flag is set.testEndHeader 0x4Trueh#Checking if the PADDED flag is set.testPadded 0x8Truei%Checking if the PRIORITY flag is set.testPriority 0x20TruejSetting the END_STREAM flag.setEndStream 01kSetting the ACK flag.setAck 01lSetting the END_HEADERS flag.setEndHeader 04mSetting the PADDED flag. setPadded 08nSetting the PRIORITY flag. setPriority 032o.Checking if the stream identifier for control. isControl 0True isControl 1Falsep.Checking if the stream identifier for request. isRequest 0False isRequest 1Trueq/Checking if the stream identifier for response. isResponse 0False isResponse 2Truer&Checking if the exclusive flag is set.sSetting the exclusive flag.tClearing the exclusive flag.uGetting % from .,framePayloadToFrameTypeId (DataFrame "body") FrameDatav2Checking if padding is defined in this frame type.isPaddingDefined $ DataFrame ""TrueisPaddingDefined $ PingFrame ""False}  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvy  !"#$%&'()*+,-./0123456789:;<=>?@ACBDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv>     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvSafe!"wxInternal representation of priority in priority queues. The precedence of a dequeued entry should be specified to " when the entry is enqueued again. For test onlyw wwSafe wSafe x&Abstract data type for priority trees.yDefault precedence.z Converting & to wR. When an entry is enqueued at the first time, this function should be used.{Creating a new priority tree.|XBringing up the structure of the priority tree. This must be used for Priority frame.}OEnqueuing an entry to the priority tree. This must be used for Header frame.~1Putting an entry to the top of the priority tree.*Dequeuing an entry from the priority tree.$Deleting the entry corresponding to .  and }5 are used to change the priority of a live stream.xyz{|}~ wxyz{|}~ wyzx{|}~ xyz{|}~None!" )Auxiliary information for frame encoding.!Flags to be set in a frame header%Stream id to be set in a frame headerPadding if any. In the case where this value is set but the priority flag is not set, this value gets preference over the priority flag. So, if this value is set, the priority flag is also set.A smart builder of .encodeInfo setAck 0IEncodeInfo {encodeFlags = 1, encodeStreamId = 0, encodePadding = Nothing}Encoding an HTTP/2 frame to f. This function is not efficient enough for high performace program because of the concatenation of .0encodeFrame (encodeInfo id 1) (DataFrame "body")*"\NUL\NUL\EOT\NUL\NUL\NUL\NUL\NUL\SOHbody"Encoding an HTTP/2 frame to [$]. This is suitable for sendMany.GEncoding an HTTP/2 frame header. The frame header must be completed.zWriting an encoded HTTP/2 frame header to the buffer. The length of the buffer must be larger than or equal to 9 bytes.`Encoding an HTTP/2 frame payload. This returns a complete frame header and chunks of payload.stream identifierPayload length. None!"L#The type for frame payload decoder.Decoding an HTTP/2 frame to . The second argument must be include the entire of frame. So, this function is not useful for real applications but useful for testing.8Decoding an HTTP/2 frame header. Must supply 9 bytes.6Checking a frame header and reporting an error if any.BcheckFrameHeader defaultSettings (FrameData,(FrameHeader 100 0 0))DLeft (ConnectionError ProtocolError "cannot used in control stream")Decoding an HTTP/2 frame payload. This function is considered to return a frame payload decoder according to a frame type.%Frame payload decoder for DATA frame.(Frame payload decoder for HEADERS frame.)Frame payload decoder for PRIORITY frame.+Frame payload decoder for RST_STREAM frame.)Frame payload decoder for SETTINGS frame.-Frame payload decoder for PUSH_PROMISE frame.%Frame payload decoder for PING frame.'Frame payload decoder for GOAWAY frame..Frame payload decoder for WINDOW_UPDATE frame.-Frame payload decoder for CONTINUATION frame.Helper function to pull off the padding if its there, and will eat up the trailing padding automatically. Calls the decoder func passed in with the length of the unpadded portion between the padding octet and the actual paddingHTTP/2 settingsInput byte-stream Decoded frame        NoneThe preface of HTTP/2.connectionPreface""PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"Length of the preface.connectionPrefaceLength24  !"#$%&'()*+,-./0123456789:;<=>?@ACBDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv  v !"#$u%ab&'()*+_`opqrstdefghijklmn5789:;<=6VWX-./01234YZ,[\]QABCDEFGHIJKLMNOPST>?@URc^ Safe0Errors for decoder.Index is out of range+Eos appears in the middle of huffman string,Non-eos appears in the end of huffman string)Eos of huffman string is more than 7 bitsEncoded string has no lengthHeader block is empty<A peer tried to change the dynamic table size over the limitStrategy for HPACK encoding.$Which compression algorithm is used.3Whether or not to use Huffman encoding for strings.*Compression algorithms for HPACK encoding.No compressionUsing the static table onlyUsing indices onlyIndex for table. To be a  or . Header list.Header. Header value. Header name.Default .defaultEncodeStrategy<EncodeStrategy {compressionAlgo = Linear, useHuffman = True}     Safe >Type for table entry. Size includes the 32 bytes magic number.Size in bytes.From  to .From  to .Getting the size of .Getting .Getting .Getting .Dummy  to initialize a dynamic table.2How many entries can be stored in a dynamic table?   Safe8Take an arbitrary entry. O(1) thanks to lazy evaluation.  !"#$%& !"#$%&  !"#$%& Safe'The size of static table.(Get  from the static table.toStaticEntry (SIndex 1)(42,(":authority",""))toStaticEntry (SIndex 8)(42,(":status","200"))toStaticEntry (SIndex 50)(37,("range","")))Pre-defined static table. *+,-.'()/0*+,-.'(/ *+,-.'()/0 None!":LType for dynamic table.1An array2 Start point3The current number of entries4The size of the array51The current dynamic table size (defined in HPACK)6-The max dynamic table size (defined in HPACK)78The value informed by SETTINGS_HEADER_TABLE_SIZE. If 8, dynamic table size update is not necessary. Otherwise, dynamic table size update is sent and this value should be set to 8.9.The limit size of a dynamic table for decoding:jHeader to the index in Dynamic Table for encoder. Static Table is not included. Nothing for decoder.; Printing .eWhen SETTINGS_HEADER_TABLE_SIZE is received from a peer, its value should be set by this function. Creating . Creating .< Renewing  with necessary entries copied.=Is the size of  really changed?> Inserting  to  . New , the largest new  and a set of dropped OLD  are returned..?@ABCDE12345679:FG;HIJKLMNOPQR<STU=>VWXYZ[ABCDE51234679:;IJKMNOPQ<>[ ?@ABCD E12345679:FG;HIJKLMNOPQR<STU=>VWXYZ[None!"L\)Is header key-value stored in the tables?]Which table does  refer to?^MResolving an index from a header. Static table is prefer to dynamic table._Which table does  belong to? \`ab]cd^e_&ABCD;IJKM<>\`ab]cd^_\`ab]cd^e_SafefffNoneg&let bs = BS.pack [0x12,0x34,0xf3,0xab]unpack4bits bs[1,2,3,4,15,3,10,11]unpack4bits $ BS.tail bs[3,4,15,3,10,11]hgijgihgijSafek Bit stream.lData type for Bit.mZeronOneoFrom k of length 8 to p.fromBits [T,F,T,F,T,F,T,F]170fromBits [F,T,F,T,F,T,F,T]85klmnqoklnmoklmnqoSaferrrNonesHuffman encoding.ttoShifted [T,T,T,T] 0Shifted 1 4 "\240"toShifted [T,T,T,T] 4Shifted 1 0 "\SI"toShifted [T,T,T,T] 5Shifted 2 1 "\a\128"uHuffman encoding. svwxyzt{ususvwxyzt{uSafe|Type for Huffman decoding.} Creating |.~Marking the EOS path |}~|} |}~Safe4Integer encoding. The first argument is N of prefix. encode 5 10[10] encode 5 1337 [31,154,10] encode 8 42[42]4Integer decoding. The first argument is N of prefix.decode 5 10 $ BS.empty10decode 5 31 $ BS.pack [154,10]1337decode 8 42 $ BS.empty426parseInteger 7 127 $ BS.pack [210,211,212,87,88,89,90](183839313,"XYZ")SafeIndex or literal.!Whether or not adding to a table.Type for representation.Type for header block.Empty header block. NoneNoneHuffman decoding.Huffman decoding. NonesuNone Encoding   to  according to HuffmanEncoding.Parsing   from . The second : is whether or not huffman encoding is used. The third % is the length of the encoded string.None Converting  to the low level format.SafeNone#Converting the low level format to .#Converting the low level format to . ! forms a pair with corresponding .None Decoding  to .Decoding step for one $. Exporting for the test purpose.None Encoding  to .   NoneNoneHPACK decoding from  to .HPACK encoding from  to .HPACK encoding from  to .RDefault dynamic table size. The value is 4,096 bytes: an array has 128 entries.defaultDynamicTableSize4096 Converting ) for HTTP header to the low level format. Converting ' for HTTP header to bytestring builder.3Converting the low level format for HTTP header to .  would be thrown.""!"#$%&'()*+,--./01123456789:;<=>?@ABCDEEFGHIJKKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                      HI          ! " # $ % & ' ( ) * + , - . / / 0 1 2 3 4 5 6 7 7 8 9 : ; < = > ? @ L A BCDE F G H I J K L L M N O P  Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e fghijklmnopqrstuvwxyzC{|}~"http2-1.3.0-70W8UprFnNG5L2S6ULOELe Network.HTTP2Network.HTTP2.Priority Network.HPACKNetwork.HTTP2.TypesNetwork.HTTP2.Priority.PSQNetwork.HTTP2.Priority.QueueNetwork.HTTP2.EncodeNetwork.HTTP2.DecodeNetwork.HPACK.TypesNetwork.HPACK.Table.Entry!Network.HPACK.Table.DoubleHashMapNetwork.HPACK.Table.StaticNetwork.HPACK.Table.DynamicNetwork.HPACK.TableNetwork.HPACK.Huffman.Params Network.HPACK.Huffman.ByteStringNetwork.HPACK.Huffman.BitNetwork.HPACK.Huffman.TableNetwork.HPACK.Huffman.EncodeNetwork.HPACK.Huffman.Tree!Network.HPACK.HeaderBlock.Integer%Network.HPACK.HeaderBlock.HeaderFieldNetwork.HPACK.Builder.Word8Network.HPACK.Huffman.DecodeNetwork.HPACK.Huffman Network.HPACK.HeaderBlock.String Network.HPACK.HeaderBlock.EncodeNetwork.HPACK.Builder Network.HPACK.HeaderBlock.DecodeNetwork.HPACK.HeaderBlock.FromNetwork.HPACK.HeaderBlock.ToNetwork.HPACK.HeaderBlock FramePayload DataFrame HeadersFrame PriorityFrameRSTStreamFrame SettingsFramePushPromiseFrame PingFrame GoAwayFrameWindowUpdateFrameContinuationFrame UnknownFrame FrameHeader payloadLengthflagsstreamIdFrame frameHeader framePayloadPaddingHeaderBlockFragmentStreamId FrameFlags FrameTypeId FrameData FrameHeaders FramePriorityFrameRSTStream FrameSettingsFramePushPromise FramePing FrameGoAwayFrameWindowUpdateFrameContinuation FrameUnknown FrameTypePriority exclusivestreamDependencyweightWeight WindowSizeSettingsheaderTableSize enablePushmaxConcurrentStreamsinitialWindowSize maxFrameSizemaxHeaderBlockSize SettingsList SettingsValue SettingsKeyIdSettingsHeaderTableSizeSettingsEnablePushSettingsMaxConcurrentStreamsSettingsInitialWindowSizeSettingsMaxFrameSizeSettingsMaxHeaderBlockSize HTTP2ErrorConnectionError StreamError ErrorCodeIdNoError ProtocolError InternalErrorFlowControlErrorSettingsTimeout StreamClosedFrameSizeError RefusedStreamCancelCompressionError ConnectErrorEnhanceYourCalmInadequateSecurityHTTP11RequiredUnknownErrorCode ErrorCodeframeHeaderLengthfromErrorCodeId toErrorCodeId errorCodeIdfromSettingsKeyIdtoSettingsKeyIdcheckSettingsListdefaultSettingsupdateSettingsdefaultInitialWindowSize maxWindowSizeisWindowOverflowrecommendedConcurrencydefaultPriorityhighestPriorityfromFrameTypeId toFrameTypeIdmaxPayloadLength defaultFlags testEndStreamtestAck testEndHeader testPadded testPriority setEndStreamsetAck setEndHeader setPadded setPriority isControl isRequest isResponse testExclusive setExclusiveclearExclusiveframePayloadToFrameTypeIdisPaddingDefined Precedence PriorityTreedefaultPrecedence toPrecedencenewPriorityTreeprepareenqueueenqueueControldequeuedelete EncodeInfo encodeFlagsencodeStreamId encodePadding encodeInfo encodeFrameencodeFrameChunksencodeFrameHeaderencodeFrameHeaderBufencodeFramePayloadFramePayloadDecoder decodeFramedecodeFrameHeadercheckFrameHeaderdecodeFramePayloaddecodeDataFramedecodeHeadersFramedecodePriorityFramedecoderstStreamFramedecodeSettingsFramedecodePushPromiseFramedecodePingFramedecodeGoAwayFramedecodeWindowUpdateFramedecodeContinuationFrameconnectionPrefaceconnectionPrefaceLength DecodeError IndexOverrunEosInTheMiddle IllegalEos TooLongEosEmptyEncodedString EmptyBlockTooLargeTableSizeEncodeStrategycompressionAlgo useHuffmanCompressionAlgoNaiveStaticLinearIndex HeaderListHeader HeaderValue HeaderNamedefaultEncodeStrategySize DynamicTablesetLimitForEncodingnewDynamicTableForEncodingnewDynamicTableForDecoding HPACKDecodingHPACKEncodingBuilder HPACKEncodingdefaultDynamicTableSize encodeHeaderencodeHeaderBuilder decodeHeaderminSettingsKeyIdmaxSettingsKeyIdcheckSettingsValue minFrameType maxFrameType$fExceptionHTTP2Error newPrecedence PriorityQueue baseDeficitqueueHeapdeficit dependencyDeficitKey deficitSteps deficitList deficitTableweightToDeficit deficitLimitemptyisEmpty$fOrdPrecedence$fEqPrecedenceTPriorityQueuenewElementChildParentTNestedPriorityQueueGluebytestring-0.10.8.1Data.ByteString.Internal ByteStringBuilderbuildFramePayload buildPadding buildPrioritybuildFramePayloadDatabuildFramePayloadHeadersbuildFramePayloadPrioritybuildFramePayloadRSTStreambuildFramePayloadSettingsbuildFramePayloadPushPromisebuildFramePayloadPingbuildFramePayloadGoAwaybuildFramePayloadWindowUpdatebuildFramePayloadContinuationbuildFramePayloadUnknownpoke8poke16poke24poke32 bytestring4decodeWithPadding+.zeroFrameTypesnonZeroFrameTypespayloadDecodersdecodeUnknownFramecheckFrameSizestreamIdentifierpriority intFromWord8word32word32'word16' HeaderStuff$fExceptionDecodeErrorEntrytoEntry fromEntry entrySize entryHeaderentryHeaderNameentryHeaderValue dummyEntry maxNumbersheaderSizeMagicNumber headerSizetopResNKKV DoubleHashMapinsertfromList deleteListsearchstaticTableSize toStaticEntry staticTableSIndexfromStaticIndex toStaticIndex isSIndexValid staticHashMapstaticTableList circularTableoffset numOfEntriesmaxNumOfEntriesmaxDynamicTableSizelimitForEncodingbaseGHC.BaseNothinglimitForDecoding reverseIndexprintDynamicTablerenewDynamicTable shouldRenew insertEntryHIndexTableSizeActionKeepChangeIgnoreTableadj printEntryisDynamicTableEmptyisSuitableSizeneedChangeTableSizegetLimitForEncodingresetLimitForEncodingfromHIndexToIndexfromIndexToHIndexfromSIndexToIndexfromIndexToSIndexnewDynamicTable copyTable getEntries copyEntries insertFrontadjustTableSizeadjust insertEnd removeEnd toHeaderEntry HeaderCache WhichTable lookupTablewhichNoneKeyOnlyKeyValueInDynamicTable InStaticTableisInidxEos unpack4bitsc_memcpycopymemcpyBitsBFTfromBitsGHC.WordWord8fromBit huffmanTableHuffmanEncoding toShiftedencodeShifted ShiftedArrayAOSAaosatoShiftedArrayHTreetoHTreemarkTipBinEOSInfoeosInfoshowTree showTree' printTreebuildflattendecode parseInteger powerArrayencode'decode'NamingIndexing HeaderField HeaderBlockemptyHeaderBlockIdxLitAddNotAddNeverChangeTableSizeIndexedLiteral Word8Builder<|w8empty toByteStringHuffmanDecodingWay256Way16Pin EndOfStringForwardGoBacknextdecway256 constructstepbits4s parseStringghc-prim GHC.TypesBoolIntSetter toBuilderfromHeaderFieldword8schangeindex indexedNamenewNameset1set01set001set0001set0000setH<< singletonrunfromByteStringfromByteStringDebug toHeaderFieldindexedincrementalIndexingmaxSizewithoutIndexing neverIndexing headerStuffmask6mask5mask4isIndexedName1isIndexedName2 isHuffman dropHuffmanfromHeaderBlock decodeStepStepCtx decodeLoop decodeFinal fromNaming toHeaderBlocktoHeaderBlock' encodeFinal encodeLoop naiveStep staticStep linearStep smartStepcheckheadersNotToIndex Data.ByteString.Builder.Internal