!A\8      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst u v w x y z { | } ~  Safesimple rate limiter(c) 2012 Eric MertensBSD3jeremy@seereason.comstableportableSafe C ircbot"Construct a new rate limit control ircbotExecute this before sendingircbot#Loop which manages the limit timers ircbotmax burst lengthircbotdelay (in microseconds)  Safe2    None 1=>?@AM w !"('#$%&)*+,"('#$%&) !*+,None2Rircbot1get the nickname of the user who sent the messageSircbot'figure out who to reply to for a given VIf message was sent to a #channel reply to the channel. Otherwise reply to the sender.Tircbot!returns the receiver of a message0if multiple receivers, it returns only the first<=@?>ABCDEFHIGJKLMNOPQRSTLMJKNEFHIGOPCDQAB<=@?>RSTNone>iircbotparse a positive integerjircbotparser that checks for the ! (from the )kircbot6create a bot part by using Parsec to parse the commandThe argument to k is a parser function.,The argument to that parsec function is the target% that the response should be sent to.The parser will receive the I from the E.see dicePart for an example usage.hijklmhijklmNoneopqopqNoneDrsrs Nonetutu Nonevv Nonewxwx None"#2{ircbotusername on client system|ircbothostname of client system}ircbot!irc server client is connected to~ircbotclient's real nameyz{|}~yz{|}~ NoneNone"#26ircbotBot configurationircbot!optional channel logging functionircbot app loggingircbotirc server to connectircbot3irc port to connect to (usually, 'PortNumber 6667')ircbotirc nickircbotcommand prefixircbot irc user infoircbotchannel to joinircbot%(burst length, delay in microseconds)ircbot5connect to irc server and send NICK and USER commandsircbotRsimpleBot connects to the server and handles messages using the supplied BotPartTsthe 'Chan Message' for the optional logging function will include all received and sent messages. This means that the bots output will be included in the logs.ircbotSsimpleBot' connects to the server and handles messages using the supplied BotPartTsthe 'Chan Message' for the optional logging function will include all received and sent messages. This means that the bots output will be included in the logs.ircbotcall  if . Do nothing for Nothing.ircbotloggingircbotBot configurationircbotbot parts (must include pingPart, or equivalent)ircbotF for all forked handler threads and a function that forces a reconnect ircbotoptional logging functionircbotapplication loggingircbot;rate limiter settings (burst length, delay in microseconds)ircbotirc server to connectircbot!irc port to connect to (usually, '6667')ircbotirc nickircbotcommand prefixircbot irc user infoircbotbot parts (must include pingPart,  channelsPart, and 'nickUserPart)' ircbotH for all forked handler threads and an IO action that forces a reconnectyz{|}~yz{|}~None7zP  !"('#$%&)*+,<=>?@ABCDEFGIHJKLMNOPQRSThijklmyz{|}~ !"#$%&''())*+,-./0123456789:;<=>?@ABCDEFGHIIJKLMMNOPPQRSTTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{| } ~    #ircbot-0.6.6-AeXOTXSoTHtKDbyZIAuCxdNetwork.IRC.Bot.ErrorCodesNetwork.IRC.Bot.LimiterNetwork.IRC.Bot.LogNetwork.IRC.Bot.BotMonadNetwork.IRC.Bot.CommandsNetwork.IRC.Bot.ParsecNetwork.IRC.Bot.Part.ChannelsNetwork.IRC.Bot.Part.DiceNetwork.IRC.Bot.Part.HelloNetwork.IRC.Bot.Part.PingNetwork.IRC.Bot.PosixLoggerNetwork.IRC.Bot.TypesNetwork.IRC.Bot.Part.NickUserNetwork.IRC.Bot.CoreNetwork.IRC.BotnoNicknameGivenerroneusNickname nicknameInUse nickCollisionLimiterlimitsIn limitsOut limitsDelaylimitsThreadId newLimiterlimitLoggerLogLevelDebugNormal Important stdoutLogger nullLogger $fEqLogLevel $fOrdLogLevel$fReadLogLevel$fShowLogLevel$fDataLogLevelBotPartT unBotPartTBotEnvmessageoutChanlogFnbotName cmdPrefixBotMonad askBotEnv askMessage askOutChan localMessage sendMessagelogMwhoami runBotPartT mapBotPartT maybeZero$fBotMonadBotPartT$fMonadRWSrwsBotPartT$fMonadReaderrBotPartT$fApplicativeBotPartT$fAlternativeBotPartT$fFunctorBotPartT$fMonadBotPartT$fMonadFixBotPartT$fMonadPlusBotPartT$fMonadTransBotPartT$fMonadIOBotPartT$fMonadWriterBotPartT$fMonadStateBotPartT$fMonadErrorBotPartT$fMonadContBotPartTNotice noticePrefixnoticeReceivers noticeMsgPong ToMessage toMessagePrivMsgprefix receiversmsgPingHostNamecmdpingprivMsg toPrivMsg sendCommandaskSenderNickNamereplyTo askReceiver$fToMessagePrivMsg$fToMessagePong$fToMessageNotice$fEqPing $fOrdPing $fReadPing $fShowPing $fDataPing $fEqPrivMsg $fReadPrivMsg $fShowPrivMsg$fEqPong $fOrdPong $fReadPong $fShowPong $fDataPong $fEqNotice $fReadNotice $fShowNotice mapParsecTnat botPrefix parsecPart reportErrorshowErrorMessages$fBotMonadParsecTinitChannelsPart channelsPart joinChanneldicePart diceCommand helloPart helloCommandpingPart posixLoggerfdWritesUserusernamehostname servernamerealnamenullUser $fDataUser$fEqUser $fOrdUser $fReadUser $fShowUser nickUserPartchangeNickUserBotConf channelLoggerloggerhostportnick commandPrefixuserchannelslimits nullBotConf simpleBot simpleBot'limiter"irc-0.6.1.0-GwKCmI7EX71ATP8WQMLeCcNetwork.IRC.BaseMessage ircConnectwriteMaybeChanbaseControl.Concurrent.Chan writeChan GHC.MaybeJustircConnectLoop GHC.Conc.SyncThreadId