!}lD      !"#$%&'()*+,-./0123456789:;<=>?@ABC7Concurrently run actions until one succeeds or all fail(c) Eric Mertens, 2020ISCemertens@gmail.comSafe*X Dhookup-Main event loop for concurrent attempt systemEhookupRNo threads are active, either start a new thread or return the complete error listFhookup(Start a new thread for the given attemptGhookup7Create an STM action that only succeeds after at least n microseconds have passed.Hhookup#microsecond delay between attempts hookuprelease unneeded success hookupordered list of attempts H?Hack into the internals of OpenSSL to add missing functionality(c) Eric Mertens, 2016ISCemertens@gmail.comNone 3hookupdAdd hostname checking to the certificate verification step. Partial wildcards matching is disabled.Ihookupparam hookupname hookupnamelen hookup1 success, 0 failure Jhookupparam hookupflags Khookupctx hookup hostname &SOCKS5 network protocol implementation(c) Eric Mertens, 2018ISCemertens@gmail.comNoneg$.Lhookup;Server message used to indicate result of client's request.MhookupIClient message used to request a network operation from the SOCKS server.Nhookup?Initial SOCKS sent by server with chosen authentication method.OhookupJInitial SOCKS sent by client with proposed list of authentication methods.Phookup%proposed methods (maximum length 255)Qhookup2Network host identified by address or domain name.RhookupIPv4 host addressShookupIPv6 host addressThookup Domain name (maximum length 255)UhookupNetwork host and port number hookupSOCKS command reply codesVhookup/Tags used in the protocol messages for encoded Q valuesWhookupSOCKS client commandsXhookupSOCKS authentication methodsYhookup Transform a Z into a strict [\hookupBuild a list of buildable things prefixing the length of the list as a single byte. The list must not be longer than 255 elements.]hookupxParse a list of parsable things where the length of the list is encoded as a single byte before the items to be parsed.^hookup Match a 16-bit, big-endian word.0L_`aMbcdNefOgPQRSTUh  WijkXlmnopqrstuvw2Network connections generalized over TLS and SOCKS(c) Eric Mertens, 2016ISCemertens@gmail.comNone*{L-hookupA connection to a network service along with its read buffer used for line-oriented protocols. The connection could be a plain network connection, SOCKS connected, or TLS.hookup3Type for errors that can be thrown by this package.hookupFailure during  getAddrInfo resolving remote hosthookupFailure during 2 to remote hosthookupFailure during 6hookupIncomplete line during 6hookup4Socks command rejected by server by given reply codehookup,Socks authentication method was not acceptedhookup3Socks server sent an invalid message or no message.hookup+Domain name was too long for SOCKS protocolhookupcTLS connection parameters. These parameters are passed to OpenSSL when making a secure connection. hookupPath to client certificate!hookupPath to client private key"hookupPrivate key decryption password#hookupPath to CA certificate bundle$hookup OpenSSL cipher suite name (e.g. "HIGH")%hookup#Disables certificate checking when x&hookupSOCKS connection parameters(hookupSOCKS server host)hookupSOCKS server port*hookupParameters for 2.Common defaults for fields:  defaultFamily, 1When a &Q is provided the connection will be established using a SOCKS (version 5) proxy.When a Z is provided the connection negotiate TLS at connect time in order to protect the stream.lThe binding hostname can be used to force the connect to use a particular interface or IP protocol version.,hookupDestination host-hookupDestination TCP port.hookupOptional SOCKS parameters/hookupOptional TLS parameters0hookupSource address to bind1hookupMDefault values for TLS that use no client certificates, use system CA root, "HIGH", cipher suite, and which validate hostnames.yhookupPOpen a socket using the given parameters either directly or via a SOCKS server.zhookuppWhen no bind address is specified return the full list of destination addresses with no bind address specified.When bind addresses are specified return a subset of the destination list matched up with the first address from the bind list that has the correct address family.{hookupDAlternate list of addresses between IPv6 and other (IPv4) addresses.|hookupDCreate a socket and connect to the service identified by the given }! and return the connected socket.~hookup A version of  that doesn't bother binding on the wildcard address. The effect of binding on a wildcard address in this library is to pick an address family. Because of the matching done earlier this is unnecessary for client connections and causes a local port to be unnecessarily fixed early.hookupOpen a  using the parameters from an }2hookupJOpen network connection to TCP service specified by the given parameters.-The resulting connection MUST be closed with 4 to avoid leaking resources.Throws , , , 3hookup Create a new  using an already connected socket. This will attempt to start TLS if configured but will ignore any SOCKS server settings as it is assumed that the socket is already actively connected to the intended service.Throws 4hookupClose network connection.5hookupReceive the next chunk from the stream. This operation will first return the buffer if it contains a non-empty chunk. Otherwise it will request up to the requested number of bytes from the stream.Throws: , , 6hookup2Receive a line from the network connection. Both "\r\n" and "\n" are recognized. Returning < means that the peer has closed its half of the connection. Unterminated lines will raise a x exception. This can happen if the peer transmits some data and closes its end without transmitting a line terminator.Throws: , , , 7hookupPush a [ onto the buffer so that it will be the first bytes to be read on the next receive operation. This could perhaps be useful for putting the unused portion of a 5" back into the buffer for future 6 or 5 operations.hookupRemove the trailing '\\r' if one is found.8hookupSend bytes on the network connection. This ensures the whole chunk is transmitted, which might take multiple underlying sends.Throws: , hookupInitiate a TLS session on the given socket destined for the given hostname. When successful an active TLS connection is returned with certificate verification successful when requested. This function requires that the TLSParams component of * is set.:hookup#Get peer certificate if one exists.;hookup#Get peer certificate if one exists.Bhookup" implemented for prettier messages hookupdestination hookupdestination port hookupsource hookupconnected socket hookupparameters hookupsocket creation action hookupopen network handle 2hookupparameters hookupopen connection 3hookupparameters hookupconnected socket hookupopen connection 4hookupopen connection 5hookupopen connection hookupmaximum underlying recv size hookupnext chunk from stream 6hookupopen connection hookupmaximum line length hookupnext line or end-of-stream 7hookupconnection hookupnew head of buffer 8hookupopen connection hookupchunk 9hookupconnection params hookup hostname hookupconnection params hookuphostname hookupsocket creation action hookup$(client certificate, connected TLS) hookup insecure ?   !"#$%&'()*+,-./0123456789:;<=>?@AH23495687*+,-./0&'() !"#$%1   ;:<=>?@A      !"##$%&'()**+,--./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^\_`abcNdeOfgPhQWijklmnopqrstuvwxyz{|}~!hookup-0.5-84ZGnwkFqGY5OXDGsOD1JxHookupHookup.OpenSSLHookup.Concurrent Hookup.Socks5)HsOpenSSL-0.11.4.19-d8wJz8lBBrBQp1Cxl9NWs OpenSSL.PEMPwTTY PwCallbackPwBSPwStrPwNonePemPasswordSupplywithDefaultPassword getPubKeyDerinstallVerification CommandReplyAddrNotSupportedCmdNotSupported TTLExpiredConnectionRefusedHostUnreachableNetUnreachable NotAllowedGeneralFailure Succeeded ConnectionConnectionFailureHostnameResolutionFailure LineTooLong LineTruncated SocksErrorSocksAuthenticationErrorSocksProtocolErrorSocksBadDomainName TlsParamstpClientCertificatetpClientPrivateKeytpClientPrivateKeyPasswordtpServerCertificate tpCipherSuite tpInsecure SocksParamsspHostspPortConnectionParamscpHostcpPortcpSockscpTlscpBinddefaultTlsParamsconnectconnectWithSocketcloserecvrecvLineputBufsend upgradeTlsgetPeerCertificategetClientCertificategetPeerCertFingerprintSha1getPeerCertFingerprintSha256getPeerCertFingerprintSha512getPeerPubkeyFingerprintSha1getPeerPubkeyFingerprintSha256getPeerPubkeyFingerprintSha512$fExceptionConnectionFailure$fShowConnectionFailureloopnothingRunningstart startTimerconcurrentAttemptsx509VerifyParamSet1Hostx509VerifyParamSetHostflags sslGet0ParamResponseRequest ServerHello ClientHello cHelloMethodsHostIPv4IPv6 DomainNameAddressHostTagCommand AuthMethod runBuilderbytestring-0.10.8.2 Data.ByteString.Builder.InternalBuilderData.ByteString.Internal ByteString buildListOf parseListOf parseWord16BErspReply rspAddress reqCommand reqAddress sHelloMethodConnectBind UdpAssociateAuthNoAuthenticationRequired AuthGssApiAuthUsernamePasswordAuthNoAcceptableMethodsbuildClientHelloparseClientHellobuildServerHelloparseServerHello buildRequest parseRequest buildResponse parseResponseghc-prim GHC.TypesTrue openSocketmatchBindAddrsinterleaveAddressFamiliesconnectToAddrInfo&network-3.1.2.0-3J3aiSFSjtoHAHbAISoV5iNetwork.Socket.InfoAddrInfobind'Network.Socket.SockAddrbindsocket' NetworkHandlebaseGHC.IO.ExceptionIOErrorOpenSSL.Session ProtocolErrorConnectionAbruptlyTerminated GHC.MaybeNothingcleanEndstartTlsGHC.Exception.TypedisplayException openSocket'openNetworkHandleverificationMode