//# 19 errors, 6,496 messages
//#
/*
    //#Server.java:1:1: class: com.dmdirc.Server$4
    //#Server.java:1:1: class: com.dmdirc.Server$3
    //#Server.java:1:1: method: com.dmdirc.Server$3.com.dmdirc.Server$3__static_init
    //#Server.java:1:1: class: com.dmdirc.Server$2
    //#Server.java:1:1: method: com.dmdirc.Server$2.com.dmdirc.Server$2__static_init
    //#Server.java:1:1: class: com.dmdirc.Server$1
    //#Server.java:1:1: method: com.dmdirc.Server$1.com.dmdirc.Server$1__static_init
    //#Server.java:1:1: class: com.dmdirc.Server
 * Copyright (c) 2006-2009 Chris Smith, Shane Mc Cormack, Gregory Holmes
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package com.dmdirc;

import com.dmdirc.actions.ActionManager;
import com.dmdirc.actions.CoreActionType;
import com.dmdirc.actions.wrappers.AliasWrapper;
import com.dmdirc.commandparser.CommandManager;
import com.dmdirc.commandparser.CommandType;
import com.dmdirc.config.ConfigManager;
import com.dmdirc.config.Identity;
import com.dmdirc.config.IdentityManager;
import com.dmdirc.interfaces.AwayStateListener;
import com.dmdirc.interfaces.InviteListener;
import com.dmdirc.logger.ErrorLevel;
import com.dmdirc.logger.Logger;
import com.dmdirc.parser.irc.ChannelInfo;
import com.dmdirc.parser.irc.ClientInfo;
import com.dmdirc.parser.irc.IRCParser;
import com.dmdirc.parser.irc.IRCStringConverter;
import com.dmdirc.parser.irc.MyInfo;
import com.dmdirc.parser.irc.ParserError;
import com.dmdirc.parser.irc.ServerInfo;
import com.dmdirc.ui.WindowManager;
import com.dmdirc.ui.input.TabCompleter;
import com.dmdirc.ui.input.TabCompletionType;
import com.dmdirc.ui.interfaces.InputWindow;
import com.dmdirc.ui.interfaces.ServerWindow;
import com.dmdirc.ui.interfaces.Window;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;

import javax.net.ssl.TrustManager;

/**
 * The Server class represents the client's view of a server. It maintains
 * a list of all channels, queries, etc, and handles parser callbacks pertaining
 * to the server.
 *
 * @author chris
 */
public class Server extends WritableFrameContainer implements Serializable {
    //#Server.java:68: method: Window com.dmdirc.Server.getFrame()
    //#input(Window getFrame()): __Descendant_Table[com/dmdirc/Server]
    //#input(Window getFrame()): __Descendant_Table[others]
    //#input(Window getFrame()): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(Window getFrame()): this
    //#input(Window getFrame()): this.__Tag
    //#input(Window getFrame()): this.window
    //#output(Window getFrame()): return_value
    //#pre[2] (Window getFrame()): this.__Tag == com/dmdirc/Server
    //#pre[3] (Window getFrame()): init'ed(this.window)
    //#post(Window getFrame()): return_value == this.window
    //#post(Window getFrame()): init'ed(return_value)
    //#Server.java:68: end of method: Window com.dmdirc.Server.getFrame()
    //#Server.java:68: method: Map com.dmdirc.Server.access$000(Server)
    //#input(Map access$000(Server)): x0
    //#input(Map access$000(Server)): x0.channels
    //#output(Map access$000(Server)): return_value
    //#pre[1] (Map access$000(Server)): x0 != null
    //#post(Map access$000(Server)): return_value == x0.channels
    //#post(Map access$000(Server)): init'ed(return_value)
    //#Server.java:68: end of method: Map com.dmdirc.Server.access$000(Server)
    //#Server.java:68: method: ServerStatus com.dmdirc.Server.access$100(Server)
    //#input(ServerStatus access$100(Server)): x0
    //#input(ServerStatus access$100(Server)): x0.myState
    //#output(ServerStatus access$100(Server)): return_value
    //#pre[1] (ServerStatus access$100(Server)): x0 != null
    //#post(ServerStatus access$100(Server)): return_value == x0.myState
    //#post(ServerStatus access$100(Server)): init'ed(return_value)
    //#Server.java:68: end of method: ServerStatus com.dmdirc.Server.access$100(Server)
    //#Server.java:68: method: com.dmdirc.Server.com.dmdirc.Server__static_init
    //#output(com.dmdirc.Server__static_init): $assertionsDisabled
    //#output(com.dmdirc.Server__static_init): DOMAIN_GENERAL
    //#output(com.dmdirc.Server__static_init): DOMAIN_PROFILE
    //#output(com.dmdirc.Server__static_init): DOMAIN_SERVER
    //#output(com.dmdirc.Server__static_init): __Descendant_Table[com/dmdirc/Server]
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.activateFrame()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.addAwayStateListener(Lcom/dmdirc/interfaces/AwayStateListener;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.addChannel(Lcom/dmdirc/parser/irc/ChannelInfo;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.addIconChangeListener(Lcom/dmdirc/interfaces/IconChangeListener;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.addInvite(Lcom/dmdirc/Invite;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.addInviteListener(Lcom/dmdirc/interfaces/InviteListener;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.addLine(Ljava/lang/StringBuffer;[Ljava/lang/Object;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.addLineToActive(Ljava/lang/String;[Ljava/lang/Object;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.addLineToAll(Ljava/lang/String;[Ljava/lang/Object;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.addNotificationListener(Lcom/dmdirc/interfaces/NotificationListener;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.addQuery(Ljava/lang/String;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.addRaw()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.addSelectionListener(Lcom/dmdirc/interfaces/SelectionListener;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.buildMyInfo()Lcom/dmdirc/parser/irc/MyInfo;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.buildParser()Lcom/dmdirc/parser/irc/IRCParser;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.buildServerInfo(Ljava/lang/String;ILjava/lang/String;Z)Lcom/dmdirc/parser/irc/ServerInfo;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.checkModeAliases()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.clearChannels()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.clearNotification()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.close()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.closeChannels()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.closeQueries()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.connect(Ljava/lang/String;ILjava/lang/String;ZLcom/dmdirc/config/Identity;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.delChannel(Ljava/lang/String;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.delQuery(Lcom/dmdirc/Query;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.delRaw()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.disconnect()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.disconnect(Ljava/lang/String;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.doCallbacks()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.doDelayedReconnect()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.doNotification(Ljava/lang/String;Lcom/dmdirc/actions/interfaces/ActionType;[Ljava/lang/Object;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getAwayMessage()Ljava/lang/String;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getChannel(Ljava/lang/String;)Lcom/dmdirc/Channel;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getChannels()Ljava/util/List;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getChildren()Ljava/util/List;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getConfigManager()Lcom/dmdirc/config/ConfigManager;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getIcon()Ljavax/swing/Icon;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getIgnoreList()Lcom/dmdirc/IgnoreList;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getInvites()Ljava/util/List;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getIrcd()Ljava/lang/String;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getMaxLineLength()I
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getName()Ljava/lang/String;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getNetwork()Ljava/lang/String;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getNetworkIdentity()Lcom/dmdirc/config/Identity;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getNotification()Ljava/awt/Color;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getNumLines(Ljava/lang/String;)I
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getParser()Lcom/dmdirc/parser/irc/IRCParser;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getProfile()Lcom/dmdirc/config/Identity;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getQueries()Ljava/util/List;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getQuery(Ljava/lang/String;)Lcom/dmdirc/Query;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getRaw()Lcom/dmdirc/Raw;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getServerIdentity()Lcom/dmdirc/config/Identity;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getStatus()Lcom/dmdirc/ServerStatus;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.getTabCompleter()Lcom/dmdirc/ui/input/TabCompleter;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.handleNotification(Ljava/lang/String;[Ljava/lang/Object;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.hasChannel(Ljava/lang/String;)Z
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.hasQuery(Ljava/lang/String;)Z
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.iconUpdated()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.isAway()Z
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.isNetwork(Ljava/lang/String;)Z
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.isValidChannelName(Ljava/lang/String;)Z
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.join(Ljava/lang/String;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.modifyNotificationArgs(Ljava/util/List;Ljava/util/List;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.onConnectError(Lcom/dmdirc/parser/irc/ParserError;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.onNickInUse(Ljava/lang/String;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.onNumeric(I[Ljava/lang/String;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.onPingFailed()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.onPost005()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.onSocketClosed()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.ownsFrame(Lcom/dmdirc/ui/interfaces/Window;)Z
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.processNotificationArg(Ljava/lang/Object;Ljava/util/List;)Z
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.reconnect()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.reconnect(Ljava/lang/String;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.removeAwayStateListener(Lcom/dmdirc/interfaces/AwayStateListener;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.removeIconChangeListener(Lcom/dmdirc/interfaces/IconChangeListener;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.removeInvite(Lcom/dmdirc/Invite;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.removeInviteListener(Lcom/dmdirc/interfaces/InviteListener;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.removeInvites()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.removeInvites(Ljava/lang/String;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.removeNotificationListener(Lcom/dmdirc/interfaces/NotificationListener;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.removeSelectionListener(Lcom/dmdirc/interfaces/SelectionListener;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.saveIgnoreList()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.sendCTCPReply(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.sendLine(Ljava/lang/String;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.sendNotification(Ljava/awt/Color;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.setActiveFrame(Lcom/dmdirc/FrameContainer;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.setIcon(Ljava/lang/String;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.splitLine(Ljava/lang/String;)Ljava/util/List;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.toString()Ljava/lang/String;
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.updateAwayState(Ljava/lang/String;)V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.updateIcon()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.updateIgnoreList()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.windowActivated()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.windowClosed()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.windowClosing()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.windowDeactivated()V
    //#output(com.dmdirc.Server__static_init): __Dispatch_Table.windowOpened()V
    //#output(com.dmdirc.Server__static_init): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#output(com.dmdirc.Server__static_init): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#post(com.dmdirc.Server__static_init): $assertionsDisabled == 0
    //#post(com.dmdirc.Server__static_init): DOMAIN_GENERAL != null
    //#post(com.dmdirc.Server__static_init): DOMAIN_PROFILE != null
    //#post(com.dmdirc.Server__static_init): DOMAIN_SERVER != null
    //#post(com.dmdirc.Server__static_init): __Descendant_Table[com/dmdirc/Server] == &__Dispatch_Table
    //#post(com.dmdirc.Server__static_init): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server] == &__Dispatch_Table
    //#post(com.dmdirc.Server__static_init): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Server] == &__Dispatch_Table
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.activateFrame()V == &com/dmdirc/FrameContainer.activateFrame
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.addAwayStateListener(Lcom/dmdirc/interfaces/AwayStateListener;)V == &addAwayStateListener
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.addChannel(Lcom/dmdirc/parser/irc/ChannelInfo;)V == &addChannel
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.addIconChangeListener(Lcom/dmdirc/interfaces/IconChangeListener;)V == &com/dmdirc/FrameContainer.addIconChangeListener
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.addInvite(Lcom/dmdirc/Invite;)V == &addInvite
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.addInviteListener(Lcom/dmdirc/interfaces/InviteListener;)V == &addInviteListener
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V == &com/dmdirc/FrameContainer.addLine
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.addLine(Ljava/lang/StringBuffer;[Ljava/lang/Object;)V == &com/dmdirc/FrameContainer.addLine
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.addLineToActive(Ljava/lang/String;[Ljava/lang/Object;)V == &addLineToActive
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.addLineToAll(Ljava/lang/String;[Ljava/lang/Object;)V == &addLineToAll
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.addNotificationListener(Lcom/dmdirc/interfaces/NotificationListener;)V == &com/dmdirc/FrameContainer.addNotificationListener
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.addQuery(Ljava/lang/String;)V == &addQuery
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.addRaw()V == &addRaw
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.addSelectionListener(Lcom/dmdirc/interfaces/SelectionListener;)V == &com/dmdirc/FrameContainer.addSelectionListener
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.buildMyInfo()Lcom/dmdirc/parser/irc/MyInfo; == &buildMyInfo
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.buildParser()Lcom/dmdirc/parser/irc/IRCParser; == &buildParser
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.buildServerInfo(Ljava/lang/String;ILjava/lang/String;Z)Lcom/dmdirc/parser/irc/ServerInfo; == &buildServerInfo
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.checkModeAliases()V == &checkModeAliases
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.clearChannels()V == &clearChannels
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.clearNotification()V == &com/dmdirc/FrameContainer.clearNotification
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.close()V == &com/dmdirc/FrameContainer.close
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.closeChannels()V == &closeChannels
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.closeQueries()V == &closeQueries
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.connect(Ljava/lang/String;ILjava/lang/String;ZLcom/dmdirc/config/Identity;)V == &connect
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.delChannel(Ljava/lang/String;)V == &delChannel
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.delQuery(Lcom/dmdirc/Query;)V == &delQuery
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.delRaw()V == &delRaw
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V == &com/dmdirc/WritableFrameContainer.despatchNotification
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.disconnect()V == &disconnect
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.disconnect(Ljava/lang/String;)V == &disconnect
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.doCallbacks()V == &doCallbacks
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.doDelayedReconnect()V == &doDelayedReconnect
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.doNotification(Ljava/lang/String;Lcom/dmdirc/actions/interfaces/ActionType;[Ljava/lang/Object;)V == &com/dmdirc/WritableFrameContainer.doNotification
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getAwayMessage()Ljava/lang/String; == &getAwayMessage
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getChannel(Ljava/lang/String;)Lcom/dmdirc/Channel; == &getChannel
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getChannels()Ljava/util/List; == &getChannels
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getChildren()Ljava/util/List; == &getChildren
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getConfigManager()Lcom/dmdirc/config/ConfigManager; == &com/dmdirc/FrameContainer.getConfigManager
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow; == &getFrame
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window; == &getFrame
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getIcon()Ljavax/swing/Icon; == &com/dmdirc/FrameContainer.getIcon
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getIgnoreList()Lcom/dmdirc/IgnoreList; == &getIgnoreList
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getInvites()Ljava/util/List; == &getInvites
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getIrcd()Ljava/lang/String; == &getIrcd
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getMaxLineLength()I == &getMaxLineLength
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getName()Ljava/lang/String; == &getName
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getNetwork()Ljava/lang/String; == &getNetwork
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getNetworkIdentity()Lcom/dmdirc/config/Identity; == &getNetworkIdentity
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getNotification()Ljava/awt/Color; == &com/dmdirc/FrameContainer.getNotification
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getNumLines(Ljava/lang/String;)I == &com/dmdirc/WritableFrameContainer.getNumLines
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getParser()Lcom/dmdirc/parser/irc/IRCParser; == &getParser
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getProfile()Lcom/dmdirc/config/Identity; == &getProfile
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getQueries()Ljava/util/List; == &getQueries
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getQuery(Ljava/lang/String;)Lcom/dmdirc/Query; == &getQuery
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getRaw()Lcom/dmdirc/Raw; == &getRaw
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getServer()Lcom/dmdirc/Server; == &getServer
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getServerIdentity()Lcom/dmdirc/config/Identity; == &getServerIdentity
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getState()Lcom/dmdirc/ServerState; == &getState
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getStatus()Lcom/dmdirc/ServerStatus; == &getStatus
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.getTabCompleter()Lcom/dmdirc/ui/input/TabCompleter; == &getTabCompleter
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.handleNotification(Ljava/lang/String;[Ljava/lang/Object;)V == &com/dmdirc/WritableFrameContainer.handleNotification
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.hasChannel(Ljava/lang/String;)Z == &hasChannel
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.hasQuery(Ljava/lang/String;)Z == &hasQuery
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.iconUpdated()V == &com/dmdirc/FrameContainer.iconUpdated
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.isAway()Z == &isAway
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.isNetwork(Ljava/lang/String;)Z == &isNetwork
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.isValidChannelName(Ljava/lang/String;)Z == &isValidChannelName
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.join(Ljava/lang/String;)V == &join
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.modifyNotificationArgs(Ljava/util/List;Ljava/util/List;)V == &com/dmdirc/WritableFrameContainer.modifyNotificationArgs
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.onConnectError(Lcom/dmdirc/parser/irc/ParserError;)V == &onConnectError
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.onNickInUse(Ljava/lang/String;)V == &onNickInUse
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.onNumeric(I[Ljava/lang/String;)V == &onNumeric
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.onPingFailed()V == &onPingFailed
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.onPost005()V == &onPost005
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.onSocketClosed()V == &onSocketClosed
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.ownsFrame(Lcom/dmdirc/ui/interfaces/Window;)Z == &ownsFrame
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.processNotificationArg(Ljava/lang/Object;Ljava/util/List;)Z == &processNotificationArg
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.reconnect()V == &reconnect
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.reconnect(Ljava/lang/String;)V == &reconnect
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.removeAwayStateListener(Lcom/dmdirc/interfaces/AwayStateListener;)V == &removeAwayStateListener
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.removeIconChangeListener(Lcom/dmdirc/interfaces/IconChangeListener;)V == &com/dmdirc/FrameContainer.removeIconChangeListener
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.removeInvite(Lcom/dmdirc/Invite;)V == &removeInvite
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.removeInviteListener(Lcom/dmdirc/interfaces/InviteListener;)V == &removeInviteListener
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.removeInvites()V == &removeInvites
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.removeInvites(Ljava/lang/String;)V == &removeInvites
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.removeNotificationListener(Lcom/dmdirc/interfaces/NotificationListener;)V == &com/dmdirc/FrameContainer.removeNotificationListener
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.removeSelectionListener(Lcom/dmdirc/interfaces/SelectionListener;)V == &com/dmdirc/FrameContainer.removeSelectionListener
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.saveIgnoreList()V == &saveIgnoreList
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.sendCTCPReply(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V == &sendCTCPReply
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.sendLine(Ljava/lang/String;)V == &sendLine
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.sendNotification(Ljava/awt/Color;)V == &com/dmdirc/FrameContainer.sendNotification
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.setActiveFrame(Lcom/dmdirc/FrameContainer;)V == &setActiveFrame
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.setIcon(Ljava/lang/String;)V == &com/dmdirc/FrameContainer.setIcon
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.splitLine(Ljava/lang/String;)Ljava/util/List; == &com/dmdirc/WritableFrameContainer.splitLine
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.toString()Ljava/lang/String; == &toString
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.updateAwayState(Ljava/lang/String;)V == &updateAwayState
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.updateIcon()V == &updateIcon
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.updateIgnoreList()V == &updateIgnoreList
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.windowActivated()V == &com/dmdirc/FrameContainer.windowActivated
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.windowClosed()V == &com/dmdirc/FrameContainer.windowClosed
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.windowClosing()V == &windowClosing
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.windowDeactivated()V == &com/dmdirc/FrameContainer.windowDeactivated
    //#post(com.dmdirc.Server__static_init): __Dispatch_Table.windowOpened()V == &com/dmdirc/FrameContainer.windowOpened

    // <editor-fold defaultstate="collapsed" desc="Properties">

    // <editor-fold defaultstate="collapsed" desc="Static">

    /**
     * A version number for this class. It should be changed whenever the class
     * structure is changed (or anything else that would prevent serialized
     * objects being unserialized with the new class).
     */
    private static final long serialVersionUID = 1;

    /** The name of the general domain. */
    private static final String DOMAIN_GENERAL = "general".intern();
    /** The name of the profile domain. */
    private static final String DOMAIN_PROFILE = "profile".intern();
    /** The name of the server domain. */
    private static final String DOMAIN_SERVER = "server".intern();
    //#Server.java:86: end of method: com.dmdirc.Server.com.dmdirc.Server__static_init

    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Instance">

    /** Open channels that currently exist on the server. */
    private final Map<String, Channel> channels  = new Hashtable<String, Channel>();
    /** Open query windows on the server. */
    private final List<Query> queries = new ArrayList<Query>();

    /** The IRC Parser instance handling this server. */
    private transient IRCParser parser;
    /** The IRC Parser Thread. */
    private transient Thread parserThread;
    /** The raw frame used for this server instance. */
    private Raw raw;
    /** The ServerWindow corresponding to this server. */
    private ServerWindow window;

    /** The details of the server we're connecting to. */
    private ServerInfo serverInfo;

    /** The profile we're using. */
    private transient Identity profile;

    /** The current state of this server. */
    private final ServerStatus myState = new ServerStatus();

    /** The timer we're using to delay reconnects. */
    private Timer reconnectTimer;

    /** Channels we're meant to auto-join. */
    private final List<String> autochannels;

    /** The tabcompleter used for this server. */
    private final TabCompleter tabCompleter = new TabCompleter();
    //#Server.java:122: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.input.TabCompleter()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#    unanalyzed callee: void com.dmdirc.ui.input.TabCompleter()
    /** The last activated internal frame for this server. */
    private FrameContainer activeFrame = this;

    /** Our reason for being away, if any. */
    private String awayMessage;

    /** Our event handler. */
    private final ServerEventHandler eventHandler = new ServerEventHandler(this);

    /** A list of outstanding invites. */
    private final List<Invite> invites = new ArrayList<Invite>();

    /** Our ignore list. */
    private final IgnoreList ignoreList = new IgnoreList();

    /** Our string convertor. */
    private IRCStringConverter converter = new IRCStringConverter();
    //#Server.java:139: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCStringConverter()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCStringConverter()

    /** The parser factory to use. */
    private final ParserFactory parserFactory;

    // </editor-fold>
    
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Constructors">

    /**
     * Creates a new instance of Server. Does not auto-join any channels, and
     * uses a default {@link ParserFactory}.
     *
     * @param server The hostname/ip of the server to connect to
     * @param port The port to connect to
     * @param password The server password
     * @param ssl Whether to use SSL or not
     * @param profile The profile to use
     */
    public Server(final String server, final int port, final String password,
            final boolean ssl, final Identity profile) {
        this(server, port, password, ssl, profile, new ArrayList<String>());
    //#Server.java:162: method: void com.dmdirc.Server.com.dmdirc.Server(String, int, String, bool, Identity)
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity)): password
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity)): port
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity)): profile
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity)): server
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity)): ssl
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity)): this
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity)): this.__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): com/dmdirc/ServerManager.me
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): com/dmdirc/actions/wrappers/AliasWrapper.me
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1).__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1).actions
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1).aliases
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1).author
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1).component
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1).description
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1).name
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1).settings
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1).version
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ArrayList(ActionGroup#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ArrayList(AliasWrapper#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ArrayList(Server#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ArrayList(Server#3) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ArrayList(Server#7) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ArrayList(ServerManager#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ArrayList(ServerManager#1).__Lock
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ConfigManager(Server#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new FrameContainer$IconChanger(FrameContainer#2) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new FrameContainer$IconChanger(FrameContainer#2).__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new FrameContainer$IconChanger(FrameContainer#2).this$0
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new HashMap(ActionGroup#2) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new Hashtable(Server#2) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new IRCStringConverter(Server#9) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new IgnoreList(Server#8) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new IgnoreList(Server#8).__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ListenerList(FrameContainer#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ListenerList(FrameContainer#1).__Lock
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ParserFactory(Server#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ParserFactory(Server#1).__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new Raw(addRaw#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new Raw(addRaw#1).__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new Raw(addRaw#1).server
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new Raw(addRaw#1).window
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new RollingList(ServerStatus#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerEventHandler(Server#6) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerEventHandler(Server#6).__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerEventHandler(Server#6).owner
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerInfo(Server#10) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerManager(getServerManager#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerManager(getServerManager#1).__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerManager(getServerManager#1).servers
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerStatus(Server#4) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerStatus(Server#4).__Lock
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerStatus(Server#4).__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerStatus(Server#4).history
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerStatus(Server#4).state
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): new TabCompleter(Server#5) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): this.__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): this.activeFrame
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): this.autochannels
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): this.changer
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): this.channels
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): this.config
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): this.converter
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): this.eventHandler
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): this.icon
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): this.ignoreList
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): this.invites
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): this.listeners
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): this.myState
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): this.notification
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): this.parser
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): this.parserFactory
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): this.queries
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): this.raw
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): this.serverInfo
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): this.tabCompleter
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity)): this.window
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new ArrayList(ActionGroup#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new ArrayList(AliasWrapper#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new ArrayList(Server#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new ArrayList(Server#3)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new ArrayList(Server#7)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new ArrayList(ServerManager#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new ConfigManager(Server#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new FrameContainer$IconChanger(FrameContainer#2)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new HashMap(ActionGroup#2)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new Hashtable(Server#2)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new IRCStringConverter(Server#9)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new IgnoreList(Server#8)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new ListenerList(FrameContainer#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new ParserFactory(Server#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new Raw(addRaw#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new RollingList(ServerStatus#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerEventHandler(Server#6)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerInfo(Server#10)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerManager(getServerManager#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerStatus(Server#4)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity)): new TabCompleter(Server#5)
    //#pre[4] (void com.dmdirc.Server(String, int, String, bool, Identity)): (soft) init'ed(com/dmdirc/ServerManager.me)
    //#pre[5] (void com.dmdirc.Server(String, int, String, bool, Identity)): (soft) init'ed(com/dmdirc/actions/wrappers/AliasWrapper.me)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): com/dmdirc/ServerManager.me == old com/dmdirc/ServerManager.me
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): com/dmdirc/actions/wrappers/AliasWrapper.me == old com/dmdirc/actions/wrappers/AliasWrapper.me
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): this.__Tag == old this.__Tag
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): init'ed(this.__Tag)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): init'ed(this.activeFrame)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): this.autochannels == undefined
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): this.autochannels == null
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): this.changer == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): this.channels == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): this.config == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): this.eventHandler == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): this.ignoreList == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): this.invites == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): this.listeners == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): this.myState == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): this.parserFactory == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): this.queries == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): this.tabCompleter == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1).actions == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1).aliases == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1).author == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1).description == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1).name == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1).settings == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new FrameContainer$IconChanger(FrameContainer#2).this$0 == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new Raw(addRaw#1).server == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new Raw(addRaw#1).window == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerEventHandler(Server#6).owner == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerManager(getServerManager#1).servers == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerStatus(Server#4).history == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerStatus(Server#4).state == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): init'ed(this.converter)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): init'ed(this.icon)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): init'ed(this.notification)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): init'ed(this.parser)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): init'ed(this.raw)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): init'ed(this.serverInfo)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): init'ed(this.window)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1) num objects == undefined
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1) num objects == 0, if init'ed
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1).__Tag == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1).component == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new AliasWrapper(getAliasWrapper#1).version == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ArrayList(ActionGroup#1) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ArrayList(AliasWrapper#1) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ArrayList(Server#3) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ArrayList(Server#7) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ArrayList(ServerManager#1) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ArrayList(ServerManager#1).__Lock == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ConfigManager(Server#1) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new FrameContainer$IconChanger(FrameContainer#2) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new FrameContainer$IconChanger(FrameContainer#2).__Tag == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new HashMap(ActionGroup#2) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new Hashtable(Server#2) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new IRCStringConverter(Server#9) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new IgnoreList(Server#8) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new IgnoreList(Server#8).__Tag == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ListenerList(FrameContainer#1) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ListenerList(FrameContainer#1).__Lock == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new Raw(addRaw#1) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new Raw(addRaw#1).__Tag == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new RollingList(ServerStatus#1) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerEventHandler(Server#6) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerEventHandler(Server#6).__Tag == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerInfo(Server#10) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerManager(getServerManager#1) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerManager(getServerManager#1).__Tag == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerStatus(Server#4) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerStatus(Server#4).__Lock == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ServerStatus(Server#4).__Tag == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new TabCompleter(Server#5) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ArrayList(Server#1) num objects == 1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ParserFactory(Server#1) num objects == 1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity)): new ParserFactory(Server#1).__Tag == com/dmdirc/ParserFactory
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:getConfigManager
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setSSL
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionInt
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:getParser
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:getTabCompleter
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.WritableFrameContainer
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:getUI
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:getFrame
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:setIcon
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:activateFrame
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.FrameContainer
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getCallbackManager
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.callbacks.CallbackManager:addCallback
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getSSL
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:connect
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.Server:getConfigManager
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getInputWindow
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.WindowManager:addWindow
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:setTitle
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getInputHandler
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.input.InputHandler:setTabCompleter
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:open
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:java.util.Timer
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.config.ConfigManager
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:java.util.Hashtable
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.util.RollingList
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.input.TabCompleter
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.EventHandler
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.RegexStringList
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.IRCStringConverter
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getServer
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.interfaces.ServerWindow:setTitle
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.actions.ActionGroup
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.input.TabCompleter:addEntries
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.interfaces.ServerWindow:getInputHandler
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.interfaces.ServerWindow:open
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.commandparser.CommandManager:getCommandNames
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:java.util.TimerTask
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:java.util.Timer:schedule
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.Server
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:activateFrame
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity)): Effects-of-calling:java.util.HashMap
    }
    //#Server.java:163: end of method: void com.dmdirc.Server.com.dmdirc.Server(String, int, String, bool, Identity)

    /**
     * Creates a new instance of Server. Uses a default {@link ParserFactory}.
     *
     * @param server The hostname/ip of the server to connect to
     * @param port The port to connect to
     * @param password The server password
     * @param ssl Whether to use SSL or not
     * @param profile The profile to use
     * @param autochannels A list of channels to auto-join when we connect
     */
    public Server(final String server, final int port, final String password,
            final boolean ssl, final Identity profile, final List<String> autochannels) {
        this(server, port, password, ssl, profile, autochannels, new ParserFactory());
    //#Server.java:177: method: void com.dmdirc.Server.com.dmdirc.Server(String, int, String, bool, Identity, List)
    //#Server.java:177: Warning: call too complex - analysis skipped
    //#    call on void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void com.dmdirc.Server(String, int, String, bool, Identity, List)
    //#    unanalyzed callee: void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List)): autochannels
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List)): password
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List)): port
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List)): profile
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List)): server
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List)): ssl
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): com/dmdirc/ServerManager.me
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): com/dmdirc/actions/wrappers/AliasWrapper.me
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1).__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1).actions
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1).aliases
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1).author
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1).component
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1).description
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1).name
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1).settings
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1).version
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ArrayList(ActionGroup#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ArrayList(AliasWrapper#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ArrayList(Server#3) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ArrayList(Server#7) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ArrayList(ServerManager#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ArrayList(ServerManager#1).__Lock
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ConfigManager(Server#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new FrameContainer$IconChanger(FrameContainer#2) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new FrameContainer$IconChanger(FrameContainer#2).__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new FrameContainer$IconChanger(FrameContainer#2).this$0
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new HashMap(ActionGroup#2) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new Hashtable(Server#2) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new IRCStringConverter(Server#9) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new IgnoreList(Server#8) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new IgnoreList(Server#8).__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ListenerList(FrameContainer#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ListenerList(FrameContainer#1).__Lock
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ParserFactory(Server#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ParserFactory(Server#1).__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new Raw(addRaw#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new Raw(addRaw#1).__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new Raw(addRaw#1).server
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new Raw(addRaw#1).window
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new RollingList(ServerStatus#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerEventHandler(Server#6) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerEventHandler(Server#6).__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerEventHandler(Server#6).owner
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerInfo(Server#10) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerManager(getServerManager#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerManager(getServerManager#1).__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerManager(getServerManager#1).servers
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerStatus(Server#4) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerStatus(Server#4).__Lock
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerStatus(Server#4).__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerStatus(Server#4).history
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerStatus(Server#4).state
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new TabCompleter(Server#5) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.activeFrame
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.autochannels
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.changer
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.channels
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.config
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.converter
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.eventHandler
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.icon
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.ignoreList
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.invites
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.listeners
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.myState
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.notification
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.parser
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.parserFactory
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.queries
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.raw
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.serverInfo
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.tabCompleter
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.window
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ArrayList(ActionGroup#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ArrayList(AliasWrapper#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ArrayList(Server#3)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ArrayList(Server#7)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ArrayList(ServerManager#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ConfigManager(Server#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new FrameContainer$IconChanger(FrameContainer#2)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new HashMap(ActionGroup#2)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new Hashtable(Server#2)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new IRCStringConverter(Server#9)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new IgnoreList(Server#8)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ListenerList(FrameContainer#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ParserFactory(Server#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new Raw(addRaw#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new RollingList(ServerStatus#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerEventHandler(Server#6)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerInfo(Server#10)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerManager(getServerManager#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerStatus(Server#4)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new TabCompleter(Server#5)
    //#pre[6] (void com.dmdirc.Server(String, int, String, bool, Identity, List)): (soft) init'ed(com/dmdirc/ServerManager.me)
    //#pre[7] (void com.dmdirc.Server(String, int, String, bool, Identity, List)): (soft) init'ed(com/dmdirc/actions/wrappers/AliasWrapper.me)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): com/dmdirc/ServerManager.me == old com/dmdirc/ServerManager.me
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): com/dmdirc/actions/wrappers/AliasWrapper.me == old com/dmdirc/actions/wrappers/AliasWrapper.me
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.__Tag == old this.__Tag
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): init'ed(this.__Tag)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): init'ed(this.activeFrame)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.autochannels == undefined
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.autochannels == null
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.changer == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.channels == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.config == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.eventHandler == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.ignoreList == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.invites == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.listeners == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.myState == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.parserFactory == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.queries == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): this.tabCompleter == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1).actions == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1).aliases == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1).author == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1).description == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1).name == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1).settings == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new FrameContainer$IconChanger(FrameContainer#2).this$0 == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new Raw(addRaw#1).server == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new Raw(addRaw#1).window == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerEventHandler(Server#6).owner == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerManager(getServerManager#1).servers == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerStatus(Server#4).history == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerStatus(Server#4).state == this.autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): init'ed(this.converter)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): init'ed(this.icon)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): init'ed(this.notification)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): init'ed(this.parser)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): init'ed(this.raw)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): init'ed(this.serverInfo)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): init'ed(this.window)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1) num objects == undefined
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1) num objects == 0, if init'ed
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1).__Tag == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1).component == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new AliasWrapper(getAliasWrapper#1).version == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ArrayList(ActionGroup#1) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ArrayList(AliasWrapper#1) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ArrayList(Server#3) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ArrayList(Server#7) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ArrayList(ServerManager#1) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ArrayList(ServerManager#1).__Lock == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ConfigManager(Server#1) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new FrameContainer$IconChanger(FrameContainer#2) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new FrameContainer$IconChanger(FrameContainer#2).__Tag == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new HashMap(ActionGroup#2) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new Hashtable(Server#2) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new IRCStringConverter(Server#9) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new IgnoreList(Server#8) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new IgnoreList(Server#8).__Tag == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ListenerList(FrameContainer#1) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ListenerList(FrameContainer#1).__Lock == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new Raw(addRaw#1) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new Raw(addRaw#1).__Tag == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new RollingList(ServerStatus#1) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerEventHandler(Server#6) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerEventHandler(Server#6).__Tag == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerInfo(Server#10) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerManager(getServerManager#1) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerManager(getServerManager#1).__Tag == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerStatus(Server#4) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerStatus(Server#4).__Lock == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ServerStatus(Server#4).__Tag == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new TabCompleter(Server#5) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ParserFactory(Server#1) num objects == 1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List)): new ParserFactory(Server#1).__Tag == com/dmdirc/ParserFactory
    }
    //#Server.java:178: end of method: void com.dmdirc.Server.com.dmdirc.Server(String, int, String, bool, Identity, List)

    /**
     * Creates a new instance of Server.
     *
     * @since 0.6
     * @param server The hostname/ip of the server to connect to
     * @param port The port to connect to
     * @param password The server password
     * @param ssl Whether to use SSL or not
     * @param profile The profile to use
     * @param autochannels A list of channels to auto-join when we connect
     * @param factory The {@link ParserFactory} to use to create parsers
     */
    public Server(final String server, final int port, final String password,
            final boolean ssl, final Identity profile,
            final List<String> autochannels, final ParserFactory factory) {
        super("server-disconnected", new ConfigManager("", "", server));
    //#Server.java:195: method: void com.dmdirc.Server.com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#Server.java:195: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.ConfigManager(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#    unanalyzed callee: void com.dmdirc.config.ConfigManager(String, String, String)
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): ":"._tainted
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): DOMAIN_GENERAL
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): __Descendant_Table[com/dmdirc/Server]
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): __Descendant_Table[others]
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): __Dispatch_Table.addRaw()V
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): __Dispatch_Table.connect(Ljava/lang/String;ILjava/lang/String;ZLcom/dmdirc/config/Identity;)V
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): __Dispatch_Table.getParser()Lcom/dmdirc/parser/irc/IRCParser;
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): __Dispatch_Table.getTabCompleter()Lcom/dmdirc/ui/input/TabCompleter;
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): autochannels
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com.dmdirc.commandparser.CommandType.TYPE_GLOBAL
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com.dmdirc.commandparser.CommandType.TYPE_SERVER
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com.dmdirc.ui.input.TabCompletionType.COMMAND
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/Main.controller
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/Raw.__Descendant_Table[com/dmdirc/Raw]
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/Raw.__Descendant_Table[others]
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/Raw.__Dispatch_Table.activateFrame()V
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/Raw.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/ServerManager.__Class_Obj.__Lock
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/ServerManager.me
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/ServerManager.me.servers
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/ServerManager.me.servers.__Lock
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/ServerState.CONNECTED
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/ServerState.DISCONNECTED
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/actions/wrappers/AliasWrapper.__Class_Obj.__Lock
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/actions/wrappers/AliasWrapper.me
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/actions/wrappers/AliasWrapper.me.aliases
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): factory
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): password
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): port
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): profile
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): server
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): server._tainted
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): ssl
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this
    //#input(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/ServerManager.me
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/actions/wrappers/AliasWrapper.me
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new AliasWrapper(getAliasWrapper#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new AliasWrapper(getAliasWrapper#1).__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new AliasWrapper(getAliasWrapper#1).actions
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new AliasWrapper(getAliasWrapper#1).aliases
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new AliasWrapper(getAliasWrapper#1).author
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new AliasWrapper(getAliasWrapper#1).component
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new AliasWrapper(getAliasWrapper#1).description
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new AliasWrapper(getAliasWrapper#1).name
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new AliasWrapper(getAliasWrapper#1).settings
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new AliasWrapper(getAliasWrapper#1).version
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ArrayList(ActionGroup#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ArrayList(AliasWrapper#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ArrayList(Server#3) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ArrayList(Server#7) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ArrayList(ServerManager#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ArrayList(ServerManager#1).__Lock
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ConfigManager(Server#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new FrameContainer$IconChanger(FrameContainer#2) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new FrameContainer$IconChanger(FrameContainer#2).__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new FrameContainer$IconChanger(FrameContainer#2).this$0
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new HashMap(ActionGroup#2) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new Hashtable(Server#2) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new IRCStringConverter(Server#9) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new IgnoreList(Server#8) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.ignoreList.__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ListenerList(FrameContainer#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ListenerList(FrameContainer#1).__Lock
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new Raw(addRaw#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new Raw(addRaw#1).__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new Raw(addRaw#1).changer
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new Raw(addRaw#1).config
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new Raw(addRaw#1).icon
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new Raw(addRaw#1).listeners
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new Raw(addRaw#1).notification
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new Raw(addRaw#1).server
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new Raw(addRaw#1).window
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new RollingList(ServerStatus#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ServerEventHandler(Server#6) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.eventHandler.__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.eventHandler.owner
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ServerInfo(Server#10) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ServerManager(getServerManager#1) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ServerManager(getServerManager#1).__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ServerManager(getServerManager#1).servers
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ServerStatus(Server#4) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.myState.__Lock
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.myState.__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.myState.history
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.myState.state
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new TabCompleter(Server#5) num objects
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.__Tag
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.activeFrame
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.autochannels
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.changer
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.channels
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.config
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.converter
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.eventHandler
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.icon
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.ignoreList
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.invites
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.listeners
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.myState
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.notification
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.parser
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.parserFactory
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.queries
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.raw
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.serverInfo
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.tabCompleter
    //#output(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.window
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new AliasWrapper(getAliasWrapper#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ArrayList(ActionGroup#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ArrayList(AliasWrapper#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ArrayList(Server#3)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ArrayList(Server#7)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ArrayList(ServerManager#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ConfigManager(Server#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new FrameContainer$IconChanger(FrameContainer#2)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new HashMap(ActionGroup#2)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new Hashtable(Server#2)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new IRCStringConverter(Server#9)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new IgnoreList(Server#8)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ListenerList(FrameContainer#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new Raw(addRaw#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new RollingList(ServerStatus#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ServerEventHandler(Server#6)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ServerInfo(Server#10)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ServerManager(getServerManager#1)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ServerStatus(Server#4)
    //#new obj(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new TabCompleter(Server#5)
    //#pre[2] (void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/Main.controller != null
    //#pre[4] (void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(com/dmdirc/ServerManager.me)
    //#pre[5] (void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(com/dmdirc/actions/wrappers/AliasWrapper.me)
    //#pre[6] (void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.__Tag == com/dmdirc/Server
    //#presumption(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(com.dmdirc.commandparser.CommandType.TYPE_GLOBAL)
    //#presumption(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(com.dmdirc.commandparser.CommandType.TYPE_SERVER)
    //#presumption(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(com.dmdirc.ui.input.TabCompletionType.COMMAND)
    //#presumption(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com.dmdirc.ui.interfaces.ServerWindow:getInputHandler(...)@209 != null
    //#presumption(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com.dmdirc.ui.interfaces.UIController:getServer(...)@200 != null
    //#presumption(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(com/dmdirc/FrameContainer.java.awt.Color.BLACK)
    //#presumption(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): getServerManager(...).servers != null
    //#presumption(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.raw.__Tag@223 == com/dmdirc/Raw
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/ServerManager.me == One-of{old com/dmdirc/ServerManager.me, &new ServerManager(getServerManager#1)}
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/ServerManager.me != null
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/actions/wrappers/AliasWrapper.me == One-of{old com/dmdirc/actions/wrappers/AliasWrapper.me, &new AliasWrapper(getAliasWrapper#1)}
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com/dmdirc/actions/wrappers/AliasWrapper.me != null
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.__Tag == com/dmdirc/Server
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.activeFrame == this
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.activeFrame != null
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new FrameContainer$IconChanger(FrameContainer#2).this$0 == this.activeFrame
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.eventHandler.owner == this.activeFrame
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.autochannels == autochannels
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(this.autochannels)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.changer == &new FrameContainer$IconChanger(FrameContainer#2)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.channels == &new Hashtable(Server#2)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.config == &new ConfigManager(Server#1)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.converter == &new IRCStringConverter(Server#9)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.eventHandler == &new ServerEventHandler(Server#6)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.icon == &"server-disconnected"
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.ignoreList == &new IgnoreList(Server#8)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.invites == &new ArrayList(Server#7)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.listeners == &new ListenerList(FrameContainer#1)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.myState == &new ServerStatus(Server#4)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.notification == com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(this.notification)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(this.parser)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.parserFactory == factory
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(this.parserFactory)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.queries == &new ArrayList(Server#3)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(this.raw)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.serverInfo == &new ServerInfo(Server#10)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.tabCompleter == &new TabCompleter(Server#5)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.window != null
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new AliasWrapper(getAliasWrapper#1) num objects <= 1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ArrayList(ActionGroup#1) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ArrayList(AliasWrapper#1) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new HashMap(ActionGroup#2) num objects == new AliasWrapper(getAliasWrapper#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new AliasWrapper(getAliasWrapper#1).__Tag == com/dmdirc/actions/wrappers/AliasWrapper
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new AliasWrapper(getAliasWrapper#1).actions == &new ArrayList(ActionGroup#1)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new AliasWrapper(getAliasWrapper#1).aliases == &new ArrayList(AliasWrapper#1)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new AliasWrapper(getAliasWrapper#1).author == null
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new AliasWrapper(getAliasWrapper#1).description == null
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new AliasWrapper(getAliasWrapper#1).component == -1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new AliasWrapper(getAliasWrapper#1).version == -1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new AliasWrapper(getAliasWrapper#1).name == &"aliases"
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new AliasWrapper(getAliasWrapper#1).settings == &new HashMap(ActionGroup#2)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ArrayList(Server#3) num objects == 1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ArrayList(Server#7) num objects == 1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ConfigManager(Server#1) num objects == 1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new FrameContainer$IconChanger(FrameContainer#2) num objects == 1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new Hashtable(Server#2) num objects == 1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new IRCStringConverter(Server#9) num objects == 1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new IgnoreList(Server#8) num objects == 1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ListenerList(FrameContainer#1) num objects == 1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new RollingList(ServerStatus#1) num objects == 1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ServerEventHandler(Server#6) num objects == 1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ServerInfo(Server#10) num objects == 1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ServerStatus(Server#4) num objects == 1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new TabCompleter(Server#5) num objects == 1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ArrayList(ServerManager#1) num objects <= 1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ServerManager(getServerManager#1) num objects == new ArrayList(ServerManager#1) num objects
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(new ArrayList(ServerManager#1).__Lock)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new FrameContainer$IconChanger(FrameContainer#2) num objects <= 1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new FrameContainer$IconChanger(FrameContainer#2).__Tag == com/dmdirc/FrameContainer$IconChanger
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(new FrameContainer$IconChanger(FrameContainer#2).__Tag)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(new FrameContainer$IconChanger(FrameContainer#2).this$0)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.ignoreList.__Tag == com/dmdirc/IgnoreList
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ListenerList(FrameContainer#1) num objects <= 1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(new ListenerList(FrameContainer#1).__Lock)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new Raw(addRaw#1) num objects <= 1
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(new Raw(addRaw#1).__Tag)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(new Raw(addRaw#1).changer)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(new Raw(addRaw#1).config)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(new Raw(addRaw#1).icon)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(new Raw(addRaw#1).listeners)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(new Raw(addRaw#1).notification)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(new Raw(addRaw#1).server)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(new Raw(addRaw#1).window)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.eventHandler.__Tag == com/dmdirc/ServerEventHandler
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ServerManager(getServerManager#1).__Tag == com/dmdirc/ServerManager
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): new ServerManager(getServerManager#1).servers == &new ArrayList(ServerManager#1)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): init'ed(this.myState.__Lock)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.myState.__Tag == com/dmdirc/ServerStatus
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.myState.history == &new RollingList(ServerStatus#1)
    //#post(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): this.myState.state == &com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#7)
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:getParser
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:getTabCompleter
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.WritableFrameContainer
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:getUI
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:getFrame
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:setIcon
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:activateFrame
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.FrameContainer
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getCallbackManager
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.parser.irc.callbacks.CallbackManager:addCallback
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getSSL
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.Server:getConfigManager
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getInputWindow
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.ui.WindowManager:addWindow
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:setTitle
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getInputHandler
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.ui.input.InputHandler:setTabCompleter
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:open
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.util.RollingList
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.EventHandler
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.parser.irc.RegexStringList
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.actions.ActionGroup
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:java.util.TimerTask
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:activateFrame
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): Effects-of-calling:java.util.HashMap
    //#test_vector(void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)): com.dmdirc.config.ConfigManager:getOptionBool(...)@232: {0}, {1}

        serverInfo = new ServerInfo(server, port, password);
    //#Server.java:197: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.ServerInfo(String, int, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#    unanalyzed callee: void com.dmdirc.parser.irc.ServerInfo(String, int, String)
        serverInfo.setSSL(ssl);
    //#Server.java:198: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.ServerInfo:setSSL(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#    unanalyzed callee: void com.dmdirc.parser.irc.ServerInfo:setSSL(bool)

        window = Main.getUI().getServer(this);
    //#Server.java:200: Warning: method not available - call not analyzed
    //#    call on ServerWindow com.dmdirc.ui.interfaces.UIController:getServer(Server)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#    unanalyzed callee: ServerWindow com.dmdirc.ui.interfaces.UIController:getServer(Server)

        ServerManager.getServerManager().registerServer(this);
        WindowManager.addWindow(window);
    //#Server.java:203: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.WindowManager:addWindow(Window)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#    unanalyzed callee: void com.dmdirc.ui.WindowManager:addWindow(Window)

        window.setTitle(server + ":" + port);
    //#Server.java:205: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.ServerWindow:setTitle(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.ServerWindow:setTitle(String)

        tabCompleter.addEntries(TabCompletionType.COMMAND,
    //#Server.java:207: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.input.TabCompleter:addEntries(TabCompletionType, List)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#    unanalyzed callee: void com.dmdirc.ui.input.TabCompleter:addEntries(TabCompletionType, List)
                AliasWrapper.getAliasWrapper().getAliases());
        window.getInputHandler().setTabCompleter(tabCompleter);
    //#Server.java:209: Warning: method not available - call not analyzed
    //#    call on InputHandler com.dmdirc.ui.interfaces.ServerWindow:getInputHandler()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#    unanalyzed callee: InputHandler com.dmdirc.ui.interfaces.ServerWindow:getInputHandler()
    //#Server.java:209: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.input.InputHandler:setTabCompleter(TabCompleter)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#    unanalyzed callee: void com.dmdirc.ui.input.InputHandler:setTabCompleter(TabCompleter)

        updateIcon();

        window.open();
    //#Server.java:213: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.ServerWindow:open()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.ServerWindow:open()

        tabCompleter.addEntries(TabCompletionType.COMMAND,
    //#Server.java:215: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.commandparser.CommandManager:getCommandNames(CommandType)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#    unanalyzed callee: List com.dmdirc.commandparser.CommandManager:getCommandNames(CommandType)
    //#Server.java:215: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.input.TabCompleter:addEntries(TabCompletionType, List)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#    unanalyzed callee: void com.dmdirc.ui.input.TabCompleter:addEntries(TabCompletionType, List)
                CommandManager.getCommandNames(CommandType.TYPE_SERVER));
        tabCompleter.addEntries(TabCompletionType.COMMAND,
    //#Server.java:217: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.commandparser.CommandManager:getCommandNames(CommandType)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#    unanalyzed callee: List com.dmdirc.commandparser.CommandManager:getCommandNames(CommandType)
    //#Server.java:217: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.input.TabCompleter:addEntries(TabCompletionType, List)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#    unanalyzed callee: void com.dmdirc.ui.input.TabCompleter:addEntries(TabCompletionType, List)
                CommandManager.getCommandNames(CommandType.TYPE_GLOBAL));

        this.autochannels = autochannels;
        this.parserFactory = factory;

        new Timer("Server Who Timer").schedule(new TimerTask() {
    //#Server.java:223: method: void com.dmdirc.Server$1.com.dmdirc.Server$1(Server)
    //#input(void com.dmdirc.Server$1(Server)): Param_1
    //#input(void com.dmdirc.Server$1(Server)): this
    //#output(void com.dmdirc.Server$1(Server)): this.this$0
    //#post(void com.dmdirc.Server$1(Server)): this.this$0 == Param_1
    //#post(void com.dmdirc.Server$1(Server)): init'ed(this.this$0)
    //#Server.java:223: end of method: void com.dmdirc.Server$1.com.dmdirc.Server$1(Server)
    //#Server.java:223: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.config.ConfigManager:getOptionInt(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#    unanalyzed callee: int com.dmdirc.config.ConfigManager:getOptionInt(String, String)
            @Override
            public void run() {
                for (Channel channel : channels.values()) {
    //#Server.java:226: method: void com.dmdirc.Server$1.run()
    //#input(void run()): "WHO :"._tainted
    //#input(void run()): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void run()): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/Channel.__Dispatch_Table.checkWho()V
    //#input(void run()): com/dmdirc/Server.__Descendant_Table[com/dmdirc/Server]
    //#input(void run()): com/dmdirc/Server.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/Server.__Dispatch_Table.getParser()Lcom/dmdirc/parser/irc/IRCParser;
    //#input(void run()): this
    //#input(void run()): this.this$0
    //#input(void run()): this.this$0.channels
    //#pre[2] (void run()): this.this$0 != null
    //#pre[3] (void run()): this.channels != null
    //#presumption(void run()): channel.channelInfo@226 != null
    //#presumption(void run()): channel.server.__Tag@226 == com/dmdirc/Server
    //#presumption(void run()): channel.server.parser@226 != null
    //#presumption(void run()): channel.server@226 != null
    //#presumption(void run()): java.util.Iterator:next(...).__Tag@226 == com/dmdirc/Channel
    //#presumption(void run()): java.util.Iterator:next(...)@226 != null
    //#presumption(void run()): java.util.Map:values(...)@226 != null
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.ChannelInfo:getName
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void run()): Effects-of-calling:getParser
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:sendLine
    //#test_vector(void run()): java.util.Iterator:hasNext(...)@226: {0}, {1}
                    channel.checkWho();
                }
            }
    //#Server.java:229: end of method: void com.dmdirc.Server$1.run()
        }, 0, getConfigManager().getOptionInt(DOMAIN_GENERAL, "whotime"));

        if (getConfigManager().getOptionBool(DOMAIN_GENERAL, "showrawwindow")) {
    //#Server.java:232: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
            addRaw();
        }

        connect(server, port, password, ssl, profile);
    //#Server.java:236: Warning: call too complex - analysis skipped
    //#    call on void connect(String, int, String, bool, Identity)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)
    //#    unanalyzed callee: void connect(String, int, String, bool, Identity)
    }
    //#Server.java:237: end of method: void com.dmdirc.Server.com.dmdirc.Server(String, int, String, bool, Identity, List, ParserFactory)

    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Connection, disconnection & reconnection">

    /**
     * Connects to a new server with the specified details.
     *
     * @param server The hostname/ip of the server to connect to
     * @param port The port to connect to
     * @param password The server password
     * @param ssl Whether to use SSL or not
     * @param profile The profile to use
     */
    @Precondition({
        "The IRC Parser is null or not connected",
        "The specified profile is not null"
    })
    @SuppressWarnings("fallthrough")
    public void connect(final String server, final int port, final String password,
            final boolean ssl, final Identity profile) {
        assert profile != null;
    //#Server.java:259: method: void com.dmdirc.Server.connect(String, int, String, bool, Identity)
    //#input(void connect(String, int, String, bool, Identity)): " ["._tainted
    //#input(void connect(String, int, String, bool, Identity)): "->"._tainted
    //#input(void connect(String, int, String, bool, Identity)): "Connection attempt while parser is still connected.&#10;&#10;My state:"._tainted
    //#input(void connect(String, int, String, bool, Identity)): "Illegal server state transition&#10;&#10;"._tainted
    //#input(void connect(String, int, String, bool, Identity)): "on"._tainted
    //#input(void connect(String, int, String, bool, Identity)): DOMAIN_GENERAL
    //#input(void connect(String, int, String, bool, Identity)): DOMAIN_PROFILE
    //#input(void connect(String, int, String, bool, Identity)): DOMAIN_SERVER
    //#input(void connect(String, int, String, bool, Identity)): __Descendant_Table[com/dmdirc/Server]
    //#input(void connect(String, int, String, bool, Identity)): __Descendant_Table[others]
    //#input(void connect(String, int, String, bool, Identity)): __Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void connect(String, int, String, bool, Identity)): __Dispatch_Table.disconnect(Ljava/lang/String;)V
    //#input(void connect(String, int, String, bool, Identity)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void connect(String, int, String, bool, Identity)): __Dispatch_Table.getParser()Lcom/dmdirc/parser/irc/IRCParser;
    //#input(void connect(String, int, String, bool, Identity)): __Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void connect(String, int, String, bool, Identity)): __Dispatch_Table.removeInvite(Lcom/dmdirc/Invite;)V
    //#input(void connect(String, int, String, bool, Identity)): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1).length
    //#input(void connect(String, int, String, bool, Identity)): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295]
    //#input(void connect(String, int, String, bool, Identity)): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#1).transitions
    //#input(void connect(String, int, String, bool, Identity)): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#7)._tainted
    //#input(void connect(String, int, String, bool, Identity)): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#7).transitions
    //#input(void connect(String, int, String, bool, Identity)): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#9)._tainted
    //#input(void connect(String, int, String, bool, Identity)): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#9).transitions
    //#input(void connect(String, int, String, bool, Identity)): com.dmdirc.actions.CoreActionType__static_init.new CoreActionType(CoreActionType__static_init#17).__Tag
    //#input(void connect(String, int, String, bool, Identity)): com.dmdirc.actions.CoreActionType__static_init.new CoreActionType(CoreActionType__static_init#17).type
    //#input(void connect(String, int, String, bool, Identity)): com.dmdirc.actions.metatypes.ServerEvents__static_init.new ServerEvents(ServerEvents__static_init#25).__Tag
    //#input(void connect(String, int, String, bool, Identity)): com.dmdirc.logger.ErrorLevel.FATAL
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/CertificateManager.__Descendant_Table[com/dmdirc/CertificateManager]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/CertificateManager.__Dispatch_Table.getKeyManager()[Ljavax/net/ssl/KeyManager;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/CertificateManager.__Dispatch_Table.loadTrustedCAs()V
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/CertificateManager.com.dmdirc.logger.ErrorLevel.MEDIUM
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/CertificateManager.java.io.File.separatorChar
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/Channel.__Dispatch_Table.close()V
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/Channel.__Dispatch_Table.getChannelInfo()Lcom/dmdirc/parser/irc/ChannelInfo;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/Channel.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/Channel.__Dispatch_Table.resetWindow()V
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/ChannelEventHandler.__Dispatch_Table.addCallback(Lcom/dmdirc/parser/irc/callbacks/CallbackManager;Ljava/lang/String;)V
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/ChannelEventHandler.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/EventHandler.__Descendant_Table[com/dmdirc/ChannelEventHandler]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/EventHandler.__Descendant_Table[com/dmdirc/EventHandler]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/EventHandler.__Descendant_Table[com/dmdirc/ServerEventHandler]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/EventHandler.__Descendant_Table[others]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/EventHandler.__Dispatch_Table.addCallback(Lcom/dmdirc/parser/irc/callbacks/CallbackManager;Ljava/lang/String;)V
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/EventHandler.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/EventHandler.com.dmdirc.logger.ErrorLevel.FATAL
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/Invite.__Descendant_Table[com/dmdirc/Invite]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/Invite.__Descendant_Table[others]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/ParserFactory.__Descendant_Table[com/dmdirc/ParserFactory]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/ParserFactory.__Descendant_Table[others]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/ParserFactory.__Dispatch_Table.getParser(Lcom/dmdirc/parser/irc/MyInfo;Lcom/dmdirc/parser/irc/ServerInfo;)Lcom/dmdirc/parser/irc/IRCParser;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/Query.__Descendant_Table[others]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/Query.__Dispatch_Table.close()V
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/Query.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/Raw.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/Server$4.$SwitchMap$com$dmdirc$ServerState
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/ServerEventHandler.__Descendant_Table[com/dmdirc/ServerEventHandler]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/ServerEventHandler.__Descendant_Table[others]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/ServerEventHandler.__Dispatch_Table.addCallback(Lcom/dmdirc/parser/irc/callbacks/CallbackManager;Ljava/lang/String;)V
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/ServerEventHandler.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/ServerEventHandler.__Dispatch_Table.registerCallbacks()V
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/ServerState.CONNECTED
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/ServerState.CONNECTING
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/ServerState.DISCONNECTED
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/ServerState.DISCONNECTING
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/ServerState.TRANSIENTLY_DISCONNECTED
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/ServerStatus.__Dispatch_Table.addHistoryEntry(Lcom/dmdirc/ServerState;Lcom/dmdirc/ServerState;)V
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/ServerStatus.__Dispatch_Table.getTransitionHistory()Ljava/lang/String;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/ServerStatus.__Dispatch_Table.transition(Lcom/dmdirc/ServerState;)V
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/ActionManager.killSwitch
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/ActionManager.listeners
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/CoreActionType.SERVER_CONNECTING
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/CoreActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionMetaType]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ActionEvents]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ChannelEvents]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ClientEvents]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/PluginEvents]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/QueryEvents]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ServerEvents]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCEvents]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[others]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/interfaces/ActionMetaType.__Dispatch_Table.getArity()I
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/CoreActionType]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionType]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCActions]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[others]
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/interfaces/ActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/metatypes/ActionEvents.__Dispatch_Table.getArity()I
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/metatypes/ChannelEvents.__Dispatch_Table.getArity()I
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/metatypes/ClientEvents.__Dispatch_Table.getArity()I
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/metatypes/PluginEvents.__Dispatch_Table.getArity()I
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/metatypes/QueryEvents.__Dispatch_Table.getArity()I
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/actions/metatypes/ServerEvents.__Dispatch_Table.getArity()I
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/addons/dcc/actions/DCCActions.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void connect(String, int, String, bool, Identity)): com/dmdirc/addons/dcc/actions/DCCEvents.__Dispatch_Table.getArity()I
    //#input(void connect(String, int, String, bool, Identity)): password
    //#input(void connect(String, int, String, bool, Identity)): port
    //#input(void connect(String, int, String, bool, Identity)): profile
    //#input(void connect(String, int, String, bool, Identity)): server
    //#input(void connect(String, int, String, bool, Identity)): ssl
    //#input(void connect(String, int, String, bool, Identity)): this
    //#input(void connect(String, int, String, bool, Identity)): this...__Tag
    //#input(void connect(String, int, String, bool, Identity)): this...parser
    //#input(void connect(String, int, String, bool, Identity)): this.__Tag
    //#input(void connect(String, int, String, bool, Identity)): this.changer
    //#input(void connect(String, int, String, bool, Identity)): this.channels
    //#input(void connect(String, int, String, bool, Identity)): this.config
    //#input(void connect(String, int, String, bool, Identity)): this.eventHandler
    //#input(void connect(String, int, String, bool, Identity)): this.eventHandler.__Tag
    //#input(void connect(String, int, String, bool, Identity)): this.eventHandler.owner
    //#input(void connect(String, int, String, bool, Identity)): this.eventHandler.owner.__Tag
    //#input(void connect(String, int, String, bool, Identity)): this.eventHandler.owner.server
    //#input(void connect(String, int, String, bool, Identity)): this.ignoreList
    //#input(void connect(String, int, String, bool, Identity)): this.invites
    //#input(void connect(String, int, String, bool, Identity)): this.listeners
    //#input(void connect(String, int, String, bool, Identity)): this.myState
    //#input(void connect(String, int, String, bool, Identity)): this.myState.__Tag
    //#input(void connect(String, int, String, bool, Identity)): this.myState.history
    //#input(void connect(String, int, String, bool, Identity)): this.myState.state
    //#input(void connect(String, int, String, bool, Identity)): this.myState.state._tainted
    //#input(void connect(String, int, String, bool, Identity)): this.myState.state.transitions
    //#input(void connect(String, int, String, bool, Identity)): this.parser
    //#input(void connect(String, int, String, bool, Identity)): this.parserFactory
    //#input(void connect(String, int, String, bool, Identity)): this.parserFactory.__Tag
    //#input(void connect(String, int, String, bool, Identity)): this.parserThread
    //#input(void connect(String, int, String, bool, Identity)): this.queries
    //#input(void connect(String, int, String, bool, Identity)): this.raw
    //#input(void connect(String, int, String, bool, Identity)): this.raw.server
    //#input(void connect(String, int, String, bool, Identity)): this.reconnectTimer
    //#input(void connect(String, int, String, bool, Identity)): this.serverInfo
    //#input(void connect(String, int, String, bool, Identity)): this.window
    //#output(void connect(String, int, String, bool, Identity)): com/dmdirc/ServerManager.me
    //#output(void connect(String, int, String, bool, Identity)): new ArrayList(ServerManager#1) num objects
    //#output(void connect(String, int, String, bool, Identity)): new IRCParser(getParser#1) num objects
    //#output(void connect(String, int, String, bool, Identity)): new ServerInfo(buildServerInfo#1) num objects
    //#output(void connect(String, int, String, bool, Identity)): new ServerManager(getServerManager#1) num objects
    //#output(void connect(String, int, String, bool, Identity)): new ServerManager(getServerManager#1).__Tag
    //#output(void connect(String, int, String, bool, Identity)): new ServerManager(getServerManager#1).servers
    //#output(void connect(String, int, String, bool, Identity)): new Thread(connect#5) num objects
    //#output(void connect(String, int, String, bool, Identity)): this.awayMessage
    //#output(void connect(String, int, String, bool, Identity)): this.icon
    //#output(void connect(String, int, String, bool, Identity)): this.myState.state
    //#output(void connect(String, int, String, bool, Identity)): this.parser
    //#output(void connect(String, int, String, bool, Identity)): this.parserThread
    //#output(void connect(String, int, String, bool, Identity)): this.profile
    //#output(void connect(String, int, String, bool, Identity)): this.serverInfo
    //#new obj(void connect(String, int, String, bool, Identity)): new ArrayList(ServerManager#1)
    //#new obj(void connect(String, int, String, bool, Identity)): new IRCParser(getParser#1)
    //#new obj(void connect(String, int, String, bool, Identity)): new ServerInfo(buildServerInfo#1)
    //#new obj(void connect(String, int, String, bool, Identity)): new ServerManager(getServerManager#1)
    //#new obj(void connect(String, int, String, bool, Identity)): new Thread(connect#5)
    //#pre[10] (void connect(String, int, String, bool, Identity)): this.myState.state != null
    //#pre[17] (void connect(String, int, String, bool, Identity)): profile != null
    //#pre[39] (void connect(String, int, String, bool, Identity)): this.myState != null
    //#pre[41] (void connect(String, int, String, bool, Identity)): this.myState.__Tag == com/dmdirc/ServerStatus
    //#pre[1] (void connect(String, int, String, bool, Identity)): (soft) init'ed(com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295])
    //#pre[4] (void connect(String, int, String, bool, Identity)): (soft) com.dmdirc.actions.CoreActionType__static_init.new CoreActionType(CoreActionType__static_init#17).type != null
    //#pre[6] (void connect(String, int, String, bool, Identity)): (soft) init'ed(com/dmdirc/actions/ActionManager.killSwitch)
    //#pre[11] (void connect(String, int, String, bool, Identity)): (soft) this.parser == null
    //#pre[12] (void connect(String, int, String, bool, Identity)): (soft) this.parserThread != null
    //#pre[14] (void connect(String, int, String, bool, Identity)): (soft) this.serverInfo != null
    //#pre[21] (void connect(String, int, String, bool, Identity)): (soft) this...__Tag == com/dmdirc/Server
    //#pre[22] (void connect(String, int, String, bool, Identity)): (soft) this...parser != null
    //#pre[23] (void connect(String, int, String, bool, Identity)): (soft) this.__Tag == com/dmdirc/Server
    //#pre[25] (void connect(String, int, String, bool, Identity)): (soft) this.channels != null
    //#pre[26] (void connect(String, int, String, bool, Identity)): (soft) this.config != null
    //#pre[27] (void connect(String, int, String, bool, Identity)): (soft) this.eventHandler != null
    //#pre[28] (void connect(String, int, String, bool, Identity)): (soft) this.eventHandler.__Tag == com/dmdirc/ServerEventHandler
    //#pre[29] (void connect(String, int, String, bool, Identity)): (soft) this.eventHandler.owner != null
    //#pre[33] (void connect(String, int, String, bool, Identity)): (soft) this.eventHandler.owner.server != null
    //#pre[35] (void connect(String, int, String, bool, Identity)): (soft) this.invites != null
    //#pre[37] (void connect(String, int, String, bool, Identity)): (soft) this.listeners != null
    //#pre[42] (void connect(String, int, String, bool, Identity)): (soft) this.myState.history != null
    //#pre[44] (void connect(String, int, String, bool, Identity)): (soft) this.myState.state.transitions != null
    //#pre[45] (void connect(String, int, String, bool, Identity)): (soft) this.parserFactory != null
    //#pre[46] (void connect(String, int, String, bool, Identity)): (soft) this.parserFactory.__Tag == com/dmdirc/ParserFactory
    //#pre[47] (void connect(String, int, String, bool, Identity)): (soft) this.queries != null
    //#pre[48] (void connect(String, int, String, bool, Identity)): (soft) init'ed(this.raw)
    //#pre[49] (void connect(String, int, String, bool, Identity)): (soft) this.raw.server != null
    //#pre[50] (void connect(String, int, String, bool, Identity)): (soft) this.reconnectTimer != null
    //#pre[51] (void connect(String, int, String, bool, Identity)): (soft) this.window != null
    //#presumption(void connect(String, int, String, bool, Identity)): com.dmdirc.ServerState:ordinal(...)@262 in {0..6}
    //#presumption(void connect(String, int, String, bool, Identity)): init'ed(com.dmdirc.logger.ErrorLevel.FATAL)
    //#presumption(void connect(String, int, String, bool, Identity)): java.util.Arrays:asList(...)@89 != null
    //#presumption(void connect(String, int, String, bool, Identity)): this...__Tag@275 == com/dmdirc/Server
    //#presumption(void connect(String, int, String, bool, Identity)): this...parser@275 != null
    //#presumption(void connect(String, int, String, bool, Identity)): this.eventHandler.owner.server@275 != null
    //#presumption(void connect(String, int, String, bool, Identity)): this.myState.history@275 != null
    //#presumption(void connect(String, int, String, bool, Identity)): this.myState.state.transitions@275 != null
    //#presumption(void connect(String, int, String, bool, Identity)): this.parser@275 == null
    //#presumption(void connect(String, int, String, bool, Identity)): this.raw.server@275 != null
    //#presumption(void connect(String, int, String, bool, Identity)): this.window@275 != null
    //#post(void connect(String, int, String, bool, Identity)): possibly_updated(com/dmdirc/ServerManager.me)
    //#post(void connect(String, int, String, bool, Identity)): possibly_updated(this.awayMessage)
    //#post(void connect(String, int, String, bool, Identity)): possibly_updated(this.icon)
    //#post(void connect(String, int, String, bool, Identity)): this.myState.state not in Addr_Set{null,&com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#5),&com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#7)}
    //#post(void connect(String, int, String, bool, Identity)): this.parser in Addr_Set{null,&new IRCParser(getParser#1)}
    //#post(void connect(String, int, String, bool, Identity)): possibly_updated(this.parserThread)
    //#post(void connect(String, int, String, bool, Identity)): possibly_updated(this.profile)
    //#post(void connect(String, int, String, bool, Identity)): init'ed(this.serverInfo)
    //#post(void connect(String, int, String, bool, Identity)): new ArrayList(ServerManager#1) num objects == 0, if init'ed
    //#post(void connect(String, int, String, bool, Identity)): new IRCParser(getParser#1) num objects <= 1
    //#post(void connect(String, int, String, bool, Identity)): new ServerInfo(buildServerInfo#1) num objects <= 1
    //#post(void connect(String, int, String, bool, Identity)): new ServerManager(getServerManager#1) num objects == 0, if init'ed
    //#post(void connect(String, int, String, bool, Identity)): new ServerManager(getServerManager#1).__Tag not init'ed, if init'ed
    //#post(void connect(String, int, String, bool, Identity)): new ServerManager(getServerManager#1).servers == null
    //#post(void connect(String, int, String, bool, Identity)): new Thread(connect#5) num objects <= 1
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:getConfigManager
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.config.Identity:getOptionList
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.List:isEmpty
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.MyInfo
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.List:get
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.MyInfo:setNickname
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.config.Identity:getOption
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.MyInfo:setRealname
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.config.Identity:hasOptionString
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.MyInfo:setUsername
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.Map:values
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.ClientInfo:parseHost
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.interfaces.InviteListener:inviteExpired
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getHost
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setSSL
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.config.ConfigManager:hasOptionString
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setUseSocks
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setProxyHost
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setProxyUser
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setProxyPass
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionInt
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setProxyPort
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:getParser
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getCallbackManager
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.callbacks.CallbackManager:addCallback
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:getType
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:trigger
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:getArity
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:triggerActions
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:getUI
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:getFrame
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ServerState:ordinal
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.Timer:cancel
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:getState
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.util.RollingList:getList
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ServerState:name
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.Thread:currentThread
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.Thread:getStackTrace
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.StackTraceElement:toString
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.Thread:getName
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.util.RollingList:add
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.List:contains
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.Object:notifyAll
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:updateIcon
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:removeInvites
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:setIcon
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:getServer
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.Object:getClass
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.Class:getInterfaces
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.Class:getName
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.String:startsWith
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:addCallback
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:clearChannels
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.Thread:interrupt
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:disconnect
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:closeChannels
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:closeQueries
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getSSL
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:close
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.CertificateManager
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:setTrustManager
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:getKeyManager
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:setKeyManagers
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:setRemoveAfterCallback
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:setCreateFake
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:setIgnoreList
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:setPingTimerLength
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getPingTimerLength
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:setPingCountDownLength
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:setBindIP
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.interfaces.ChannelWindow:updateNames
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.actions.ConditionTree$OPERATION:ordinal
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.List:size
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.Deque:pollFirst
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.Character:instanceof
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.Deque:isEmpty
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:readTerm
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.ArrayDeque
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.Deque:pollLast
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.Deque:addFirst
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:parseStack
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.Deque:poll
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.Deque:add
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.Deque:size
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.Integer:parseInt
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptions
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.StringBuilder:indexOf
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.StringBuilder:replace
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.Map:entrySet
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.Map$Entry:getKey
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.Map$Entry:getValue
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:[Ljava.lang.String;:instanceof
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.String:instanceof
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.StringBuffer:length
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.StringBuffer:insert
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:doServerSubstitutions
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:doComponentSubstitutions
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ServerState:equals
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:getCompatibleComponents
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.Object:toString
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:get
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:getArgTypes
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:test
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:evaluate
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getActiveWindow
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:instanceof
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.commandparser.parsers.CommandParser:parseCommand
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.StringBuffer:setLength
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:addLine
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:getChannelInfo
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.parser.irc.ChannelInfo:getName
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:close
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.String:toCharArray
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.io.FileInputStream
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.security.KeyStore:getInstance
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.security.KeyStore:load
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.io.FileInputStream:close
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.System:getProperty
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.lang.String:replace
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.security.KeyStore:getDefaultType
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.security.cert.PKIXParameters
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.security.cert.PKIXParameters:getTrustAnchors
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.security.cert.TrustAnchor:getTrustedCert
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.Set:add
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.HashSet
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:java.util.concurrent.Semaphore
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:javax.net.ssl.KeyManagerFactory:getDefaultAlgorithm
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:javax.net.ssl.KeyManagerFactory:getInstance
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:javax.net.ssl.KeyManagerFactory:init
    //#unanalyzed(void connect(String, int, String, bool, Identity)): Effects-of-calling:javax.net.ssl.KeyManagerFactory:getKeyManagers
    //#test_vector(void connect(String, int, String, bool, Identity)): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295]: {1}, {2}, {3,4}, {5}, {-2_147_483_648..0, 6..4_294_967_295}

        synchronized (myState) {
            switch (myState.getState()) {
    //#Server.java:262: method: com.dmdirc.Server$4.com.dmdirc.Server$4__static_init
    //#Server.java:262: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.ServerState:ordinal()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server$4
    //#    method: com.dmdirc.Server$4__static_init
    //#    unanalyzed callee: int com.dmdirc.ServerState:ordinal()
    //#input(com.dmdirc.Server$4__static_init): com.dmdirc.ServerState__static_init.new ServerState[](ServerState__static_init#15).length
    //#input(com.dmdirc.Server$4__static_init): com.dmdirc.ServerState__static_init.new ServerState[](ServerState__static_init#15)[0..7]
    //#input(com.dmdirc.Server$4__static_init): com/dmdirc/ServerState.$VALUES
    //#input(com.dmdirc.Server$4__static_init): com/dmdirc/ServerState.CLOSING
    //#input(com.dmdirc.Server$4__static_init): com/dmdirc/ServerState.CONNECTED
    //#input(com.dmdirc.Server$4__static_init): com/dmdirc/ServerState.CONNECTING
    //#input(com.dmdirc.Server$4__static_init): com/dmdirc/ServerState.DISCONNECTED
    //#input(com.dmdirc.Server$4__static_init): com/dmdirc/ServerState.DISCONNECTING
    //#input(com.dmdirc.Server$4__static_init): com/dmdirc/ServerState.RECONNECT_WAIT
    //#input(com.dmdirc.Server$4__static_init): com/dmdirc/ServerState.TRANSIENTLY_DISCONNECTED
    //#output(com.dmdirc.Server$4__static_init): $SwitchMap$com$dmdirc$ServerState
    //#output(com.dmdirc.Server$4__static_init): __Descendant_Table[com/dmdirc/Server$4]
    //#output(com.dmdirc.Server$4__static_init): new int[](Server$4__static_init#1) num objects
    //#output(com.dmdirc.Server$4__static_init): $SwitchMap$com$dmdirc$ServerState.length
    //#output(com.dmdirc.Server$4__static_init): $SwitchMap$com$dmdirc$ServerState[0..4_294_967_295]
    //#new obj(com.dmdirc.Server$4__static_init): new int[](Server$4__static_init#1)
    //#pre[1] (com.dmdirc.Server$4__static_init): (soft) init'ed(com.dmdirc.ServerState__static_init.new ServerState[](ServerState__static_init#15)[0..7])
    //#presumption(com.dmdirc.Server$4__static_init): com.dmdirc.ServerState:ordinal(...)@262 in {0..6}
    //#presumption(com.dmdirc.Server$4__static_init): com.dmdirc.ServerState:ordinal(...)@262 in {0..6}
    //#presumption(com.dmdirc.Server$4__static_init): com.dmdirc.ServerState:ordinal(...)@262 in {0..6}
    //#presumption(com.dmdirc.Server$4__static_init): com.dmdirc.ServerState:ordinal(...)@262 in {0..6}
    //#presumption(com.dmdirc.Server$4__static_init): com.dmdirc.ServerState:ordinal(...)@262 in {0..6}
    //#presumption(com.dmdirc.Server$4__static_init): com.dmdirc.ServerState:ordinal(...)@262 in {0..6}
    //#presumption(com.dmdirc.Server$4__static_init): com.dmdirc.ServerState:ordinal(...)@262 in {0..6}
    //#post(com.dmdirc.Server$4__static_init): $SwitchMap$com$dmdirc$ServerState == &new int[](Server$4__static_init#1)
    //#post(com.dmdirc.Server$4__static_init): __Descendant_Table[com/dmdirc/Server$4] == &__Dispatch_Table
    //#post(com.dmdirc.Server$4__static_init): new int[](Server$4__static_init#1) num objects == 1
    //#post(com.dmdirc.Server$4__static_init): $SwitchMap$com$dmdirc$ServerState.length == 7
    //#post(com.dmdirc.Server$4__static_init): $SwitchMap$com$dmdirc$ServerState[0..4_294_967_295] in {0..7}, if init'ed
    //#Server.java:262: end of method: com.dmdirc.Server$4.com.dmdirc.Server$4__static_init
    //#Server.java:262: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.ServerState:ordinal()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void connect(String, int, String, bool, Identity)
    //#    unanalyzed callee: int com.dmdirc.ServerState:ordinal()
                case RECONNECT_WAIT:
                    reconnectTimer.cancel();
                    break;
                case CLOSING:
                    // Ignore the connection attempt
                    return;
                case CONNECTED:
                case CONNECTING:
                    disconnect(getConfigManager().getOption(DOMAIN_GENERAL, "quitmessage"));
    //#Server.java:271: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void connect(String, int, String, bool, Identity)
    //#    unanalyzed callee: String com.dmdirc.config.ConfigManager:getOption(String, String)
                case DISCONNECTING:
                    while (!myState.getState().isDisconnected()) {
    //#Server.java:273: ?precondition failure
    //#    com/dmdirc/ServerStatus.getState: init'ed(this.state)
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.Server
    //#    method: void connect(String, int, String, bool, Identity)
    //#    basic block: bb_9
    //#    assertion: init'ed(this.myState.state)
    //#    callee: ServerState com/dmdirc/ServerStatus.getState()
    //#    callee assertion: init'ed(this.state)
    //#    callee file: ServerStatus.java
    //#    callee precondition index: [2]
    //#    callee srcpos: 68
    //#    VN: this.myState.state
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Bad only invalid
                        try {
                            myState.wait();
                        } catch (InterruptedException ex) {
                            return;
                        }
                    }
                    break;
                default:
                    // Do nothing
                    break;
            }

            if (parser != null) {
                throw new IllegalArgumentException("Connection attempt while parser "
                        + "is still connected.\n\nMy state:" + getState());
            }

            myState.transition(ServerState.CONNECTING);

            ActionManager.processEvent(CoreActionType.SERVER_CONNECTING, null, this);
    //#Server.java:293: ?!precondition failure
    //#    com/dmdirc/actions/ActionManager.processEvent: (soft) type.type.__Tag in {com/dmdirc/actions/interfaces/ActionMetaType, com/dmdirc/actions/metatypes/ActionEvents, com/dmdirc/actions/metatypes/ChannelEvents, com/dmdirc/actions/metatypes/ClientEvents, com/dmdirc/actions/metatypes/PluginEvents, com/dmdirc/actions/metatypes/QueryEvents, com/dmdirc/actions/metatypes/ServerEvents, com/dmdirc/addons/dcc/actions/DCCEvents}
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.Server
    //#    method: void connect(String, int, String, bool, Identity)
    //#    basic block: bb_16
    //#    assertion: (soft) undefined in {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    callee: void com/dmdirc/actions/ActionManager.processEvent(ActionType, StringBuffer, Object[])
    //#    callee assertion: (soft) type.type.__Tag in {com/dmdirc/actions/interfaces/ActionMetaType, com/dmdirc/actions/metatypes/ActionEvents, com/dmdirc/actions/metatypes/ChannelEvents, com/dmdirc/actions/metatypes/ClientEvents, com/dmdirc/actions/metatypes/PluginEvents, com/dmdirc/actions/metatypes/QueryEvents, com/dmdirc/actions/metatypes/ServerEvents, com/dmdirc/addons/dcc/actions/DCCEvents}
    //#    callee file: ActionManager.java
    //#    callee precondition index: [29]
    //#    callee srcpos: 365
    //#    VN: undefined
    //#    Expected: {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    Bad: {0, Invalid}
    //#    Attribs:  Int  Bad singleton  Bad overlaps +/-1000  Soft  Bad < Exp

            getConfigManager().migrate("", "", server);
    //#Server.java:295: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.ConfigManager:migrate(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void connect(String, int, String, bool, Identity)
    //#    unanalyzed callee: void com.dmdirc.config.ConfigManager:migrate(String, String, String)

            serverInfo = buildServerInfo(server, port, password, ssl);

            this.profile = profile;

            updateIcon();

            addLine("serverConnecting", server, port);

            parser = buildParser();

            doCallbacks();

            awayMessage = null;
            removeInvites();
            window.setAwayIndicator(false);
    //#Server.java:311: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.ServerWindow:setAwayIndicator(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void connect(String, int, String, bool, Identity)
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.ServerWindow:setAwayIndicator(bool)

            try {
                parserThread = new Thread(parser, "IRC Parser thread");
                parserThread.start();
            } catch (IllegalThreadStateException ex) {
                Logger.appError(ErrorLevel.FATAL, "Unable to start IRC Parser", ex);
    //#Server.java:317: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.logger.Logger:appError(ErrorLevel, String, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void connect(String, int, String, bool, Identity)
    //#    unanalyzed callee: void com.dmdirc.logger.Logger:appError(ErrorLevel, String, Throwable)
            }
        }
    }
    //#Server.java:320: end of method: void com.dmdirc.Server.connect(String, int, String, bool, Identity)

    /**
     * Reconnects to the IRC server with a specified reason.
     *
     * @param reason The quit reason to send
     */
    public void reconnect(final String reason) {
        synchronized (myState) {
    //#Server.java:328: method: void com.dmdirc.Server.reconnect(String)
    //#input(void reconnect(String)): " ["._tainted
    //#input(void reconnect(String)): "->"._tainted
    //#input(void reconnect(String)): "Illegal server state transition&#10;&#10;"._tainted
    //#input(void reconnect(String)): DOMAIN_GENERAL
    //#input(void reconnect(String)): __Descendant_Table[com/dmdirc/Server]
    //#input(void reconnect(String)): __Descendant_Table[others]
    //#input(void reconnect(String)): __Dispatch_Table.connect(Ljava/lang/String;ILjava/lang/String;ZLcom/dmdirc/config/Identity;)V
    //#input(void reconnect(String)): __Dispatch_Table.disconnect(Ljava/lang/String;)V
    //#input(void reconnect(String)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect(String)): __Dispatch_Table.removeInvite(Lcom/dmdirc/Invite;)V
    //#input(void reconnect(String)): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1).length
    //#input(void reconnect(String)): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295]
    //#input(void reconnect(String)): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#7).transitions
    //#input(void reconnect(String)): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#9).transitions
    //#input(void reconnect(String)): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void reconnect(String)): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void reconnect(String)): com/dmdirc/Channel.__Dispatch_Table.close()V
    //#input(void reconnect(String)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect(String)): com/dmdirc/Channel.__Dispatch_Table.resetWindow()V
    //#input(void reconnect(String)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void reconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void reconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void reconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void reconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void reconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void reconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void reconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void reconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void reconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void reconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void reconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void reconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void reconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void reconnect(String)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect(String)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect(String)): com/dmdirc/Invite.__Descendant_Table[com/dmdirc/Invite]
    //#input(void reconnect(String)): com/dmdirc/Invite.__Descendant_Table[others]
    //#input(void reconnect(String)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect(String)): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(void reconnect(String)): com/dmdirc/Query.__Descendant_Table[others]
    //#input(void reconnect(String)): com/dmdirc/Query.__Dispatch_Table.close()V
    //#input(void reconnect(String)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect(String)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect(String)): com/dmdirc/Server$4.$SwitchMap$com$dmdirc$ServerState
    //#input(void reconnect(String)): com/dmdirc/ServerState.CLOSING
    //#input(void reconnect(String)): com/dmdirc/ServerState.CONNECTED
    //#input(void reconnect(String)): com/dmdirc/ServerState.DISCONNECTED
    //#input(void reconnect(String)): com/dmdirc/ServerState.DISCONNECTING
    //#input(void reconnect(String)): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void reconnect(String)): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void reconnect(String)): com/dmdirc/ServerStatus.__Dispatch_Table.addHistoryEntry(Lcom/dmdirc/ServerState;Lcom/dmdirc/ServerState;)V
    //#input(void reconnect(String)): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void reconnect(String)): com/dmdirc/ServerStatus.__Dispatch_Table.getTransitionHistory()Ljava/lang/String;
    //#input(void reconnect(String)): com/dmdirc/ServerStatus.__Dispatch_Table.transition(Lcom/dmdirc/ServerState;)V
    //#input(void reconnect(String)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect(String)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect(String)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect(String)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect(String)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect(String)): reason
    //#input(void reconnect(String)): this
    //#input(void reconnect(String)): this.__Tag
    //#input(void reconnect(String)): this.changer
    //#input(void reconnect(String)): this.channels
    //#input(void reconnect(String)): this.config
    //#input(void reconnect(String)): this.invites
    //#input(void reconnect(String)): this.listeners
    //#input(void reconnect(String)): this.myState
    //#input(void reconnect(String)): this.myState.__Tag
    //#input(void reconnect(String)): this.myState.history
    //#input(void reconnect(String)): this.myState.state
    //#input(void reconnect(String)): this.myState.state.transitions
    //#input(void reconnect(String)): this.parser
    //#input(void reconnect(String)): this.parserThread
    //#input(void reconnect(String)): this.profile
    //#input(void reconnect(String)): this.queries
    //#input(void reconnect(String)): this.reconnectTimer
    //#input(void reconnect(String)): this.serverInfo
    //#output(void reconnect(String)): new ServerInfo(buildServerInfo#1) num objects
    //#output(void reconnect(String)): new Thread(connect#5) num objects
    //#output(void reconnect(String)): this.awayMessage
    //#output(void reconnect(String)): this.icon
    //#output(void reconnect(String)): this.myState.state
    //#output(void reconnect(String)): this.parser
    //#output(void reconnect(String)): this.parserThread
    //#output(void reconnect(String)): this.profile
    //#output(void reconnect(String)): this.serverInfo
    //#new obj(void reconnect(String)): new ServerInfo(buildServerInfo#1)
    //#new obj(void reconnect(String)): new Thread(connect#5)
    //#pre[5] (void reconnect(String)): this.myState.state != null
    //#pre[20] (void reconnect(String)): this.myState != null
    //#pre[22] (void reconnect(String)): this.myState.__Tag == com/dmdirc/ServerStatus
    //#pre[1] (void reconnect(String)): (soft) init'ed(com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295])
    //#pre[6] (void reconnect(String)): (soft) init'ed(this.parser)
    //#pre[7] (void reconnect(String)): (soft) this.parserThread != null
    //#pre[8] (void reconnect(String)): (soft) init'ed(this.profile)
    //#pre[9] (void reconnect(String)): (soft) this.serverInfo != null
    //#pre[12] (void reconnect(String)): (soft) this.__Tag == com/dmdirc/Server
    //#pre[14] (void reconnect(String)): (soft) this.channels != null
    //#pre[15] (void reconnect(String)): (soft) this.config != null
    //#pre[16] (void reconnect(String)): (soft) this.invites != null
    //#pre[18] (void reconnect(String)): (soft) this.listeners != null
    //#pre[23] (void reconnect(String)): (soft) this.myState.history != null
    //#pre[24] (void reconnect(String)): (soft) this.myState.state.transitions != null
    //#pre[26] (void reconnect(String)): (soft) this.reconnectTimer != null
    //#presumption(void reconnect(String)): java.util.Arrays:asList(...)@89 init'ed
    //#post(void reconnect(String)): this.awayMessage == old this.awayMessage
    //#post(void reconnect(String)): this.icon == One-of{old this.icon, &"secure-server", &"server", &"server-disconnected"}
    //#post(void reconnect(String)): this.myState.state == One-of{old this.myState.state, &com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#7), &com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#9)}
    //#post(void reconnect(String)): this.myState.state != null
    //#post(void reconnect(String)): this.parser == old this.parser
    //#post(void reconnect(String)): init'ed(this.parser)
    //#post(void reconnect(String)): this.parserThread == old this.parserThread
    //#post(void reconnect(String)): this.parserThread != null
    //#post(void reconnect(String)): this.profile == old this.profile
    //#post(void reconnect(String)): init'ed(this.profile)
    //#post(void reconnect(String)): this.serverInfo == old this.serverInfo
    //#post(void reconnect(String)): this.serverInfo != null
    //#post(void reconnect(String)): new ServerInfo(buildServerInfo#1) num objects == undefined
    //#post(void reconnect(String)): new ServerInfo(buildServerInfo#1) num objects == 0, if init'ed
    //#post(void reconnect(String)): new Thread(connect#5) num objects == new ServerInfo(buildServerInfo#1) num objects
    //#unanalyzed(void reconnect(String)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void reconnect(String)): Effects-of-calling:getConfigManager
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.util.Map:values
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void reconnect(String)): Effects-of-calling:com.dmdirc.interfaces.InviteListener:inviteExpired
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(void reconnect(String)): Effects-of-calling:com.dmdirc.ServerState:ordinal
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.util.Timer:cancel
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void reconnect(String)): Effects-of-calling:com.dmdirc.util.RollingList:getList
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void reconnect(String)): Effects-of-calling:com.dmdirc.ServerState:name
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.lang.Thread:currentThread
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.lang.Thread:getStackTrace
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.lang.StackTraceElement:toString
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.lang.Thread:getName
    //#unanalyzed(void reconnect(String)): Effects-of-calling:com.dmdirc.util.RollingList:add
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.util.List:contains
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.lang.Object:notifyAll
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void reconnect(String)): Effects-of-calling:updateIcon
    //#unanalyzed(void reconnect(String)): Effects-of-calling:removeInvites
    //#unanalyzed(void reconnect(String)): Effects-of-calling:setIcon
    //#unanalyzed(void reconnect(String)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(void reconnect(String)): Effects-of-calling:clearChannels
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.lang.Thread:interrupt
    //#unanalyzed(void reconnect(String)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:disconnect
    //#unanalyzed(void reconnect(String)): Effects-of-calling:closeChannels
    //#unanalyzed(void reconnect(String)): Effects-of-calling:closeQueries
    //#unanalyzed(void reconnect(String)): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void reconnect(String)): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getSSL
    //#unanalyzed(void reconnect(String)): Effects-of-calling:close
    //#unanalyzed(void reconnect(String)): Effects-of-calling:com.dmdirc.ui.interfaces.ChannelWindow:updateNames
    //#unanalyzed(void reconnect(String)): Effects-of-calling:getFrame
    //#unanalyzed(void reconnect(String)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void reconnect(String)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void reconnect(String)): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void reconnect(String)): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void reconnect(String)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void reconnect(String)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:close
            if (myState.getState() == ServerState.CLOSING) {
                return;
            }

            disconnect(reason);
            
            connect(serverInfo.getHost(), serverInfo.getPort(),
    //#Server.java:335: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ServerInfo:getHost()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void reconnect(String)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ServerInfo:getHost()
    //#Server.java:335: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.parser.irc.ServerInfo:getPort()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void reconnect(String)
    //#    unanalyzed callee: int com.dmdirc.parser.irc.ServerInfo:getPort()
    //#Server.java:335: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ServerInfo:getPassword()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void reconnect(String)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ServerInfo:getPassword()
    //#Server.java:335: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.parser.irc.ServerInfo:getSSL()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void reconnect(String)
    //#    unanalyzed callee: bool com.dmdirc.parser.irc.ServerInfo:getSSL()
    //#Server.java:335: Warning: call too complex - analysis skipped
    //#    call on void connect(String, int, String, bool, Identity)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void reconnect(String)
    //#    unanalyzed callee: void connect(String, int, String, bool, Identity)
                    serverInfo.getPassword(), serverInfo.getSSL(), profile);
        }
    }
    //#Server.java:338: end of method: void com.dmdirc.Server.reconnect(String)

    /**
     * Reconnects to the IRC server.
     */
    public void reconnect() {
        reconnect(getConfigManager().getOption(DOMAIN_GENERAL, "reconnectmessage"));
    //#Server.java:344: method: void com.dmdirc.Server.reconnect()
    //#Server.java:344: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void reconnect()
    //#    unanalyzed callee: String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#input(void reconnect()): " ["._tainted
    //#input(void reconnect()): "->"._tainted
    //#input(void reconnect()): "Illegal server state transition&#10;&#10;"._tainted
    //#input(void reconnect()): DOMAIN_GENERAL
    //#input(void reconnect()): __Descendant_Table[com/dmdirc/Server]
    //#input(void reconnect()): __Descendant_Table[others]
    //#input(void reconnect()): __Dispatch_Table.connect(Ljava/lang/String;ILjava/lang/String;ZLcom/dmdirc/config/Identity;)V
    //#input(void reconnect()): __Dispatch_Table.disconnect(Ljava/lang/String;)V
    //#input(void reconnect()): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect()): __Dispatch_Table.reconnect(Ljava/lang/String;)V
    //#input(void reconnect()): __Dispatch_Table.removeInvite(Lcom/dmdirc/Invite;)V
    //#input(void reconnect()): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1).length
    //#input(void reconnect()): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295]
    //#input(void reconnect()): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#7).transitions
    //#input(void reconnect()): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#9).transitions
    //#input(void reconnect()): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void reconnect()): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void reconnect()): com/dmdirc/Channel.__Dispatch_Table.close()V
    //#input(void reconnect()): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect()): com/dmdirc/Channel.__Dispatch_Table.resetWindow()V
    //#input(void reconnect()): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void reconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void reconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void reconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void reconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void reconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void reconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void reconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void reconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void reconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void reconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void reconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void reconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void reconnect()): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void reconnect()): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect()): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect()): com/dmdirc/Invite.__Descendant_Table[com/dmdirc/Invite]
    //#input(void reconnect()): com/dmdirc/Invite.__Descendant_Table[others]
    //#input(void reconnect()): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect()): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(void reconnect()): com/dmdirc/Query.__Descendant_Table[others]
    //#input(void reconnect()): com/dmdirc/Query.__Dispatch_Table.close()V
    //#input(void reconnect()): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect()): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect()): com/dmdirc/Server$4.$SwitchMap$com$dmdirc$ServerState
    //#input(void reconnect()): com/dmdirc/ServerState.CLOSING
    //#input(void reconnect()): com/dmdirc/ServerState.CONNECTED
    //#input(void reconnect()): com/dmdirc/ServerState.DISCONNECTED
    //#input(void reconnect()): com/dmdirc/ServerState.DISCONNECTING
    //#input(void reconnect()): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void reconnect()): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void reconnect()): com/dmdirc/ServerStatus.__Dispatch_Table.addHistoryEntry(Lcom/dmdirc/ServerState;Lcom/dmdirc/ServerState;)V
    //#input(void reconnect()): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void reconnect()): com/dmdirc/ServerStatus.__Dispatch_Table.getTransitionHistory()Ljava/lang/String;
    //#input(void reconnect()): com/dmdirc/ServerStatus.__Dispatch_Table.transition(Lcom/dmdirc/ServerState;)V
    //#input(void reconnect()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void reconnect()): this
    //#input(void reconnect()): this.__Tag
    //#input(void reconnect()): this.changer
    //#input(void reconnect()): this.channels
    //#input(void reconnect()): this.config
    //#input(void reconnect()): this.invites
    //#input(void reconnect()): this.listeners
    //#input(void reconnect()): this.myState
    //#input(void reconnect()): this.myState.__Tag
    //#input(void reconnect()): this.myState.history
    //#input(void reconnect()): this.myState.state
    //#input(void reconnect()): this.myState.state.transitions
    //#input(void reconnect()): this.parser
    //#input(void reconnect()): this.parserThread
    //#input(void reconnect()): this.profile
    //#input(void reconnect()): this.queries
    //#input(void reconnect()): this.reconnectTimer
    //#input(void reconnect()): this.serverInfo
    //#output(void reconnect()): new ServerInfo(buildServerInfo#1) num objects
    //#output(void reconnect()): new Thread(connect#5) num objects
    //#output(void reconnect()): this.awayMessage
    //#output(void reconnect()): this.icon
    //#output(void reconnect()): this.myState.state
    //#output(void reconnect()): this.parser
    //#output(void reconnect()): this.parserThread
    //#output(void reconnect()): this.profile
    //#output(void reconnect()): this.serverInfo
    //#new obj(void reconnect()): new ServerInfo(buildServerInfo#1)
    //#new obj(void reconnect()): new Thread(connect#5)
    //#pre[4] (void reconnect()): this.myState.state != null
    //#pre[10] (void reconnect()): this.__Tag == com/dmdirc/Server
    //#pre[13] (void reconnect()): this.config != null
    //#pre[18] (void reconnect()): this.myState != null
    //#pre[20] (void reconnect()): this.myState.__Tag == com/dmdirc/ServerStatus
    //#pre[1] (void reconnect()): (soft) init'ed(com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295])
    //#pre[5] (void reconnect()): (soft) init'ed(this.parser)
    //#pre[6] (void reconnect()): (soft) this.parserThread != null
    //#pre[7] (void reconnect()): (soft) init'ed(this.profile)
    //#pre[8] (void reconnect()): (soft) this.serverInfo != null
    //#pre[12] (void reconnect()): (soft) this.channels != null
    //#pre[14] (void reconnect()): (soft) this.invites != null
    //#pre[16] (void reconnect()): (soft) this.listeners != null
    //#pre[21] (void reconnect()): (soft) this.myState.history != null
    //#pre[22] (void reconnect()): (soft) this.myState.state.transitions != null
    //#pre[24] (void reconnect()): (soft) this.reconnectTimer != null
    //#post(void reconnect()): this.awayMessage == old this.awayMessage
    //#post(void reconnect()): this.icon == One-of{old this.icon, &"secure-server", &"server", &"server-disconnected"}
    //#post(void reconnect()): this.myState.state == One-of{old this.myState.state, &com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#7), &com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#9)}
    //#post(void reconnect()): this.myState.state != null
    //#post(void reconnect()): this.parser == old this.parser
    //#post(void reconnect()): init'ed(this.parser)
    //#post(void reconnect()): this.parserThread == old this.parserThread
    //#post(void reconnect()): this.parserThread != null
    //#post(void reconnect()): this.profile == old this.profile
    //#post(void reconnect()): init'ed(this.profile)
    //#post(void reconnect()): this.serverInfo == old this.serverInfo
    //#post(void reconnect()): this.serverInfo != null
    //#post(void reconnect()): new ServerInfo(buildServerInfo#1) num objects == undefined
    //#post(void reconnect()): new ServerInfo(buildServerInfo#1) num objects == 0, if init'ed
    //#post(void reconnect()): new Thread(connect#5) num objects == new ServerInfo(buildServerInfo#1) num objects
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void reconnect()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void reconnect()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void reconnect()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void reconnect()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void reconnect()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void reconnect()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void reconnect()): Effects-of-calling:getConfigManager
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void reconnect()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void reconnect()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void reconnect()): Effects-of-calling:java.util.Map:values
    //#unanalyzed(void reconnect()): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.interfaces.InviteListener:inviteExpired
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getHost
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setSSL
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.config.ConfigManager:hasOptionString
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setUseSocks
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setProxyHost
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setProxyUser
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setProxyPass
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionInt
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setProxyPort
    //#unanalyzed(void reconnect()): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void reconnect()): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void reconnect()): Effects-of-calling:getType
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void reconnect()): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void reconnect()): Effects-of-calling:trigger
    //#unanalyzed(void reconnect()): Effects-of-calling:getArity
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.ServerState:ordinal
    //#unanalyzed(void reconnect()): Effects-of-calling:java.util.Timer:cancel
    //#unanalyzed(void reconnect()): Effects-of-calling:disconnect
    //#unanalyzed(void reconnect()): Effects-of-calling:java.lang.Object:wait
    //#unanalyzed(void reconnect()): Effects-of-calling:getState
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.util.RollingList:getList
    //#unanalyzed(void reconnect()): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.ServerState:name
    //#unanalyzed(void reconnect()): Effects-of-calling:java.lang.Thread:currentThread
    //#unanalyzed(void reconnect()): Effects-of-calling:java.lang.Thread:getStackTrace
    //#unanalyzed(void reconnect()): Effects-of-calling:java.lang.StackTraceElement:toString
    //#unanalyzed(void reconnect()): Effects-of-calling:java.lang.Thread:getName
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.util.RollingList:add
    //#unanalyzed(void reconnect()): Effects-of-calling:java.util.List:contains
    //#unanalyzed(void reconnect()): Effects-of-calling:java.lang.Object:notifyAll
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.config.ConfigManager:migrate
    //#unanalyzed(void reconnect()): Effects-of-calling:updateIcon
    //#unanalyzed(void reconnect()): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void reconnect()): Effects-of-calling:addLine
    //#unanalyzed(void reconnect()): Effects-of-calling:buildParser
    //#unanalyzed(void reconnect()): Effects-of-calling:doCallbacks
    //#unanalyzed(void reconnect()): Effects-of-calling:removeInvites
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.ui.interfaces.ServerWindow:setAwayIndicator
    //#unanalyzed(void reconnect()): Effects-of-calling:java.lang.Thread
    //#unanalyzed(void reconnect()): Effects-of-calling:java.lang.Thread:start
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#unanalyzed(void reconnect()): Effects-of-calling:setIcon
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(void reconnect()): Effects-of-calling:clearChannels
    //#unanalyzed(void reconnect()): Effects-of-calling:java.lang.Thread:interrupt
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:disconnect
    //#unanalyzed(void reconnect()): Effects-of-calling:closeChannels
    //#unanalyzed(void reconnect()): Effects-of-calling:closeQueries
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getPort
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getPassword
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getSSL
    //#unanalyzed(void reconnect()): Effects-of-calling:connect
    //#unanalyzed(void reconnect()): Effects-of-calling:close
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.ui.interfaces.ChannelWindow:updateNames
    //#unanalyzed(void reconnect()): Effects-of-calling:getFrame
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void reconnect()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:close
    }
    //#Server.java:345: end of method: void com.dmdirc.Server.reconnect()

    /**
     * Disconnects from the server with the default quit message.
     */
    public void disconnect() {
        disconnect(getConfigManager().getOption(DOMAIN_GENERAL, "quitmessage"));
    //#Server.java:351: method: void com.dmdirc.Server.disconnect()
    //#Server.java:351: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void disconnect()
    //#    unanalyzed callee: String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#input(void disconnect()): " ["._tainted
    //#input(void disconnect()): "->"._tainted
    //#input(void disconnect()): "Illegal server state transition&#10;&#10;"._tainted
    //#input(void disconnect()): DOMAIN_GENERAL
    //#input(void disconnect()): __Descendant_Table[com/dmdirc/Server]
    //#input(void disconnect()): __Descendant_Table[others]
    //#input(void disconnect()): __Dispatch_Table.disconnect(Ljava/lang/String;)V
    //#input(void disconnect()): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect()): __Dispatch_Table.removeInvite(Lcom/dmdirc/Invite;)V
    //#input(void disconnect()): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1).length
    //#input(void disconnect()): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295]
    //#input(void disconnect()): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#7).transitions
    //#input(void disconnect()): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#9).transitions
    //#input(void disconnect()): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void disconnect()): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void disconnect()): com/dmdirc/Channel.__Dispatch_Table.close()V
    //#input(void disconnect()): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect()): com/dmdirc/Channel.__Dispatch_Table.resetWindow()V
    //#input(void disconnect()): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void disconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void disconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void disconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void disconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void disconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void disconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void disconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void disconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void disconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void disconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void disconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void disconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void disconnect()): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void disconnect()): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect()): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect()): com/dmdirc/Invite.__Descendant_Table[com/dmdirc/Invite]
    //#input(void disconnect()): com/dmdirc/Invite.__Descendant_Table[others]
    //#input(void disconnect()): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect()): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(void disconnect()): com/dmdirc/Query.__Descendant_Table[others]
    //#input(void disconnect()): com/dmdirc/Query.__Dispatch_Table.close()V
    //#input(void disconnect()): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect()): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect()): com/dmdirc/Server$4.$SwitchMap$com$dmdirc$ServerState
    //#input(void disconnect()): com/dmdirc/ServerState.CONNECTED
    //#input(void disconnect()): com/dmdirc/ServerState.DISCONNECTED
    //#input(void disconnect()): com/dmdirc/ServerState.DISCONNECTING
    //#input(void disconnect()): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void disconnect()): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void disconnect()): com/dmdirc/ServerStatus.__Dispatch_Table.addHistoryEntry(Lcom/dmdirc/ServerState;Lcom/dmdirc/ServerState;)V
    //#input(void disconnect()): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void disconnect()): com/dmdirc/ServerStatus.__Dispatch_Table.getTransitionHistory()Ljava/lang/String;
    //#input(void disconnect()): com/dmdirc/ServerStatus.__Dispatch_Table.transition(Lcom/dmdirc/ServerState;)V
    //#input(void disconnect()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect()): this
    //#input(void disconnect()): this.__Tag
    //#input(void disconnect()): this.changer
    //#input(void disconnect()): this.channels
    //#input(void disconnect()): this.config
    //#input(void disconnect()): this.invites
    //#input(void disconnect()): this.listeners
    //#input(void disconnect()): this.myState
    //#input(void disconnect()): this.myState.__Tag
    //#input(void disconnect()): this.myState.history
    //#input(void disconnect()): this.myState.state
    //#input(void disconnect()): this.myState.state.transitions
    //#input(void disconnect()): this.parser
    //#input(void disconnect()): this.parserThread
    //#input(void disconnect()): this.queries
    //#input(void disconnect()): this.reconnectTimer
    //#input(void disconnect()): this.serverInfo
    //#output(void disconnect()): this.icon
    //#output(void disconnect()): this.myState.state
    //#pre[3] (void disconnect()): this.myState.state != null
    //#pre[5] (void disconnect()): this.__Tag == com/dmdirc/Server
    //#pre[8] (void disconnect()): this.config != null
    //#pre[13] (void disconnect()): this.myState != null
    //#pre[15] (void disconnect()): this.myState.__Tag == com/dmdirc/ServerStatus
    //#pre[1] (void disconnect()): (soft) init'ed(com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295])
    //#pre[7] (void disconnect()): (soft) this.channels != null
    //#pre[9] (void disconnect()): (soft) this.invites != null
    //#pre[11] (void disconnect()): (soft) this.listeners != null
    //#pre[16] (void disconnect()): (soft) this.myState.history != null
    //#pre[17] (void disconnect()): (soft) this.myState.state.transitions != null
    //#pre[18] (void disconnect()): (soft) init'ed(this.parser)
    //#pre[19] (void disconnect()): (soft) this.parserThread != null
    //#pre[21] (void disconnect()): (soft) this.reconnectTimer != null
    //#pre[22] (void disconnect()): (soft) this.serverInfo != null
    //#post(void disconnect()): this.icon == One-of{old this.icon, &"secure-server", &"server", &"server-disconnected"}
    //#post(void disconnect()): this.myState.state == One-of{old this.myState.state, &com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#7), &com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#9)}
    //#post(void disconnect()): this.myState.state != null
    //#unanalyzed(void disconnect()): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void disconnect()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void disconnect()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void disconnect()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void disconnect()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void disconnect()): Effects-of-calling:getConfigManager
    //#unanalyzed(void disconnect()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void disconnect()): Effects-of-calling:java.util.Map:values
    //#unanalyzed(void disconnect()): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void disconnect()): Effects-of-calling:com.dmdirc.interfaces.InviteListener:inviteExpired
    //#unanalyzed(void disconnect()): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(void disconnect()): Effects-of-calling:com.dmdirc.ServerState:ordinal
    //#unanalyzed(void disconnect()): Effects-of-calling:java.util.Timer:cancel
    //#unanalyzed(void disconnect()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void disconnect()): Effects-of-calling:com.dmdirc.util.RollingList:getList
    //#unanalyzed(void disconnect()): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void disconnect()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void disconnect()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void disconnect()): Effects-of-calling:com.dmdirc.ServerState:name
    //#unanalyzed(void disconnect()): Effects-of-calling:java.lang.Thread:currentThread
    //#unanalyzed(void disconnect()): Effects-of-calling:java.lang.Thread:getStackTrace
    //#unanalyzed(void disconnect()): Effects-of-calling:java.lang.StackTraceElement:toString
    //#unanalyzed(void disconnect()): Effects-of-calling:java.lang.Thread:getName
    //#unanalyzed(void disconnect()): Effects-of-calling:com.dmdirc.util.RollingList:add
    //#unanalyzed(void disconnect()): Effects-of-calling:java.util.List:contains
    //#unanalyzed(void disconnect()): Effects-of-calling:java.lang.Object:notifyAll
    //#unanalyzed(void disconnect()): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void disconnect()): Effects-of-calling:updateIcon
    //#unanalyzed(void disconnect()): Effects-of-calling:removeInvites
    //#unanalyzed(void disconnect()): Effects-of-calling:setIcon
    //#unanalyzed(void disconnect()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(void disconnect()): Effects-of-calling:clearChannels
    //#unanalyzed(void disconnect()): Effects-of-calling:java.lang.Thread:interrupt
    //#unanalyzed(void disconnect()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:disconnect
    //#unanalyzed(void disconnect()): Effects-of-calling:closeChannels
    //#unanalyzed(void disconnect()): Effects-of-calling:closeQueries
    //#unanalyzed(void disconnect()): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void disconnect()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getSSL
    //#unanalyzed(void disconnect()): Effects-of-calling:close
    //#unanalyzed(void disconnect()): Effects-of-calling:com.dmdirc.ui.interfaces.ChannelWindow:updateNames
    //#unanalyzed(void disconnect()): Effects-of-calling:getFrame
    //#unanalyzed(void disconnect()): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void disconnect()): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void disconnect()): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void disconnect()): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void disconnect()): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void disconnect()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:close
    }
    //#Server.java:352: end of method: void com.dmdirc.Server.disconnect()

    /**
     * Disconnects from the server.
     *
     * @param reason disconnect reason
     */
    public void disconnect(final String reason) {
        synchronized (myState) {
    //#Server.java:360: method: void com.dmdirc.Server.disconnect(String)
    //#input(void disconnect(String)): " ["._tainted
    //#input(void disconnect(String)): "->"._tainted
    //#input(void disconnect(String)): "Illegal server state transition&#10;&#10;"._tainted
    //#input(void disconnect(String)): DOMAIN_GENERAL
    //#input(void disconnect(String)): __Descendant_Table[com/dmdirc/Server]
    //#input(void disconnect(String)): __Descendant_Table[others]
    //#input(void disconnect(String)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect(String)): __Dispatch_Table.removeInvite(Lcom/dmdirc/Invite;)V
    //#input(void disconnect(String)): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1).length
    //#input(void disconnect(String)): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295]
    //#input(void disconnect(String)): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#7).transitions
    //#input(void disconnect(String)): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#9).transitions
    //#input(void disconnect(String)): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void disconnect(String)): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void disconnect(String)): com/dmdirc/Channel.__Dispatch_Table.close()V
    //#input(void disconnect(String)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect(String)): com/dmdirc/Channel.__Dispatch_Table.resetWindow()V
    //#input(void disconnect(String)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void disconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void disconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void disconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void disconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void disconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void disconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void disconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void disconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void disconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void disconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void disconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void disconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void disconnect(String)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void disconnect(String)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect(String)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect(String)): com/dmdirc/Invite.__Descendant_Table[com/dmdirc/Invite]
    //#input(void disconnect(String)): com/dmdirc/Invite.__Descendant_Table[others]
    //#input(void disconnect(String)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect(String)): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(void disconnect(String)): com/dmdirc/Query.__Descendant_Table[others]
    //#input(void disconnect(String)): com/dmdirc/Query.__Dispatch_Table.close()V
    //#input(void disconnect(String)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect(String)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect(String)): com/dmdirc/Server$4.$SwitchMap$com$dmdirc$ServerState
    //#input(void disconnect(String)): com/dmdirc/ServerState.CONNECTED
    //#input(void disconnect(String)): com/dmdirc/ServerState.DISCONNECTED
    //#input(void disconnect(String)): com/dmdirc/ServerState.DISCONNECTING
    //#input(void disconnect(String)): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void disconnect(String)): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void disconnect(String)): com/dmdirc/ServerStatus.__Dispatch_Table.addHistoryEntry(Lcom/dmdirc/ServerState;Lcom/dmdirc/ServerState;)V
    //#input(void disconnect(String)): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void disconnect(String)): com/dmdirc/ServerStatus.__Dispatch_Table.getTransitionHistory()Ljava/lang/String;
    //#input(void disconnect(String)): com/dmdirc/ServerStatus.__Dispatch_Table.transition(Lcom/dmdirc/ServerState;)V
    //#input(void disconnect(String)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect(String)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect(String)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect(String)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect(String)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnect(String)): reason
    //#input(void disconnect(String)): this
    //#input(void disconnect(String)): this.__Tag
    //#input(void disconnect(String)): this.changer
    //#input(void disconnect(String)): this.channels
    //#input(void disconnect(String)): this.config
    //#input(void disconnect(String)): this.invites
    //#input(void disconnect(String)): this.listeners
    //#input(void disconnect(String)): this.myState
    //#input(void disconnect(String)): this.myState.__Tag
    //#input(void disconnect(String)): this.myState.history
    //#input(void disconnect(String)): this.myState.state
    //#input(void disconnect(String)): this.myState.state.transitions
    //#input(void disconnect(String)): this.parser
    //#input(void disconnect(String)): this.parserThread
    //#input(void disconnect(String)): this.queries
    //#input(void disconnect(String)): this.reconnectTimer
    //#input(void disconnect(String)): this.serverInfo
    //#output(void disconnect(String)): this.icon
    //#output(void disconnect(String)): this.myState.state
    //#pre[3] (void disconnect(String)): this.myState.state != null
    //#pre[14] (void disconnect(String)): this.myState != null
    //#pre[16] (void disconnect(String)): this.myState.__Tag == com/dmdirc/ServerStatus
    //#pre[1] (void disconnect(String)): (soft) init'ed(com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295])
    //#pre[6] (void disconnect(String)): (soft) this.__Tag == com/dmdirc/Server
    //#pre[8] (void disconnect(String)): (soft) this.channels != null
    //#pre[9] (void disconnect(String)): (soft) this.config != null
    //#pre[10] (void disconnect(String)): (soft) this.invites != null
    //#pre[12] (void disconnect(String)): (soft) this.listeners != null
    //#pre[17] (void disconnect(String)): (soft) this.myState.history != null
    //#pre[18] (void disconnect(String)): (soft) this.myState.state.transitions != null
    //#pre[19] (void disconnect(String)): (soft) init'ed(this.parser)
    //#pre[20] (void disconnect(String)): (soft) this.parserThread != null
    //#pre[22] (void disconnect(String)): (soft) this.reconnectTimer != null
    //#pre[23] (void disconnect(String)): (soft) this.serverInfo != null
    //#presumption(void disconnect(String)): com.dmdirc.ServerState:ordinal(...)@361 in {0..6}
    //#post(void disconnect(String)): this.icon == One-of{old this.icon, &"secure-server", &"server", &"server-disconnected"}
    //#post(void disconnect(String)): this.myState.state == One-of{old this.myState.state, &com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#7), &com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#9)}
    //#post(void disconnect(String)): this.myState.state != null
    //#unanalyzed(void disconnect(String)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void disconnect(String)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void disconnect(String)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void disconnect(String)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void disconnect(String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void disconnect(String)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void disconnect(String)): Effects-of-calling:java.util.Map:values
    //#unanalyzed(void disconnect(String)): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void disconnect(String)): Effects-of-calling:com.dmdirc.interfaces.InviteListener:inviteExpired
    //#unanalyzed(void disconnect(String)): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(void disconnect(String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void disconnect(String)): Effects-of-calling:com.dmdirc.util.RollingList:getList
    //#unanalyzed(void disconnect(String)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void disconnect(String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void disconnect(String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void disconnect(String)): Effects-of-calling:com.dmdirc.ServerState:name
    //#unanalyzed(void disconnect(String)): Effects-of-calling:java.lang.Thread:currentThread
    //#unanalyzed(void disconnect(String)): Effects-of-calling:java.lang.Thread:getStackTrace
    //#unanalyzed(void disconnect(String)): Effects-of-calling:java.lang.StackTraceElement:toString
    //#unanalyzed(void disconnect(String)): Effects-of-calling:java.lang.Thread:getName
    //#unanalyzed(void disconnect(String)): Effects-of-calling:com.dmdirc.util.RollingList:add
    //#unanalyzed(void disconnect(String)): Effects-of-calling:java.util.List:contains
    //#unanalyzed(void disconnect(String)): Effects-of-calling:java.lang.Object:notifyAll
    //#unanalyzed(void disconnect(String)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void disconnect(String)): Effects-of-calling:setIcon
    //#unanalyzed(void disconnect(String)): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void disconnect(String)): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getSSL
    //#unanalyzed(void disconnect(String)): Effects-of-calling:close
    //#unanalyzed(void disconnect(String)): Effects-of-calling:com.dmdirc.ui.interfaces.ChannelWindow:updateNames
    //#unanalyzed(void disconnect(String)): Effects-of-calling:getFrame
    //#unanalyzed(void disconnect(String)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void disconnect(String)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void disconnect(String)): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void disconnect(String)): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void disconnect(String)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void disconnect(String)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:close
    //#test_vector(void disconnect(String)): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295]: {1}, {2, 5..7}, {-2_147_483_648..0, 3,4, 8..4_294_967_295}
    //#test_vector(void disconnect(String)): this.parser: Inverse{null}, Addr_Set{null}
    //#test_vector(void disconnect(String)): com.dmdirc.config.ConfigManager:getOptionBool(...)@388: {0}, {1}
            switch (myState.getState()) {
    //#Server.java:361: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.ServerState:ordinal()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void disconnect(String)
    //#    unanalyzed callee: int com.dmdirc.ServerState:ordinal()
            case CLOSING:
            case DISCONNECTING:
            case DISCONNECTED:
            case TRANSIENTLY_DISCONNECTED:
                return;
            case RECONNECT_WAIT:
                reconnectTimer.cancel();
                break;
            default:
                break;
            }

            clearChannels();

            if (parser == null) {
                myState.transition(ServerState.DISCONNECTED);
            } else {
                myState.transition(ServerState.DISCONNECTING);

                removeInvites();
                updateIcon();

                parserThread.interrupt();
                parser.disconnect(reason);
    //#Server.java:385: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:disconnect(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void disconnect(String)
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:disconnect(String)
            }

            if (getConfigManager().getOptionBool(DOMAIN_GENERAL,
    //#Server.java:388: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void disconnect(String)
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
                    "closechannelsonquit")) {
                closeChannels();
            }

            if (getConfigManager().getOptionBool(DOMAIN_GENERAL,
    //#Server.java:393: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void disconnect(String)
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
                    "closequeriesonquit")) {
                closeQueries();
            }
        }
    }
    //#Server.java:398: end of method: void com.dmdirc.Server.disconnect(String)

    /**
     * Schedules a reconnect attempt to be performed after a user-defiend delay.
     */
    @Precondition("The server state is transiently disconnected")
    private void doDelayedReconnect() {
        synchronized (myState) {
    //#Server.java:405: method: void com.dmdirc.Server.doDelayedReconnect()
    //#input(void doDelayedReconnect()): " ["._tainted
    //#input(void doDelayedReconnect()): " doesn't exist"._tainted
    //#input(void doDelayedReconnect()): "->"._tainted
    //#input(void doDelayedReconnect()): ": "._tainted
    //#input(void doDelayedReconnect()): ": channel "._tainted
    //#input(void doDelayedReconnect()): ":"._tainted
    //#input(void doDelayedReconnect()): "Illegal server state transition&#10;&#10;"._tainted
    //#input(void doDelayedReconnect()): "Invalid notification target for type "._tainted
    //#input(void doDelayedReconnect()): "\E"._tainted
    //#input(void doDelayedReconnect()): "\Q"._tainted
    //#input(void doDelayedReconnect()): "connectRetry"._tainted
    //#input(void doDelayedReconnect()): "doDelayedReconnect when not transiently disconnected&#10;&#10;State: "._tainted
    //#input(void doDelayedReconnect()): "self"._tainted
    //#input(void doDelayedReconnect()): DOMAIN_GENERAL
    //#input(void doDelayedReconnect()): __Descendant_Table[com/dmdirc/Server]
    //#input(void doDelayedReconnect()): __Descendant_Table[others]
    //#input(void doDelayedReconnect()): __Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): __Dispatch_Table.addLineToActive(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): __Dispatch_Table.addLineToAll(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): __Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): __Dispatch_Table.getChannel(Ljava/lang/String;)Lcom/dmdirc/Channel;
    //#input(void doDelayedReconnect()): __Dispatch_Table.getChildren()Ljava/util/List;
    //#input(void doDelayedReconnect()): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void doDelayedReconnect()): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void doDelayedReconnect()): __Dispatch_Table.getName()Ljava/lang/String;
    //#input(void doDelayedReconnect()): __Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void doDelayedReconnect()): __Dispatch_Table.handleNotification(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): __Dispatch_Table.hasChannel(Ljava/lang/String;)Z
    //#input(void doDelayedReconnect()): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#11).transitions
    //#input(void doDelayedReconnect()): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void doDelayedReconnect()): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void doDelayedReconnect()): com/dmdirc/Channel.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): com/dmdirc/Channel.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void doDelayedReconnect()): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void doDelayedReconnect()): com/dmdirc/Channel.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void doDelayedReconnect()): com/dmdirc/CustomWindow.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void doDelayedReconnect()): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void doDelayedReconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void doDelayedReconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void doDelayedReconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void doDelayedReconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void doDelayedReconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void doDelayedReconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void doDelayedReconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void doDelayedReconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void doDelayedReconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void doDelayedReconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void doDelayedReconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void doDelayedReconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void doDelayedReconnect()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void doDelayedReconnect()): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void doDelayedReconnect()): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void doDelayedReconnect()): com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#input(void doDelayedReconnect()): com/dmdirc/GlobalWindow.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): com/dmdirc/GlobalWindow.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void doDelayedReconnect()): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void doDelayedReconnect()): com/dmdirc/GlobalWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void doDelayedReconnect()): com/dmdirc/Main.controller
    //#input(void doDelayedReconnect()): com/dmdirc/MessageTarget.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): com/dmdirc/MessageTarget.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void doDelayedReconnect()): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void doDelayedReconnect()): com/dmdirc/MessageTarget.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void doDelayedReconnect()): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(void doDelayedReconnect()): com/dmdirc/Query.__Descendant_Table[others]
    //#input(void doDelayedReconnect()): com/dmdirc/Query.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): com/dmdirc/Query.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void doDelayedReconnect()): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void doDelayedReconnect()): com/dmdirc/Query.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void doDelayedReconnect()): com/dmdirc/Raw.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): com/dmdirc/Raw.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void doDelayedReconnect()): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void doDelayedReconnect()): com/dmdirc/Raw.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void doDelayedReconnect()): com/dmdirc/ServerState.CONNECTED
    //#input(void doDelayedReconnect()): com/dmdirc/ServerState.RECONNECT_WAIT
    //#input(void doDelayedReconnect()): com/dmdirc/ServerState.TRANSIENTLY_DISCONNECTED
    //#input(void doDelayedReconnect()): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void doDelayedReconnect()): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void doDelayedReconnect()): com/dmdirc/ServerStatus.__Dispatch_Table.addHistoryEntry(Lcom/dmdirc/ServerState;Lcom/dmdirc/ServerState;)V
    //#input(void doDelayedReconnect()): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void doDelayedReconnect()): com/dmdirc/ServerStatus.__Dispatch_Table.getTransitionHistory()Ljava/lang/String;
    //#input(void doDelayedReconnect()): com/dmdirc/ServerStatus.__Dispatch_Table.transition(Lcom/dmdirc/ServerState;)V
    //#input(void doDelayedReconnect()): com/dmdirc/WritableFrameContainer.NOTIFICATION_CHANNEL
    //#input(void doDelayedReconnect()): com/dmdirc/WritableFrameContainer.NOTIFICATION_SERVER
    //#input(void doDelayedReconnect()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void doDelayedReconnect()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void doDelayedReconnect()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void doDelayedReconnect()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void doDelayedReconnect()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void doDelayedReconnect()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void doDelayedReconnect()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void doDelayedReconnect()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void doDelayedReconnect()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void doDelayedReconnect()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void doDelayedReconnect()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void doDelayedReconnect()): com/dmdirc/WritableFrameContainer.__Descendant_Table[others]
    //#input(void doDelayedReconnect()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void doDelayedReconnect()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void doDelayedReconnect()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void doDelayedReconnect()): com/dmdirc/WritableFrameContainer.com.dmdirc.logger.ErrorLevel.LOW
    //#input(void doDelayedReconnect()): com/dmdirc/WritableFrameContainer.com.dmdirc.logger.ErrorLevel.MEDIUM
    //#input(void doDelayedReconnect()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void doDelayedReconnect()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void doDelayedReconnect()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void doDelayedReconnect()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void doDelayedReconnect()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void doDelayedReconnect()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void doDelayedReconnect()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void doDelayedReconnect()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void doDelayedReconnect()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void doDelayedReconnect()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void doDelayedReconnect()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void doDelayedReconnect()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void doDelayedReconnect()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void doDelayedReconnect()): this
    //#input(void doDelayedReconnect()): this.__Tag
    //#input(void doDelayedReconnect()): this.changer
    //#input(void doDelayedReconnect()): this.config
    //#input(void doDelayedReconnect()): this.listeners
    //#input(void doDelayedReconnect()): this.myState
    //#input(void doDelayedReconnect()): this.myState.__Tag
    //#input(void doDelayedReconnect()): this.myState._tainted
    //#input(void doDelayedReconnect()): this.myState.history
    //#input(void doDelayedReconnect()): this.myState.state
    //#input(void doDelayedReconnect()): this.myState.state.transitions
    //#input(void doDelayedReconnect()): this.serverInfo
    //#output(void doDelayedReconnect()): new Timer(doDelayedReconnect#4) num objects
    //#output(void doDelayedReconnect()): this.icon
    //#output(void doDelayedReconnect()): this.myState.state
    //#output(void doDelayedReconnect()): this.reconnectTimer
    //#new obj(void doDelayedReconnect()): new Timer(doDelayedReconnect#4)
    //#pre[2] (void doDelayedReconnect()): this.myState.state != null
    //#pre[6] (void doDelayedReconnect()): this.config != null
    //#pre[7] (void doDelayedReconnect()): this.listeners != null
    //#pre[9] (void doDelayedReconnect()): this.myState != null
    //#pre[11] (void doDelayedReconnect()): this.myState.__Tag == com/dmdirc/ServerStatus
    //#pre[13] (void doDelayedReconnect()): this.myState.history != null
    //#pre[14] (void doDelayedReconnect()): this.myState.state.transitions != null
    //#pre[15] (void doDelayedReconnect()): this.serverInfo != null
    //#pre[1] (void doDelayedReconnect()): (soft) com/dmdirc/Main.controller != null
    //#pre[4] (void doDelayedReconnect()): (soft) this.__Tag == com/dmdirc/Server
    //#post(void doDelayedReconnect()): this.icon == &"server-disconnected"
    //#post(void doDelayedReconnect()): this.myState.state == &com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#11)
    //#post(void doDelayedReconnect()): this.reconnectTimer == &new Timer(doDelayedReconnect#4)
    //#post(void doDelayedReconnect()): new Timer(doDelayedReconnect#4) num objects == 1
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:getConfigManager
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.util.Map:values
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.util.List:addAll
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.parser.irc.IRCStringConverter:toLowerCase
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getHost
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:getUI
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:getFrame
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.util.RollingList:getList
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.ServerState:name
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.lang.Thread:currentThread
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.lang.Thread:getStackTrace
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.lang.StackTraceElement:toString
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.lang.Thread:getName
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.util.RollingList:add
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.util.List:contains
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.lang.Object:notifyAll
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:addLine
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:hasChannel
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:getChannel
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:setIcon
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.FrameContainer
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.lang.String:startsWith
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.lang.String:indexOf
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.config.ConfigManager:hasOptionString
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:despatchNotification
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:getServer
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.Server:addLine
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:addLineToAll
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:addLineToActive
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.ui.WindowManager:findCustomWindow
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:getConfigManager
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getWindow
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:setTitle
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.ui.WindowManager:addWindow
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:open
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:addLine
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.lang.String:format
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:getChildren
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.commandparser.parsers.CommandParser:getCommandTime
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.logger.Logger:userError
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:addLine
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getSSL
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:isVisible
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:java.util.TimerTask
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void doDelayedReconnect()): Effects-of-calling:com.dmdirc.util.ListenerList
            if (myState.getState() != ServerState.TRANSIENTLY_DISCONNECTED) {
                throw new IllegalStateException("doDelayedReconnect when not "
    //#Server.java:407: ?conditional throw
    //#    getState(...)@406 == com/dmdirc/ServerState.TRANSIENTLY_DISCONNECTED
    //#    severity: LOW
    //#    class: com.dmdirc.Server
    //#    method: void doDelayedReconnect()
    //#    basic block: bb_2
    //#    assertion: getState(...)@406 == com/dmdirc/ServerState.TRANSIENTLY_DISCONNECTED
    //#    VN: &com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#5) == this.myState.state
    //#    Expected: {1}
    //#    Bad: {0}
    //#    Attribs:  Int  Exp in +/-1000  Exp singleton  Bad singleton  Bad overlaps +/-1000  Bad < Exp
                        + "transiently disconnected\n\nState: " + myState);
            }

            final int delay = Math.max(1000,
    //#Server.java:411: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.config.ConfigManager:getOptionInt(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void doDelayedReconnect()
    //#    unanalyzed callee: int com.dmdirc.config.ConfigManager:getOptionInt(String, String)
                    getConfigManager().getOptionInt(DOMAIN_GENERAL, "reconnectdelay"));

            handleNotification("connectRetry", getName(), delay / 1000);
    //#Server.java:414: ?precondition failure
    //#    com/dmdirc/WritableFrameContainer.handleNotification: (soft) init'ed(args[0..4_294_967_295])
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.Server
    //#    method: void doDelayedReconnect()
    //#    basic block: bb_4
    //#    assertion: (soft) init'ed(handleNotification.Param_2[0..4_294_967_295])
    //#    callee: void com/dmdirc/WritableFrameContainer.handleNotification(String, Object[])
    //#    callee assertion: (soft) init'ed(args[0..4_294_967_295])
    //#    callee file: WritableFrameContainer.java
    //#    callee precondition index: [3]
    //#    callee srcpos: 202
    //#    VN: handleNotification.Param_2[0..4_294_967_295]
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Soft  Bad only invalid  Uncertain

            reconnectTimer = new Timer("Server Reconnect Timer");
            reconnectTimer.schedule(new TimerTask() {
    //#Server.java:417: method: void com.dmdirc.Server$2.com.dmdirc.Server$2(Server)
    //#input(void com.dmdirc.Server$2(Server)): Param_1
    //#input(void com.dmdirc.Server$2(Server)): this
    //#output(void com.dmdirc.Server$2(Server)): this.this$0
    //#post(void com.dmdirc.Server$2(Server)): this.this$0 == Param_1
    //#post(void com.dmdirc.Server$2(Server)): init'ed(this.this$0)
    //#Server.java:417: end of method: void com.dmdirc.Server$2.com.dmdirc.Server$2(Server)
                @Override
                public void run() {
                    synchronized (myState) {
    //#Server.java:420: method: void com.dmdirc.Server$2.run()
    //#input(void run()): " ["._tainted
    //#input(void run()): "->"._tainted
    //#input(void run()): "Illegal server state transition&#10;&#10;"._tainted
    //#input(void run()): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1).length
    //#input(void run()): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295]
    //#input(void run()): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#5).transitions
    //#input(void run()): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#7).transitions
    //#input(void run()): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#9).transitions
    //#input(void run()): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void run()): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/Channel.__Dispatch_Table.close()V
    //#input(void run()): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/Channel.__Dispatch_Table.resetWindow()V
    //#input(void run()): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/Invite.__Descendant_Table[com/dmdirc/Invite]
    //#input(void run()): com/dmdirc/Invite.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(void run()): com/dmdirc/Query.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/Query.__Dispatch_Table.close()V
    //#input(void run()): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/Server$4.$SwitchMap$com$dmdirc$ServerState
    //#input(void run()): com/dmdirc/Server.DOMAIN_GENERAL
    //#input(void run()): com/dmdirc/Server.__Descendant_Table[com/dmdirc/Server]
    //#input(void run()): com/dmdirc/Server.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/Server.__Dispatch_Table.connect(Ljava/lang/String;ILjava/lang/String;ZLcom/dmdirc/config/Identity;)V
    //#input(void run()): com/dmdirc/Server.__Dispatch_Table.disconnect(Ljava/lang/String;)V
    //#input(void run()): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/Server.__Dispatch_Table.reconnect()V
    //#input(void run()): com/dmdirc/Server.__Dispatch_Table.reconnect(Ljava/lang/String;)V
    //#input(void run()): com/dmdirc/Server.__Dispatch_Table.removeInvite(Lcom/dmdirc/Invite;)V
    //#input(void run()): com/dmdirc/ServerState.CLOSING
    //#input(void run()): com/dmdirc/ServerState.CONNECTED
    //#input(void run()): com/dmdirc/ServerState.DISCONNECTED
    //#input(void run()): com/dmdirc/ServerState.DISCONNECTING
    //#input(void run()): com/dmdirc/ServerState.RECONNECT_WAIT
    //#input(void run()): com/dmdirc/ServerState.TRANSIENTLY_DISCONNECTED
    //#input(void run()): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void run()): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/ServerStatus.__Dispatch_Table.addHistoryEntry(Lcom/dmdirc/ServerState;Lcom/dmdirc/ServerState;)V
    //#input(void run()): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void run()): com/dmdirc/ServerStatus.__Dispatch_Table.getTransitionHistory()Ljava/lang/String;
    //#input(void run()): com/dmdirc/ServerStatus.__Dispatch_Table.transition(Lcom/dmdirc/ServerState;)V
    //#input(void run()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): this
    //#input(void run()): this.this$0
    //#input(void run()): this.this$0.__Tag
    //#input(void run()): this.this$0.changer
    //#input(void run()): this.this$0.channels
    //#input(void run()): this.this$0.config
    //#input(void run()): this.this$0.invites
    //#input(void run()): this.this$0.listeners
    //#input(void run()): this.this$0.myState
    //#input(void run()): this.this$0.myState.__Tag
    //#input(void run()): this.this$0.myState.history
    //#input(void run()): this.this$0.myState.state
    //#input(void run()): this.this$0.myState.state.transitions
    //#input(void run()): this.this$0.parser
    //#input(void run()): this.this$0.parserThread
    //#input(void run()): this.this$0.profile
    //#input(void run()): this.this$0.queries
    //#input(void run()): this.this$0.reconnectTimer
    //#input(void run()): this.this$0.serverInfo
    //#output(void run()): this.this$0.awayMessage
    //#output(void run()): this.this$0.icon
    //#output(void run()): this.this$0.myState.state
    //#output(void run()): this.this$0.parser
    //#output(void run()): this.this$0.parserThread
    //#output(void run()): this.this$0.profile
    //#output(void run()): this.this$0.serverInfo
    //#pre[4] (void run()): init'ed(this.myState.state)
    //#pre[19] (void run()): this.myState != null
    //#pre[21] (void run()): this.myState.__Tag == com/dmdirc/ServerStatus
    //#pre[1] (void run()): (soft) init'ed(com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295])
    //#pre[5] (void run()): (soft) init'ed(this.parser)
    //#pre[6] (void run()): (soft) this.parserThread != null
    //#pre[7] (void run()): (soft) init'ed(this.profile)
    //#pre[8] (void run()): (soft) this.serverInfo != null
    //#pre[10] (void run()): (soft) this.this$0 != null
    //#pre[11] (void run()): (soft) this.__Tag == com/dmdirc/Server
    //#pre[13] (void run()): (soft) this.channels != null
    //#pre[14] (void run()): (soft) this.config != null
    //#pre[15] (void run()): (soft) this.invites != null
    //#pre[17] (void run()): (soft) this.listeners != null
    //#pre[22] (void run()): (soft) this.myState.history != null
    //#pre[23] (void run()): (soft) this.myState.state.transitions != null
    //#pre[25] (void run()): (soft) this.reconnectTimer != null
    //#presumption(void run()): java.util.Arrays:asList(...)@89 != null
    //#post(void run()): this.awayMessage == old this.awayMessage
    //#post(void run()): this.icon == One-of{old this.icon, &"server-disconnected"}
    //#post(void run()): init'ed(this.myState.state)
    //#post(void run()): this.parser == old this.parser
    //#post(void run()): init'ed(this.parser)
    //#post(void run()): this.parserThread == old this.parserThread
    //#post(void run()): this.this$0.parserThread != null
    //#post(void run()): this.profile == old this.profile
    //#post(void run()): init'ed(this.profile)
    //#post(void run()): this.serverInfo == old this.serverInfo
    //#post(void run()): this.this$0.serverInfo != null
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.RollingList:getList
    //#unanalyzed(void run()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void run()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void run()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ServerState:name
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Thread:currentThread
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Thread:getStackTrace
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StackTraceElement:toString
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Thread:getName
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.RollingList:add
    //#unanalyzed(void run()): Effects-of-calling:java.util.List:contains
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Object:notifyAll
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void run()): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void run()): Effects-of-calling:getConfigManager
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void run()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void run()): Effects-of-calling:java.util.Map:values
    //#unanalyzed(void run()): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.interfaces.InviteListener:inviteExpired
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getHost
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setSSL
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.ConfigManager:hasOptionString
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setUseSocks
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setProxyHost
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setProxyUser
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setProxyPass
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionInt
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setProxyPort
    //#unanalyzed(void run()): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void run()): Effects-of-calling:getType
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void run()): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void run()): Effects-of-calling:trigger
    //#unanalyzed(void run()): Effects-of-calling:getArity
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(void run()): Effects-of-calling:reconnect
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ServerState:ordinal
    //#unanalyzed(void run()): Effects-of-calling:java.util.Timer:cancel
    //#unanalyzed(void run()): Effects-of-calling:disconnect
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Object:wait
    //#unanalyzed(void run()): Effects-of-calling:getState
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.ConfigManager:migrate
    //#unanalyzed(void run()): Effects-of-calling:updateIcon
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void run()): Effects-of-calling:addLine
    //#unanalyzed(void run()): Effects-of-calling:buildParser
    //#unanalyzed(void run()): Effects-of-calling:doCallbacks
    //#unanalyzed(void run()): Effects-of-calling:removeInvites
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.interfaces.ServerWindow:setAwayIndicator
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Thread
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Thread:start
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#unanalyzed(void run()): Effects-of-calling:setIcon
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(void run()): Effects-of-calling:clearChannels
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Thread:interrupt
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:disconnect
    //#unanalyzed(void run()): Effects-of-calling:closeChannels
    //#unanalyzed(void run()): Effects-of-calling:closeQueries
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getPort
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getPassword
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getSSL
    //#unanalyzed(void run()): Effects-of-calling:connect
    //#unanalyzed(void run()): Effects-of-calling:close
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.interfaces.ChannelWindow:updateNames
    //#unanalyzed(void run()): Effects-of-calling:getFrame
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:close
                        if (myState.getState() == ServerState.RECONNECT_WAIT) {
                            myState.transition(ServerState.TRANSIENTLY_DISCONNECTED);
                            reconnect();
                        }
                    }
                }
    //#Server.java:426: end of method: void com.dmdirc.Server$2.run()
            }, delay);

            myState.transition(ServerState.RECONNECT_WAIT);
            updateIcon();
        }
    }
    //#Server.java:432: end of method: void com.dmdirc.Server.doDelayedReconnect()

    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Child windows">

    /**
     * Determines whether the server knows of the specified channel.
     *
     * @param channel The channel to be checked
     * @return True iff the channel is known, false otherwise
     */
    public boolean hasChannel(final String channel) {
        return channels.containsKey(converter.toLowerCase(channel));
    //#Server.java:445: method: bool com.dmdirc.Server.hasChannel(String)
    //#Server.java:445: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCStringConverter:toLowerCase(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: bool hasChannel(String)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCStringConverter:toLowerCase(String)
    //#input(bool hasChannel(String)): channel
    //#input(bool hasChannel(String)): this
    //#input(bool hasChannel(String)): this.channels
    //#input(bool hasChannel(String)): this.converter
    //#output(bool hasChannel(String)): return_value
    //#pre[3] (bool hasChannel(String)): this.channels != null
    //#pre[4] (bool hasChannel(String)): this.converter != null
    //#post(bool hasChannel(String)): init'ed(return_value)
    //#Server.java:445: end of method: bool com.dmdirc.Server.hasChannel(String)
    }

    /**
     * Retrieves the specified channel belonging to this server.
     *
     * @param channel The channel to be retrieved
     * @return The appropriate channel object
     */
    public Channel getChannel(final String channel) {
        return channels.get(converter.toLowerCase(channel));
    //#Server.java:455: method: Channel com.dmdirc.Server.getChannel(String)
    //#Server.java:455: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCStringConverter:toLowerCase(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: Channel getChannel(String)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCStringConverter:toLowerCase(String)
    //#input(Channel getChannel(String)): channel
    //#input(Channel getChannel(String)): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(Channel getChannel(String)): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(Channel getChannel(String)): this
    //#input(Channel getChannel(String)): this.channels
    //#input(Channel getChannel(String)): this.converter
    //#output(Channel getChannel(String)): return_value
    //#pre[3] (Channel getChannel(String)): this.channels != null
    //#pre[4] (Channel getChannel(String)): this.converter != null
    //#presumption(Channel getChannel(String)): java.util.Map:get(...).__Tag@455 == com/dmdirc/Channel
    //#post(Channel getChannel(String)): init'ed(return_value)
    //#Server.java:455: end of method: Channel com.dmdirc.Server.getChannel(String)
    }

    /**
     * Retrieves a list of channel names belonging to this server.
     *
     * @return list of channel names belonging to this server
     */
    public List<String> getChannels() {
        final ArrayList<String> res = new ArrayList<String>();
    //#Server.java:464: method: List com.dmdirc.Server.getChannels()
    //#input(List getChannels()): this
    //#input(List getChannels()): this.channels
    //#output(List getChannels()): new ArrayList(getChannels#1) num objects
    //#output(List getChannels()): return_value
    //#new obj(List getChannels()): new ArrayList(getChannels#1)
    //#pre[2] (List getChannels()): this.channels != null
    //#presumption(List getChannels()): java.util.Map:keySet(...)@466 != null
    //#post(List getChannels()): return_value == &new ArrayList(getChannels#1)
    //#post(List getChannels()): new ArrayList(getChannels#1) num objects == 1
    //#test_vector(List getChannels()): java.util.Iterator:hasNext(...)@466: {0}, {1}

        for (String channel : channels.keySet()) {
            res.add(channel);
        }

        return res;
    //#Server.java:470: end of method: List com.dmdirc.Server.getChannels()
    }

    /**
     * Determines whether the server knows of the specified query.
     *
     * @param host The host of the query to look for
     * @return True iff the query is known, false otherwise
     */
    public boolean hasQuery(final String host) {
        final String nick = ClientInfo.parseHost(host);
    //#Server.java:480: method: bool com.dmdirc.Server.hasQuery(String)
    //#Server.java:480: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ClientInfo:parseHost(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: bool hasQuery(String)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ClientInfo:parseHost(String)
    //#input(bool hasQuery(String)): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(bool hasQuery(String)): com/dmdirc/Query.__Descendant_Table[others]
    //#input(bool hasQuery(String)): host
    //#input(bool hasQuery(String)): this
    //#input(bool hasQuery(String)): this.converter
    //#input(bool hasQuery(String)): this.queries
    //#output(bool hasQuery(String)): return_value
    //#pre[4] (bool hasQuery(String)): this.queries != null
    //#pre[3] (bool hasQuery(String)): (soft) this.converter != null
    //#presumption(bool hasQuery(String)): java.util.Iterator:next(...).__Tag@482 == com/dmdirc/Query
    //#presumption(bool hasQuery(String)): java.util.Iterator:next(...)@482 != null
    //#post(bool hasQuery(String)): init'ed(return_value)
    //#test_vector(bool hasQuery(String)): com.dmdirc.parser.irc.IRCStringConverter:equalsIgnoreCase(...)@483: {0}, {1}
    //#test_vector(bool hasQuery(String)): java.util.Iterator:hasNext(...)@482: {0}, {1}

        for (Query query : queries) {
            if (converter.equalsIgnoreCase(ClientInfo.parseHost(query.getHost()), nick)) {
    //#Server.java:483: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ClientInfo:parseHost(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: bool hasQuery(String)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ClientInfo:parseHost(String)
    //#Server.java:483: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.parser.irc.IRCStringConverter:equalsIgnoreCase(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: bool hasQuery(String)
    //#    unanalyzed callee: bool com.dmdirc.parser.irc.IRCStringConverter:equalsIgnoreCase(String, String)
                return true;
            }
        }

        return false;
    //#Server.java:488: end of method: bool com.dmdirc.Server.hasQuery(String)
    }

    /**
     * Retrieves the specified query belonging to this server.
     *
     * @param host The host of the query to look for
     * @return The appropriate query object
     */
    public Query getQuery(final String host) {
        final String nick = ClientInfo.parseHost(host);
    //#Server.java:498: method: Query com.dmdirc.Server.getQuery(String)
    //#Server.java:498: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ClientInfo:parseHost(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: Query getQuery(String)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ClientInfo:parseHost(String)
    //#input(Query getQuery(String)): "No such query: "._tainted
    //#input(Query getQuery(String)): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(Query getQuery(String)): com/dmdirc/Query.__Descendant_Table[others]
    //#input(Query getQuery(String)): host
    //#input(Query getQuery(String)): host._tainted
    //#input(Query getQuery(String)): this
    //#input(Query getQuery(String)): this.converter
    //#input(Query getQuery(String)): this.queries
    //#output(Query getQuery(String)): return_value
    //#pre[4] (Query getQuery(String)): this.converter != null
    //#pre[5] (Query getQuery(String)): this.queries != null
    //#presumption(Query getQuery(String)): java.util.Iterator:hasNext(...)@500 == 1
    //#presumption(Query getQuery(String)): java.util.Iterator:next(...).__Tag@500 == com/dmdirc/Query
    //#presumption(Query getQuery(String)): java.util.Iterator:next(...)@500 != null
    //#post(Query getQuery(String)): return_value != null
    //#test_vector(Query getQuery(String)): com.dmdirc.parser.irc.IRCStringConverter:equalsIgnoreCase(...)@501: {0}, {1}

        for (Query query : queries) {
            if (converter.equalsIgnoreCase(ClientInfo.parseHost(query.getHost()), nick)) {
    //#Server.java:501: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ClientInfo:parseHost(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: Query getQuery(String)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ClientInfo:parseHost(String)
    //#Server.java:501: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.parser.irc.IRCStringConverter:equalsIgnoreCase(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: Query getQuery(String)
    //#    unanalyzed callee: bool com.dmdirc.parser.irc.IRCStringConverter:equalsIgnoreCase(String, String)
                return query;
            }
        }

        throw new IllegalArgumentException("No such query: " + host);
    //#Server.java:506: end of method: Query com.dmdirc.Server.getQuery(String)
    }

    /**
     * Retrieves a list of queries belonging to this server.
     *
     * @return list of queries belonging to this server
     */
    public List<Query> getQueries() {
        return new ArrayList<Query>(queries);
    //#Server.java:515: method: List com.dmdirc.Server.getQueries()
    //#input(List getQueries()): this
    //#input(List getQueries()): this.queries
    //#output(List getQueries()): new ArrayList(getQueries#1) num objects
    //#output(List getQueries()): return_value
    //#new obj(List getQueries()): new ArrayList(getQueries#1)
    //#post(List getQueries()): return_value == &new ArrayList(getQueries#1)
    //#post(List getQueries()): new ArrayList(getQueries#1) num objects == 1
    //#Server.java:515: end of method: List com.dmdirc.Server.getQueries()
    }

    /**
     * Adds a raw window to this server.
     */
    public void addRaw() {
        if (raw == null) {
    //#Server.java:522: method: void com.dmdirc.Server.addRaw()
    //#input(void addRaw()): __Descendant_Table[com/dmdirc/Server]
    //#input(void addRaw()): __Descendant_Table[others]
    //#input(void addRaw()): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void addRaw()): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addRaw()): __Dispatch_Table.getParser()Lcom/dmdirc/parser/irc/IRCParser;
    //#input(void addRaw()): __Dispatch_Table.getTabCompleter()Lcom/dmdirc/ui/input/TabCompleter;
    //#input(void addRaw()): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addRaw()): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addRaw()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void addRaw()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void addRaw()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void addRaw()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void addRaw()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void addRaw()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void addRaw()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void addRaw()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void addRaw()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void addRaw()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void addRaw()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void addRaw()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void addRaw()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void addRaw()): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void addRaw()): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addRaw()): com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#input(void addRaw()): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addRaw()): com/dmdirc/Main.controller
    //#input(void addRaw()): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addRaw()): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addRaw()): com/dmdirc/Raw.__Descendant_Table[com/dmdirc/Raw]
    //#input(void addRaw()): com/dmdirc/Raw.__Descendant_Table[others]
    //#input(void addRaw()): com/dmdirc/Raw.__Dispatch_Table.activateFrame()V
    //#input(void addRaw()): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addRaw()): com/dmdirc/Raw.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(void addRaw()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addRaw()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addRaw()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addRaw()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addRaw()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addRaw()): this
    //#input(void addRaw()): this...__Tag
    //#input(void addRaw()): this.__Tag
    //#input(void addRaw()): this.parser
    //#input(void addRaw()): this.raw
    //#input(void addRaw()): this.raw.__Tag
    //#input(void addRaw()): this.tabCompleter
    //#input(void addRaw()): this.window
    //#output(void addRaw()): new FrameContainer$IconChanger(FrameContainer#2) num objects
    //#output(void addRaw()): new FrameContainer$IconChanger(FrameContainer#2).__Tag
    //#output(void addRaw()): new FrameContainer$IconChanger(FrameContainer#2).this$0
    //#output(void addRaw()): new ListenerList(FrameContainer#1) num objects
    //#output(void addRaw()): new ListenerList(FrameContainer#1).__Lock
    //#output(void addRaw()): new Raw(addRaw#1) num objects
    //#output(void addRaw()): new Raw(addRaw#1).__Tag
    //#output(void addRaw()): new Raw(addRaw#1).changer
    //#output(void addRaw()): new Raw(addRaw#1).config
    //#output(void addRaw()): new Raw(addRaw#1).icon
    //#output(void addRaw()): new Raw(addRaw#1).listeners
    //#output(void addRaw()): new Raw(addRaw#1).notification
    //#output(void addRaw()): new Raw(addRaw#1).server
    //#output(void addRaw()): new Raw(addRaw#1).window
    //#output(void addRaw()): this.raw
    //#new obj(void addRaw()): new FrameContainer$IconChanger(FrameContainer#2)
    //#new obj(void addRaw()): new ListenerList(FrameContainer#1)
    //#new obj(void addRaw()): new Raw(addRaw#1)
    //#pre[3] (void addRaw()): init'ed(this.raw)
    //#pre[2] (void addRaw()): (soft) com/dmdirc/Main.controller != null
    //#pre[8] (void addRaw()): (soft) this.__Tag == com/dmdirc/Server
    //#pre[9] (void addRaw()): (soft) init'ed(this.parser)
    //#pre[10] (void addRaw()): (soft) this.raw.__Tag == com/dmdirc/Raw
    //#pre[13] (void addRaw()): (soft) this.window != null
    //#post(void addRaw()): this.raw == One-of{&new Raw(addRaw#1), old this.raw}
    //#post(void addRaw()): this.raw != null
    //#post(void addRaw()): new FrameContainer$IconChanger(FrameContainer#2) num objects <= 1
    //#post(void addRaw()): new FrameContainer$IconChanger(FrameContainer#2).__Tag == com/dmdirc/FrameContainer$IconChanger
    //#post(void addRaw()): new FrameContainer$IconChanger(FrameContainer#2).this$0 == &new Raw(addRaw#1)
    //#post(void addRaw()): new ListenerList(FrameContainer#1) num objects <= 1
    //#post(void addRaw()): init'ed(new ListenerList(FrameContainer#1).__Lock)
    //#post(void addRaw()): new Raw(addRaw#1) num objects <= 1
    //#post(void addRaw()): init'ed(new Raw(addRaw#1).__Tag)
    //#post(void addRaw()): new Raw(addRaw#1).changer == &new FrameContainer$IconChanger(FrameContainer#2)
    //#post(void addRaw()): new Raw(addRaw#1).config != null
    //#post(void addRaw()): init'ed(new Raw(addRaw#1).icon)
    //#post(void addRaw()): new Raw(addRaw#1).listeners == &new ListenerList(FrameContainer#1)
    //#post(void addRaw()): init'ed(new Raw(addRaw#1).notification)
    //#post(void addRaw()): init'ed(new Raw(addRaw#1).server)
    //#post(void addRaw()): init'ed(new Raw(addRaw#1).window)
    //#unanalyzed(void addRaw()): Effects-of-calling:getParser
    //#unanalyzed(void addRaw()): Effects-of-calling:getTabCompleter
    //#unanalyzed(void addRaw()): Effects-of-calling:com.dmdirc.WritableFrameContainer
    //#unanalyzed(void addRaw()): Effects-of-calling:getUI
    //#unanalyzed(void addRaw()): Effects-of-calling:getFrame
    //#unanalyzed(void addRaw()): Effects-of-calling:com.dmdirc.FrameContainer
    //#unanalyzed(void addRaw()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getCallbackManager
    //#unanalyzed(void addRaw()): Effects-of-calling:com.dmdirc.parser.irc.callbacks.CallbackManager:addCallback
    //#unanalyzed(void addRaw()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addRaw()): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#unanalyzed(void addRaw()): Effects-of-calling:com.dmdirc.Server:getConfigManager
    //#unanalyzed(void addRaw()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void addRaw()): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getInputWindow
    //#unanalyzed(void addRaw()): Effects-of-calling:com.dmdirc.ui.WindowManager:addWindow
    //#unanalyzed(void addRaw()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:setTitle
    //#unanalyzed(void addRaw()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getInputHandler
    //#unanalyzed(void addRaw()): Effects-of-calling:com.dmdirc.ui.input.InputHandler:setTabCompleter
    //#unanalyzed(void addRaw()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:open
    //#unanalyzed(void addRaw()): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void addRaw()): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void addRaw()): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void addRaw()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void addRaw()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void addRaw()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void addRaw()): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void addRaw()): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void addRaw()): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void addRaw()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:activateFrame
    //#unanalyzed(void addRaw()): Effects-of-calling:com.dmdirc.util.ListenerList
    //#test_vector(void addRaw()): this.raw: Inverse{null}, Addr_Set{null}
    //#test_vector(void addRaw()): this.parser: Addr_Set{null}, Inverse{null}
            raw = new Raw(this);

            if (parser != null) {
                raw.registerCallbacks();
            }
        } else {
            raw.activateFrame();
        }
    }
    //#Server.java:531: end of method: void com.dmdirc.Server.addRaw()

    /**
     * Retrieves the raw window associated with this server.
     *
     * @return The raw window associated with this server.
     */
    public Raw getRaw() {
        return raw;
    //#Server.java:539: method: Raw com.dmdirc.Server.getRaw()
    //#input(Raw getRaw()): this
    //#input(Raw getRaw()): this.raw
    //#output(Raw getRaw()): return_value
    //#pre[2] (Raw getRaw()): init'ed(this.raw)
    //#post(Raw getRaw()): return_value == this.raw
    //#post(Raw getRaw()): init'ed(return_value)
    //#Server.java:539: end of method: Raw com.dmdirc.Server.getRaw()
    }

    /**
     * Removes our reference to the raw object (presumably after it has been
     * closed).
     */
    public void delRaw() {
        raw = null; //NOPMD
    //#Server.java:547: method: void com.dmdirc.Server.delRaw()
    //#input(void delRaw()): this
    //#output(void delRaw()): this.raw
    //#post(void delRaw()): this.raw == null
    }
    //#Server.java:548: end of method: void com.dmdirc.Server.delRaw()

    /**
     * Removes a specific channel and window from this server.
     *
     * @param chan channel to remove
     */
    public void delChannel(final String chan) {
        tabCompleter.removeEntry(TabCompletionType.CHANNEL, chan);
    //#Server.java:556: method: void com.dmdirc.Server.delChannel(String)
    //#Server.java:556: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.input.TabCompleter:removeEntry(TabCompletionType, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void delChannel(String)
    //#    unanalyzed callee: void com.dmdirc.ui.input.TabCompleter:removeEntry(TabCompletionType, String)
    //#input(void delChannel(String)): chan
    //#input(void delChannel(String)): com.dmdirc.ui.input.TabCompletionType.CHANNEL
    //#input(void delChannel(String)): this
    //#input(void delChannel(String)): this.channels
    //#input(void delChannel(String)): this.converter
    //#input(void delChannel(String)): this.tabCompleter
    //#pre[3] (void delChannel(String)): this.channels != null
    //#pre[4] (void delChannel(String)): this.converter != null
    //#pre[5] (void delChannel(String)): this.tabCompleter != null
    //#presumption(void delChannel(String)): init'ed(com.dmdirc.ui.input.TabCompletionType.CHANNEL)
        channels.remove(converter.toLowerCase(chan));
    //#Server.java:557: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCStringConverter:toLowerCase(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void delChannel(String)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCStringConverter:toLowerCase(String)
    }
    //#Server.java:558: end of method: void com.dmdirc.Server.delChannel(String)

    /**
     * Adds a specific channel and window to this server.
     *
     * @param chan channel to add
     */
    public void addChannel(final ChannelInfo chan) {
        synchronized (myState) {
    //#Server.java:566: method: void com.dmdirc.Server.addChannel(ChannelInfo)
    //#input(void addChannel(ChannelInfo)): ")"._tainted
    //#input(void addChannel(ChannelInfo)): "."._tainted
    //#input(void addChannel(ChannelInfo)): "biz"._tainted
    //#input(void addChannel(ChannelInfo)): "com"._tainted
    //#input(void addChannel(ChannelInfo)): "getNetwork called when parser is null (state: "._tainted
    //#input(void addChannel(ChannelInfo)): "info"._tainted
    //#input(void addChannel(ChannelInfo)): "net"._tainted
    //#input(void addChannel(ChannelInfo)): "on"._tainted
    //#input(void addChannel(ChannelInfo)): "org"._tainted
    //#input(void addChannel(ChannelInfo)): __Descendant_Table[com/dmdirc/Server]
    //#input(void addChannel(ChannelInfo)): __Descendant_Table[others]
    //#input(void addChannel(ChannelInfo)): __Dispatch_Table.getChannel(Ljava/lang/String;)Lcom/dmdirc/Channel;
    //#input(void addChannel(ChannelInfo)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addChannel(ChannelInfo)): __Dispatch_Table.getIrcd()Ljava/lang/String;
    //#input(void addChannel(ChannelInfo)): __Dispatch_Table.getName()Ljava/lang/String;
    //#input(void addChannel(ChannelInfo)): __Dispatch_Table.getNetwork()Ljava/lang/String;
    //#input(void addChannel(ChannelInfo)): __Dispatch_Table.getParser()Lcom/dmdirc/parser/irc/IRCParser;
    //#input(void addChannel(ChannelInfo)): __Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void addChannel(ChannelInfo)): __Dispatch_Table.hasChannel(Ljava/lang/String;)Z
    //#input(void addChannel(ChannelInfo)): __Dispatch_Table.removeInvite(Lcom/dmdirc/Invite;)V
    //#input(void addChannel(ChannelInfo)): __Dispatch_Table.removeInvites(Ljava/lang/String;)V
    //#input(void addChannel(ChannelInfo)): chan
    //#input(void addChannel(ChannelInfo)): com.dmdirc.ui.input.TabCompletionType.CHANNEL
    //#input(void addChannel(ChannelInfo)): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/Channel.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void addChannel(ChannelInfo)): com/dmdirc/Channel.__Dispatch_Table.getChannelInfo()Lcom/dmdirc/parser/irc/ChannelInfo;
    //#input(void addChannel(ChannelInfo)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addChannel(ChannelInfo)): com/dmdirc/Channel.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void addChannel(ChannelInfo)): com/dmdirc/Channel.__Dispatch_Table.selfJoin()V
    //#input(void addChannel(ChannelInfo)): com/dmdirc/Channel.__Dispatch_Table.setChannelInfo(Lcom/dmdirc/parser/irc/ChannelInfo;)V
    //#input(void addChannel(ChannelInfo)): com/dmdirc/Channel.__Dispatch_Table.show()V
    //#input(void addChannel(ChannelInfo)): com/dmdirc/ChannelEventHandler.__Descendant_Table[com/dmdirc/ChannelEventHandler]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/ChannelEventHandler.__Descendant_Table[others]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/ChannelEventHandler.__Dispatch_Table.addCallback(Lcom/dmdirc/parser/irc/callbacks/CallbackManager;Ljava/lang/String;)V
    //#input(void addChannel(ChannelInfo)): com/dmdirc/ChannelEventHandler.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void addChannel(ChannelInfo)): com/dmdirc/ChannelEventHandler.__Dispatch_Table.registerCallbacks()V
    //#input(void addChannel(ChannelInfo)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addChannel(ChannelInfo)): com/dmdirc/EventHandler.__Descendant_Table[com/dmdirc/ChannelEventHandler]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/EventHandler.__Descendant_Table[com/dmdirc/EventHandler]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/EventHandler.__Descendant_Table[com/dmdirc/ServerEventHandler]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/EventHandler.__Descendant_Table[others]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/EventHandler.__Dispatch_Table.addCallback(Lcom/dmdirc/parser/irc/callbacks/CallbackManager;Ljava/lang/String;)V
    //#input(void addChannel(ChannelInfo)): com/dmdirc/EventHandler.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void addChannel(ChannelInfo)): com/dmdirc/EventHandler.com.dmdirc.logger.ErrorLevel.FATAL
    //#input(void addChannel(ChannelInfo)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addChannel(ChannelInfo)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addChannel(ChannelInfo)): com/dmdirc/Invite.__Descendant_Table[com/dmdirc/Invite]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/Invite.__Descendant_Table[others]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/Invite.__Dispatch_Table.getChannel()Ljava/lang/String;
    //#input(void addChannel(ChannelInfo)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addChannel(ChannelInfo)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addChannel(ChannelInfo)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addChannel(ChannelInfo)): com/dmdirc/ServerEventHandler.__Dispatch_Table.addCallback(Lcom/dmdirc/parser/irc/callbacks/CallbackManager;Ljava/lang/String;)V
    //#input(void addChannel(ChannelInfo)): com/dmdirc/ServerEventHandler.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void addChannel(ChannelInfo)): com/dmdirc/ServerState.CLOSING
    //#input(void addChannel(ChannelInfo)): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void addChannel(ChannelInfo)): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void addChannel(ChannelInfo)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addChannel(ChannelInfo)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addChannel(ChannelInfo)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addChannel(ChannelInfo)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addChannel(ChannelInfo)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addChannel(ChannelInfo)): this
    //#input(void addChannel(ChannelInfo)): this.__Tag
    //#input(void addChannel(ChannelInfo)): this.channels
    //#input(void addChannel(ChannelInfo)): this.converter
    //#input(void addChannel(ChannelInfo)): this.myState
    //#input(void addChannel(ChannelInfo)): this.myState.__Tag
    //#input(void addChannel(ChannelInfo)): this.myState.state
    //#input(void addChannel(ChannelInfo)): this.tabCompleter
    //#pre[7] (void addChannel(ChannelInfo)): this.myState != null
    //#pre[9] (void addChannel(ChannelInfo)): this.myState.__Tag == com/dmdirc/ServerStatus
    //#pre[10] (void addChannel(ChannelInfo)): init'ed(this.myState.state)
    //#pre[1] (void addChannel(ChannelInfo)): (soft) chan != null
    //#pre[4] (void addChannel(ChannelInfo)): (soft) this.__Tag == com/dmdirc/Server
    //#pre[5] (void addChannel(ChannelInfo)): (soft) this.channels != null
    //#pre[6] (void addChannel(ChannelInfo)): (soft) this.converter != null
    //#pre[11] (void addChannel(ChannelInfo)): (soft) this.tabCompleter != null
    //#presumption(void addChannel(ChannelInfo)): init'ed(com.dmdirc.ui.input.TabCompletionType.CHANNEL)
    //#presumption(void addChannel(ChannelInfo)): getChannel(...).channelInfo@575 != null
    //#presumption(void addChannel(ChannelInfo)): getChannel(...).config@574 != null
    //#presumption(void addChannel(ChannelInfo)): getChannel(...).config@575 != null
    //#presumption(void addChannel(ChannelInfo)): getChannel(...).eventHandler.__Tag@574 == com/dmdirc/ChannelEventHandler
    //#presumption(void addChannel(ChannelInfo)): getChannel(...).eventHandler.owner.__Tag@574 is init'ed
    //#presumption(void addChannel(ChannelInfo)): getChannel(...).eventHandler.owner@574 != null
    //#presumption(void addChannel(ChannelInfo)): getChannel(...).eventHandler@574 != null
    //#presumption(void addChannel(ChannelInfo)): getChannel(...).listeners@575 != null
    //#presumption(void addChannel(ChannelInfo)): getChannel(...).server.__Tag@574 == com/dmdirc/Server
    //#presumption(void addChannel(ChannelInfo)): getChannel(...).server.__Tag@575 == com/dmdirc/Server
    //#presumption(void addChannel(ChannelInfo)): getChannel(...).server.invites@575 != null
    //#presumption(void addChannel(ChannelInfo)): getChannel(...).server.listeners@575 != null
    //#presumption(void addChannel(ChannelInfo)): getChannel(...).server.parser@574 != null
    //#presumption(void addChannel(ChannelInfo)): getChannel(...).server.parser@575 != null
    //#presumption(void addChannel(ChannelInfo)): getChannel(...).server.serverInfo@574 != null
    //#presumption(void addChannel(ChannelInfo)): getChannel(...).server@574 != null
    //#presumption(void addChannel(ChannelInfo)): getChannel(...).server@575 != null
    //#presumption(void addChannel(ChannelInfo)): java.util.Map:get(...)@455 != null
    //#presumption(void addChannel(ChannelInfo)): java.util.Map:get(...)@455 != null
    //#presumption(void addChannel(ChannelInfo)): java.util.Map:get(...)@455.__Tag == com/dmdirc/Channel
    //#presumption(void addChannel(ChannelInfo)): java.util.Map:get(...)@455.__Tag == com/dmdirc/Channel
    //#presumption(void addChannel(ChannelInfo)): newChan.window@580 != null
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:getConfigManager
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getIRCD
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.lang.String:endsWith
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.parser.irc.IRCStringConverter:toLowerCase
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.interfaces.InviteListener:inviteExpired
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getHost
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:getNetwork
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:getParser
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:addLine
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:removeInvites
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.parser.irc.ChannelInfo:getName
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:setIcon
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.lang.IllegalStateException
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:getName
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:getServer
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getCallbackManager
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.lang.Object:getClass
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.lang.Class:getInterfaces
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.lang.Class:getName
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.lang.String:startsWith
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:addCallback
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.parser.irc.callbacks.CallbackManager:addCallback
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getNetworkName
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getServerName
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:registerCallbacks
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:getIrcd
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.config.ConfigManager:migrate
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.parser.irc.ClientInfo:getIdent
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.parser.irc.ClientInfo:getHost
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getMyself
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.parser.irc.ClientInfo:getNickname
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.ui.interfaces.ChannelWindow:open
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:getFrame
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:addLine
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void addChannel(ChannelInfo)): Effects-of-calling:getChannelInfo
    //#test_vector(void addChannel(ChannelInfo)): java.util.Map:containsKey(...)@445: {0}, {1}
            if (myState.getState() == ServerState.CLOSING) {
                // Can't join channels while the server is closing
                return;
            }
        }

        if (hasChannel(chan.getName())) {
    //#Server.java:573: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ChannelInfo:getName()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void addChannel(ChannelInfo)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ChannelInfo:getName()
            getChannel(chan.getName()).setChannelInfo(chan);
    //#Server.java:574: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ChannelInfo:getName()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void addChannel(ChannelInfo)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ChannelInfo:getName()
    //#Server.java:574: ?!precondition failure
    //#    com/dmdirc/Channel.setChannelInfo: (soft) this...server != null
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.Server
    //#    method: void addChannel(ChannelInfo)
    //#    basic block: bb_8
    //#    assertion: (soft) undefined != null
    //#    callee: void com/dmdirc/Channel.setChannelInfo(ChannelInfo)
    //#    callee assertion: (soft) this...server != null
    //#    callee file: Channel.java
    //#    callee precondition index: [5]
    //#    callee srcpos: 246
    //#    VN: undefined
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null, Invalid}
    //#    Attribs:  Ptr  null in Bad  Soft
            getChannel(chan.getName()).selfJoin();
    //#Server.java:575: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ChannelInfo:getName()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void addChannel(ChannelInfo)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ChannelInfo:getName()
        } else {
            final Channel newChan = new Channel(this, chan);
    //#Server.java:577: Warning: call too complex - analysis skipped
    //#    call on void com.dmdirc.Channel(Server, ChannelInfo)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void addChannel(ChannelInfo)
    //#    unanalyzed callee: void com.dmdirc.Channel(Server, ChannelInfo)

            tabCompleter.addEntry(TabCompletionType.CHANNEL, chan.getName());
    //#Server.java:579: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ChannelInfo:getName()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void addChannel(ChannelInfo)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ChannelInfo:getName()
    //#Server.java:579: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.input.TabCompleter:addEntry(TabCompletionType, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void addChannel(ChannelInfo)
    //#    unanalyzed callee: void com.dmdirc.ui.input.TabCompleter:addEntry(TabCompletionType, String)
            channels.put(converter.toLowerCase(chan.getName()), newChan);
    //#Server.java:580: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ChannelInfo:getName()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void addChannel(ChannelInfo)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ChannelInfo:getName()
    //#Server.java:580: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCStringConverter:toLowerCase(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void addChannel(ChannelInfo)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCStringConverter:toLowerCase(String)
            newChan.show();
        }
    }
    //#Server.java:583: end of method: void com.dmdirc.Server.addChannel(ChannelInfo)

    /**
     * Adds a query to this server.
     *
     * @param host host of the remote client being queried
     */
    public void addQuery(final String host) {
        synchronized (myState) {
    //#Server.java:591: method: void com.dmdirc.Server.addQuery(String)
    //#input(void addQuery(String)): __Descendant_Table[com/dmdirc/Server]
    //#input(void addQuery(String)): __Descendant_Table[others]
    //#input(void addQuery(String)): __Dispatch_Table.hasQuery(Ljava/lang/String;)Z
    //#input(void addQuery(String)): com.dmdirc.ui.input.TabCompletionType.QUERY_NICK
    //#input(void addQuery(String)): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(void addQuery(String)): com/dmdirc/Query.__Descendant_Table[others]
    //#input(void addQuery(String)): com/dmdirc/ServerState.CLOSING
    //#input(void addQuery(String)): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void addQuery(String)): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void addQuery(String)): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void addQuery(String)): host
    //#input(void addQuery(String)): this
    //#input(void addQuery(String)): this.__Tag
    //#input(void addQuery(String)): this.converter
    //#input(void addQuery(String)): this.myState
    //#input(void addQuery(String)): this.myState.__Tag
    //#input(void addQuery(String)): this.myState.state
    //#input(void addQuery(String)): this.queries
    //#input(void addQuery(String)): this.tabCompleter
    //#pre[6] (void addQuery(String)): this.myState != null
    //#pre[8] (void addQuery(String)): this.myState.__Tag == com/dmdirc/ServerStatus
    //#pre[9] (void addQuery(String)): init'ed(this.myState.state)
    //#pre[4] (void addQuery(String)): (soft) this.__Tag == com/dmdirc/Server
    //#pre[5] (void addQuery(String)): (soft) this.converter != null
    //#pre[10] (void addQuery(String)): (soft) this.queries != null
    //#pre[11] (void addQuery(String)): (soft) this.tabCompleter != null
    //#presumption(void addQuery(String)): init'ed(com.dmdirc.ui.input.TabCompletionType.QUERY_NICK)
    //#unanalyzed(void addQuery(String)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void addQuery(String)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void addQuery(String)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void addQuery(String)): Effects-of-calling:com.dmdirc.parser.irc.IRCStringConverter:equalsIgnoreCase
    //#unanalyzed(void addQuery(String)): Effects-of-calling:com.dmdirc.parser.irc.ClientInfo:parseHost
            if (myState.getState() == ServerState.CLOSING) {
                // Can't open queries while the server is closing
                return;
            }
        }

        if (!hasQuery(host)) {
            final Query newQuery = new Query(this, host);
    //#Server.java:599: Warning: call too complex - analysis skipped
    //#    call on void com.dmdirc.Query(Server, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void addQuery(String)
    //#    unanalyzed callee: void com.dmdirc.Query(Server, String)

            tabCompleter.addEntry(TabCompletionType.QUERY_NICK, ClientInfo.parseHost(host));
    //#Server.java:601: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ClientInfo:parseHost(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void addQuery(String)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ClientInfo:parseHost(String)
    //#Server.java:601: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.input.TabCompleter:addEntry(TabCompletionType, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void addQuery(String)
    //#    unanalyzed callee: void com.dmdirc.ui.input.TabCompleter:addEntry(TabCompletionType, String)
            queries.add(newQuery);
        }
    }
    //#Server.java:604: end of method: void com.dmdirc.Server.addQuery(String)

    /**
     * Deletes a query from this server.
     *
     * @param query The query that should be removed.
     */
    public void delQuery(final Query query) {
        tabCompleter.removeEntry(TabCompletionType.QUERY_NICK, query.getNickname());
    //#Server.java:612: method: void com.dmdirc.Server.delQuery(Query)
    //#Server.java:612: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.input.TabCompleter:removeEntry(TabCompletionType, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void delQuery(Query)
    //#    unanalyzed callee: void com.dmdirc.ui.input.TabCompleter:removeEntry(TabCompletionType, String)
    //#input(void delQuery(Query)): com.dmdirc.ui.input.TabCompletionType.QUERY_NICK
    //#input(void delQuery(Query)): query
    //#input(void delQuery(Query)): query.host
    //#input(void delQuery(Query)): this
    //#input(void delQuery(Query)): this.queries
    //#input(void delQuery(Query)): this.tabCompleter
    //#pre[1] (void delQuery(Query)): query != null
    //#pre[2] (void delQuery(Query)): init'ed(query.host)
    //#pre[4] (void delQuery(Query)): this.queries != null
    //#pre[5] (void delQuery(Query)): this.tabCompleter != null
    //#presumption(void delQuery(Query)): init'ed(com.dmdirc.ui.input.TabCompletionType.QUERY_NICK)
    //#unanalyzed(void delQuery(Query)): Effects-of-calling:com.dmdirc.parser.irc.ClientInfo:parseHost
        queries.remove(query);
    }
    //#Server.java:614: end of method: void com.dmdirc.Server.delQuery(Query)

    /** {@inheritDoc} */
    @Override
    public boolean ownsFrame(final Window target) {
        // Check if it's our server frame
        if (window != null && window.equals(target)) { return true; }
    //#Server.java:620: method: bool com.dmdirc.Server.ownsFrame(Window)
    //#input(bool ownsFrame(Window)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(bool ownsFrame(Window)): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(bool ownsFrame(Window)): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(bool ownsFrame(Window)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(bool ownsFrame(Window)): com/dmdirc/Channel.__Dispatch_Table.ownsFrame(Lcom/dmdirc/ui/interfaces/Window;)Z
    //#input(bool ownsFrame(Window)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(bool ownsFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(bool ownsFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(bool ownsFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(bool ownsFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(bool ownsFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(bool ownsFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(bool ownsFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(bool ownsFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(bool ownsFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(bool ownsFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(bool ownsFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(bool ownsFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(bool ownsFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(bool ownsFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(bool ownsFrame(Window)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(bool ownsFrame(Window)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(bool ownsFrame(Window)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(bool ownsFrame(Window)): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(bool ownsFrame(Window)): com/dmdirc/Query.__Descendant_Table[others]
    //#input(bool ownsFrame(Window)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(bool ownsFrame(Window)): com/dmdirc/Query.__Dispatch_Table.ownsFrame(Lcom/dmdirc/ui/interfaces/Window;)Z
    //#input(bool ownsFrame(Window)): com/dmdirc/Raw.__Descendant_Table[com/dmdirc/Raw]
    //#input(bool ownsFrame(Window)): com/dmdirc/Raw.__Descendant_Table[others]
    //#input(bool ownsFrame(Window)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(bool ownsFrame(Window)): com/dmdirc/Raw.__Dispatch_Table.ownsFrame(Lcom/dmdirc/ui/interfaces/Window;)Z
    //#input(bool ownsFrame(Window)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(bool ownsFrame(Window)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(bool ownsFrame(Window)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(bool ownsFrame(Window)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(bool ownsFrame(Window)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(bool ownsFrame(Window)): target
    //#input(bool ownsFrame(Window)): this
    //#input(bool ownsFrame(Window)): this.channels
    //#input(bool ownsFrame(Window)): this.queries
    //#input(bool ownsFrame(Window)): this.raw
    //#input(bool ownsFrame(Window)): this.raw.__Tag
    //#input(bool ownsFrame(Window)): this.window
    //#output(bool ownsFrame(Window)): return_value
    //#pre[7] (bool ownsFrame(Window)): init'ed(this.window)
    //#pre[3] (bool ownsFrame(Window)): (soft) this.channels != null
    //#pre[4] (bool ownsFrame(Window)): (soft) this.queries != null
    //#pre[5] (bool ownsFrame(Window)): (soft) init'ed(this.raw)
    //#pre[6] (bool ownsFrame(Window)): (soft) this.raw.__Tag == com/dmdirc/Raw
    //#presumption(bool ownsFrame(Window)): java.util.Iterator:next(...).__Tag@624 == com/dmdirc/Channel
    //#presumption(bool ownsFrame(Window)): java.util.Iterator:next(...).__Tag@628 == com/dmdirc/Query
    //#presumption(bool ownsFrame(Window)): java.util.Iterator:next(...)@624 != null
    //#presumption(bool ownsFrame(Window)): java.util.Iterator:next(...)@628 != null
    //#presumption(bool ownsFrame(Window)): java.util.Map:values(...)@624 != null
    //#post(bool ownsFrame(Window)): init'ed(return_value)
    //#unanalyzed(bool ownsFrame(Window)): Effects-of-calling:getFrame
    //#unanalyzed(bool ownsFrame(Window)): Effects-of-calling:java.lang.Object:equals
    //#test_vector(bool ownsFrame(Window)): this.raw: Addr_Set{null}, Inverse{null}
    //#test_vector(bool ownsFrame(Window)): this.window: Addr_Set{null}, Inverse{null}
    //#test_vector(bool ownsFrame(Window)): java.lang.Object:equals(...)@215: {0}, {1}
    //#test_vector(bool ownsFrame(Window)): java.lang.Object:equals(...)@620: {0}, {1}
    //#test_vector(bool ownsFrame(Window)): java.util.Iterator:hasNext(...)@624: {0}, {1}
    //#test_vector(bool ownsFrame(Window)): java.util.Iterator:hasNext(...)@628: {0}, {1}
        // Check if it's the raw frame
        if (raw != null && raw.ownsFrame(target)) { return true; }
        // Check if it's a channel frame
        for (Channel channel : channels.values()) {
            if (channel.ownsFrame(target)) { return true; }
        }
        // Check if it's a query frame
        for (Query query : queries) {
            if (query.ownsFrame(target)) { return true; }
        }
        return false;
    //#Server.java:631: end of method: bool com.dmdirc.Server.ownsFrame(Window)
    }

    /**
     * Sets the specified frame as the most-recently activated.
     *
     * @param source The frame that was activated
     */
    public void setActiveFrame(final FrameContainer source) {
        activeFrame = source;
    //#Server.java:640: method: void com.dmdirc.Server.setActiveFrame(FrameContainer)
    //#input(void setActiveFrame(FrameContainer)): source
    //#input(void setActiveFrame(FrameContainer)): this
    //#output(void setActiveFrame(FrameContainer)): this.activeFrame
    //#post(void setActiveFrame(FrameContainer)): this.activeFrame == source
    //#post(void setActiveFrame(FrameContainer)): init'ed(this.activeFrame)
    }
    //#Server.java:641: end of method: void com.dmdirc.Server.setActiveFrame(FrameContainer)

    /**
     * Retrieves a list of all children of this server instance.
     *
     * @return A list of this server's children
     */
    public List<WritableFrameContainer> getChildren() {
        final List<WritableFrameContainer> res = new ArrayList<WritableFrameContainer>();
    //#Server.java:649: method: List com.dmdirc.Server.getChildren()
    //#input(List getChildren()): this
    //#input(List getChildren()): this.channels
    //#input(List getChildren()): this.queries
    //#input(List getChildren()): this.raw
    //#output(List getChildren()): new ArrayList(getChildren#1) num objects
    //#output(List getChildren()): return_value
    //#new obj(List getChildren()): new ArrayList(getChildren#1)
    //#pre[2] (List getChildren()): this.channels != null
    //#pre[4] (List getChildren()): init'ed(this.raw)
    //#post(List getChildren()): return_value == &new ArrayList(getChildren#1)
    //#post(List getChildren()): new ArrayList(getChildren#1) num objects == 1
    //#test_vector(List getChildren()): this.raw: Addr_Set{null}, Inverse{null}

        if (raw != null) {
            res.add(raw);
        }

        res.addAll(channels.values());
        res.addAll(queries);

        return res;
    //#Server.java:658: end of method: List com.dmdirc.Server.getChildren()
    }

    /**
     * Closes all open channel windows associated with this server.
     */
    private void closeChannels() {
        for (Channel channel : new ArrayList<Channel>(channels.values())) {
    //#Server.java:665: method: void com.dmdirc.Server.closeChannels()
    //#input(void closeChannels()): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeChannels()): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void closeChannels()): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void closeChannels()): com/dmdirc/Channel.__Dispatch_Table.close()V
    //#input(void closeChannels()): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeChannels()): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void closeChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void closeChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void closeChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void closeChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void closeChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void closeChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void closeChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void closeChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void closeChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void closeChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void closeChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void closeChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void closeChannels()): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void closeChannels()): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeChannels()): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeChannels()): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeChannels()): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeChannels()): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeChannels()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeChannels()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeChannels()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeChannels()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeChannels()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeChannels()): this
    //#input(void closeChannels()): this.channels
    //#pre[2] (void closeChannels()): this.channels != null
    //#presumption(void closeChannels()): java.util.ArrayList:iterator(...)@665 != null
    //#presumption(void closeChannels()): java.util.Iterator:next(...).__Tag@665 == com/dmdirc/Channel
    //#presumption(void closeChannels()): java.util.Iterator:next(...)@665 != null
    //#unanalyzed(void closeChannels()): Effects-of-calling:getFrame
    //#unanalyzed(void closeChannels()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:close
    //#test_vector(void closeChannels()): java.util.Iterator:hasNext(...)@665: {0}, {1}
            channel.close();
        }
    }
    //#Server.java:668: end of method: void com.dmdirc.Server.closeChannels()

    /**
     * Clears the nicklist of all open channels.
     */
    private void clearChannels() {
        for (Channel channel : channels.values()) {
    //#Server.java:674: method: void com.dmdirc.Server.clearChannels()
    //#input(void clearChannels()): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void clearChannels()): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void clearChannels()): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void clearChannels()): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void clearChannels()): com/dmdirc/Channel.__Dispatch_Table.resetWindow()V
    //#input(void clearChannels()): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void clearChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void clearChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void clearChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void clearChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void clearChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void clearChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void clearChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void clearChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void clearChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void clearChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void clearChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void clearChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void clearChannels()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void clearChannels()): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void clearChannels()): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void clearChannels()): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void clearChannels()): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void clearChannels()): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void clearChannels()): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void clearChannels()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void clearChannels()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void clearChannels()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void clearChannels()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void clearChannels()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void clearChannels()): this
    //#input(void clearChannels()): this.channels
    //#pre[2] (void clearChannels()): this.channels != null
    //#presumption(void clearChannels()): channel.config@674 != null
    //#presumption(void clearChannels()): channel.listeners@674 != null
    //#presumption(void clearChannels()): channel.window@674 != null
    //#presumption(void clearChannels()): java.util.Iterator:next(...).__Tag@674 == com/dmdirc/Channel
    //#presumption(void clearChannels()): java.util.Iterator:next(...)@674 != null
    //#presumption(void clearChannels()): java.util.Map:values(...)@674 != null
    //#unanalyzed(void clearChannels()): Effects-of-calling:setIcon
    //#unanalyzed(void clearChannels()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void clearChannels()): Effects-of-calling:com.dmdirc.ui.interfaces.ChannelWindow:updateNames
    //#unanalyzed(void clearChannels()): Effects-of-calling:getFrame
    //#unanalyzed(void clearChannels()): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void clearChannels()): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void clearChannels()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void clearChannels()): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void clearChannels()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void clearChannels()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void clearChannels()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void clearChannels()): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void clearChannels()): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void clearChannels()): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#test_vector(void clearChannels()): java.util.Iterator:hasNext(...)@674: {0}, {1}
            channel.resetWindow();
        }
    }
    //#Server.java:677: end of method: void com.dmdirc.Server.clearChannels()

    /**
     * Closes all open query windows associated with this server.
     */
    private void closeQueries() {
        for (Query query : new ArrayList<Query>(queries)) {
    //#Server.java:683: method: void com.dmdirc.Server.closeQueries()
    //#input(void closeQueries()): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeQueries()): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeQueries()): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeQueries()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void closeQueries()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void closeQueries()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void closeQueries()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void closeQueries()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void closeQueries()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void closeQueries()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void closeQueries()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void closeQueries()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void closeQueries()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void closeQueries()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void closeQueries()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void closeQueries()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void closeQueries()): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void closeQueries()): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeQueries()): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeQueries()): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeQueries()): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(void closeQueries()): com/dmdirc/Query.__Descendant_Table[others]
    //#input(void closeQueries()): com/dmdirc/Query.__Dispatch_Table.close()V
    //#input(void closeQueries()): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeQueries()): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeQueries()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeQueries()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeQueries()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeQueries()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeQueries()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeQueries()): this
    //#input(void closeQueries()): this.queries
    //#presumption(void closeQueries()): java.util.ArrayList:iterator(...)@683 != null
    //#presumption(void closeQueries()): java.util.Iterator:next(...).__Tag@683 == com/dmdirc/Query
    //#presumption(void closeQueries()): java.util.Iterator:next(...)@683 != null
    //#unanalyzed(void closeQueries()): Effects-of-calling:getFrame
    //#unanalyzed(void closeQueries()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:close
    //#test_vector(void closeQueries()): java.util.Iterator:hasNext(...)@683: {0}, {1}
            query.close();
        }
    }
    //#Server.java:686: end of method: void com.dmdirc.Server.closeQueries()

    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Miscellaneous methods">

    /**
     * Construsts a {@link ServerInfo} object for the specified details.
     *
     * @param server The hostname or IP address of the server
     * @param port The port of the server
     * @param password The password to use, if any
     * @param ssl Whether or not to use SSL
     * @return An appropriately configured ServerInfo instance
     */
    private ServerInfo buildServerInfo(final String server, final int port,
            final String password, final boolean ssl) {
        final ServerInfo myInfo = new ServerInfo(server, port, password);
    //#Server.java:703: method: ServerInfo com.dmdirc.Server.buildServerInfo(String, int, String, bool)
    //#Server.java:703: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.ServerInfo(String, int, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: ServerInfo buildServerInfo(String, int, String, bool)
    //#    unanalyzed callee: void com.dmdirc.parser.irc.ServerInfo(String, int, String)
    //#input(ServerInfo buildServerInfo(String, int, String, bool)): DOMAIN_SERVER
    //#input(ServerInfo buildServerInfo(String, int, String, bool)): password
    //#input(ServerInfo buildServerInfo(String, int, String, bool)): port
    //#input(ServerInfo buildServerInfo(String, int, String, bool)): server
    //#input(ServerInfo buildServerInfo(String, int, String, bool)): ssl
    //#input(ServerInfo buildServerInfo(String, int, String, bool)): this
    //#input(ServerInfo buildServerInfo(String, int, String, bool)): this.config
    //#output(ServerInfo buildServerInfo(String, int, String, bool)): new ServerInfo(buildServerInfo#1) num objects
    //#output(ServerInfo buildServerInfo(String, int, String, bool)): return_value
    //#new obj(ServerInfo buildServerInfo(String, int, String, bool)): new ServerInfo(buildServerInfo#1)
    //#pre[6] (ServerInfo buildServerInfo(String, int, String, bool)): this.config != null
    //#post(ServerInfo buildServerInfo(String, int, String, bool)): return_value == &new ServerInfo(buildServerInfo#1)
    //#post(ServerInfo buildServerInfo(String, int, String, bool)): new ServerInfo(buildServerInfo#1) num objects == 1
    //#test_vector(ServerInfo buildServerInfo(String, int, String, bool)): com.dmdirc.config.ConfigManager:hasOptionString(...)@706: {0}, {1}
        myInfo.setSSL(ssl);
    //#Server.java:704: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.ServerInfo:setSSL(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: ServerInfo buildServerInfo(String, int, String, bool)
    //#    unanalyzed callee: void com.dmdirc.parser.irc.ServerInfo:setSSL(bool)

        if (getConfigManager().hasOptionString(DOMAIN_SERVER, "proxy.address")) {
    //#Server.java:706: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: ServerInfo buildServerInfo(String, int, String, bool)
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
            myInfo.setUseSocks(true);
    //#Server.java:707: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.ServerInfo:setUseSocks(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: ServerInfo buildServerInfo(String, int, String, bool)
    //#    unanalyzed callee: void com.dmdirc.parser.irc.ServerInfo:setUseSocks(bool)

            myInfo.setProxyHost(getConfigManager()
    //#Server.java:709: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: ServerInfo buildServerInfo(String, int, String, bool)
    //#    unanalyzed callee: String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#Server.java:709: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.ServerInfo:setProxyHost(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: ServerInfo buildServerInfo(String, int, String, bool)
    //#    unanalyzed callee: void com.dmdirc.parser.irc.ServerInfo:setProxyHost(String)
                    .getOption(DOMAIN_SERVER, "proxy.address"));
            myInfo.setProxyUser(getConfigManager()
    //#Server.java:711: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: ServerInfo buildServerInfo(String, int, String, bool)
    //#    unanalyzed callee: String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#Server.java:711: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.ServerInfo:setProxyUser(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: ServerInfo buildServerInfo(String, int, String, bool)
    //#    unanalyzed callee: void com.dmdirc.parser.irc.ServerInfo:setProxyUser(String)
                    .getOption(DOMAIN_SERVER, "proxy.user"));
            myInfo.setProxyPass(getConfigManager()
    //#Server.java:713: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: ServerInfo buildServerInfo(String, int, String, bool)
    //#    unanalyzed callee: String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#Server.java:713: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.ServerInfo:setProxyPass(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: ServerInfo buildServerInfo(String, int, String, bool)
    //#    unanalyzed callee: void com.dmdirc.parser.irc.ServerInfo:setProxyPass(String)
                    .getOption(DOMAIN_SERVER, "proxy.password"));
            myInfo.setProxyPort(getConfigManager()
    //#Server.java:715: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.config.ConfigManager:getOptionInt(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: ServerInfo buildServerInfo(String, int, String, bool)
    //#    unanalyzed callee: int com.dmdirc.config.ConfigManager:getOptionInt(String, String)
    //#Server.java:715: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.ServerInfo:setProxyPort(int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: ServerInfo buildServerInfo(String, int, String, bool)
    //#    unanalyzed callee: void com.dmdirc.parser.irc.ServerInfo:setProxyPort(int)
                    .getOptionInt(DOMAIN_SERVER, "proxy.port"));
        }

        return myInfo;
    //#Server.java:719: end of method: ServerInfo com.dmdirc.Server.buildServerInfo(String, int, String, bool)
    }

    /**
     * Builds an appropriately configured {@link IRCParser} for this server.
     *
     * @return A configured IRC parser.
     */
    private IRCParser buildParser() {
        final CertificateManager certManager = new CertificateManager(serverInfo.getHost(),
    //#Server.java:728: method: IRCParser com.dmdirc.Server.buildParser()
    //#Server.java:728: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ServerInfo:getHost()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: IRCParser buildParser()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ServerInfo:getHost()
    //#input(IRCParser buildParser()): DOMAIN_GENERAL
    //#input(IRCParser buildParser()): DOMAIN_PROFILE
    //#input(IRCParser buildParser()): DOMAIN_SERVER
    //#input(IRCParser buildParser()): com/dmdirc/CertificateManager.__Descendant_Table[com/dmdirc/CertificateManager]
    //#input(IRCParser buildParser()): com/dmdirc/CertificateManager.__Descendant_Table[others]
    //#input(IRCParser buildParser()): com/dmdirc/CertificateManager.__Dispatch_Table.getKeyManager()[Ljavax/net/ssl/KeyManager;
    //#input(IRCParser buildParser()): com/dmdirc/CertificateManager.__Dispatch_Table.loadTrustedCAs()V
    //#input(IRCParser buildParser()): com/dmdirc/CertificateManager.com.dmdirc.logger.ErrorLevel.MEDIUM
    //#input(IRCParser buildParser()): com/dmdirc/CertificateManager.java.io.File.separatorChar
    //#input(IRCParser buildParser()): com/dmdirc/ParserFactory.__Descendant_Table[com/dmdirc/ParserFactory]
    //#input(IRCParser buildParser()): com/dmdirc/ParserFactory.__Descendant_Table[others]
    //#input(IRCParser buildParser()): com/dmdirc/ParserFactory.__Dispatch_Table.getParser(Lcom/dmdirc/parser/irc/MyInfo;Lcom/dmdirc/parser/irc/ServerInfo;)Lcom/dmdirc/parser/irc/IRCParser;
    //#input(IRCParser buildParser()): this
    //#input(IRCParser buildParser()): this.config
    //#input(IRCParser buildParser()): this.ignoreList
    //#input(IRCParser buildParser()): this.parserFactory
    //#input(IRCParser buildParser()): this.parserFactory.__Tag
    //#input(IRCParser buildParser()): this.profile
    //#input(IRCParser buildParser()): this.serverInfo
    //#output(IRCParser buildParser()): new IRCParser(getParser#1) num objects
    //#output(IRCParser buildParser()): return_value
    //#new obj(IRCParser buildParser()): new IRCParser(getParser#1)
    //#pre[2] (IRCParser buildParser()): this.config != null
    //#pre[4] (IRCParser buildParser()): this.parserFactory != null
    //#pre[5] (IRCParser buildParser()): this.parserFactory.__Tag == com/dmdirc/ParserFactory
    //#pre[6] (IRCParser buildParser()): this.profile != null
    //#pre[7] (IRCParser buildParser()): this.serverInfo != null
    //#presumption(IRCParser buildParser()): com.dmdirc.config.ConfigManager:getOptionInt(...)@740/com.dmdirc.parser.irc.IRCParser:getPingTimerLength(...)@740 in range
    //#presumption(IRCParser buildParser()): com.dmdirc.config.ConfigManager:getOptionInt(...)@740/com.dmdirc.parser.irc.IRCParser:getPingTimerLength(...)@740 in {-2_147_483_648..4_294_967_295}
    //#presumption(IRCParser buildParser()): com.dmdirc.parser.irc.IRCParser:getPingTimerLength(...)@740 != 0
    //#post(IRCParser buildParser()): return_value == &new IRCParser(getParser#1)
    //#post(IRCParser buildParser()): new IRCParser(getParser#1) num objects == 1
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:com.dmdirc.config.Identity:getOptionList
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.util.List:isEmpty
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:com.dmdirc.parser.irc.MyInfo
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.util.List:get
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:com.dmdirc.parser.irc.MyInfo:setNickname
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:com.dmdirc.config.Identity:getOption
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:com.dmdirc.parser.irc.MyInfo:setRealname
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:com.dmdirc.config.Identity:hasOptionString
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:com.dmdirc.parser.irc.MyInfo:setUsername
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.lang.String:toCharArray
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.io.FileInputStream
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.security.KeyStore:getInstance
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.security.KeyStore:load
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.io.FileInputStream:close
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.lang.System:getProperty
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.lang.String:replace
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.security.KeyStore:getDefaultType
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.security.cert.PKIXParameters
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.security.cert.PKIXParameters:getTrustAnchors
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.security.cert.TrustAnchor:getTrustedCert
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.util.Set:add
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.util.HashSet
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:java.util.concurrent.Semaphore
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:com.dmdirc.config.ConfigManager:hasOptionString
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:javax.net.ssl.KeyManagerFactory:getDefaultAlgorithm
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:javax.net.ssl.KeyManagerFactory:getInstance
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:javax.net.ssl.KeyManagerFactory:init
    //#unanalyzed(IRCParser buildParser()): Effects-of-calling:javax.net.ssl.KeyManagerFactory:getKeyManagers
    //#test_vector(IRCParser buildParser()): com.dmdirc.config.ConfigManager:hasOptionString(...)@743: {0}, {1}
                getConfigManager());

        final MyInfo myInfo = buildMyInfo();
        final IRCParser myParser = parserFactory.getParser(myInfo, serverInfo);
        myParser.setTrustManager(new TrustManager[]{certManager});
    //#Server.java:733: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:setTrustManager(TrustManager[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: IRCParser buildParser()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:setTrustManager(TrustManager[])
        myParser.setKeyManagers(certManager.getKeyManager());
    //#Server.java:734: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:setKeyManagers(KeyManager[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: IRCParser buildParser()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:setKeyManagers(KeyManager[])
        myParser.setRemoveAfterCallback(true);
    //#Server.java:735: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:setRemoveAfterCallback(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: IRCParser buildParser()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:setRemoveAfterCallback(bool)
        myParser.setCreateFake(true);
    //#Server.java:736: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:setCreateFake(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: IRCParser buildParser()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:setCreateFake(bool)
        myParser.setIgnoreList(ignoreList);
    //#Server.java:737: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:setIgnoreList(RegexStringList)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: IRCParser buildParser()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:setIgnoreList(RegexStringList)
        myParser.setPingTimerLength(getConfigManager().getOptionInt(DOMAIN_SERVER,
    //#Server.java:738: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.config.ConfigManager:getOptionInt(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: IRCParser buildParser()
    //#    unanalyzed callee: int com.dmdirc.config.ConfigManager:getOptionInt(String, String)
    //#Server.java:738: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:setPingTimerLength(long)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: IRCParser buildParser()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:setPingTimerLength(long)
                "pingtimer"));
        myParser.setPingCountDownLength((int) (getConfigManager().getOptionInt(DOMAIN_SERVER,
    //#Server.java:740: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.config.ConfigManager:getOptionInt(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: IRCParser buildParser()
    //#    unanalyzed callee: int com.dmdirc.config.ConfigManager:getOptionInt(String, String)
    //#Server.java:740: Warning: method not available - call not analyzed
    //#    call on long com.dmdirc.parser.irc.IRCParser:getPingTimerLength()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: IRCParser buildParser()
    //#    unanalyzed callee: long com.dmdirc.parser.irc.IRCParser:getPingTimerLength()
    //#Server.java:740: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:setPingCountDownLength(int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: IRCParser buildParser()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:setPingCountDownLength(int)
                "pingfrequency") / myParser.getPingTimerLength()));

        if (getConfigManager().hasOptionString(DOMAIN_GENERAL, "bindip")) {
    //#Server.java:743: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: IRCParser buildParser()
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
            myParser.setBindIP(getConfigManager().getOption(DOMAIN_GENERAL, "bindip"));
    //#Server.java:744: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: IRCParser buildParser()
    //#    unanalyzed callee: String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#Server.java:744: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:setBindIP(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: IRCParser buildParser()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:setBindIP(String)
        }

        return myParser;
    //#Server.java:747: end of method: IRCParser com.dmdirc.Server.buildParser()
    }

    /**
     * Retrieves the MyInfo object used for the IRC Parser.
     *
     * @return The MyInfo object for our profile
     */
    @Precondition({
        "The current profile is not null",
        "The current profile specifies at least one nickname"
    })
    private MyInfo buildMyInfo() {
        Logger.assertTrue(profile != null);
    //#Server.java:760: method: MyInfo com.dmdirc.Server.buildMyInfo()
    //#Server.java:760: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.logger.Logger:assertTrue(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: MyInfo buildMyInfo()
    //#    unanalyzed callee: void com.dmdirc.logger.Logger:assertTrue(bool)
    //#input(MyInfo buildMyInfo()): DOMAIN_PROFILE
    //#input(MyInfo buildMyInfo()): this
    //#input(MyInfo buildMyInfo()): this.profile
    //#output(MyInfo buildMyInfo()): new MyInfo(buildMyInfo#1) num objects
    //#output(MyInfo buildMyInfo()): return_value
    //#new obj(MyInfo buildMyInfo()): new MyInfo(buildMyInfo#1)
    //#pre[2] (MyInfo buildMyInfo()): this.profile != null
    //#presumption(MyInfo buildMyInfo()): com.dmdirc.config.Identity:getOptionList(...)@761 != null
    //#presumption(MyInfo buildMyInfo()): com.dmdirc.config.Identity:getOptionList(...)@764 != null
    //#post(MyInfo buildMyInfo()): return_value == &new MyInfo(buildMyInfo#1)
    //#post(MyInfo buildMyInfo()): new MyInfo(buildMyInfo#1) num objects == 1
    //#test_vector(MyInfo buildMyInfo()): com.dmdirc.config.Identity:hasOptionString(...)@767: {0}, {1}
        Logger.assertTrue(!profile.getOptionList(DOMAIN_PROFILE, "nicknames").isEmpty());
    //#Server.java:761: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.config.Identity:getOptionList(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: MyInfo buildMyInfo()
    //#    unanalyzed callee: List com.dmdirc.config.Identity:getOptionList(String, String)
    //#Server.java:761: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.logger.Logger:assertTrue(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: MyInfo buildMyInfo()
    //#    unanalyzed callee: void com.dmdirc.logger.Logger:assertTrue(bool)

        final MyInfo myInfo = new MyInfo();
    //#Server.java:763: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.MyInfo()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: MyInfo buildMyInfo()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.MyInfo()
        myInfo.setNickname(profile.getOptionList(DOMAIN_PROFILE, "nicknames").get(0));
    //#Server.java:764: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.config.Identity:getOptionList(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: MyInfo buildMyInfo()
    //#    unanalyzed callee: List com.dmdirc.config.Identity:getOptionList(String, String)
    //#Server.java:764: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.MyInfo:setNickname(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: MyInfo buildMyInfo()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.MyInfo:setNickname(String)
        myInfo.setRealname(profile.getOption(DOMAIN_PROFILE, "realname"));
    //#Server.java:765: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.Identity:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: MyInfo buildMyInfo()
    //#    unanalyzed callee: String com.dmdirc.config.Identity:getOption(String, String)
    //#Server.java:765: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.MyInfo:setRealname(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: MyInfo buildMyInfo()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.MyInfo:setRealname(String)

        if (profile.hasOptionString(DOMAIN_PROFILE, "ident")) {
    //#Server.java:767: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.Identity:hasOptionString(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: MyInfo buildMyInfo()
    //#    unanalyzed callee: bool com.dmdirc.config.Identity:hasOptionString(String, String)
            myInfo.setUsername(profile.getOption(DOMAIN_PROFILE, "ident"));
    //#Server.java:768: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.Identity:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: MyInfo buildMyInfo()
    //#    unanalyzed callee: String com.dmdirc.config.Identity:getOption(String, String)
    //#Server.java:768: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.MyInfo:setUsername(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: MyInfo buildMyInfo()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.MyInfo:setUsername(String)
        }

        return myInfo;
    //#Server.java:771: end of method: MyInfo com.dmdirc.Server.buildMyInfo()
    }

    /**
     * Updates this server's icon.
     */
    private void updateIcon() {
        final String icon = myState.getState() == ServerState.CONNECTED
    //#Server.java:778: method: void com.dmdirc.Server.updateIcon()
    //#Server.java:778: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.parser.irc.ServerInfo:getSSL()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void updateIcon()
    //#    unanalyzed callee: bool com.dmdirc.parser.irc.ServerInfo:getSSL()
    //#Server.java:778: Warning: suspicious precondition
    //#    The precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.Server
    //#    method: void updateIcon()
    //#    suspicious precondition index: [2]
    //#    Attribs:  Soft
    //#input(void updateIcon()): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void updateIcon()): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void updateIcon()): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void updateIcon()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void updateIcon()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void updateIcon()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void updateIcon()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void updateIcon()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void updateIcon()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void updateIcon()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void updateIcon()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void updateIcon()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void updateIcon()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void updateIcon()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void updateIcon()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void updateIcon()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void updateIcon()): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void updateIcon()): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void updateIcon()): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void updateIcon()): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void updateIcon()): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void updateIcon()): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void updateIcon()): com/dmdirc/ServerState.CONNECTED
    //#input(void updateIcon()): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void updateIcon()): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void updateIcon()): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void updateIcon()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void updateIcon()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void updateIcon()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void updateIcon()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void updateIcon()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void updateIcon()): this
    //#input(void updateIcon()): this.__Tag
    //#input(void updateIcon()): this.changer
    //#input(void updateIcon()): this.config
    //#input(void updateIcon()): this.listeners
    //#input(void updateIcon()): this.myState
    //#input(void updateIcon()): this.myState.__Tag
    //#input(void updateIcon()): this.myState.state
    //#input(void updateIcon()): this.serverInfo
    //#output(void updateIcon()): this.icon
    //#pre[4] (void updateIcon()): this.config != null
    //#pre[5] (void updateIcon()): this.listeners != null
    //#pre[7] (void updateIcon()): this.myState != null
    //#pre[9] (void updateIcon()): this.myState.__Tag == com/dmdirc/ServerStatus
    //#pre[10] (void updateIcon()): init'ed(this.myState.state)
    //#pre[2] (void updateIcon()): (soft) this.__Tag in {com/dmdirc/Channel, com/dmdirc/CustomWindow, com/dmdirc/FrameContainer, com/dmdirc/GlobalWindow, com/dmdirc/MessageTarget, com/dmdirc/Query, com/dmdirc/Raw, com/dmdirc/Server, com/dmdirc/WritableFrameContainer, com/dmdirc/addons/dcc/DCCChatWindow, com/dmdirc/addons/dcc/DCCFrame, com/dmdirc/addons/dcc/DCCPlugin$3, com/dmdirc/addons/dcc/DCCSendWindow}
    //#pre[11] (void updateIcon()): (soft) this.serverInfo != null
    //#post(void updateIcon()): this.icon == One-of{&"secure-server", &"server", &"server-disconnected"}
    //#post(void updateIcon()): this.icon in Addr_Set{&"server-disconnected",&"server",&"secure-server"}
    //#unanalyzed(void updateIcon()): Effects-of-calling:getFrame
    //#unanalyzed(void updateIcon()): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void updateIcon()): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void updateIcon()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void updateIcon()): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void updateIcon()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void updateIcon()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void updateIcon()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void updateIcon()): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void updateIcon()): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void updateIcon()): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
                    ? serverInfo.getSSL() ? "secure-server" : "server"
                    : "server-disconnected";
        setIcon(icon);
    }
    //#Server.java:782: end of method: void com.dmdirc.Server.updateIcon()

    /**
     * Registers callbacks.
     */
    private void doCallbacks() {
        if (raw != null) {
    //#Server.java:788: method: void com.dmdirc.Server.doCallbacks()
    //#input(void doCallbacks()): "on"._tainted
    //#input(void doCallbacks()): __Descendant_Table[com/dmdirc/Server]
    //#input(void doCallbacks()): __Descendant_Table[others]
    //#input(void doCallbacks()): __Dispatch_Table.getParser()Lcom/dmdirc/parser/irc/IRCParser;
    //#input(void doCallbacks()): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void doCallbacks()): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void doCallbacks()): com/dmdirc/Channel.__Dispatch_Table.getChannelInfo()Lcom/dmdirc/parser/irc/ChannelInfo;
    //#input(void doCallbacks()): com/dmdirc/Channel.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void doCallbacks()): com/dmdirc/ChannelEventHandler.__Dispatch_Table.addCallback(Lcom/dmdirc/parser/irc/callbacks/CallbackManager;Ljava/lang/String;)V
    //#input(void doCallbacks()): com/dmdirc/ChannelEventHandler.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void doCallbacks()): com/dmdirc/EventHandler.__Descendant_Table[com/dmdirc/ChannelEventHandler]
    //#input(void doCallbacks()): com/dmdirc/EventHandler.__Descendant_Table[com/dmdirc/EventHandler]
    //#input(void doCallbacks()): com/dmdirc/EventHandler.__Descendant_Table[com/dmdirc/ServerEventHandler]
    //#input(void doCallbacks()): com/dmdirc/EventHandler.__Descendant_Table[others]
    //#input(void doCallbacks()): com/dmdirc/EventHandler.__Dispatch_Table.addCallback(Lcom/dmdirc/parser/irc/callbacks/CallbackManager;Ljava/lang/String;)V
    //#input(void doCallbacks()): com/dmdirc/EventHandler.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void doCallbacks()): com/dmdirc/EventHandler.com.dmdirc.logger.ErrorLevel.FATAL
    //#input(void doCallbacks()): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(void doCallbacks()): com/dmdirc/Query.__Descendant_Table[others]
    //#input(void doCallbacks()): com/dmdirc/Query.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(void doCallbacks()): com/dmdirc/Raw.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(void doCallbacks()): com/dmdirc/ServerEventHandler.__Descendant_Table[com/dmdirc/ServerEventHandler]
    //#input(void doCallbacks()): com/dmdirc/ServerEventHandler.__Descendant_Table[others]
    //#input(void doCallbacks()): com/dmdirc/ServerEventHandler.__Dispatch_Table.addCallback(Lcom/dmdirc/parser/irc/callbacks/CallbackManager;Ljava/lang/String;)V
    //#input(void doCallbacks()): com/dmdirc/ServerEventHandler.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void doCallbacks()): com/dmdirc/ServerEventHandler.__Dispatch_Table.registerCallbacks()V
    //#input(void doCallbacks()): this
    //#input(void doCallbacks()): this...__Tag
    //#input(void doCallbacks()): this...parser
    //#input(void doCallbacks()): this.eventHandler
    //#input(void doCallbacks()): this.eventHandler.__Tag
    //#input(void doCallbacks()): this.eventHandler.owner
    //#input(void doCallbacks()): this.eventHandler.owner.__Tag
    //#input(void doCallbacks()): this.eventHandler.owner.server
    //#input(void doCallbacks()): this.queries
    //#input(void doCallbacks()): this.raw
    //#input(void doCallbacks()): this.raw.server
    //#pre[4] (void doCallbacks()): this.eventHandler != null
    //#pre[5] (void doCallbacks()): this.eventHandler.__Tag == com/dmdirc/ServerEventHandler
    //#pre[6] (void doCallbacks()): this.eventHandler.owner != null
    //#pre[11] (void doCallbacks()): this.queries != null
    //#pre[12] (void doCallbacks()): init'ed(this.raw)
    //#pre[2] (void doCallbacks()): (soft) this...__Tag == com/dmdirc/Server
    //#pre[3] (void doCallbacks()): (soft) this...parser != null
    //#pre[10] (void doCallbacks()): (soft) this.eventHandler.owner.server != null
    //#pre[13] (void doCallbacks()): (soft) this.raw.server != null
    //#presumption(void doCallbacks()): java.util.Iterator:next(...).__Tag@794 == com/dmdirc/Query
    //#presumption(void doCallbacks()): java.util.Iterator:next(...)@794 != null
    //#presumption(void doCallbacks()): query.server.__Tag@794 == com/dmdirc/Server
    //#presumption(void doCallbacks()): query.server.parser@794 != null
    //#presumption(void doCallbacks()): query.server@794 != null
    //#unanalyzed(void doCallbacks()): Effects-of-calling:com.dmdirc.parser.irc.ClientInfo:parseHost
    //#unanalyzed(void doCallbacks()): Effects-of-calling:getParser
    //#unanalyzed(void doCallbacks()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getCallbackManager
    //#unanalyzed(void doCallbacks()): Effects-of-calling:com.dmdirc.parser.irc.callbacks.CallbackManager:addCallback
    //#unanalyzed(void doCallbacks()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void doCallbacks()): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#unanalyzed(void doCallbacks()): Effects-of-calling:getServer
    //#unanalyzed(void doCallbacks()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void doCallbacks()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void doCallbacks()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void doCallbacks()): Effects-of-calling:java.lang.Object:getClass
    //#unanalyzed(void doCallbacks()): Effects-of-calling:java.lang.Class:getInterfaces
    //#unanalyzed(void doCallbacks()): Effects-of-calling:java.lang.Class:getName
    //#unanalyzed(void doCallbacks()): Effects-of-calling:java.lang.String:startsWith
    //#unanalyzed(void doCallbacks()): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void doCallbacks()): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void doCallbacks()): Effects-of-calling:addCallback
    //#unanalyzed(void doCallbacks()): Effects-of-calling:getChannelInfo
    //#unanalyzed(void doCallbacks()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void doCallbacks()): Effects-of-calling:com.dmdirc.parser.irc.ChannelInfo:getName
    //#test_vector(void doCallbacks()): this.raw: Addr_Set{null}, Inverse{null}
    //#test_vector(void doCallbacks()): java.util.Iterator:hasNext(...)@794: {0}, {1}
            raw.registerCallbacks();
        }

        eventHandler.registerCallbacks();

        for (Query query : queries) {
            query.reregister();
        }
    }
    //#Server.java:797: end of method: void com.dmdirc.Server.doCallbacks()

    /**
     * Joins the specified channel, or adds it to the auto-join list if the
     * server is not connected.
     *
     * @param channel The channel to be joined
     */
    public void join(final String channel) {
        synchronized (myState) {
    //#Server.java:806: method: void com.dmdirc.Server.join(String)
    //#input(void join(String)): __Descendant_Table[com/dmdirc/Server]
    //#input(void join(String)): __Descendant_Table[others]
    //#input(void join(String)): __Dispatch_Table.getChannel(Ljava/lang/String;)Lcom/dmdirc/Channel;
    //#input(void join(String)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void join(String)): __Dispatch_Table.getParser()Lcom/dmdirc/parser/irc/IRCParser;
    //#input(void join(String)): __Dispatch_Table.hasChannel(Ljava/lang/String;)Z
    //#input(void join(String)): __Dispatch_Table.removeInvite(Lcom/dmdirc/Invite;)V
    //#input(void join(String)): __Dispatch_Table.removeInvites(Ljava/lang/String;)V
    //#input(void join(String)): channel
    //#input(void join(String)): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void join(String)): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void join(String)): com/dmdirc/Channel.__Dispatch_Table.activateFrame()V
    //#input(void join(String)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void join(String)): com/dmdirc/Channel.__Dispatch_Table.join()V
    //#input(void join(String)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void join(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void join(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void join(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void join(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void join(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void join(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void join(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void join(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void join(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void join(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void join(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void join(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void join(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void join(String)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void join(String)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void join(String)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void join(String)): com/dmdirc/Invite.__Descendant_Table[com/dmdirc/Invite]
    //#input(void join(String)): com/dmdirc/Invite.__Descendant_Table[others]
    //#input(void join(String)): com/dmdirc/Invite.__Dispatch_Table.getChannel()Ljava/lang/String;
    //#input(void join(String)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void join(String)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void join(String)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void join(String)): com/dmdirc/ServerState.CONNECTED
    //#input(void join(String)): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void join(String)): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void join(String)): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void join(String)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void join(String)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void join(String)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void join(String)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void join(String)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void join(String)): this
    //#input(void join(String)): this.__Tag
    //#input(void join(String)): this.autochannels
    //#input(void join(String)): this.channels
    //#input(void join(String)): this.converter
    //#input(void join(String)): this.invites
    //#input(void join(String)): this.listeners
    //#input(void join(String)): this.myState
    //#input(void join(String)): this.myState.__Tag
    //#input(void join(String)): this.myState.state
    //#input(void join(String)): this.parser
    //#pre[11] (void join(String)): this.myState != null
    //#pre[13] (void join(String)): this.myState.__Tag == com/dmdirc/ServerStatus
    //#pre[14] (void join(String)): init'ed(this.myState.state)
    //#pre[3] (void join(String)): (soft) this.__Tag == com/dmdirc/Server
    //#pre[4] (void join(String)): (soft) this.autochannels != null
    //#pre[5] (void join(String)): (soft) this.channels != null
    //#pre[6] (void join(String)): (soft) this.converter != null
    //#pre[7] (void join(String)): (soft) this.invites != null
    //#pre[9] (void join(String)): (soft) this.listeners != null
    //#pre[15] (void join(String)): (soft) this.parser != null
    //#presumption(void join(String)): getChannel(...).channelInfo@811 != null
    //#presumption(void join(String)): getChannel(...).config@811 != null
    //#presumption(void join(String)): getChannel(...).listeners@811 != null
    //#presumption(void join(String)): getChannel(...).server.__Tag@811 == com/dmdirc/Server
    //#presumption(void join(String)): getChannel(...).server.parser@811 != null
    //#presumption(void join(String)): getChannel(...).server@811 != null
    //#presumption(void join(String)): java.util.Map:get(...)@455 != null
    //#presumption(void join(String)): java.util.Map:get(...)@455 != null
    //#presumption(void join(String)): java.util.Map:get(...)@455.__Tag == com/dmdirc/Channel
    //#presumption(void join(String)): java.util.Map:get(...)@455.__Tag == com/dmdirc/Channel
    //#unanalyzed(void join(String)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void join(String)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void join(String)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void join(String)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void join(String)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void join(String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void join(String)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void join(String)): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void join(String)): Effects-of-calling:com.dmdirc.parser.irc.IRCStringConverter:toLowerCase
    //#unanalyzed(void join(String)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void join(String)): Effects-of-calling:com.dmdirc.interfaces.InviteListener:inviteExpired
    //#unanalyzed(void join(String)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void join(String)): Effects-of-calling:getParser
    //#unanalyzed(void join(String)): Effects-of-calling:com.dmdirc.parser.irc.ChannelInfo:getName
    //#unanalyzed(void join(String)): Effects-of-calling:setIcon
    //#unanalyzed(void join(String)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:joinChannel
    //#unanalyzed(void join(String)): Effects-of-calling:activateFrame
    //#unanalyzed(void join(String)): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void join(String)): Effects-of-calling:getFrame
    //#unanalyzed(void join(String)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void join(String)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void join(String)): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void join(String)): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void join(String)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void join(String)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:activateFrame
    //#test_vector(void join(String)): java.util.Map:containsKey(...)@445: {0}, {1}
            if (myState.getState() == ServerState.CONNECTED) {
                removeInvites(channel);

                if (hasChannel(channel)) {
                    getChannel(channel).join();
                    getChannel(channel).activateFrame();
                } else {
                    parser.joinChannel(channel);
    //#Server.java:814: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:joinChannel(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void join(String)
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:joinChannel(String)
                }
            } else {
                autochannels.add(channel);
            }
        }
    }
    //#Server.java:820: end of method: void com.dmdirc.Server.join(String)

    /** {@inheritDoc} */
    @Override
    public void sendLine(final String line) {
        synchronized (myState) {
    //#Server.java:825: method: void com.dmdirc.Server.sendLine(String)
    //#input(void sendLine(String)): com/dmdirc/ServerState.CONNECTED
    //#input(void sendLine(String)): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void sendLine(String)): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void sendLine(String)): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void sendLine(String)): line
    //#input(void sendLine(String)): this
    //#input(void sendLine(String)): this.myState
    //#input(void sendLine(String)): this.myState.__Tag
    //#input(void sendLine(String)): this.myState.state
    //#input(void sendLine(String)): this.parser
    //#input(void sendLine(String)): this.window
    //#pre[7] (void sendLine(String)): init'ed(this.parser)
    //#pre[3] (void sendLine(String)): (soft) this.myState != null
    //#pre[5] (void sendLine(String)): (soft) this.myState.__Tag == com/dmdirc/ServerStatus
    //#pre[6] (void sendLine(String)): (soft) init'ed(this.myState.state)
    //#pre[8] (void sendLine(String)): (soft) this.window != null
    //#presumption(void sendLine(String)): com.dmdirc.ui.interfaces.ServerWindow:getTranscoder(...)@827 != null
            if (parser != null && myState.getState() == ServerState.CONNECTED) {
                parser.sendLine(window.getTranscoder().encode(line));
    //#Server.java:827: Warning: method not available - call not analyzed
    //#    call on StringTranscoder com.dmdirc.ui.interfaces.ServerWindow:getTranscoder()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void sendLine(String)
    //#    unanalyzed callee: StringTranscoder com.dmdirc.ui.interfaces.ServerWindow:getTranscoder()
    //#Server.java:827: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.util.StringTranscoder:encode(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void sendLine(String)
    //#    unanalyzed callee: String com.dmdirc.util.StringTranscoder:encode(String)
    //#Server.java:827: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:sendLine(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void sendLine(String)
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:sendLine(String)
            }
        }
    }
    //#Server.java:830: end of method: void com.dmdirc.Server.sendLine(String)

    /** {@inheritDoc} */
    @Override
    public int getMaxLineLength() {
        return IRCParser.MAX_LINELENGTH;
    //#Server.java:835: method: int com.dmdirc.Server.getMaxLineLength()
    //#output(int getMaxLineLength()): return_value
    //#post(int getMaxLineLength()): return_value == 510
    //#Server.java:835: end of method: int com.dmdirc.Server.getMaxLineLength()
    }

    /**
     * Retrieves the parser used for this connection.
     *
     * @return IRCParser this connection's parser
     */
    public IRCParser getParser() {
        return parser;
    //#Server.java:844: method: IRCParser com.dmdirc.Server.getParser()
    //#input(IRCParser getParser()): this
    //#input(IRCParser getParser()): this.parser
    //#output(IRCParser getParser()): return_value
    //#pre[2] (IRCParser getParser()): init'ed(this.parser)
    //#post(IRCParser getParser()): return_value == this.parser
    //#post(IRCParser getParser()): init'ed(return_value)
    //#Server.java:844: end of method: IRCParser com.dmdirc.Server.getParser()
    }

    /**
     * Retrieves the profile that's in use for this server.
     *
     * @return The profile in use by this server
     */
    public Identity getProfile() {
        return profile;
    //#Server.java:853: method: Identity com.dmdirc.Server.getProfile()
    //#input(Identity getProfile()): this
    //#input(Identity getProfile()): this.profile
    //#output(Identity getProfile()): return_value
    //#pre[2] (Identity getProfile()): init'ed(this.profile)
    //#post(Identity getProfile()): return_value == this.profile
    //#post(Identity getProfile()): init'ed(return_value)
    //#Server.java:853: end of method: Identity com.dmdirc.Server.getProfile()
    }

    /**
     * Retrieves the name of this server.
     *
     * @return The name of this server
     */
    public String getName() {
        return serverInfo.getHost();
    //#Server.java:862: method: String com.dmdirc.Server.getName()
    //#Server.java:862: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ServerInfo:getHost()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: String getName()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ServerInfo:getHost()
    //#input(String getName()): this
    //#input(String getName()): this.serverInfo
    //#output(String getName()): return_value
    //#pre[2] (String getName()): this.serverInfo != null
    //#post(String getName()): init'ed(return_value)
    //#Server.java:862: end of method: String com.dmdirc.Server.getName()
    }

    /**
     * Retrieves the name of this server's network. The network name is
     * determined using the following rules:
     *
     *  1. If the server includes its network name in the 005 information, we
     *     use that
     *  2. If the server's name ends in biz, com, info, net or org, we use the
     *     second level domain (e.g., foo.com)
     *  3. If the server's name contains more than two dots, we drop everything
     *     up to and including the first part, and use the remainder
     *  4. In all other cases, we use the full server name
     *
     * @return The name of this server's network
     */
    public String getNetwork() {
        if (parser == null) {
    //#Server.java:880: method: String com.dmdirc.Server.getNetwork()
    //#input(String getNetwork()): ")"._tainted
    //#input(String getNetwork()): "."._tainted
    //#input(String getNetwork()): "biz"._tainted
    //#input(String getNetwork()): "com"._tainted
    //#input(String getNetwork()): "getNetwork called when parser is null (state: "._tainted
    //#input(String getNetwork()): "info"._tainted
    //#input(String getNetwork()): "net"._tainted
    //#input(String getNetwork()): "org"._tainted
    //#input(String getNetwork()): __Descendant_Table[com/dmdirc/Server]
    //#input(String getNetwork()): __Descendant_Table[others]
    //#input(String getNetwork()): __Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(String getNetwork()): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(String getNetwork()): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(String getNetwork()): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(String getNetwork()): this
    //#input(String getNetwork()): this.__Tag
    //#input(String getNetwork()): this.myState
    //#input(String getNetwork()): this.myState.__Tag
    //#input(String getNetwork()): this.myState.state._tainted
    //#input(String getNetwork()): this.parser
    //#output(String getNetwork()): java.lang.StringBuilder:toString(...)._tainted
    //#output(String getNetwork()): return_value
    //#new obj(String getNetwork()): java.lang.StringBuilder:toString(...)
    //#pre[8] (String getNetwork()): this.parser != null
    //#presumption(String getNetwork()): com.dmdirc.parser.irc.IRCParser:getNetworkName(...)@883 != null
    //#presumption(String getNetwork()): com.dmdirc.parser.irc.IRCParser:getServerName(...)@884 != null
    //#post(String getNetwork()): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(String getNetwork()): init'ed(return_value)
    //#unanalyzed(String getNetwork()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(String getNetwork()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(String getNetwork()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(String getNetwork()): Effects-of-calling:java.lang.String:split
    //#unanalyzed(String getNetwork()): Effects-of-calling:java.lang.String:endsWith
    //#unanalyzed(String getNetwork()): Effects-of-calling:java.lang.StringBuilder:length
    //#test_vector(String getNetwork()): java.lang.String:isEmpty(...)@883: {0}, {1}
            throw new IllegalStateException("getNetwork called when "
                    + "parser is null (state: " + getState() + ")");
        } else if (parser.getNetworkName().isEmpty()) {
    //#Server.java:883: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getNetworkName()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: String getNetwork()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getNetworkName()
            return getNetworkFromServerName(parser.getServerName());
    //#Server.java:884: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getServerName()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: String getNetwork()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getServerName()
        } else {
            return parser.getNetworkName();
    //#Server.java:886: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getNetworkName()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: String getNetwork()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getNetworkName()
    //#Server.java:886: end of method: String com.dmdirc.Server.getNetwork()
        }
    }

    /**
     * Determines whether this server is currently connected to the specified
     * network.
     *
     * @param target The network to check for
     * @return True if this server is connected to the network, false otherwise
     * @since 0.6.3m1rc3
     */
    public boolean isNetwork(String target) {
        synchronized (myState) {
    //#Server.java:899: method: bool com.dmdirc.Server.isNetwork(String)
    //#input(bool isNetwork(String)): ")"._tainted
    //#input(bool isNetwork(String)): "."._tainted
    //#input(bool isNetwork(String)): "biz"._tainted
    //#input(bool isNetwork(String)): "com"._tainted
    //#input(bool isNetwork(String)): "getNetwork called when parser is null (state: "._tainted
    //#input(bool isNetwork(String)): "info"._tainted
    //#input(bool isNetwork(String)): "net"._tainted
    //#input(bool isNetwork(String)): "org"._tainted
    //#input(bool isNetwork(String)): __Descendant_Table[com/dmdirc/Server]
    //#input(bool isNetwork(String)): __Descendant_Table[others]
    //#input(bool isNetwork(String)): __Dispatch_Table.getNetwork()Ljava/lang/String;
    //#input(bool isNetwork(String)): __Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(bool isNetwork(String)): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(bool isNetwork(String)): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(bool isNetwork(String)): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(bool isNetwork(String)): target
    //#input(bool isNetwork(String)): this
    //#input(bool isNetwork(String)): this.__Tag
    //#input(bool isNetwork(String)): this.myState
    //#input(bool isNetwork(String)): this.myState.__Tag
    //#input(bool isNetwork(String)): this.myState.state._tainted
    //#input(bool isNetwork(String)): this.parser
    //#output(bool isNetwork(String)): return_value
    //#pre[9] (bool isNetwork(String)): init'ed(this.parser)
    //#pre[3] (bool isNetwork(String)): (soft) this.__Tag == com/dmdirc/Server
    //#post(bool isNetwork(String)): init'ed(return_value)
    //#unanalyzed(bool isNetwork(String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(bool isNetwork(String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(bool isNetwork(String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(bool isNetwork(String)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(bool isNetwork(String)): Effects-of-calling:java.lang.String:endsWith
    //#unanalyzed(bool isNetwork(String)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(bool isNetwork(String)): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(bool isNetwork(String)): Effects-of-calling:java.lang.IllegalStateException
    //#unanalyzed(bool isNetwork(String)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getNetworkName
    //#unanalyzed(bool isNetwork(String)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getServerName
    //#test_vector(bool isNetwork(String)): this.parser: Inverse{null}, Addr_Set{null}
            if (parser == null) {
                return false;
            } else {
                return getNetwork().equalsIgnoreCase(target);
    //#Server.java:903: ?null dereference
    //#    getNetwork(...) != null
    //#    severity: MEDIUM
    //#    class: com.dmdirc.Server
    //#    method: bool isNetwork(String)
    //#    basic block: bb_5
    //#    assertion: getNetwork(...) != null
    //#    VN: getNetwork(...)
    //#    Expected: Inverse{null} or Invalid
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
            }
        }
    //#Server.java:905: end of method: bool com.dmdirc.Server.isNetwork(String)
    }

    /**
     * Calculates a network name from the specified server name. This method
     * implements parts 2-4 of the procedure documented at getNetwork().
     *
     * @param serverName The server name to parse
     * @return A network name for the specified server
     */
    protected static String getNetworkFromServerName(final String serverName) {
        final String[] parts = serverName.split("\\.");
    //#Server.java:916: method: String com.dmdirc.Server.getNetworkFromServerName(String)
    //#input(String getNetworkFromServerName(String)): "."._tainted
    //#input(String getNetworkFromServerName(String)): "biz"._tainted
    //#input(String getNetworkFromServerName(String)): "com"._tainted
    //#input(String getNetworkFromServerName(String)): "info"._tainted
    //#input(String getNetworkFromServerName(String)): "net"._tainted
    //#input(String getNetworkFromServerName(String)): "org"._tainted
    //#input(String getNetworkFromServerName(String)): serverName
    //#input(String getNetworkFromServerName(String)): serverName._tainted
    //#output(String getNetworkFromServerName(String)): java.lang.StringBuilder:toString(...)._tainted
    //#output(String getNetworkFromServerName(String)): return_value
    //#new obj(String getNetworkFromServerName(String)): java.lang.StringBuilder:toString(...)
    //#pre[1] (String getNetworkFromServerName(String)): serverName != null
    //#post(String getNetworkFromServerName(String)): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(String getNetworkFromServerName(String)): return_value == One-of{&java.lang.StringBuilder:toString(...), serverName}
    //#post(String getNetworkFromServerName(String)): return_value != null
    //#test_vector(String getNetworkFromServerName(String)): java.lang.String:endsWith(...)@921: {0}, {1}
        final String[] tlds = {"biz", "com", "info", "net", "org"};
        boolean isTLD = false;

        for (String tld : tlds) {
            if (serverName.endsWith("." + tld)) {
                isTLD = true;
            }
        }

        if (isTLD && parts.length > 2) {
    //#Server.java:926: ?use of default init
    //#    init'ed(parts.length)
    //#    severity: LOW
    //#    class: com.dmdirc.Server
    //#    method: String getNetworkFromServerName(String)
    //#    basic block: bb_7
    //#    assertion: init'ed(parts.length)
    //#    VN: undefined
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid
    //#Server.java:926: Warning: test always goes same way
    //#    Test predetermined because parts.length == 0
    //#    severity: LOW
    //#    class: com.dmdirc.Server
    //#    method: String getNetworkFromServerName(String)
    //#    from bb: bb_7
    //#    live edge: bb_7-->bb_9
    //#    tested vn: undefined - 2
    //#    tested vn values: {-2}
            return parts[parts.length - 2] + "." + parts[parts.length - 1];
    //#Server.java:927: Warning: dead code
    //#    Dead code here because parts.length == 0
    //#    severity: LOW
    //#    class: com.dmdirc.Server
    //#    method: String getNetworkFromServerName(String)
    //#    dead bb: bb_8
        } else if (parts.length > 2) {
    //#Server.java:928: ?use of default init
    //#    init'ed(parts.length)
    //#    severity: LOW
    //#    class: com.dmdirc.Server
    //#    method: String getNetworkFromServerName(String)
    //#    basic block: bb_9
    //#    assertion: init'ed(parts.length)
    //#    VN: undefined
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid
    //#Server.java:928: Warning: test always goes same way
    //#    Test predetermined because parts.length == 0
    //#    severity: LOW
    //#    class: com.dmdirc.Server
    //#    method: String getNetworkFromServerName(String)
    //#    from bb: bb_9
    //#    live edge: bb_9-->bb_16
    //#    tested vn: undefined - 2
    //#    tested vn values: {-2}
            final StringBuilder network = new StringBuilder();
    //#Server.java:929: Warning: dead code
    //#    Dead code here because parts.length == 0
    //#    severity: LOW
    //#    class: com.dmdirc.Server
    //#    method: String getNetworkFromServerName(String)
    //#    dead bb: bb_10

            for (int i = 1; i < parts.length; i++) {
    //#Server.java:931: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: String getNetworkFromServerName(String)
    //#    dead bb: bb_11
                if (network.length() > 0) {
    //#Server.java:932: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: String getNetworkFromServerName(String)
    //#    dead bb: bb_12
                    network.append('.');
    //#Server.java:933: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: String getNetworkFromServerName(String)
    //#    dead bb: bb_13
                }

                network.append(parts[i]);
    //#Server.java:936: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: String getNetworkFromServerName(String)
    //#    dead bb: bb_14
            }

            return network.toString();
    //#Server.java:939: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: String getNetworkFromServerName(String)
    //#    dead bb: bb_15
        } else {
            return serverName;
    //#Server.java:941: end of method: String com.dmdirc.Server.getNetworkFromServerName(String)
        }
    }

    /**
     * Retrieves the name of this server's IRCd.
     *
     * @return The name of this server's IRCd
     */
    public String getIrcd() {
        return parser.getIRCD(true);
    //#Server.java:951: method: String com.dmdirc.Server.getIrcd()
    //#Server.java:951: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getIRCD(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: String getIrcd()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getIRCD(bool)
    //#input(String getIrcd()): this
    //#input(String getIrcd()): this.parser
    //#output(String getIrcd()): return_value
    //#pre[2] (String getIrcd()): this.parser != null
    //#post(String getIrcd()): init'ed(return_value)
    //#Server.java:951: end of method: String com.dmdirc.Server.getIrcd()
    }

    /**
     * Returns the current away status.
     *
     * @return True if the client is marked as away, false otherwise
     */
    public boolean isAway() {
        return awayMessage != null;
    //#Server.java:960: method: bool com.dmdirc.Server.isAway()
    //#input(bool isAway()): this
    //#input(bool isAway()): this.awayMessage
    //#output(bool isAway()): return_value
    //#pre[2] (bool isAway()): init'ed(this.awayMessage)
    //#post(bool isAway()): init'ed(return_value)
    //#Server.java:960: end of method: bool com.dmdirc.Server.isAway()
    }

    /**
     * Gets the current away message.
     *
     * @return Null if the client isn't away, or a textual away message if it is
     */
    public String getAwayMessage() {
        return awayMessage;
    //#Server.java:969: method: String com.dmdirc.Server.getAwayMessage()
    //#input(String getAwayMessage()): this
    //#input(String getAwayMessage()): this.awayMessage
    //#output(String getAwayMessage()): return_value
    //#pre[2] (String getAwayMessage()): init'ed(this.awayMessage)
    //#post(String getAwayMessage()): return_value == this.awayMessage
    //#post(String getAwayMessage()): init'ed(return_value)
    //#Server.java:969: end of method: String com.dmdirc.Server.getAwayMessage()
    }

    /**
     * Returns the tab completer for this connection.
     *
     * @return The tab completer for this server
     */
    public TabCompleter getTabCompleter() {
        return tabCompleter;
    //#Server.java:978: method: TabCompleter com.dmdirc.Server.getTabCompleter()
    //#input(TabCompleter getTabCompleter()): this
    //#input(TabCompleter getTabCompleter()): this.tabCompleter
    //#output(TabCompleter getTabCompleter()): return_value
    //#post(TabCompleter getTabCompleter()): return_value == this.tabCompleter
    //#post(TabCompleter getTabCompleter()): init'ed(return_value)
    //#Server.java:978: end of method: TabCompleter com.dmdirc.Server.getTabCompleter()
    }

    /** {@inheritDoc} */
    @Override
    public InputWindow getFrame() {
        return window;
    //#Server.java:984: method: InputWindow com.dmdirc.Server.getFrame()
    //#input(InputWindow getFrame()): this
    //#input(InputWindow getFrame()): this.window
    //#output(InputWindow getFrame()): return_value
    //#pre[2] (InputWindow getFrame()): init'ed(this.window)
    //#post(InputWindow getFrame()): return_value == this.window
    //#post(InputWindow getFrame()): init'ed(return_value)
    //#Server.java:984: end of method: InputWindow com.dmdirc.Server.getFrame()
    }

    /**
     * Retrieves the current state for this server.
     *
     * @return This server's state
     */
    public ServerState getState() {
        return myState.getState();
    //#Server.java:993: method: ServerState com.dmdirc.Server.getState()
    //#input(ServerState getState()): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(ServerState getState()): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(ServerState getState()): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(ServerState getState()): this
    //#input(ServerState getState()): this.myState
    //#input(ServerState getState()): this.myState.__Tag
    //#input(ServerState getState()): this.myState.state
    //#output(ServerState getState()): return_value
    //#pre[2] (ServerState getState()): this.myState != null
    //#pre[4] (ServerState getState()): this.myState.__Tag == com/dmdirc/ServerStatus
    //#pre[5] (ServerState getState()): init'ed(this.myState.state)
    //#post(ServerState getState()): return_value == this.myState.state
    //#post(ServerState getState()): init'ed(return_value)
    //#Server.java:993: end of method: ServerState com.dmdirc.Server.getState()
    }

    /**
     * Retrieves the status object for this server. Effecting state transitions
     * on the object returned by this method will almost certainly cause
     * problems.
     *
     * @since 0.6.3m1
     * @return This server's status object.
     */
    public ServerStatus getStatus() {
        return myState;
    //#Server.java:1005: method: ServerStatus com.dmdirc.Server.getStatus()
    //#input(ServerStatus getStatus()): this
    //#input(ServerStatus getStatus()): this.myState
    //#output(ServerStatus getStatus()): return_value
    //#post(ServerStatus getStatus()): return_value == this.myState
    //#post(ServerStatus getStatus()): init'ed(return_value)
    //#Server.java:1005: end of method: ServerStatus com.dmdirc.Server.getStatus()
    }

    /** {@inheritDoc} */
    @Override
    public void windowClosing() {
        synchronized (myState) {
    //#Server.java:1011: method: void com.dmdirc.Server.windowClosing()
    //#input(void windowClosing()): " ["._tainted
    //#input(void windowClosing()): "->"._tainted
    //#input(void windowClosing()): "Illegal server state transition&#10;&#10;"._tainted
    //#input(void windowClosing()): DOMAIN_GENERAL
    //#input(void windowClosing()): __Descendant_Table[com/dmdirc/Server]
    //#input(void windowClosing()): __Descendant_Table[others]
    //#input(void windowClosing()): __Dispatch_Table.disconnect()V
    //#input(void windowClosing()): __Dispatch_Table.disconnect(Ljava/lang/String;)V
    //#input(void windowClosing()): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void windowClosing()): __Dispatch_Table.getParser()Lcom/dmdirc/parser/irc/IRCParser;
    //#input(void windowClosing()): __Dispatch_Table.removeInvite(Lcom/dmdirc/Invite;)V
    //#input(void windowClosing()): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1).length
    //#input(void windowClosing()): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295]
    //#input(void windowClosing()): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#13).transitions
    //#input(void windowClosing()): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#7).transitions
    //#input(void windowClosing()): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#9).transitions
    //#input(void windowClosing()): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void windowClosing()): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void windowClosing()): com/dmdirc/Channel.__Dispatch_Table.close()V
    //#input(void windowClosing()): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void windowClosing()): com/dmdirc/Channel.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void windowClosing()): com/dmdirc/Channel.__Dispatch_Table.resetWindow()V
    //#input(void windowClosing()): com/dmdirc/ChannelEventHandler.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void windowClosing()): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void windowClosing()): com/dmdirc/EventHandler.__Descendant_Table[com/dmdirc/ChannelEventHandler]
    //#input(void windowClosing()): com/dmdirc/EventHandler.__Descendant_Table[com/dmdirc/EventHandler]
    //#input(void windowClosing()): com/dmdirc/EventHandler.__Descendant_Table[com/dmdirc/ServerEventHandler]
    //#input(void windowClosing()): com/dmdirc/EventHandler.__Descendant_Table[others]
    //#input(void windowClosing()): com/dmdirc/EventHandler.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void windowClosing()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void windowClosing()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void windowClosing()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void windowClosing()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void windowClosing()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void windowClosing()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void windowClosing()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void windowClosing()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void windowClosing()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void windowClosing()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void windowClosing()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void windowClosing()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void windowClosing()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void windowClosing()): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void windowClosing()): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void windowClosing()): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void windowClosing()): com/dmdirc/Invite.__Descendant_Table[com/dmdirc/Invite]
    //#input(void windowClosing()): com/dmdirc/Invite.__Descendant_Table[others]
    //#input(void windowClosing()): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void windowClosing()): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(void windowClosing()): com/dmdirc/Query.__Descendant_Table[others]
    //#input(void windowClosing()): com/dmdirc/Query.__Dispatch_Table.close()V
    //#input(void windowClosing()): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void windowClosing()): com/dmdirc/Raw.__Descendant_Table[com/dmdirc/Raw]
    //#input(void windowClosing()): com/dmdirc/Raw.__Descendant_Table[others]
    //#input(void windowClosing()): com/dmdirc/Raw.__Dispatch_Table.close()V
    //#input(void windowClosing()): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void windowClosing()): com/dmdirc/Server$4.$SwitchMap$com$dmdirc$ServerState
    //#input(void windowClosing()): com/dmdirc/ServerEventHandler.__Descendant_Table[com/dmdirc/ServerEventHandler]
    //#input(void windowClosing()): com/dmdirc/ServerEventHandler.__Descendant_Table[others]
    //#input(void windowClosing()): com/dmdirc/ServerEventHandler.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void windowClosing()): com/dmdirc/ServerEventHandler.__Dispatch_Table.unregisterCallbacks()V
    //#input(void windowClosing()): com/dmdirc/ServerManager.__Class_Obj.__Lock
    //#input(void windowClosing()): com/dmdirc/ServerManager.me
    //#input(void windowClosing()): com/dmdirc/ServerManager.me.servers
    //#input(void windowClosing()): com/dmdirc/ServerManager.me.servers.__Lock
    //#input(void windowClosing()): com/dmdirc/ServerState.CLOSING
    //#input(void windowClosing()): com/dmdirc/ServerState.CONNECTED
    //#input(void windowClosing()): com/dmdirc/ServerState.DISCONNECTED
    //#input(void windowClosing()): com/dmdirc/ServerState.DISCONNECTING
    //#input(void windowClosing()): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void windowClosing()): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void windowClosing()): com/dmdirc/ServerStatus.__Dispatch_Table.addHistoryEntry(Lcom/dmdirc/ServerState;Lcom/dmdirc/ServerState;)V
    //#input(void windowClosing()): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void windowClosing()): com/dmdirc/ServerStatus.__Dispatch_Table.getTransitionHistory()Ljava/lang/String;
    //#input(void windowClosing()): com/dmdirc/ServerStatus.__Dispatch_Table.transition(Lcom/dmdirc/ServerState;)V
    //#input(void windowClosing()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void windowClosing()): this
    //#input(void windowClosing()): this...__Tag
    //#input(void windowClosing()): this.__Tag
    //#input(void windowClosing()): this.changer
    //#input(void windowClosing()): this.channels
    //#input(void windowClosing()): this.config
    //#input(void windowClosing()): this.eventHandler
    //#input(void windowClosing()): this.eventHandler.__Tag
    //#input(void windowClosing()): this.eventHandler.owner
    //#input(void windowClosing()): this.eventHandler.owner.__Tag
    //#input(void windowClosing()): this.eventHandler.owner.server
    //#input(void windowClosing()): this.invites
    //#input(void windowClosing()): this.listeners
    //#input(void windowClosing()): this.myState
    //#input(void windowClosing()): this.myState.__Tag
    //#input(void windowClosing()): this.myState.history
    //#input(void windowClosing()): this.myState.state
    //#input(void windowClosing()): this.myState.state.transitions
    //#input(void windowClosing()): this.parser
    //#input(void windowClosing()): this.parserThread
    //#input(void windowClosing()): this.queries
    //#input(void windowClosing()): this.raw
    //#input(void windowClosing()): this.raw.__Tag
    //#input(void windowClosing()): this.reconnectTimer
    //#input(void windowClosing()): this.serverInfo
    //#input(void windowClosing()): this.window
    //#output(void windowClosing()): com/dmdirc/ServerManager.me
    //#output(void windowClosing()): new ArrayList(ServerManager#1) num objects
    //#output(void windowClosing()): new ArrayList(ServerManager#1).__Lock
    //#output(void windowClosing()): new ServerManager(getServerManager#1) num objects
    //#output(void windowClosing()): new ServerManager(getServerManager#1).__Tag
    //#output(void windowClosing()): new ServerManager(getServerManager#1).servers
    //#output(void windowClosing()): this.icon
    //#output(void windowClosing()): this.myState.state
    //#output(void windowClosing()): this.parser
    //#output(void windowClosing()): this.window
    //#new obj(void windowClosing()): new ArrayList(ServerManager#1)
    //#new obj(void windowClosing()): new ServerManager(getServerManager#1)
    //#pre[2] (void windowClosing()): init'ed(com/dmdirc/ServerManager.me)
    //#pre[5] (void windowClosing()): init'ed(this.parser)
    //#pre[6] (void windowClosing()): this.window != null
    //#pre[12] (void windowClosing()): this.channels != null
    //#pre[14] (void windowClosing()): this.eventHandler != null
    //#pre[15] (void windowClosing()): this.eventHandler.__Tag == com/dmdirc/ServerEventHandler
    //#pre[16] (void windowClosing()): this.eventHandler.owner != null
    //#pre[24] (void windowClosing()): this.myState != null
    //#pre[26] (void windowClosing()): this.myState.__Tag == com/dmdirc/ServerStatus
    //#pre[27] (void windowClosing()): this.myState.history != null
    //#pre[31] (void windowClosing()): init'ed(this.raw)
    //#pre[1] (void windowClosing()): (soft) init'ed(com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295])
    //#pre[4] (void windowClosing()): (soft) this.myState.state != null
    //#pre[10] (void windowClosing()): (soft) this.__Tag == com/dmdirc/Server
    //#pre[13] (void windowClosing()): (soft) this.config != null
    //#pre[19] (void windowClosing()): (soft) this.eventHandler.owner.server != null
    //#pre[20] (void windowClosing()): (soft) this.invites != null
    //#pre[22] (void windowClosing()): (soft) this.listeners != null
    //#pre[28] (void windowClosing()): (soft) this.myState.state.transitions != null
    //#pre[29] (void windowClosing()): (soft) this.parserThread != null
    //#pre[32] (void windowClosing()): (soft) this.raw.__Tag == com/dmdirc/Raw
    //#pre[33] (void windowClosing()): (soft) this.reconnectTimer != null
    //#pre[34] (void windowClosing()): (soft) this.serverInfo != null
    //#presumption(void windowClosing()): getServerManager(...).servers != null
    //#presumption(void windowClosing()): java.util.Arrays:asList(...)@89 != null
    //#post(void windowClosing()): com/dmdirc/ServerManager.me == One-of{old com/dmdirc/ServerManager.me, &new ServerManager(getServerManager#1)}
    //#post(void windowClosing()): com/dmdirc/ServerManager.me != null
    //#post(void windowClosing()): this.icon == One-of{old this.icon, &"secure-server", &"server", &"server-disconnected"}
    //#post(void windowClosing()): this.myState.state == &com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#13)
    //#post(void windowClosing()): this.parser == null
    //#post(void windowClosing()): this.window == null
    //#post(void windowClosing()): new ArrayList(ServerManager#1) num objects <= 1
    //#post(void windowClosing()): init'ed(new ArrayList(ServerManager#1).__Lock)
    //#post(void windowClosing()): new ServerManager(getServerManager#1) num objects <= 1
    //#post(void windowClosing()): new ServerManager(getServerManager#1).__Tag == com/dmdirc/ServerManager
    //#post(void windowClosing()): new ServerManager(getServerManager#1).servers == &new ArrayList(ServerManager#1)
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void windowClosing()): Effects-of-calling:getConfigManager
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.Map:values
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.interfaces.InviteListener:inviteExpired
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(void windowClosing()): Effects-of-calling:getParser
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.ServerState:ordinal
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.Timer:cancel
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.util.RollingList:getList
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.ServerState:name
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.Thread:currentThread
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.Thread:getStackTrace
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.StackTraceElement:toString
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.Thread:getName
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.util.RollingList:add
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.List:contains
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.Object:notifyAll
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void windowClosing()): Effects-of-calling:updateIcon
    //#unanalyzed(void windowClosing()): Effects-of-calling:removeInvites
    //#unanalyzed(void windowClosing()): Effects-of-calling:setIcon
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(void windowClosing()): Effects-of-calling:getServer
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getCallbackManager
    //#unanalyzed(void windowClosing()): Effects-of-calling:clearChannels
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.Thread:interrupt
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:disconnect
    //#unanalyzed(void windowClosing()): Effects-of-calling:closeChannels
    //#unanalyzed(void windowClosing()): Effects-of-calling:closeQueries
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getSSL
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.parser.irc.callbacks.CallbackManager:delAllCallback
    //#unanalyzed(void windowClosing()): Effects-of-calling:close
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.ui.interfaces.ChannelWindow:updateNames
    //#unanalyzed(void windowClosing()): Effects-of-calling:getFrame
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:close
    //#test_vector(void windowClosing()): this.parser: Addr_Set{null}, Inverse{null}
    //#test_vector(void windowClosing()): this.raw: Addr_Set{null}, Inverse{null}
    //#test_vector(void windowClosing()): com.dmdirc.parser.irc.IRCParser:isReady(...)@1019: {0}, {1}
            // 1: Make the window non-visible
            window.setVisible(false);
    //#Server.java:1013: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.ServerWindow:setVisible(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void windowClosing()
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.ServerWindow:setVisible(bool)

            // 2: Remove any callbacks or listeners
            eventHandler.unregisterCallbacks();

            // 3: Trigger any actions neccessary
            if (parser != null && parser.isReady()) {
    //#Server.java:1019: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.parser.irc.IRCParser:isReady()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void windowClosing()
    //#    unanalyzed callee: bool com.dmdirc.parser.irc.IRCParser:isReady()
                disconnect();
            }

            myState.transition(ServerState.CLOSING);
        }
        
        closeChannels();
        closeQueries();
        removeInvites();

        if (raw != null) {
            raw.close();
        }

        // 4: Trigger action for the window closing
        // 5: Inform any parents that the window is closing
        ServerManager.getServerManager().unregisterServer(this);

        // 6: Remove the window from the window manager
        WindowManager.removeWindow(window);
    //#Server.java:1039: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.WindowManager:removeWindow(Window)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void windowClosing()
    //#    unanalyzed callee: void com.dmdirc.ui.WindowManager:removeWindow(Window)

        // 7: Remove any references to the window and parents
        window = null; //NOPMD
        parser = null; //NOPMD
    }
    //#Server.java:1044: end of method: void com.dmdirc.Server.windowClosing()

    /**
     * Passes the arguments to the most recently activated frame for this
     * server. If the frame isn't know, or isn't visible, use this frame
     * instead.
     *
     * @param messageType The type of message to send
     * @param args The arguments for the message
     */
    public void addLineToActive(final String messageType, final Object... args) {
        if (activeFrame == null || !activeFrame.getFrame().isVisible()) {
    //#Server.java:1055: method: void com.dmdirc.Server.addLineToActive(String, Object[])
    //#Server.java:1055: Warning: call too complex - analysis skipped
    //#    call on Window getFrame()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void addLineToActive(String, Object[])
    //#    unanalyzed callee: Window getFrame()
    //#Server.java:1055: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.ui.interfaces.Window:isVisible()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void addLineToActive(String, Object[])
    //#    unanalyzed callee: bool com.dmdirc.ui.interfaces.Window:isVisible()
    //#Server.java:1055: Warning: suspicious precondition
    //#    The precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.Server
    //#    method: void addLineToActive(String, Object[])
    //#    suspicious precondition index: [5]
    //#    Attribs:  Soft
    //#Server.java:1055: Warning: suspicious precondition
    //#    The precondition for this.activeFrame.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.Server
    //#    method: void addLineToActive(String, Object[])
    //#    suspicious precondition index: [6]
    //#    Attribs:  Soft
    //#input(void addLineToActive(String, Object[])): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToActive(String, Object[])): args
    //#input(void addLineToActive(String, Object[])): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToActive(String, Object[])): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToActive(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void addLineToActive(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void addLineToActive(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void addLineToActive(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void addLineToActive(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void addLineToActive(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void addLineToActive(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void addLineToActive(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void addLineToActive(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void addLineToActive(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void addLineToActive(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void addLineToActive(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void addLineToActive(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void addLineToActive(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void addLineToActive(String, Object[])): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToActive(String, Object[])): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToActive(String, Object[])): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToActive(String, Object[])): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToActive(String, Object[])): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToActive(String, Object[])): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToActive(String, Object[])): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToActive(String, Object[])): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToActive(String, Object[])): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToActive(String, Object[])): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToActive(String, Object[])): messageType
    //#input(void addLineToActive(String, Object[])): this
    //#input(void addLineToActive(String, Object[])): this.__Tag
    //#input(void addLineToActive(String, Object[])): this.activeFrame
    //#input(void addLineToActive(String, Object[])): this.activeFrame.__Tag
    //#output(void addLineToActive(String, Object[])): this.activeFrame
    //#pre[3] (void addLineToActive(String, Object[])): init'ed(this.activeFrame)
    //#pre[5] (void addLineToActive(String, Object[])): (soft) this.__Tag in {com/dmdirc/Channel, com/dmdirc/CustomWindow, com/dmdirc/FrameContainer, com/dmdirc/GlobalWindow, com/dmdirc/MessageTarget, com/dmdirc/Query, com/dmdirc/Raw, com/dmdirc/Server, com/dmdirc/WritableFrameContainer, com/dmdirc/addons/dcc/DCCChatWindow, com/dmdirc/addons/dcc/DCCFrame, com/dmdirc/addons/dcc/DCCPlugin$3, com/dmdirc/addons/dcc/DCCSendWindow}
    //#pre[6] (void addLineToActive(String, Object[])): (soft) this.activeFrame.__Tag in {com/dmdirc/Channel, com/dmdirc/CustomWindow, com/dmdirc/FrameContainer, com/dmdirc/GlobalWindow, com/dmdirc/MessageTarget, com/dmdirc/Query, com/dmdirc/Raw, com/dmdirc/Server, com/dmdirc/WritableFrameContainer, com/dmdirc/addons/dcc/DCCChatWindow, com/dmdirc/addons/dcc/DCCFrame, com/dmdirc/addons/dcc/DCCPlugin$3, com/dmdirc/addons/dcc/DCCSendWindow}
    //#presumption(void addLineToActive(String, Object[])): getFrame(...)@1055 != null
    //#presumption(void addLineToActive(String, Object[])): getFrame(...)@1059 != null
    //#post(void addLineToActive(String, Object[])): this.activeFrame == One-of{old this.activeFrame, this}
    //#post(void addLineToActive(String, Object[])): this.activeFrame != null
    //#test_vector(void addLineToActive(String, Object[])): this.activeFrame: Addr_Set{null}, Inverse{null}
    //#test_vector(void addLineToActive(String, Object[])): com.dmdirc.ui.interfaces.Window:isVisible(...)@1055: {1}, {0}
            activeFrame = this;
        }

        activeFrame.getFrame().addLine(messageType, args);
    //#Server.java:1059: Warning: call too complex - analysis skipped
    //#    call on Window getFrame()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void addLineToActive(String, Object[])
    //#    unanalyzed callee: Window getFrame()
    //#Server.java:1059: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.Window:addLine(String, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void addLineToActive(String, Object[])
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.Window:addLine(String, Object[])
    }
    //#Server.java:1060: end of method: void com.dmdirc.Server.addLineToActive(String, Object[])

    /**
     * Passes the arguments to all frames for this server.
     *
     * @param messageType The type of message to send
     * @param args The arguments of the message
     */
    public void addLineToAll(final String messageType, final Object... args) {
        for (Channel channel : channels.values()) {
    //#Server.java:1069: method: void com.dmdirc.Server.addLineToAll(String, Object[])
    //#input(void addLineToAll(String, Object[])): __Descendant_Table[com/dmdirc/Server]
    //#input(void addLineToAll(String, Object[])): __Descendant_Table[others]
    //#input(void addLineToAll(String, Object[])): __Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void addLineToAll(String, Object[])): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToAll(String, Object[])): args
    //#input(void addLineToAll(String, Object[])): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void addLineToAll(String, Object[])): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void addLineToAll(String, Object[])): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void addLineToAll(String, Object[])): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToAll(String, Object[])): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToAll(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void addLineToAll(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void addLineToAll(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void addLineToAll(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void addLineToAll(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void addLineToAll(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void addLineToAll(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void addLineToAll(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void addLineToAll(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void addLineToAll(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void addLineToAll(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void addLineToAll(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void addLineToAll(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void addLineToAll(String, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void addLineToAll(String, Object[])): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToAll(String, Object[])): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToAll(String, Object[])): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToAll(String, Object[])): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(void addLineToAll(String, Object[])): com/dmdirc/Query.__Descendant_Table[others]
    //#input(void addLineToAll(String, Object[])): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToAll(String, Object[])): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToAll(String, Object[])): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToAll(String, Object[])): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToAll(String, Object[])): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToAll(String, Object[])): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToAll(String, Object[])): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void addLineToAll(String, Object[])): messageType
    //#input(void addLineToAll(String, Object[])): this
    //#input(void addLineToAll(String, Object[])): this.__Tag
    //#input(void addLineToAll(String, Object[])): this.channels
    //#input(void addLineToAll(String, Object[])): this.queries
    //#pre[4] (void addLineToAll(String, Object[])): this.__Tag == com/dmdirc/Server
    //#pre[5] (void addLineToAll(String, Object[])): this.channels != null
    //#pre[6] (void addLineToAll(String, Object[])): this.queries != null
    //#presumption(void addLineToAll(String, Object[])): channel.window@1069 != null
    //#presumption(void addLineToAll(String, Object[])): java.util.Iterator:next(...).__Tag@1069 == com/dmdirc/Channel
    //#presumption(void addLineToAll(String, Object[])): java.util.Iterator:next(...).__Tag@1073 == com/dmdirc/Query
    //#presumption(void addLineToAll(String, Object[])): java.util.Iterator:next(...)@1069 != null
    //#presumption(void addLineToAll(String, Object[])): java.util.Iterator:next(...)@1073 != null
    //#presumption(void addLineToAll(String, Object[])): java.util.Map:values(...)@1069 != null
    //#presumption(void addLineToAll(String, Object[])): query.window@1073 != null
    //#unanalyzed(void addLineToAll(String, Object[])): Effects-of-calling:getFrame
    //#unanalyzed(void addLineToAll(String, Object[])): Effects-of-calling:com.dmdirc.ui.interfaces.Window:addLine
    //#test_vector(void addLineToAll(String, Object[])): java.util.Iterator:hasNext(...)@1069: {0}, {1}
    //#test_vector(void addLineToAll(String, Object[])): java.util.Iterator:hasNext(...)@1073: {0}, {1}
            channel.getFrame().addLine(messageType, args);
    //#Server.java:1070: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.InputWindow:addLine(String, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void addLineToAll(String, Object[])
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.InputWindow:addLine(String, Object[])
        }

        for (Query query : queries) {
            query.getFrame().addLine(messageType, args);
    //#Server.java:1074: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.InputWindow:addLine(String, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void addLineToAll(String, Object[])
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.InputWindow:addLine(String, Object[])
        }

        addLine(messageType, args);
    }
    //#Server.java:1078: end of method: void com.dmdirc.Server.addLineToAll(String, Object[])

    /**
     * Replies to an incoming CTCP message.
     *
     * @param source The source of the message
     * @param type The CTCP type
     * @param args The CTCP arguments
     */
    public void sendCTCPReply(final String source, final String type, final String args) {
        if (type.equalsIgnoreCase("VERSION")) {
    //#Server.java:1088: method: void com.dmdirc.Server.sendCTCPReply(String, String, String)
    //#input(void sendCTCPReply(String, String, String)): " - http:..www.dmdirc.com."._tainted
    //#input(void sendCTCPReply(String, String, String)): "DMDirc "._tainted
    //#input(void sendCTCPReply(String, String, String)): args
    //#input(void sendCTCPReply(String, String, String)): source
    //#input(void sendCTCPReply(String, String, String)): this
    //#input(void sendCTCPReply(String, String, String)): this.config
    //#input(void sendCTCPReply(String, String, String)): this.parser
    //#input(void sendCTCPReply(String, String, String)): type
    //#pre[6] (void sendCTCPReply(String, String, String)): type != null
    //#pre[4] (void sendCTCPReply(String, String, String)): (soft) this.config != null
    //#pre[5] (void sendCTCPReply(String, String, String)): (soft) this.parser != null
    //#test_vector(void sendCTCPReply(String, String, String)): java.lang.String:equalsIgnoreCase(...)@1088: {0}, {1}
    //#test_vector(void sendCTCPReply(String, String, String)): java.lang.String:equalsIgnoreCase(...)@1092: {0}, {1}
    //#test_vector(void sendCTCPReply(String, String, String)): java.lang.String:equalsIgnoreCase(...)@1094: {0}, {1}
            parser.sendCTCPReply(source, "VERSION", "DMDirc " +
    //#Server.java:1089: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void sendCTCPReply(String, String, String)
    //#    unanalyzed callee: String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#Server.java:1089: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:sendCTCPReply(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void sendCTCPReply(String, String, String)
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:sendCTCPReply(String, String, String)
                    getConfigManager().getOption("version", "version")
                    + " - http://www.dmdirc.com/");
        } else if (type.equalsIgnoreCase("PING")) {
            parser.sendCTCPReply(source, "PING", args);
    //#Server.java:1093: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:sendCTCPReply(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void sendCTCPReply(String, String, String)
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:sendCTCPReply(String, String, String)
        } else if (type.equalsIgnoreCase("CLIENTINFO")) {
            parser.sendCTCPReply(source, "CLIENTINFO", "VERSION PING CLIENTINFO");
    //#Server.java:1095: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:sendCTCPReply(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void sendCTCPReply(String, String, String)
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:sendCTCPReply(String, String, String)
        }
    }
    //#Server.java:1097: end of method: void com.dmdirc.Server.sendCTCPReply(String, String, String)

    /**
     * Determines if the specified channel name is valid. A channel name is
     * valid if we already have an existing Channel with the same name, or
     * we have a valid parser instance and the parser says it's valid.
     *
     * @param channelName The name of the channel to test
     * @return True if the channel name is valid, false otherwise
     */
    public boolean isValidChannelName(final String channelName) {
        return hasChannel(channelName)
    //#Server.java:1108: method: bool com.dmdirc.Server.isValidChannelName(String)
    //#Server.java:1108: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.parser.irc.IRCParser:isValidChannelName(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: bool isValidChannelName(String)
    //#    unanalyzed callee: bool com.dmdirc.parser.irc.IRCParser:isValidChannelName(String)
    //#input(bool isValidChannelName(String)): __Descendant_Table[com/dmdirc/Server]
    //#input(bool isValidChannelName(String)): __Descendant_Table[others]
    //#input(bool isValidChannelName(String)): __Dispatch_Table.hasChannel(Ljava/lang/String;)Z
    //#input(bool isValidChannelName(String)): channelName
    //#input(bool isValidChannelName(String)): this
    //#input(bool isValidChannelName(String)): this.__Tag
    //#input(bool isValidChannelName(String)): this.channels
    //#input(bool isValidChannelName(String)): this.converter
    //#input(bool isValidChannelName(String)): this.parser
    //#output(bool isValidChannelName(String)): return_value
    //#pre[3] (bool isValidChannelName(String)): this.__Tag == com/dmdirc/Server
    //#pre[4] (bool isValidChannelName(String)): this.channels != null
    //#pre[5] (bool isValidChannelName(String)): this.converter != null
    //#pre[6] (bool isValidChannelName(String)): (soft) init'ed(this.parser)
    //#post(bool isValidChannelName(String)): init'ed(return_value)
    //#unanalyzed(bool isValidChannelName(String)): Effects-of-calling:com.dmdirc.parser.irc.IRCStringConverter:toLowerCase
    //#unanalyzed(bool isValidChannelName(String)): Effects-of-calling:java.util.Map:containsKey
    //#Server.java:1108: end of method: bool com.dmdirc.Server.isValidChannelName(String)
                || (parser != null && parser.isValidChannelName(channelName));
    }

    /**
     * Returns this server's name.
     *
     * @return A string representation of this server (i.e., its name)
     */
    @Override
    public String toString() {
        return getName();
    //#Server.java:1119: method: String com.dmdirc.Server.toString()
    //#input(String toString()): __Descendant_Table[com/dmdirc/Server]
    //#input(String toString()): __Descendant_Table[others]
    //#input(String toString()): __Dispatch_Table.getName()Ljava/lang/String;
    //#input(String toString()): this
    //#input(String toString()): this.__Tag
    //#input(String toString()): this.serverInfo
    //#output(String toString()): return_value
    //#pre[2] (String toString()): this.__Tag == com/dmdirc/Server
    //#pre[3] (String toString()): this.serverInfo != null
    //#post(String toString()): init'ed(return_value)
    //#unanalyzed(String toString()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getHost
    //#Server.java:1119: end of method: String com.dmdirc.Server.toString()
    }

    /**
     * Returns the server instance associated with this frame.
     *
     * @return the associated server connection
     */
    @Override
    public Server getServer() {
        return this;
    //#Server.java:1129: method: Server com.dmdirc.Server.getServer()
    //#input(Server getServer()): this
    //#output(Server getServer()): return_value
    //#post(Server getServer()): return_value == this
    //#post(Server getServer()): return_value != null
    //#Server.java:1129: end of method: Server com.dmdirc.Server.getServer()
    }

    /** {@inheritDoc} */
    @Override
    protected boolean processNotificationArg(final Object arg, final List<Object> args) {
        if (arg instanceof ClientInfo) {
    //#Server.java:1135: method: bool com.dmdirc.Server.processNotificationArg(Object, List)
    //#input(bool processNotificationArg(Object, List)): arg
    //#input(bool processNotificationArg(Object, List)): args
    //#input(bool processNotificationArg(Object, List)): this
    //#output(bool processNotificationArg(Object, List)): return_value
    //#pre[2] (bool processNotificationArg(Object, List)): (soft) args != null
    //#post(bool processNotificationArg(Object, List)): init'ed(return_value)
            final ClientInfo clientInfo = (ClientInfo) arg;
            args.add(clientInfo.getNickname());
    //#Server.java:1137: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ClientInfo:getNickname()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: bool processNotificationArg(Object, List)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ClientInfo:getNickname()
            args.add(clientInfo.getIdent());
    //#Server.java:1138: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ClientInfo:getIdent()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: bool processNotificationArg(Object, List)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ClientInfo:getIdent()
            args.add(clientInfo.getHost());
    //#Server.java:1139: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ClientInfo:getHost()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: bool processNotificationArg(Object, List)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ClientInfo:getHost()
            return true;
        } else {
            return super.processNotificationArg(arg, args);
    //#Server.java:1142: end of method: bool com.dmdirc.Server.processNotificationArg(Object, List)
        }
    }

    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Parser callbacks">

    /**
     * Called when the server says that the nickname we're trying to use is
     * already in use.
     *
     * @param nickname The nickname that we were trying to use
     */
    public void onNickInUse(final String nickname) {
        final String lastNick = parser.getMyNickname();
    //#Server.java:1157: method: void com.dmdirc.Server.onNickInUse(String)
    //#Server.java:1157: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getMyNickname()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onNickInUse(String)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getMyNickname()
    //#input(void onNickInUse(String)): DOMAIN_PROFILE
    //#input(void onNickInUse(String)): nickname
    //#input(void onNickInUse(String)): this
    //#input(void onNickInUse(String)): this.converter
    //#input(void onNickInUse(String)): this.parser
    //#input(void onNickInUse(String)): this.profile
    //#pre[3] (void onNickInUse(String)): this.converter != null
    //#pre[4] (void onNickInUse(String)): this.parser != null
    //#pre[5] (void onNickInUse(String)): (soft) this.profile != null
    //#presumption(void onNickInUse(String)): (int) (java.lang.Math:random(...)@1164*10) in {-2_147_483_648..4_294_967_295}
    //#presumption(void onNickInUse(String)): com.dmdirc.config.Identity:getOptionList(...)@1166 != null
    //#presumption(void onNickInUse(String)): java.util.List:get(...)@1177 != null
    //#test_vector(void onNickInUse(String)): com.dmdirc.parser.irc.IRCStringConverter:equalsIgnoreCase(...)@1160: {1}, {0}
    //#test_vector(void onNickInUse(String)): java.lang.String:isEmpty(...)@1177: {1}, {0}
    //#test_vector(void onNickInUse(String)): java.util.Iterator:hasNext(...)@1170: {0}, {1}

        // If our last nick is still valid, ignore the in use message
        if (!converter.equalsIgnoreCase(lastNick, nickname)) {
    //#Server.java:1160: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.parser.irc.IRCStringConverter:equalsIgnoreCase(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onNickInUse(String)
    //#    unanalyzed callee: bool com.dmdirc.parser.irc.IRCStringConverter:equalsIgnoreCase(String, String)
            return;
        }

        String newNick = lastNick + (int) (Math.random() * 10);

        final List<String> alts = profile.getOptionList(DOMAIN_PROFILE, "nicknames");
    //#Server.java:1166: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.config.Identity:getOptionList(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onNickInUse(String)
    //#    unanalyzed callee: List com.dmdirc.config.Identity:getOptionList(String, String)
        int offset = 0;

        // Loop so we can check case sensitivity
        for (String alt : alts) {
            offset++;
    //#Server.java:1171: ?overflow
    //#    offset in {-2_147_483_649..4_294_967_294}
    //#    severity: LOW
    //#    class: com.dmdirc.Server
    //#    method: void onNickInUse(String)
    //#    basic block: bb_5
    //#    assertion: offset in {-2_147_483_649..4_294_967_294}
    //#    VN: offset + 1
    //#    Expected: {-2_147_483_648..4_294_967_295, Invalid}
    //#    Bad: {4_294_967_296}
    //#    Attribs:  Int  Bad singleton  Bad > Exp
            if (converter.equalsIgnoreCase(alt, lastNick)) {
    //#Server.java:1172: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.parser.irc.IRCStringConverter:equalsIgnoreCase(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onNickInUse(String)
    //#    unanalyzed callee: bool com.dmdirc.parser.irc.IRCStringConverter:equalsIgnoreCase(String, String)
                break;
            }
        }

        if (offset < alts.size() && !alts.get(offset).isEmpty()) {
            newNick = alts.get(offset);
        }

        parser.setNickname(newNick);
    //#Server.java:1181: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:setNickname(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onNickInUse(String)
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:setNickname(String)
    }
    //#Server.java:1182: end of method: void com.dmdirc.Server.onNickInUse(String)

    /**
     * Called when the server sends a numeric event.
     *
     * @param numeric The numeric code for the event
     * @param tokens The (tokenised) arguments of the event
     */
    public void onNumeric(final int numeric, final String[] tokens) {
        String snumeric = String.valueOf(numeric);
    //#Server.java:1191: method: void com.dmdirc.Server.onNumeric(int, String[])
    //#input(void onNumeric(int, String[])): " doesn't exist"._tainted
    //#input(void onNumeric(int, String[])): "0"._tainted
    //#input(void onNumeric(int, String[])): "00"._tainted
    //#input(void onNumeric(int, String[])): ": "._tainted
    //#input(void onNumeric(int, String[])): ": channel "._tainted
    //#input(void onNumeric(int, String[])): ":"._tainted
    //#input(void onNumeric(int, String[])): "Invalid notification target for type "._tainted
    //#input(void onNumeric(int, String[])): "\E"._tainted
    //#input(void onNumeric(int, String[])): "\Q"._tainted
    //#input(void onNumeric(int, String[])): "_"._tainted
    //#input(void onNumeric(int, String[])): "numeric_"._tainted
    //#input(void onNumeric(int, String[])): "numeric_unknown"._tainted
    //#input(void onNumeric(int, String[])): "self"._tainted
    //#input(void onNumeric(int, String[])): __Descendant_Table[com/dmdirc/Server]
    //#input(void onNumeric(int, String[])): __Descendant_Table[others]
    //#input(void onNumeric(int, String[])): __Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): __Dispatch_Table.addLineToActive(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): __Dispatch_Table.addLineToAll(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): __Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): __Dispatch_Table.getChannel(Ljava/lang/String;)Lcom/dmdirc/Channel;
    //#input(void onNumeric(int, String[])): __Dispatch_Table.getChildren()Ljava/util/List;
    //#input(void onNumeric(int, String[])): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onNumeric(int, String[])): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onNumeric(int, String[])): __Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onNumeric(int, String[])): __Dispatch_Table.handleNotification(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): __Dispatch_Table.hasChannel(Ljava/lang/String;)Z
    //#input(void onNumeric(int, String[])): com.dmdirc.actions.CoreActionType__static_init.new CoreActionType(CoreActionType__static_init#15).__Tag
    //#input(void onNumeric(int, String[])): com.dmdirc.actions.CoreActionType__static_init.new CoreActionType(CoreActionType__static_init#15).type
    //#input(void onNumeric(int, String[])): com.dmdirc.actions.metatypes.ServerEvents__static_init.new ServerEvents(ServerEvents__static_init#4).__Tag
    //#input(void onNumeric(int, String[])): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void onNumeric(int, String[])): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void onNumeric(int, String[])): com/dmdirc/Channel.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): com/dmdirc/Channel.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onNumeric(int, String[])): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onNumeric(int, String[])): com/dmdirc/Channel.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onNumeric(int, String[])): com/dmdirc/CustomWindow.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void onNumeric(int, String[])): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onNumeric(int, String[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void onNumeric(int, String[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void onNumeric(int, String[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void onNumeric(int, String[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void onNumeric(int, String[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void onNumeric(int, String[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void onNumeric(int, String[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void onNumeric(int, String[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void onNumeric(int, String[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void onNumeric(int, String[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void onNumeric(int, String[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void onNumeric(int, String[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void onNumeric(int, String[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void onNumeric(int, String[])): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void onNumeric(int, String[])): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onNumeric(int, String[])): com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#input(void onNumeric(int, String[])): com/dmdirc/GlobalWindow.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): com/dmdirc/GlobalWindow.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onNumeric(int, String[])): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onNumeric(int, String[])): com/dmdirc/GlobalWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onNumeric(int, String[])): com/dmdirc/Main.controller
    //#input(void onNumeric(int, String[])): com/dmdirc/MessageTarget.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): com/dmdirc/MessageTarget.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onNumeric(int, String[])): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onNumeric(int, String[])): com/dmdirc/MessageTarget.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onNumeric(int, String[])): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(void onNumeric(int, String[])): com/dmdirc/Query.__Descendant_Table[others]
    //#input(void onNumeric(int, String[])): com/dmdirc/Query.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): com/dmdirc/Query.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onNumeric(int, String[])): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onNumeric(int, String[])): com/dmdirc/Query.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onNumeric(int, String[])): com/dmdirc/Raw.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): com/dmdirc/Raw.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onNumeric(int, String[])): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onNumeric(int, String[])): com/dmdirc/Raw.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onNumeric(int, String[])): com/dmdirc/WritableFrameContainer.NOTIFICATION_CHANNEL
    //#input(void onNumeric(int, String[])): com/dmdirc/WritableFrameContainer.NOTIFICATION_SERVER
    //#input(void onNumeric(int, String[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void onNumeric(int, String[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void onNumeric(int, String[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void onNumeric(int, String[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void onNumeric(int, String[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void onNumeric(int, String[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void onNumeric(int, String[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void onNumeric(int, String[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void onNumeric(int, String[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void onNumeric(int, String[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void onNumeric(int, String[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void onNumeric(int, String[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[others]
    //#input(void onNumeric(int, String[])): com/dmdirc/WritableFrameContainer.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): com/dmdirc/WritableFrameContainer.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onNumeric(int, String[])): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onNumeric(int, String[])): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onNumeric(int, String[])): com/dmdirc/WritableFrameContainer.com.dmdirc.logger.ErrorLevel.LOW
    //#input(void onNumeric(int, String[])): com/dmdirc/WritableFrameContainer.com.dmdirc.logger.ErrorLevel.MEDIUM
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/ActionManager.killSwitch
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/ActionManager.listeners
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/CoreActionType.SERVER_NUMERIC
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/CoreActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionMetaType]
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ActionEvents]
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ChannelEvents]
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ClientEvents]
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/PluginEvents]
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/QueryEvents]
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ServerEvents]
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCEvents]
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[others]
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/interfaces/ActionMetaType.__Dispatch_Table.getArity()I
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/CoreActionType]
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionType]
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCActions]
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[others]
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/interfaces/ActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/metatypes/ActionEvents.__Dispatch_Table.getArity()I
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/metatypes/ChannelEvents.__Dispatch_Table.getArity()I
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/metatypes/ClientEvents.__Dispatch_Table.getArity()I
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/metatypes/PluginEvents.__Dispatch_Table.getArity()I
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/metatypes/QueryEvents.__Dispatch_Table.getArity()I
    //#input(void onNumeric(int, String[])): com/dmdirc/actions/metatypes/ServerEvents.__Dispatch_Table.getArity()I
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/actions/DCCActions.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void onNumeric(int, String[])): com/dmdirc/addons/dcc/actions/DCCEvents.__Dispatch_Table.getArity()I
    //#input(void onNumeric(int, String[])): numeric
    //#input(void onNumeric(int, String[])): this
    //#input(void onNumeric(int, String[])): this.__Tag
    //#input(void onNumeric(int, String[])): this.config
    //#input(void onNumeric(int, String[])): this.parser
    //#input(void onNumeric(int, String[])): tokens
    //#input(void onNumeric(int, String[])): tokens.length
    //#input(void onNumeric(int, String[])): tokens[0..4_294_967_295]
    //#input(void onNumeric(int, String[])): tokens[0..4_294_967_295]._tainted
    //#output(void onNumeric(int, String[])): com/dmdirc/ServerManager.me
    //#output(void onNumeric(int, String[])): new ArrayList(ServerManager#1) num objects
    //#output(void onNumeric(int, String[])): new ServerManager(getServerManager#1) num objects
    //#output(void onNumeric(int, String[])): new ServerManager(getServerManager#1).__Tag
    //#output(void onNumeric(int, String[])): new ServerManager(getServerManager#1).servers
    //#new obj(void onNumeric(int, String[])): new ArrayList(ServerManager#1)
    //#new obj(void onNumeric(int, String[])): new ServerManager(getServerManager#1)
    //#pre[4] (void onNumeric(int, String[])): init'ed(com/dmdirc/actions/ActionManager.killSwitch)
    //#pre[9] (void onNumeric(int, String[])): this.config != null
    //#pre[10] (void onNumeric(int, String[])): this.parser != null
    //#pre[1] (void onNumeric(int, String[])): (soft) com.dmdirc.actions.CoreActionType__static_init.new CoreActionType(CoreActionType__static_init#15).type != null
    //#pre[2] (void onNumeric(int, String[])): (soft) com/dmdirc/Main.controller != null
    //#pre[6] (void onNumeric(int, String[])): (soft) init'ed(com/dmdirc/ServerManager.me)
    //#pre[8] (void onNumeric(int, String[])): (soft) this.__Tag == com/dmdirc/Server
    //#pre[11] (void onNumeric(int, String[])): (soft) tokens != null
    //#pre[13] (void onNumeric(int, String[])): (soft) tokens.length <= 4_294_967_295
    //#pre[14] (void onNumeric(int, String[])): (soft) init'ed(tokens[0..4_294_967_295])
    //#post(void onNumeric(int, String[])): com/dmdirc/ServerManager.me == old com/dmdirc/ServerManager.me
    //#post(void onNumeric(int, String[])): new ArrayList(ServerManager#1) num objects == undefined
    //#post(void onNumeric(int, String[])): new ArrayList(ServerManager#1) num objects == 0, if init'ed
    //#post(void onNumeric(int, String[])): new ServerManager(getServerManager#1) num objects == new ArrayList(ServerManager#1) num objects
    //#post(void onNumeric(int, String[])): new ServerManager(getServerManager#1).__Tag == new ArrayList(ServerManager#1) num objects
    //#post(void onNumeric(int, String[])): new ServerManager(getServerManager#1).servers == undefined
    //#post(void onNumeric(int, String[])): new ServerManager(getServerManager#1).servers == null
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:getConfigManager
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.List:add
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.Map:values
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.List:addAll
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.parser.irc.IRCStringConverter:toLowerCase
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:getType
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:trigger
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:getArity
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:triggerActions
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:getUI
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:getFrame
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:getState
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:addLine
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:hasChannel
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:getChannel
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.FrameContainer
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.String:startsWith
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.String:indexOf
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.config.ConfigManager:hasOptionString
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:despatchNotification
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:getServer
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.Server:addLine
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:addLineToAll
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:addLineToActive
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.ui.WindowManager:findCustomWindow
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.ui.interfaces.Window:getConfigManager
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getWindow
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.ui.interfaces.Window:setTitle
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.ui.WindowManager:addWindow
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.ui.interfaces.Window:open
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.ui.interfaces.Window:addLine
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.String:format
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:getChildren
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.commandparser.parsers.CommandParser:getCommandTime
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.logger.Logger:userError
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:addLine
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.ui.interfaces.Window:isVisible
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.actions.ConditionTree$OPERATION:ordinal
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.List:size
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.Deque:pollFirst
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.Character:instanceof
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.Deque:isEmpty
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:readTerm
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.ArrayDeque
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.Deque:pollLast
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.Deque:addFirst
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:parseStack
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.Deque:poll
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.Deque:add
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.Deque:size
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.Integer:parseInt
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptions
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.StringBuilder:indexOf
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.StringBuilder:replace
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.Map:entrySet
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.Map$Entry:getKey
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.Map$Entry:getValue
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:[Ljava.lang.String;:instanceof
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.String:instanceof
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.StringBuffer:length
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.StringBuffer:insert
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:doServerSubstitutions
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:doComponentSubstitutions
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.ServerState:equals
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:getCompatibleComponents
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.Object:toString
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:get
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:getArgTypes
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:test
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:evaluate
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getActiveWindow
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:instanceof
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.util.List:get
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.commandparser.parsers.CommandParser:parseCommand
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.StringBuffer:setLength
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void onNumeric(int, String[])): Effects-of-calling:com.dmdirc.util.ListenerList
    //#test_vector(void onNumeric(int, String[])): numeric: {100..4_294_967_295}, {-2_147_483_648..9}, {10..99}
    //#test_vector(void onNumeric(int, String[])): com.dmdirc.config.ConfigManager:hasOptionString(...)@1203: {0}, {1}
    //#test_vector(void onNumeric(int, String[])): com.dmdirc.config.ConfigManager:hasOptionString(...)@1205: {0}, {1}
    //#test_vector(void onNumeric(int, String[])): com.dmdirc.config.ConfigManager:hasOptionString(...)@1207: {0}, {1}

        if (numeric < 10) {
            snumeric = "00" + snumeric;
        } else if (numeric < 100) {
            snumeric = "0" + snumeric;
        }

        final String withIrcd = "numeric_" + parser.getIRCD(true) + "_" + snumeric;
    //#Server.java:1199: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getIRCD(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onNumeric(int, String[])
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getIRCD(bool)
        final String sansIrcd = "numeric_" + snumeric;
        StringBuffer target = null;

        if (getConfigManager().hasOptionString("formatter", withIrcd)) {
    //#Server.java:1203: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onNumeric(int, String[])
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
            target = new StringBuffer(withIrcd);
        } else if (getConfigManager().hasOptionString("formatter", sansIrcd)) {
    //#Server.java:1205: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onNumeric(int, String[])
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
            target = new StringBuffer(sansIrcd);
        } else if (getConfigManager().hasOptionString("formatter", "numeric_unknown")) {
    //#Server.java:1207: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onNumeric(int, String[])
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
            target = new StringBuffer("numeric_unknown");
        }

        ActionManager.processEvent(CoreActionType.SERVER_NUMERIC, target, this,
    //#Server.java:1211: ?!precondition failure
    //#    com/dmdirc/actions/ActionManager.processEvent: (soft) type.type.__Tag in {com/dmdirc/actions/interfaces/ActionMetaType, com/dmdirc/actions/metatypes/ActionEvents, com/dmdirc/actions/metatypes/ChannelEvents, com/dmdirc/actions/metatypes/ClientEvents, com/dmdirc/actions/metatypes/PluginEvents, com/dmdirc/actions/metatypes/QueryEvents, com/dmdirc/actions/metatypes/ServerEvents, com/dmdirc/addons/dcc/actions/DCCEvents}
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.Server
    //#    method: void onNumeric(int, String[])
    //#    basic block: bb_11
    //#    assertion: (soft) undefined in {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    callee: void com/dmdirc/actions/ActionManager.processEvent(ActionType, StringBuffer, Object[])
    //#    callee assertion: (soft) type.type.__Tag in {com/dmdirc/actions/interfaces/ActionMetaType, com/dmdirc/actions/metatypes/ActionEvents, com/dmdirc/actions/metatypes/ChannelEvents, com/dmdirc/actions/metatypes/ClientEvents, com/dmdirc/actions/metatypes/PluginEvents, com/dmdirc/actions/metatypes/QueryEvents, com/dmdirc/actions/metatypes/ServerEvents, com/dmdirc/addons/dcc/actions/DCCEvents}
    //#    callee file: ActionManager.java
    //#    callee precondition index: [29]
    //#    callee srcpos: 365
    //#    VN: undefined
    //#    Expected: {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    Bad: {0, Invalid}
    //#    Attribs:  Int  Bad singleton  Bad overlaps +/-1000  Soft  Bad < Exp
                Integer.valueOf(numeric), tokens);

        if (target != null) {
            handleNotification(target.toString(), (Object[]) tokens);
        }
    }
    //#Server.java:1217: end of method: void com.dmdirc.Server.onNumeric(int, String[])

    /**
     * Called when the socket has been closed.
     */
    public void onSocketClosed() {
        if (Thread.holdsLock(myState)) {
    //#Server.java:1223: method: void com.dmdirc.Server.onSocketClosed()
    //#input(void onSocketClosed()): " ["._tainted
    //#input(void onSocketClosed()): " doesn't exist"._tainted
    //#input(void onSocketClosed()): "->"._tainted
    //#input(void onSocketClosed()): ": "._tainted
    //#input(void onSocketClosed()): ": channel "._tainted
    //#input(void onSocketClosed()): ":"._tainted
    //#input(void onSocketClosed()): "Illegal server state transition&#10;&#10;"._tainted
    //#input(void onSocketClosed()): "Invalid notification target for type "._tainted
    //#input(void onSocketClosed()): "\E"._tainted
    //#input(void onSocketClosed()): "\Q"._tainted
    //#input(void onSocketClosed()): "self"._tainted
    //#input(void onSocketClosed()): "socketClosed"._tainted
    //#input(void onSocketClosed()): DOMAIN_GENERAL
    //#input(void onSocketClosed()): __Descendant_Table[com/dmdirc/Server]
    //#input(void onSocketClosed()): __Descendant_Table[others]
    //#input(void onSocketClosed()): __Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): __Dispatch_Table.addLineToActive(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): __Dispatch_Table.addLineToAll(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): __Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): __Dispatch_Table.getChannel(Ljava/lang/String;)Lcom/dmdirc/Channel;
    //#input(void onSocketClosed()): __Dispatch_Table.getChildren()Ljava/util/List;
    //#input(void onSocketClosed()): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onSocketClosed()): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onSocketClosed()): __Dispatch_Table.getName()Ljava/lang/String;
    //#input(void onSocketClosed()): __Dispatch_Table.getParser()Lcom/dmdirc/parser/irc/IRCParser;
    //#input(void onSocketClosed()): __Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onSocketClosed()): __Dispatch_Table.handleNotification(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): __Dispatch_Table.hasChannel(Ljava/lang/String;)Z
    //#input(void onSocketClosed()): __Dispatch_Table.removeInvite(Lcom/dmdirc/Invite;)V
    //#input(void onSocketClosed()): __Dispatch_Table.updateAwayState(Ljava/lang/String;)V
    //#input(void onSocketClosed()): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#5).transitions
    //#input(void onSocketClosed()): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#7).transitions
    //#input(void onSocketClosed()): com.dmdirc.actions.CoreActionType__static_init.new CoreActionType(CoreActionType__static_init#19).__Tag
    //#input(void onSocketClosed()): com.dmdirc.actions.CoreActionType__static_init.new CoreActionType(CoreActionType__static_init#19).type
    //#input(void onSocketClosed()): com.dmdirc.actions.metatypes.ServerEvents__static_init.new ServerEvents(ServerEvents__static_init#25).__Tag
    //#input(void onSocketClosed()): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void onSocketClosed()): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void onSocketClosed()): com/dmdirc/Channel.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): com/dmdirc/Channel.__Dispatch_Table.close()V
    //#input(void onSocketClosed()): com/dmdirc/Channel.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onSocketClosed()): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onSocketClosed()): com/dmdirc/Channel.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onSocketClosed()): com/dmdirc/Channel.__Dispatch_Table.resetWindow()V
    //#input(void onSocketClosed()): com/dmdirc/ChannelEventHandler.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onSocketClosed()): com/dmdirc/CustomWindow.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void onSocketClosed()): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onSocketClosed()): com/dmdirc/EventHandler.__Descendant_Table[com/dmdirc/ChannelEventHandler]
    //#input(void onSocketClosed()): com/dmdirc/EventHandler.__Descendant_Table[com/dmdirc/EventHandler]
    //#input(void onSocketClosed()): com/dmdirc/EventHandler.__Descendant_Table[com/dmdirc/ServerEventHandler]
    //#input(void onSocketClosed()): com/dmdirc/EventHandler.__Descendant_Table[others]
    //#input(void onSocketClosed()): com/dmdirc/EventHandler.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onSocketClosed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void onSocketClosed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void onSocketClosed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void onSocketClosed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void onSocketClosed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void onSocketClosed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void onSocketClosed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void onSocketClosed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void onSocketClosed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void onSocketClosed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void onSocketClosed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void onSocketClosed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void onSocketClosed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void onSocketClosed()): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void onSocketClosed()): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onSocketClosed()): com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#input(void onSocketClosed()): com/dmdirc/GlobalWindow.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): com/dmdirc/GlobalWindow.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onSocketClosed()): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onSocketClosed()): com/dmdirc/GlobalWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onSocketClosed()): com/dmdirc/Invite.__Descendant_Table[com/dmdirc/Invite]
    //#input(void onSocketClosed()): com/dmdirc/Invite.__Descendant_Table[others]
    //#input(void onSocketClosed()): com/dmdirc/Main.controller
    //#input(void onSocketClosed()): com/dmdirc/MessageTarget.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): com/dmdirc/MessageTarget.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onSocketClosed()): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onSocketClosed()): com/dmdirc/MessageTarget.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onSocketClosed()): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(void onSocketClosed()): com/dmdirc/Query.__Descendant_Table[others]
    //#input(void onSocketClosed()): com/dmdirc/Query.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): com/dmdirc/Query.__Dispatch_Table.close()V
    //#input(void onSocketClosed()): com/dmdirc/Query.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onSocketClosed()): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onSocketClosed()): com/dmdirc/Query.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onSocketClosed()): com/dmdirc/Raw.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): com/dmdirc/Raw.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onSocketClosed()): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onSocketClosed()): com/dmdirc/Raw.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onSocketClosed()): com/dmdirc/ServerEventHandler.__Descendant_Table[com/dmdirc/ServerEventHandler]
    //#input(void onSocketClosed()): com/dmdirc/ServerEventHandler.__Descendant_Table[others]
    //#input(void onSocketClosed()): com/dmdirc/ServerEventHandler.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onSocketClosed()): com/dmdirc/ServerEventHandler.__Dispatch_Table.unregisterCallbacks()V
    //#input(void onSocketClosed()): com/dmdirc/ServerState.CLOSING
    //#input(void onSocketClosed()): com/dmdirc/ServerState.CONNECTED
    //#input(void onSocketClosed()): com/dmdirc/ServerState.DISCONNECTED
    //#input(void onSocketClosed()): com/dmdirc/ServerState.DISCONNECTING
    //#input(void onSocketClosed()): com/dmdirc/ServerState.TRANSIENTLY_DISCONNECTED
    //#input(void onSocketClosed()): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void onSocketClosed()): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void onSocketClosed()): com/dmdirc/ServerStatus.__Dispatch_Table.addHistoryEntry(Lcom/dmdirc/ServerState;Lcom/dmdirc/ServerState;)V
    //#input(void onSocketClosed()): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void onSocketClosed()): com/dmdirc/ServerStatus.__Dispatch_Table.getTransitionHistory()Ljava/lang/String;
    //#input(void onSocketClosed()): com/dmdirc/ServerStatus.__Dispatch_Table.transition(Lcom/dmdirc/ServerState;)V
    //#input(void onSocketClosed()): com/dmdirc/WritableFrameContainer.NOTIFICATION_CHANNEL
    //#input(void onSocketClosed()): com/dmdirc/WritableFrameContainer.NOTIFICATION_SERVER
    //#input(void onSocketClosed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void onSocketClosed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void onSocketClosed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void onSocketClosed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void onSocketClosed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void onSocketClosed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void onSocketClosed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void onSocketClosed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void onSocketClosed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void onSocketClosed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void onSocketClosed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void onSocketClosed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[others]
    //#input(void onSocketClosed()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onSocketClosed()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onSocketClosed()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onSocketClosed()): com/dmdirc/WritableFrameContainer.com.dmdirc.logger.ErrorLevel.LOW
    //#input(void onSocketClosed()): com/dmdirc/WritableFrameContainer.com.dmdirc.logger.ErrorLevel.MEDIUM
    //#input(void onSocketClosed()): com/dmdirc/actions/ActionManager.killSwitch
    //#input(void onSocketClosed()): com/dmdirc/actions/ActionManager.listeners
    //#input(void onSocketClosed()): com/dmdirc/actions/CoreActionType.SERVER_DISCONNECTED
    //#input(void onSocketClosed()): com/dmdirc/actions/CoreActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void onSocketClosed()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionMetaType]
    //#input(void onSocketClosed()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ActionEvents]
    //#input(void onSocketClosed()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ChannelEvents]
    //#input(void onSocketClosed()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ClientEvents]
    //#input(void onSocketClosed()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/PluginEvents]
    //#input(void onSocketClosed()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/QueryEvents]
    //#input(void onSocketClosed()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ServerEvents]
    //#input(void onSocketClosed()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCEvents]
    //#input(void onSocketClosed()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[others]
    //#input(void onSocketClosed()): com/dmdirc/actions/interfaces/ActionMetaType.__Dispatch_Table.getArity()I
    //#input(void onSocketClosed()): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/CoreActionType]
    //#input(void onSocketClosed()): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionType]
    //#input(void onSocketClosed()): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCActions]
    //#input(void onSocketClosed()): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[others]
    //#input(void onSocketClosed()): com/dmdirc/actions/interfaces/ActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void onSocketClosed()): com/dmdirc/actions/metatypes/ActionEvents.__Dispatch_Table.getArity()I
    //#input(void onSocketClosed()): com/dmdirc/actions/metatypes/ChannelEvents.__Dispatch_Table.getArity()I
    //#input(void onSocketClosed()): com/dmdirc/actions/metatypes/ClientEvents.__Dispatch_Table.getArity()I
    //#input(void onSocketClosed()): com/dmdirc/actions/metatypes/PluginEvents.__Dispatch_Table.getArity()I
    //#input(void onSocketClosed()): com/dmdirc/actions/metatypes/QueryEvents.__Dispatch_Table.getArity()I
    //#input(void onSocketClosed()): com/dmdirc/actions/metatypes/ServerEvents.__Dispatch_Table.getArity()I
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/actions/DCCActions.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void onSocketClosed()): com/dmdirc/addons/dcc/actions/DCCEvents.__Dispatch_Table.getArity()I
    //#input(void onSocketClosed()): this
    //#input(void onSocketClosed()): this...__Tag
    //#input(void onSocketClosed()): this.__Tag
    //#input(void onSocketClosed()): this.awayMessage
    //#input(void onSocketClosed()): this.changer
    //#input(void onSocketClosed()): this.channels
    //#input(void onSocketClosed()): this.config
    //#input(void onSocketClosed()): this.eventHandler
    //#input(void onSocketClosed()): this.eventHandler.__Tag
    //#input(void onSocketClosed()): this.eventHandler.owner
    //#input(void onSocketClosed()): this.eventHandler.owner.__Tag
    //#input(void onSocketClosed()): this.eventHandler.owner.server
    //#input(void onSocketClosed()): this.invites
    //#input(void onSocketClosed()): this.listeners
    //#input(void onSocketClosed()): this.myState
    //#input(void onSocketClosed()): this.myState.__Tag
    //#input(void onSocketClosed()): this.myState.history
    //#input(void onSocketClosed()): this.myState.state
    //#input(void onSocketClosed()): this.myState.state.transitions
    //#input(void onSocketClosed()): this.queries
    //#input(void onSocketClosed()): this.serverInfo
    //#output(void onSocketClosed()): com/dmdirc/ServerManager.me
    //#output(void onSocketClosed()): new ArrayList(ServerManager#1) num objects
    //#output(void onSocketClosed()): new ServerManager(getServerManager#1) num objects
    //#output(void onSocketClosed()): new ServerManager(getServerManager#1).__Tag
    //#output(void onSocketClosed()): new ServerManager(getServerManager#1).servers
    //#output(void onSocketClosed()): new Timer(doDelayedReconnect#4) num objects
    //#output(void onSocketClosed()): this.awayMessage
    //#output(void onSocketClosed()): this.icon
    //#output(void onSocketClosed()): this.myState.state
    //#output(void onSocketClosed()): this.parser
    //#output(void onSocketClosed()): this.reconnectTimer
    //#new obj(void onSocketClosed()): new ArrayList(ServerManager#1)
    //#new obj(void onSocketClosed()): new ServerManager(getServerManager#1)
    //#new obj(void onSocketClosed()): new Timer(doDelayedReconnect#4)
    //#pre[1] (void onSocketClosed()): (soft) com.dmdirc.actions.CoreActionType__static_init.new CoreActionType(CoreActionType__static_init#19).type != null
    //#pre[2] (void onSocketClosed()): (soft) com/dmdirc/Main.controller != null
    //#pre[4] (void onSocketClosed()): (soft) init'ed(com/dmdirc/actions/ActionManager.killSwitch)
    //#pre[5] (void onSocketClosed()): (soft) init'ed(com/dmdirc/ServerManager.me)
    //#pre[6] (void onSocketClosed()): (soft) init'ed(this.awayMessage)
    //#pre[8] (void onSocketClosed()): (soft) this.myState.state != null
    //#pre[14] (void onSocketClosed()): (soft) this.__Tag == com/dmdirc/Server
    //#pre[16] (void onSocketClosed()): (soft) this.channels != null
    //#pre[17] (void onSocketClosed()): (soft) this.config != null
    //#pre[18] (void onSocketClosed()): (soft) this.eventHandler != null
    //#pre[19] (void onSocketClosed()): (soft) this.eventHandler.__Tag == com/dmdirc/ServerEventHandler
    //#pre[20] (void onSocketClosed()): (soft) this.eventHandler.owner != null
    //#pre[23] (void onSocketClosed()): (soft) this.eventHandler.owner.server != null
    //#pre[24] (void onSocketClosed()): (soft) this.invites != null
    //#pre[26] (void onSocketClosed()): (soft) this.listeners != null
    //#pre[28] (void onSocketClosed()): (soft) this.myState != null
    //#pre[30] (void onSocketClosed()): (soft) this.myState.__Tag == com/dmdirc/ServerStatus
    //#pre[32] (void onSocketClosed()): (soft) this.myState.history != null
    //#pre[33] (void onSocketClosed()): (soft) this.myState.state.transitions != null
    //#pre[35] (void onSocketClosed()): (soft) this.serverInfo != null
    //#presumption(void onSocketClosed()): java.util.Arrays:asList(...)@89 init'ed
    //#post(void onSocketClosed()): com/dmdirc/ServerManager.me == old com/dmdirc/ServerManager.me
    //#post(void onSocketClosed()): this.awayMessage == One-of{old this.awayMessage, null}
    //#post(void onSocketClosed()): init'ed(this.awayMessage)
    //#post(void onSocketClosed()): this.icon == One-of{old this.icon, &"secure-server", &"server", &"server-disconnected"}
    //#post(void onSocketClosed()): this.myState.state == One-of{old this.myState.state, &com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#7), &com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#5)}
    //#post(void onSocketClosed()): this.myState.state != null
    //#post(void onSocketClosed()): this.parser == One-of{old this.parser, null}
    //#post(void onSocketClosed()): this.reconnectTimer == old this.reconnectTimer
    //#post(void onSocketClosed()): new ArrayList(ServerManager#1) num objects == 0, if init'ed
    //#post(void onSocketClosed()): new ServerManager(getServerManager#1) num objects == 0, if init'ed
    //#post(void onSocketClosed()): new ServerManager(getServerManager#1).__Tag not init'ed, if init'ed
    //#post(void onSocketClosed()): new ServerManager(getServerManager#1).servers == null
    //#post(void onSocketClosed()): new Timer(doDelayedReconnect#4) num objects == undefined
    //#post(void onSocketClosed()): new Timer(doDelayedReconnect#4) num objects == 0, if init'ed
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.interfaces.AwayStateListener:onBack
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.interfaces.AwayStateListener:onAway
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:getConfigManager
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.Map:values
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.List:addAll
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.parser.irc.IRCStringConverter:toLowerCase
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.interfaces.InviteListener:inviteExpired
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getHost
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:getParser
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:getType
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:trigger
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:getArity
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:triggerActions
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:getUI
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:getFrame
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:getState
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.util.RollingList:getList
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.ServerState:name
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.Thread:currentThread
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.Thread:getStackTrace
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.StackTraceElement:toString
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.Thread:getName
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.util.RollingList:add
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.List:contains
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.Object:notifyAll
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:addLine
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:hasChannel
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:getChannel
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:setIcon
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.FrameContainer
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.String:startsWith
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.String:indexOf
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.config.ConfigManager:hasOptionString
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:despatchNotification
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:getServer
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.Server:addLine
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:addLineToAll
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:addLineToActive
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.ui.WindowManager:findCustomWindow
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:getConfigManager
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getWindow
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:setTitle
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.ui.WindowManager:addWindow
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:open
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:addLine
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.String:format
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:getChildren
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.commandparser.parsers.CommandParser:getCommandTime
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.logger.Logger:userError
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getCallbackManager
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:addLine
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getSSL
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:isVisible
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.parser.irc.callbacks.CallbackManager:delAllCallback
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:close
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.ui.interfaces.ChannelWindow:updateNames
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.actions.ConditionTree$OPERATION:ordinal
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.List:size
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.Deque:pollFirst
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.Character:instanceof
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.Deque:isEmpty
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:readTerm
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.ArrayDeque
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.Deque:pollLast
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.Deque:addFirst
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:parseStack
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.Deque:poll
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.Deque:add
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.Deque:size
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.Integer:parseInt
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptions
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.StringBuilder:indexOf
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.StringBuilder:replace
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.Map:entrySet
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.Map$Entry:getKey
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.Map$Entry:getValue
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:[Ljava.lang.String;:instanceof
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.String:instanceof
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.StringBuffer:length
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.StringBuffer:insert
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:doServerSubstitutions
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:doComponentSubstitutions
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.ServerState:equals
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:getCompatibleComponents
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.Object:toString
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:get
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:getArgTypes
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:test
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:evaluate
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getActiveWindow
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:instanceof
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.util.List:get
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.commandparser.parsers.CommandParser:parseCommand
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.StringBuffer:setLength
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void onSocketClosed()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:close
    //#test_vector(void onSocketClosed()): com.dmdirc.config.ConfigManager:getOptionBool(...)@1259: {0}, {1}
    //#test_vector(void onSocketClosed()): com.dmdirc.config.ConfigManager:getOptionBool(...)@1264: {0}, {1}
    //#test_vector(void onSocketClosed()): java.lang.Thread:holdsLock(...)@1223: {0}, {1}
            new Thread(new Runnable() {
    //#Server.java:1224: method: void com.dmdirc.Server$3.com.dmdirc.Server$3(Server)
    //#input(void com.dmdirc.Server$3(Server)): Param_1
    //#input(void com.dmdirc.Server$3(Server)): this
    //#output(void com.dmdirc.Server$3(Server)): this.this$0
    //#post(void com.dmdirc.Server$3(Server)): this.this$0 == Param_1
    //#post(void com.dmdirc.Server$3(Server)): init'ed(this.this$0)
    //#Server.java:1224: end of method: void com.dmdirc.Server$3.com.dmdirc.Server$3(Server)
                /** {@inheritDoc} */
                @Override
                public void run() {
                    onSocketClosed();
    //#Server.java:1228: method: void com.dmdirc.Server$3.run()
    //#Server.java:1228: Warning: call too complex - analysis skipped
    //#    call on void onSocketClosed()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server$3
    //#    method: void run()
    //#    unanalyzed callee: void onSocketClosed()
    //#input(void run()): com/dmdirc/Server.__Descendant_Table[com/dmdirc/Server]
    //#input(void run()): com/dmdirc/Server.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/Server.__Dispatch_Table.onSocketClosed()V
    //#input(void run()): this
    //#input(void run()): this.this$0
    //#input(void run()): this.this$0.__Tag
    //#pre[2] (void run()): this.this$0 != null
    //#pre[3] (void run()): this.__Tag == com/dmdirc/Server
                }
    //#Server.java:1229: end of method: void com.dmdirc.Server$3.run()
            }, "Socket closed deferred thread").start();
            return;
        }
        
        handleNotification("socketClosed", getName());
    //#Server.java:1234: ?precondition failure
    //#    com/dmdirc/WritableFrameContainer.handleNotification: (soft) init'ed(args[0..4_294_967_295])
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.Server
    //#    method: void onSocketClosed()
    //#    basic block: bb_3
    //#    assertion: (soft) init'ed(handleNotification.Param_2[0..4_294_967_295])
    //#    callee: void com/dmdirc/WritableFrameContainer.handleNotification(String, Object[])
    //#    callee assertion: (soft) init'ed(args[0..4_294_967_295])
    //#    callee file: WritableFrameContainer.java
    //#    callee precondition index: [3]
    //#    callee srcpos: 202
    //#    VN: handleNotification.Param_2[0..4_294_967_295]
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Soft  Bad only invalid  Uncertain

        ActionManager.processEvent(CoreActionType.SERVER_DISCONNECTED, null, this);
    //#Server.java:1236: ?!precondition failure
    //#    com/dmdirc/actions/ActionManager.processEvent: (soft) type.type.__Tag in {com/dmdirc/actions/interfaces/ActionMetaType, com/dmdirc/actions/metatypes/ActionEvents, com/dmdirc/actions/metatypes/ChannelEvents, com/dmdirc/actions/metatypes/ClientEvents, com/dmdirc/actions/metatypes/PluginEvents, com/dmdirc/actions/metatypes/QueryEvents, com/dmdirc/actions/metatypes/ServerEvents, com/dmdirc/addons/dcc/actions/DCCEvents}
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.Server
    //#    method: void onSocketClosed()
    //#    basic block: bb_3
    //#    assertion: (soft) undefined in {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    callee: void com/dmdirc/actions/ActionManager.processEvent(ActionType, StringBuffer, Object[])
    //#    callee assertion: (soft) type.type.__Tag in {com/dmdirc/actions/interfaces/ActionMetaType, com/dmdirc/actions/metatypes/ActionEvents, com/dmdirc/actions/metatypes/ChannelEvents, com/dmdirc/actions/metatypes/ClientEvents, com/dmdirc/actions/metatypes/PluginEvents, com/dmdirc/actions/metatypes/QueryEvents, com/dmdirc/actions/metatypes/ServerEvents, com/dmdirc/addons/dcc/actions/DCCEvents}
    //#    callee file: ActionManager.java
    //#    callee precondition index: [29]
    //#    callee srcpos: 365
    //#    VN: undefined
    //#    Expected: {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    Bad: {0, Invalid}
    //#    Attribs:  Int  Bad singleton  Bad overlaps +/-1000  Soft  Bad < Exp

        eventHandler.unregisterCallbacks();

        synchronized (myState) {
            if (myState.getState() == ServerState.CLOSING
                    || myState.getState() == ServerState.DISCONNECTED) {
                // This has been triggered via .disconect()
                return;
            }

            if (myState.getState() == ServerState.DISCONNECTING) {
                myState.transition(ServerState.DISCONNECTED);
            } else {
                myState.transition(ServerState.TRANSIENTLY_DISCONNECTED);
            }

            clearChannels();

            parser = null;

            updateIcon();

            if (getConfigManager().getOptionBool(DOMAIN_GENERAL,
    //#Server.java:1259: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onSocketClosed()
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
                    "closechannelsondisconnect")) {
                closeChannels();
            }

            if (getConfigManager().getOptionBool(DOMAIN_GENERAL,
    //#Server.java:1264: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onSocketClosed()
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
                    "closequeriesondisconnect")) {
                closeQueries();
            }

            removeInvites();
            updateAwayState(null);

            if (getConfigManager().getOptionBool(DOMAIN_GENERAL,
    //#Server.java:1272: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onSocketClosed()
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
                    "reconnectondisconnect")
                    && myState.getState() == ServerState.TRANSIENTLY_DISCONNECTED) {
                doDelayedReconnect();
    //#Server.java:1275: Warning: call too complex - analysis skipped
    //#    call on void doDelayedReconnect()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onSocketClosed()
    //#    unanalyzed callee: void doDelayedReconnect()
            }
        }
    }
    //#Server.java:1278: end of method: void com.dmdirc.Server.onSocketClosed()

    /**
     * Called when an error was encountered while connecting.
     *
     * @param errorInfo The parser's error information
     */
    @Precondition("The current server state is CONNECTING")
    public void onConnectError(final ParserError errorInfo) {
        synchronized (myState) {
    //#Server.java:1287: method: void com.dmdirc.Server.onConnectError(ParserError)
    //#input(void onConnectError(ParserError)): " ["._tainted
    //#input(void onConnectError(ParserError)): " doesn't exist"._tainted
    //#input(void onConnectError(ParserError)): "->"._tainted
    //#input(void onConnectError(ParserError)): ": "._tainted
    //#input(void onConnectError(ParserError)): ": channel "._tainted
    //#input(void onConnectError(ParserError)): ":"._tainted
    //#input(void onConnectError(ParserError)): "Connect error when not connecting&#10;&#10;"._tainted
    //#input(void onConnectError(ParserError)): "Illegal server state transition&#10;&#10;"._tainted
    //#input(void onConnectError(ParserError)): "Invalid notification target for type "._tainted
    //#input(void onConnectError(ParserError)): "No route to host"._tainted
    //#input(void onConnectError(ParserError)): "Unknown error: "._tainted
    //#input(void onConnectError(ParserError)): "Unknown host (unable to resolve)"._tainted
    //#input(void onConnectError(ParserError)): "\E"._tainted
    //#input(void onConnectError(ParserError)): "\Q"._tainted
    //#input(void onConnectError(ParserError)): "connectError"._tainted
    //#input(void onConnectError(ParserError)): "self"._tainted
    //#input(void onConnectError(ParserError)): DOMAIN_GENERAL
    //#input(void onConnectError(ParserError)): __Descendant_Table[com/dmdirc/Server]
    //#input(void onConnectError(ParserError)): __Descendant_Table[others]
    //#input(void onConnectError(ParserError)): __Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): __Dispatch_Table.addLineToActive(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): __Dispatch_Table.addLineToAll(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): __Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): __Dispatch_Table.getChannel(Ljava/lang/String;)Lcom/dmdirc/Channel;
    //#input(void onConnectError(ParserError)): __Dispatch_Table.getChildren()Ljava/util/List;
    //#input(void onConnectError(ParserError)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onConnectError(ParserError)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onConnectError(ParserError)): __Dispatch_Table.getName()Ljava/lang/String;
    //#input(void onConnectError(ParserError)): __Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onConnectError(ParserError)): __Dispatch_Table.getStatus()Lcom/dmdirc/ServerStatus;
    //#input(void onConnectError(ParserError)): __Dispatch_Table.handleNotification(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): __Dispatch_Table.hasChannel(Ljava/lang/String;)Z
    //#input(void onConnectError(ParserError)): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#5).transitions
    //#input(void onConnectError(ParserError)): com.dmdirc.actions.CoreActionType__static_init.new CoreActionType(CoreActionType__static_init#18).__Tag
    //#input(void onConnectError(ParserError)): com.dmdirc.actions.CoreActionType__static_init.new CoreActionType(CoreActionType__static_init#18).type
    //#input(void onConnectError(ParserError)): com.dmdirc.actions.metatypes.ServerEvents__static_init.new ServerEvents(ServerEvents__static_init#7).__Tag
    //#input(void onConnectError(ParserError)): com.dmdirc.logger.ErrorLevel.LOW
    //#input(void onConnectError(ParserError)): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void onConnectError(ParserError)): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void onConnectError(ParserError)): com/dmdirc/Channel.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/Channel.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onConnectError(ParserError)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onConnectError(ParserError)): com/dmdirc/Channel.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onConnectError(ParserError)): com/dmdirc/CustomWindow.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void onConnectError(ParserError)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onConnectError(ParserError)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void onConnectError(ParserError)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void onConnectError(ParserError)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void onConnectError(ParserError)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void onConnectError(ParserError)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void onConnectError(ParserError)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void onConnectError(ParserError)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void onConnectError(ParserError)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void onConnectError(ParserError)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void onConnectError(ParserError)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void onConnectError(ParserError)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void onConnectError(ParserError)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void onConnectError(ParserError)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void onConnectError(ParserError)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void onConnectError(ParserError)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onConnectError(ParserError)): com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#input(void onConnectError(ParserError)): com/dmdirc/GlobalWindow.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/GlobalWindow.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onConnectError(ParserError)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onConnectError(ParserError)): com/dmdirc/GlobalWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onConnectError(ParserError)): com/dmdirc/Main.controller
    //#input(void onConnectError(ParserError)): com/dmdirc/MessageTarget.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/MessageTarget.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onConnectError(ParserError)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onConnectError(ParserError)): com/dmdirc/MessageTarget.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onConnectError(ParserError)): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(void onConnectError(ParserError)): com/dmdirc/Query.__Descendant_Table[others]
    //#input(void onConnectError(ParserError)): com/dmdirc/Query.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/Query.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onConnectError(ParserError)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onConnectError(ParserError)): com/dmdirc/Query.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onConnectError(ParserError)): com/dmdirc/Raw.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/Raw.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onConnectError(ParserError)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onConnectError(ParserError)): com/dmdirc/Raw.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onConnectError(ParserError)): com/dmdirc/ServerState.CLOSING
    //#input(void onConnectError(ParserError)): com/dmdirc/ServerState.CONNECTED
    //#input(void onConnectError(ParserError)): com/dmdirc/ServerState.CONNECTING
    //#input(void onConnectError(ParserError)): com/dmdirc/ServerState.DISCONNECTING
    //#input(void onConnectError(ParserError)): com/dmdirc/ServerState.TRANSIENTLY_DISCONNECTED
    //#input(void onConnectError(ParserError)): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void onConnectError(ParserError)): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void onConnectError(ParserError)): com/dmdirc/ServerStatus.__Dispatch_Table.addHistoryEntry(Lcom/dmdirc/ServerState;Lcom/dmdirc/ServerState;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void onConnectError(ParserError)): com/dmdirc/ServerStatus.__Dispatch_Table.getTransitionHistory()Ljava/lang/String;
    //#input(void onConnectError(ParserError)): com/dmdirc/ServerStatus.__Dispatch_Table.transition(Lcom/dmdirc/ServerState;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/WritableFrameContainer.NOTIFICATION_CHANNEL
    //#input(void onConnectError(ParserError)): com/dmdirc/WritableFrameContainer.NOTIFICATION_SERVER
    //#input(void onConnectError(ParserError)): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void onConnectError(ParserError)): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void onConnectError(ParserError)): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void onConnectError(ParserError)): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void onConnectError(ParserError)): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void onConnectError(ParserError)): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void onConnectError(ParserError)): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void onConnectError(ParserError)): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void onConnectError(ParserError)): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void onConnectError(ParserError)): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void onConnectError(ParserError)): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void onConnectError(ParserError)): com/dmdirc/WritableFrameContainer.__Descendant_Table[others]
    //#input(void onConnectError(ParserError)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onConnectError(ParserError)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onConnectError(ParserError)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onConnectError(ParserError)): com/dmdirc/WritableFrameContainer.com.dmdirc.logger.ErrorLevel.LOW
    //#input(void onConnectError(ParserError)): com/dmdirc/WritableFrameContainer.com.dmdirc.logger.ErrorLevel.MEDIUM
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/ActionManager.killSwitch
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/ActionManager.listeners
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/CoreActionType.SERVER_CONNECTERROR
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/CoreActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionMetaType]
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ActionEvents]
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ChannelEvents]
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ClientEvents]
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/PluginEvents]
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/QueryEvents]
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ServerEvents]
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCEvents]
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[others]
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/interfaces/ActionMetaType.__Dispatch_Table.getArity()I
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/CoreActionType]
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionType]
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCActions]
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[others]
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/interfaces/ActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/metatypes/ActionEvents.__Dispatch_Table.getArity()I
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/metatypes/ChannelEvents.__Dispatch_Table.getArity()I
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/metatypes/ClientEvents.__Dispatch_Table.getArity()I
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/metatypes/PluginEvents.__Dispatch_Table.getArity()I
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/metatypes/QueryEvents.__Dispatch_Table.getArity()I
    //#input(void onConnectError(ParserError)): com/dmdirc/actions/metatypes/ServerEvents.__Dispatch_Table.getArity()I
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/actions/DCCActions.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void onConnectError(ParserError)): com/dmdirc/addons/dcc/actions/DCCEvents.__Dispatch_Table.getArity()I
    //#input(void onConnectError(ParserError)): errorInfo
    //#input(void onConnectError(ParserError)): this
    //#input(void onConnectError(ParserError)): this.__Tag
    //#input(void onConnectError(ParserError)): this.changer
    //#input(void onConnectError(ParserError)): this.config
    //#input(void onConnectError(ParserError)): this.listeners
    //#input(void onConnectError(ParserError)): this.myState
    //#input(void onConnectError(ParserError)): this.myState.__Tag
    //#input(void onConnectError(ParserError)): this.myState.history
    //#input(void onConnectError(ParserError)): this.myState.state
    //#input(void onConnectError(ParserError)): this.myState.state.transitions
    //#input(void onConnectError(ParserError)): this.serverInfo
    //#output(void onConnectError(ParserError)): com/dmdirc/ServerManager.me
    //#output(void onConnectError(ParserError)): new ArrayList(ServerManager#1) num objects
    //#output(void onConnectError(ParserError)): new ServerManager(getServerManager#1) num objects
    //#output(void onConnectError(ParserError)): new ServerManager(getServerManager#1).__Tag
    //#output(void onConnectError(ParserError)): new ServerManager(getServerManager#1).servers
    //#output(void onConnectError(ParserError)): new Timer(doDelayedReconnect#4) num objects
    //#output(void onConnectError(ParserError)): this.icon
    //#output(void onConnectError(ParserError)): this.myState.state
    //#output(void onConnectError(ParserError)): this.parser
    //#output(void onConnectError(ParserError)): this.reconnectTimer
    //#new obj(void onConnectError(ParserError)): new ArrayList(ServerManager#1)
    //#new obj(void onConnectError(ParserError)): new ServerManager(getServerManager#1)
    //#new obj(void onConnectError(ParserError)): new Timer(doDelayedReconnect#4)
    //#pre[8] (void onConnectError(ParserError)): this.myState.state != null
    //#pre[17] (void onConnectError(ParserError)): this.myState != null
    //#pre[19] (void onConnectError(ParserError)): this.myState.__Tag == com/dmdirc/ServerStatus
    //#pre[1] (void onConnectError(ParserError)): (soft) com.dmdirc.actions.CoreActionType__static_init.new CoreActionType(CoreActionType__static_init#18).type != null
    //#pre[2] (void onConnectError(ParserError)): (soft) com/dmdirc/Main.controller != null
    //#pre[4] (void onConnectError(ParserError)): (soft) init'ed(com/dmdirc/actions/ActionManager.killSwitch)
    //#pre[5] (void onConnectError(ParserError)): (soft) errorInfo != null
    //#pre[6] (void onConnectError(ParserError)): (soft) init'ed(com/dmdirc/ServerManager.me)
    //#pre[12] (void onConnectError(ParserError)): (soft) this.__Tag == com/dmdirc/Server
    //#pre[14] (void onConnectError(ParserError)): (soft) this.config != null
    //#pre[15] (void onConnectError(ParserError)): (soft) this.listeners != null
    //#pre[21] (void onConnectError(ParserError)): (soft) this.myState.history != null
    //#pre[22] (void onConnectError(ParserError)): (soft) this.myState.state.transitions != null
    //#pre[23] (void onConnectError(ParserError)): (soft) this.serverInfo != null
    //#presumption(void onConnectError(ParserError)): init'ed(com.dmdirc.logger.ErrorLevel.LOW)
    //#presumption(void onConnectError(ParserError)): com.dmdirc.parser.irc.ParserError:getException(...)@1308 != null
    //#presumption(void onConnectError(ParserError)): java.util.Arrays:asList(...)@89 init'ed
    //#post(void onConnectError(ParserError)): com/dmdirc/ServerManager.me == old com/dmdirc/ServerManager.me
    //#post(void onConnectError(ParserError)): this.icon == One-of{old this.icon, &"secure-server", &"server", &"server-disconnected"}
    //#post(void onConnectError(ParserError)): this.myState.state == One-of{old this.myState.state, &com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#5)}
    //#post(void onConnectError(ParserError)): this.myState.state != null
    //#post(void onConnectError(ParserError)): this.parser == One-of{old this.parser, null}
    //#post(void onConnectError(ParserError)): this.reconnectTimer == old this.reconnectTimer
    //#post(void onConnectError(ParserError)): new ArrayList(ServerManager#1) num objects == 0, if init'ed
    //#post(void onConnectError(ParserError)): new ServerManager(getServerManager#1) num objects == 0, if init'ed
    //#post(void onConnectError(ParserError)): new ServerManager(getServerManager#1).__Tag not init'ed, if init'ed
    //#post(void onConnectError(ParserError)): new ServerManager(getServerManager#1).servers == null
    //#post(void onConnectError(ParserError)): new Timer(doDelayedReconnect#4) num objects == undefined
    //#post(void onConnectError(ParserError)): new Timer(doDelayedReconnect#4) num objects == 0, if init'ed
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:getConfigManager
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.Map:values
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.List:addAll
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.parser.irc.IRCStringConverter:toLowerCase
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getHost
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:getType
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:trigger
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:getArity
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:triggerActions
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:getUI
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:getFrame
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:getState
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.util.RollingList:getList
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.ServerState:name
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.Thread:currentThread
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.Thread:getStackTrace
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.StackTraceElement:toString
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.Thread:getName
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.util.RollingList:add
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.List:contains
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.Object:notifyAll
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:addLine
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:hasChannel
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:getChannel
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:setIcon
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.FrameContainer
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.String:startsWith
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.String:indexOf
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.config.ConfigManager:hasOptionString
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:despatchNotification
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:getServer
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.Server:addLine
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:addLineToAll
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:addLineToActive
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.ui.WindowManager:findCustomWindow
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:getConfigManager
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getWindow
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:setTitle
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.ui.WindowManager:addWindow
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:open
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:addLine
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.String:format
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:getChildren
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.commandparser.parsers.CommandParser:getCommandTime
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.logger.Logger:userError
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:addLine
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getSSL
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:isVisible
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.actions.ConditionTree$OPERATION:ordinal
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.List:size
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.Deque:pollFirst
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.Character:instanceof
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.Deque:isEmpty
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:readTerm
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.ArrayDeque
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.Deque:pollLast
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.Deque:addFirst
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:parseStack
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.Deque:poll
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.Deque:add
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.Deque:size
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.Integer:parseInt
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptions
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.StringBuilder:indexOf
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.StringBuilder:replace
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.Map:entrySet
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.Map$Entry:getKey
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.Map$Entry:getValue
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:[Ljava.lang.String;:instanceof
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.String:instanceof
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.StringBuffer:length
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.StringBuffer:insert
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:doServerSubstitutions
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:doComponentSubstitutions
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.ServerState:equals
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:getCompatibleComponents
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.Object:toString
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:get
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:getArgTypes
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:test
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:evaluate
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getActiveWindow
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:instanceof
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.util.List:get
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.commandparser.parsers.CommandParser:parseCommand
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.StringBuffer:setLength
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void onConnectError(ParserError)): Effects-of-calling:com.dmdirc.util.ListenerList
    //#test_vector(void onConnectError(ParserError)): com.dmdirc.parser.irc.ParserError:getException(...)@1305: Inverse{null}, Addr_Set{null}
    //#test_vector(void onConnectError(ParserError)): java.net.NoRouteToHostException:instanceof(...)@1312: {0}, {1}
    //#test_vector(void onConnectError(ParserError)): java.net.SocketException:instanceof(...)@1314: {1}, {0}
    //#test_vector(void onConnectError(ParserError)): java.net.UnknownHostException:instanceof(...)@1310: {0}, {1}
    //#test_vector(void onConnectError(ParserError)): javax.net.ssl.SSLException:instanceof(...)@1314: {0}, {1}
            if (myState.getState() == ServerState.CLOSING
                    || myState.getState() == ServerState.DISCONNECTING) {
                // Do nothing
                return;
            } else if (myState.getState() != ServerState.CONNECTING) {
                // Shouldn't happen
                throw new IllegalStateException("Connect error when not "
    //#Server.java:1294: ?conditional throw
    //#    getState(...)@1292 == com/dmdirc/ServerState.CONNECTING
    //#    severity: LOW
    //#    class: com.dmdirc.Server
    //#    method: void onConnectError(ParserError)
    //#    basic block: bb_6
    //#    assertion: getState(...)@1292 == com/dmdirc/ServerState.CONNECTING
    //#    VN: &com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#1) == this.myState.state
    //#    Expected: {1}
    //#    Bad: {0}
    //#    Attribs:  Int  Exp in +/-1000  Exp singleton  Bad singleton  Bad overlaps +/-1000  Bad < Exp
                        + "connecting\n\n" + getStatus().getTransitionHistory());
            }

            myState.transition(ServerState.TRANSIENTLY_DISCONNECTED);
            parser = null;

            updateIcon();

            String description;

            if (errorInfo.getException() == null) {
    //#Server.java:1305: Warning: method not available - call not analyzed
    //#    call on Exception com.dmdirc.parser.irc.ParserError:getException()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onConnectError(ParserError)
    //#    unanalyzed callee: Exception com.dmdirc.parser.irc.ParserError:getException()
                description = errorInfo.getData();
    //#Server.java:1306: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ParserError:getData()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onConnectError(ParserError)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ParserError:getData()
            } else {
                final Exception exception = errorInfo.getException();
    //#Server.java:1308: Warning: method not available - call not analyzed
    //#    call on Exception com.dmdirc.parser.irc.ParserError:getException()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onConnectError(ParserError)
    //#    unanalyzed callee: Exception com.dmdirc.parser.irc.ParserError:getException()

                if (exception instanceof java.net.UnknownHostException) {
                    description = "Unknown host (unable to resolve)";
                } else if (exception instanceof java.net.NoRouteToHostException) {
                    description = "No route to host";
                } else if (exception instanceof java.net.SocketException
                        || exception instanceof javax.net.ssl.SSLException) {
                    description = exception.getMessage();
                } else {
                    Logger.appError(ErrorLevel.LOW, "Unknown socket error", exception);
    //#Server.java:1318: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.logger.Logger:appError(ErrorLevel, String, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onConnectError(ParserError)
    //#    unanalyzed callee: void com.dmdirc.logger.Logger:appError(ErrorLevel, String, Throwable)
                    description = "Unknown error: " + exception.getMessage();
                }
            }

            ActionManager.processEvent(CoreActionType.SERVER_CONNECTERROR, null,
    //#Server.java:1323: ?!precondition failure
    //#    com/dmdirc/actions/ActionManager.processEvent: (soft) type.type.__Tag in {com/dmdirc/actions/interfaces/ActionMetaType, com/dmdirc/actions/metatypes/ActionEvents, com/dmdirc/actions/metatypes/ChannelEvents, com/dmdirc/actions/metatypes/ClientEvents, com/dmdirc/actions/metatypes/PluginEvents, com/dmdirc/actions/metatypes/QueryEvents, com/dmdirc/actions/metatypes/ServerEvents, com/dmdirc/addons/dcc/actions/DCCEvents}
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.Server
    //#    method: void onConnectError(ParserError)
    //#    basic block: bb_18
    //#    assertion: (soft) undefined in {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    callee: void com/dmdirc/actions/ActionManager.processEvent(ActionType, StringBuffer, Object[])
    //#    callee assertion: (soft) type.type.__Tag in {com/dmdirc/actions/interfaces/ActionMetaType, com/dmdirc/actions/metatypes/ActionEvents, com/dmdirc/actions/metatypes/ChannelEvents, com/dmdirc/actions/metatypes/ClientEvents, com/dmdirc/actions/metatypes/PluginEvents, com/dmdirc/actions/metatypes/QueryEvents, com/dmdirc/actions/metatypes/ServerEvents, com/dmdirc/addons/dcc/actions/DCCEvents}
    //#    callee file: ActionManager.java
    //#    callee precondition index: [29]
    //#    callee srcpos: 365
    //#    VN: undefined
    //#    Expected: {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    Bad: {0, Invalid}
    //#    Attribs:  Int  Bad singleton  Bad overlaps +/-1000  Soft  Bad < Exp
                    this, description);

            handleNotification("connectError", getName(), description);
    //#Server.java:1326: ?precondition failure
    //#    com/dmdirc/WritableFrameContainer.handleNotification: (soft) init'ed(args[0..4_294_967_295])
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.Server
    //#    method: void onConnectError(ParserError)
    //#    basic block: bb_18
    //#    assertion: (soft) init'ed(handleNotification.Param_2[0..4_294_967_295])
    //#    callee: void com/dmdirc/WritableFrameContainer.handleNotification(String, Object[])
    //#    callee assertion: (soft) init'ed(args[0..4_294_967_295])
    //#    callee file: WritableFrameContainer.java
    //#    callee precondition index: [3]
    //#    callee srcpos: 202
    //#    VN: handleNotification.Param_2[0..4_294_967_295]
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Soft  Bad only invalid

            if (getConfigManager().getOptionBool(DOMAIN_GENERAL,
    //#Server.java:1328: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onConnectError(ParserError)
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
                    "reconnectonconnectfailure")) {
                doDelayedReconnect();
    //#Server.java:1330: Warning: call too complex - analysis skipped
    //#    call on void doDelayedReconnect()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onConnectError(ParserError)
    //#    unanalyzed callee: void doDelayedReconnect()
            }
        }
    }
    //#Server.java:1333: end of method: void com.dmdirc.Server.onConnectError(ParserError)

    /**
     * Called when we fail to receive a ping reply within a set period of time.
     */
    public void onPingFailed() {
        Main.getUI().getStatusBar().setMessage("No ping reply from "
    //#Server.java:1339: method: void com.dmdirc.Server.onPingFailed()
    //#Server.java:1339: Warning: method not available - call not analyzed
    //#    call on StatusBar com.dmdirc.ui.interfaces.UIController:getStatusBar()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onPingFailed()
    //#    unanalyzed callee: StatusBar com.dmdirc.ui.interfaces.UIController:getStatusBar()
    //#Server.java:1339: Warning: method not available - call not analyzed
    //#    call on long com.dmdirc.parser.irc.IRCParser:getPingTime(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onPingFailed()
    //#    unanalyzed callee: long com.dmdirc.parser.irc.IRCParser:getPingTime(bool)
    //#Server.java:1339: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.StatusBar:setMessage(String, StatusMessageNotifier, int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onPingFailed()
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.StatusBar:setMessage(String, StatusMessageNotifier, int)
    //#input(void onPingFailed()): " ["._tainted
    //#input(void onPingFailed()): " doesn't exist"._tainted
    //#input(void onPingFailed()): " for over "._tainted
    //#input(void onPingFailed()): " seconds."._tainted
    //#input(void onPingFailed()): "->"._tainted
    //#input(void onPingFailed()): ": "._tainted
    //#input(void onPingFailed()): ": channel "._tainted
    //#input(void onPingFailed()): ":"._tainted
    //#input(void onPingFailed()): "Illegal server state transition&#10;&#10;"._tainted
    //#input(void onPingFailed()): "Invalid notification target for type "._tainted
    //#input(void onPingFailed()): "No ping reply from "._tainted
    //#input(void onPingFailed()): "\E"._tainted
    //#input(void onPingFailed()): "\Q"._tainted
    //#input(void onPingFailed()): "self"._tainted
    //#input(void onPingFailed()): "stonedServer"._tainted
    //#input(void onPingFailed()): DOMAIN_GENERAL
    //#input(void onPingFailed()): DOMAIN_SERVER
    //#input(void onPingFailed()): __Descendant_Table[com/dmdirc/Server]
    //#input(void onPingFailed()): __Descendant_Table[others]
    //#input(void onPingFailed()): __Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): __Dispatch_Table.addLineToActive(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): __Dispatch_Table.addLineToAll(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): __Dispatch_Table.connect(Ljava/lang/String;ILjava/lang/String;ZLcom/dmdirc/config/Identity;)V
    //#input(void onPingFailed()): __Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): __Dispatch_Table.disconnect(Ljava/lang/String;)V
    //#input(void onPingFailed()): __Dispatch_Table.getChannel(Ljava/lang/String;)Lcom/dmdirc/Channel;
    //#input(void onPingFailed()): __Dispatch_Table.getChildren()Ljava/util/List;
    //#input(void onPingFailed()): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onPingFailed()): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPingFailed()): __Dispatch_Table.getName()Ljava/lang/String;
    //#input(void onPingFailed()): __Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onPingFailed()): __Dispatch_Table.handleNotification(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): __Dispatch_Table.hasChannel(Ljava/lang/String;)Z
    //#input(void onPingFailed()): __Dispatch_Table.reconnect()V
    //#input(void onPingFailed()): __Dispatch_Table.reconnect(Ljava/lang/String;)V
    //#input(void onPingFailed()): __Dispatch_Table.removeInvite(Lcom/dmdirc/Invite;)V
    //#input(void onPingFailed()): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1).length
    //#input(void onPingFailed()): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295]
    //#input(void onPingFailed()): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#7).transitions
    //#input(void onPingFailed()): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#9).transitions
    //#input(void onPingFailed()): com.dmdirc.actions.CoreActionType__static_init.new CoreActionType(CoreActionType__static_init#33).__Tag
    //#input(void onPingFailed()): com.dmdirc.actions.CoreActionType__static_init.new CoreActionType(CoreActionType__static_init#33).type
    //#input(void onPingFailed()): com.dmdirc.actions.metatypes.ServerEvents__static_init.new ServerEvents(ServerEvents__static_init#1).__Tag
    //#input(void onPingFailed()): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void onPingFailed()): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void onPingFailed()): com/dmdirc/Channel.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): com/dmdirc/Channel.__Dispatch_Table.close()V
    //#input(void onPingFailed()): com/dmdirc/Channel.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onPingFailed()): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPingFailed()): com/dmdirc/Channel.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onPingFailed()): com/dmdirc/Channel.__Dispatch_Table.resetWindow()V
    //#input(void onPingFailed()): com/dmdirc/CustomWindow.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void onPingFailed()): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPingFailed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void onPingFailed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void onPingFailed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void onPingFailed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void onPingFailed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void onPingFailed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void onPingFailed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void onPingFailed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void onPingFailed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void onPingFailed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void onPingFailed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void onPingFailed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void onPingFailed()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void onPingFailed()): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void onPingFailed()): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPingFailed()): com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#input(void onPingFailed()): com/dmdirc/GlobalWindow.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): com/dmdirc/GlobalWindow.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onPingFailed()): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPingFailed()): com/dmdirc/GlobalWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onPingFailed()): com/dmdirc/Invite.__Descendant_Table[com/dmdirc/Invite]
    //#input(void onPingFailed()): com/dmdirc/Invite.__Descendant_Table[others]
    //#input(void onPingFailed()): com/dmdirc/Main.controller
    //#input(void onPingFailed()): com/dmdirc/MessageTarget.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): com/dmdirc/MessageTarget.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onPingFailed()): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPingFailed()): com/dmdirc/MessageTarget.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onPingFailed()): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(void onPingFailed()): com/dmdirc/Query.__Descendant_Table[others]
    //#input(void onPingFailed()): com/dmdirc/Query.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): com/dmdirc/Query.__Dispatch_Table.close()V
    //#input(void onPingFailed()): com/dmdirc/Query.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onPingFailed()): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPingFailed()): com/dmdirc/Query.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onPingFailed()): com/dmdirc/Raw.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): com/dmdirc/Raw.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onPingFailed()): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPingFailed()): com/dmdirc/Raw.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onPingFailed()): com/dmdirc/Server$4.$SwitchMap$com$dmdirc$ServerState
    //#input(void onPingFailed()): com/dmdirc/ServerState.CLOSING
    //#input(void onPingFailed()): com/dmdirc/ServerState.CONNECTED
    //#input(void onPingFailed()): com/dmdirc/ServerState.DISCONNECTED
    //#input(void onPingFailed()): com/dmdirc/ServerState.DISCONNECTING
    //#input(void onPingFailed()): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void onPingFailed()): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void onPingFailed()): com/dmdirc/ServerStatus.__Dispatch_Table.addHistoryEntry(Lcom/dmdirc/ServerState;Lcom/dmdirc/ServerState;)V
    //#input(void onPingFailed()): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void onPingFailed()): com/dmdirc/ServerStatus.__Dispatch_Table.getTransitionHistory()Ljava/lang/String;
    //#input(void onPingFailed()): com/dmdirc/ServerStatus.__Dispatch_Table.transition(Lcom/dmdirc/ServerState;)V
    //#input(void onPingFailed()): com/dmdirc/WritableFrameContainer.NOTIFICATION_CHANNEL
    //#input(void onPingFailed()): com/dmdirc/WritableFrameContainer.NOTIFICATION_SERVER
    //#input(void onPingFailed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void onPingFailed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void onPingFailed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void onPingFailed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void onPingFailed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void onPingFailed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void onPingFailed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void onPingFailed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void onPingFailed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void onPingFailed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void onPingFailed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void onPingFailed()): com/dmdirc/WritableFrameContainer.__Descendant_Table[others]
    //#input(void onPingFailed()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onPingFailed()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPingFailed()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onPingFailed()): com/dmdirc/WritableFrameContainer.com.dmdirc.logger.ErrorLevel.LOW
    //#input(void onPingFailed()): com/dmdirc/WritableFrameContainer.com.dmdirc.logger.ErrorLevel.MEDIUM
    //#input(void onPingFailed()): com/dmdirc/actions/ActionManager.killSwitch
    //#input(void onPingFailed()): com/dmdirc/actions/ActionManager.listeners
    //#input(void onPingFailed()): com/dmdirc/actions/CoreActionType.SERVER_NOPING
    //#input(void onPingFailed()): com/dmdirc/actions/CoreActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void onPingFailed()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionMetaType]
    //#input(void onPingFailed()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ActionEvents]
    //#input(void onPingFailed()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ChannelEvents]
    //#input(void onPingFailed()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ClientEvents]
    //#input(void onPingFailed()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/PluginEvents]
    //#input(void onPingFailed()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/QueryEvents]
    //#input(void onPingFailed()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ServerEvents]
    //#input(void onPingFailed()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCEvents]
    //#input(void onPingFailed()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[others]
    //#input(void onPingFailed()): com/dmdirc/actions/interfaces/ActionMetaType.__Dispatch_Table.getArity()I
    //#input(void onPingFailed()): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/CoreActionType]
    //#input(void onPingFailed()): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionType]
    //#input(void onPingFailed()): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCActions]
    //#input(void onPingFailed()): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[others]
    //#input(void onPingFailed()): com/dmdirc/actions/interfaces/ActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void onPingFailed()): com/dmdirc/actions/metatypes/ActionEvents.__Dispatch_Table.getArity()I
    //#input(void onPingFailed()): com/dmdirc/actions/metatypes/ChannelEvents.__Dispatch_Table.getArity()I
    //#input(void onPingFailed()): com/dmdirc/actions/metatypes/ClientEvents.__Dispatch_Table.getArity()I
    //#input(void onPingFailed()): com/dmdirc/actions/metatypes/PluginEvents.__Dispatch_Table.getArity()I
    //#input(void onPingFailed()): com/dmdirc/actions/metatypes/QueryEvents.__Dispatch_Table.getArity()I
    //#input(void onPingFailed()): com/dmdirc/actions/metatypes/ServerEvents.__Dispatch_Table.getArity()I
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/actions/DCCActions.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void onPingFailed()): com/dmdirc/addons/dcc/actions/DCCEvents.__Dispatch_Table.getArity()I
    //#input(void onPingFailed()): this
    //#input(void onPingFailed()): this.__Tag
    //#input(void onPingFailed()): this.changer
    //#input(void onPingFailed()): this.channels
    //#input(void onPingFailed()): this.config
    //#input(void onPingFailed()): this.invites
    //#input(void onPingFailed()): this.listeners
    //#input(void onPingFailed()): this.myState
    //#input(void onPingFailed()): this.myState.__Tag
    //#input(void onPingFailed()): this.myState.history
    //#input(void onPingFailed()): this.myState.state
    //#input(void onPingFailed()): this.myState.state.transitions
    //#input(void onPingFailed()): this.parser
    //#input(void onPingFailed()): this.parserThread
    //#input(void onPingFailed()): this.profile
    //#input(void onPingFailed()): this.queries
    //#input(void onPingFailed()): this.reconnectTimer
    //#input(void onPingFailed()): this.serverInfo
    //#output(void onPingFailed()): com/dmdirc/ServerManager.me
    //#output(void onPingFailed()): new ArrayList(ServerManager#1) num objects
    //#output(void onPingFailed()): new ServerInfo(buildServerInfo#1) num objects
    //#output(void onPingFailed()): new ServerManager(getServerManager#1) num objects
    //#output(void onPingFailed()): new ServerManager(getServerManager#1).__Tag
    //#output(void onPingFailed()): new ServerManager(getServerManager#1).servers
    //#output(void onPingFailed()): new Thread(connect#5) num objects
    //#output(void onPingFailed()): this.awayMessage
    //#output(void onPingFailed()): this.icon
    //#output(void onPingFailed()): this.myState.state
    //#output(void onPingFailed()): this.parser
    //#output(void onPingFailed()): this.parserThread
    //#output(void onPingFailed()): this.profile
    //#output(void onPingFailed()): this.serverInfo
    //#new obj(void onPingFailed()): new ArrayList(ServerManager#1)
    //#new obj(void onPingFailed()): new ServerInfo(buildServerInfo#1)
    //#new obj(void onPingFailed()): new ServerManager(getServerManager#1)
    //#new obj(void onPingFailed()): new Thread(connect#5)
    //#pre[3] (void onPingFailed()): com/dmdirc/Main.controller != null
    //#pre[5] (void onPingFailed()): init'ed(com/dmdirc/actions/ActionManager.killSwitch)
    //#pre[10] (void onPingFailed()): this.parser != null
    //#pre[13] (void onPingFailed()): this.serverInfo != null
    //#pre[15] (void onPingFailed()): this.__Tag == com/dmdirc/Server
    //#pre[18] (void onPingFailed()): this.config != null
    //#pre[1] (void onPingFailed()): (soft) init'ed(com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295])
    //#pre[2] (void onPingFailed()): (soft) com.dmdirc.actions.CoreActionType__static_init.new CoreActionType(CoreActionType__static_init#33).type != null
    //#pre[6] (void onPingFailed()): (soft) init'ed(com/dmdirc/ServerManager.me)
    //#pre[9] (void onPingFailed()): (soft) this.myState.state != null
    //#pre[11] (void onPingFailed()): (soft) this.parserThread != null
    //#pre[12] (void onPingFailed()): (soft) init'ed(this.profile)
    //#pre[17] (void onPingFailed()): (soft) this.channels != null
    //#pre[19] (void onPingFailed()): (soft) this.invites != null
    //#pre[21] (void onPingFailed()): (soft) this.listeners != null
    //#pre[23] (void onPingFailed()): (soft) this.myState != null
    //#pre[25] (void onPingFailed()): (soft) this.myState.__Tag == com/dmdirc/ServerStatus
    //#pre[26] (void onPingFailed()): (soft) this.myState.history != null
    //#pre[27] (void onPingFailed()): (soft) this.myState.state.transitions != null
    //#pre[29] (void onPingFailed()): (soft) this.reconnectTimer != null
    //#presumption(void onPingFailed()): (int) (java.lang.Math:floor(...)@1339) in {-2_147_483_648..4_294_967_295}
    //#presumption(void onPingFailed()): com.dmdirc.ui.interfaces.UIController:getStatusBar(...)@1339 != null
    //#post(void onPingFailed()): com/dmdirc/ServerManager.me == old com/dmdirc/ServerManager.me
    //#post(void onPingFailed()): this.awayMessage == old this.awayMessage
    //#post(void onPingFailed()): this.icon == One-of{old this.icon, &"secure-server", &"server", &"server-disconnected"}
    //#post(void onPingFailed()): this.myState.state != null
    //#post(void onPingFailed()): this.parser == old this.parser
    //#post(void onPingFailed()): this.parser != null
    //#post(void onPingFailed()): this.parserThread == old this.parserThread
    //#post(void onPingFailed()): this.parserThread != null
    //#post(void onPingFailed()): this.profile == old this.profile
    //#post(void onPingFailed()): init'ed(this.profile)
    //#post(void onPingFailed()): this.serverInfo == old this.serverInfo
    //#post(void onPingFailed()): this.serverInfo != null
    //#post(void onPingFailed()): new ArrayList(ServerManager#1) num objects == undefined
    //#post(void onPingFailed()): new ArrayList(ServerManager#1) num objects == 0, if init'ed
    //#post(void onPingFailed()): new ServerManager(getServerManager#1) num objects == new ArrayList(ServerManager#1) num objects
    //#post(void onPingFailed()): new ServerManager(getServerManager#1).__Tag == new ArrayList(ServerManager#1) num objects
    //#post(void onPingFailed()): new ServerInfo(buildServerInfo#1) num objects == 0, if init'ed
    //#post(void onPingFailed()): new ServerManager(getServerManager#1).servers == undefined
    //#post(void onPingFailed()): new ServerManager(getServerManager#1).servers == null
    //#post(void onPingFailed()): new Thread(connect#5) num objects == 0, if init'ed
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void onPingFailed()): Effects-of-calling:getConfigManager
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.Map:values
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.List:addAll
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.parser.irc.IRCStringConverter:toLowerCase
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.interfaces.InviteListener:inviteExpired
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getHost
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setSSL
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.config.ConfigManager:hasOptionString
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setUseSocks
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setProxyHost
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setProxyUser
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setProxyPass
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionInt
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setProxyPort
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void onPingFailed()): Effects-of-calling:getType
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void onPingFailed()): Effects-of-calling:trigger
    //#unanalyzed(void onPingFailed()): Effects-of-calling:getArity
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(void onPingFailed()): Effects-of-calling:triggerActions
    //#unanalyzed(void onPingFailed()): Effects-of-calling:getUI
    //#unanalyzed(void onPingFailed()): Effects-of-calling:getFrame
    //#unanalyzed(void onPingFailed()): Effects-of-calling:reconnect
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.ServerState:ordinal
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.Timer:cancel
    //#unanalyzed(void onPingFailed()): Effects-of-calling:disconnect
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.Object:wait
    //#unanalyzed(void onPingFailed()): Effects-of-calling:getState
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.util.RollingList:getList
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.ServerState:name
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.Thread:currentThread
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.Thread:getStackTrace
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.StackTraceElement:toString
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.Thread:getName
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.util.RollingList:add
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.List:contains
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.Object:notifyAll
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.config.ConfigManager:migrate
    //#unanalyzed(void onPingFailed()): Effects-of-calling:updateIcon
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void onPingFailed()): Effects-of-calling:addLine
    //#unanalyzed(void onPingFailed()): Effects-of-calling:buildParser
    //#unanalyzed(void onPingFailed()): Effects-of-calling:doCallbacks
    //#unanalyzed(void onPingFailed()): Effects-of-calling:removeInvites
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.ui.interfaces.ServerWindow:setAwayIndicator
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.Thread
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.Thread:start
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#unanalyzed(void onPingFailed()): Effects-of-calling:hasChannel
    //#unanalyzed(void onPingFailed()): Effects-of-calling:getChannel
    //#unanalyzed(void onPingFailed()): Effects-of-calling:setIcon
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.FrameContainer
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.String:startsWith
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.String:indexOf
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void onPingFailed()): Effects-of-calling:despatchNotification
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void onPingFailed()): Effects-of-calling:getServer
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.Server:addLine
    //#unanalyzed(void onPingFailed()): Effects-of-calling:addLineToAll
    //#unanalyzed(void onPingFailed()): Effects-of-calling:addLineToActive
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.ui.WindowManager:findCustomWindow
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:getConfigManager
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getWindow
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:setTitle
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.ui.WindowManager:addWindow
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:open
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:addLine
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.String:format
    //#unanalyzed(void onPingFailed()): Effects-of-calling:getChildren
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.commandparser.parsers.CommandParser:getCommandTime
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.logger.Logger:userError
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:addLine
    //#unanalyzed(void onPingFailed()): Effects-of-calling:clearChannels
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.Thread:interrupt
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:disconnect
    //#unanalyzed(void onPingFailed()): Effects-of-calling:closeChannels
    //#unanalyzed(void onPingFailed()): Effects-of-calling:closeQueries
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getPort
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getPassword
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getSSL
    //#unanalyzed(void onPingFailed()): Effects-of-calling:connect
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:isVisible
    //#unanalyzed(void onPingFailed()): Effects-of-calling:close
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.ui.interfaces.ChannelWindow:updateNames
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.actions.ConditionTree$OPERATION:ordinal
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.List:size
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.Deque:pollFirst
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.Character:instanceof
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.Deque:isEmpty
    //#unanalyzed(void onPingFailed()): Effects-of-calling:readTerm
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.ArrayDeque
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.Deque:pollLast
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.Deque:addFirst
    //#unanalyzed(void onPingFailed()): Effects-of-calling:parseStack
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.Deque:poll
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.Deque:add
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.Deque:size
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.Integer:parseInt
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptions
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.StringBuilder:indexOf
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.StringBuilder:replace
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.Map:entrySet
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.Map$Entry:getKey
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.Map$Entry:getValue
    //#unanalyzed(void onPingFailed()): Effects-of-calling:[Ljava.lang.String;:instanceof
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.String:instanceof
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.StringBuffer:length
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.StringBuffer:insert
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void onPingFailed()): Effects-of-calling:doServerSubstitutions
    //#unanalyzed(void onPingFailed()): Effects-of-calling:doComponentSubstitutions
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.ServerState:equals
    //#unanalyzed(void onPingFailed()): Effects-of-calling:getCompatibleComponents
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.Object:toString
    //#unanalyzed(void onPingFailed()): Effects-of-calling:get
    //#unanalyzed(void onPingFailed()): Effects-of-calling:getArgTypes
    //#unanalyzed(void onPingFailed()): Effects-of-calling:test
    //#unanalyzed(void onPingFailed()): Effects-of-calling:evaluate
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getActiveWindow
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:instanceof
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.util.List:get
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.commandparser.parsers.CommandParser:parseCommand
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.StringBuffer:setLength
    //#unanalyzed(void onPingFailed()): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void onPingFailed()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:close
                + getName() + " for over "
                + ((int) (Math.floor(parser.getPingTime(false) / 1000.0)))
                + " seconds.", null, 10);

        ActionManager.processEvent(CoreActionType.SERVER_NOPING, null, this,
    //#Server.java:1344: Warning: method not available - call not analyzed
    //#    call on long com.dmdirc.parser.irc.IRCParser:getPingTime(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onPingFailed()
    //#    unanalyzed callee: long com.dmdirc.parser.irc.IRCParser:getPingTime(bool)
    //#Server.java:1344: ?!precondition failure
    //#    com/dmdirc/actions/ActionManager.processEvent: (soft) type.type.__Tag in {com/dmdirc/actions/interfaces/ActionMetaType, com/dmdirc/actions/metatypes/ActionEvents, com/dmdirc/actions/metatypes/ChannelEvents, com/dmdirc/actions/metatypes/ClientEvents, com/dmdirc/actions/metatypes/PluginEvents, com/dmdirc/actions/metatypes/QueryEvents, com/dmdirc/actions/metatypes/ServerEvents, com/dmdirc/addons/dcc/actions/DCCEvents}
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.Server
    //#    method: void onPingFailed()
    //#    basic block: Entry_BB_1
    //#    assertion: (soft) undefined in {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    callee: void com/dmdirc/actions/ActionManager.processEvent(ActionType, StringBuffer, Object[])
    //#    callee assertion: (soft) type.type.__Tag in {com/dmdirc/actions/interfaces/ActionMetaType, com/dmdirc/actions/metatypes/ActionEvents, com/dmdirc/actions/metatypes/ChannelEvents, com/dmdirc/actions/metatypes/ClientEvents, com/dmdirc/actions/metatypes/PluginEvents, com/dmdirc/actions/metatypes/QueryEvents, com/dmdirc/actions/metatypes/ServerEvents, com/dmdirc/addons/dcc/actions/DCCEvents}
    //#    callee file: ActionManager.java
    //#    callee precondition index: [29]
    //#    callee srcpos: 365
    //#    VN: undefined
    //#    Expected: {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    Bad: {0, Invalid}
    //#    Attribs:  Int  Bad singleton  Bad overlaps +/-1000  Soft  Bad < Exp
                Long.valueOf(parser.getPingTime(false)));

        if (parser.getPingTime(false)
    //#Server.java:1347: Warning: method not available - call not analyzed
    //#    call on long com.dmdirc.parser.irc.IRCParser:getPingTime(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onPingFailed()
    //#    unanalyzed callee: long com.dmdirc.parser.irc.IRCParser:getPingTime(bool)
    //#Server.java:1347: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.config.ConfigManager:getOptionInt(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onPingFailed()
    //#    unanalyzed callee: int com.dmdirc.config.ConfigManager:getOptionInt(String, String)
                 >= getConfigManager().getOptionInt(DOMAIN_SERVER, "pingtimeout")) {
            handleNotification("stonedServer", getName());
    //#Server.java:1349: ?precondition failure
    //#    com/dmdirc/WritableFrameContainer.handleNotification: (soft) init'ed(args[0..4_294_967_295])
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.Server
    //#    method: void onPingFailed()
    //#    basic block: bb_2
    //#    assertion: (soft) init'ed(handleNotification.Param_2[0..4_294_967_295])
    //#    callee: void com/dmdirc/WritableFrameContainer.handleNotification(String, Object[])
    //#    callee assertion: (soft) init'ed(args[0..4_294_967_295])
    //#    callee file: WritableFrameContainer.java
    //#    callee precondition index: [3]
    //#    callee srcpos: 202
    //#    VN: handleNotification.Param_2[0..4_294_967_295]
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Soft  Bad only invalid  Uncertain
            reconnect();
        }
    }
    //#Server.java:1352: end of method: void com.dmdirc.Server.onPingFailed()

    /**
     * Called after the parser receives the 005 headers from the server.
     */
    @Precondition("State is CONNECTING")
    public void onPost005() {
        synchronized (myState) {
    //#Server.java:1359: method: void com.dmdirc.Server.onPost005()
    //#input(void onPost005()): " ("._tainted
    //#input(void onPost005()): " ["._tainted
    //#input(void onPost005()): "&#10;"._tainted
    //#input(void onPost005()): "&#10;&#10;"._tainted
    //#input(void onPost005()): ")"._tainted
    //#input(void onPost005()): ")&#10;"._tainted
    //#input(void onPost005()): "->"._tainted
    //#input(void onPost005()): "."._tainted
    //#input(void onPost005()): "IRCd: "._tainted
    //#input(void onPost005()): "Illegal server state transition&#10;&#10;"._tainted
    //#input(void onPost005()): "Missing mode aliases: "._tainted
    //#input(void onPost005()): "Mode alias version: "._tainted
    //#input(void onPost005()): "Network: "._tainted
    //#input(void onPost005()): "Received onPost005 while not connecting&#10;&#10;"._tainted
    //#input(void onPost005()): "]"._tainted
    //#input(void onPost005()): "biz"._tainted
    //#input(void onPost005()): "channel: +"._tainted
    //#input(void onPost005()): "com"._tainted
    //#input(void onPost005()): "getNetwork called when parser is null (state: "._tainted
    //#input(void onPost005()): "info"._tainted
    //#input(void onPost005()): "mode"._tainted
    //#input(void onPost005()): "net"._tainted
    //#input(void onPost005()): "org"._tainted
    //#input(void onPost005()): "umode"._tainted
    //#input(void onPost005()): "user: +"._tainted
    //#input(void onPost005()): DOMAIN_GENERAL
    //#input(void onPost005()): DOMAIN_SERVER
    //#input(void onPost005()): __Descendant_Table[com/dmdirc/Server]
    //#input(void onPost005()): __Descendant_Table[others]
    //#input(void onPost005()): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPost005()): __Dispatch_Table.getName()Ljava/lang/String;
    //#input(void onPost005()): __Dispatch_Table.getNetwork()Ljava/lang/String;
    //#input(void onPost005()): __Dispatch_Table.getParser()Lcom/dmdirc/parser/irc/IRCParser;
    //#input(void onPost005()): __Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void onPost005()): __Dispatch_Table.updateIgnoreList()V
    //#input(void onPost005()): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#3)._tainted
    //#input(void onPost005()): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#3).transitions
    //#input(void onPost005()): com.dmdirc.actions.CoreActionType__static_init.new CoreActionType(CoreActionType__static_init#16).__Tag
    //#input(void onPost005()): com.dmdirc.actions.CoreActionType__static_init.new CoreActionType(CoreActionType__static_init#16).type
    //#input(void onPost005()): com.dmdirc.actions.metatypes.ServerEvents__static_init.new ServerEvents(ServerEvents__static_init#25).__Tag
    //#input(void onPost005()): com.dmdirc.logger.ErrorLevel.LOW
    //#input(void onPost005()): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void onPost005()): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void onPost005()): com/dmdirc/Channel.__Dispatch_Table.activateFrame()V
    //#input(void onPost005()): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPost005()): com/dmdirc/Channel.__Dispatch_Table.join()V
    //#input(void onPost005()): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPost005()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void onPost005()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void onPost005()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void onPost005()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void onPost005()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void onPost005()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void onPost005()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void onPost005()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void onPost005()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void onPost005()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void onPost005()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void onPost005()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void onPost005()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void onPost005()): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void onPost005()): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPost005()): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPost005()): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPost005()): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPost005()): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPost005()): com/dmdirc/ServerState.CONNECTED
    //#input(void onPost005()): com/dmdirc/ServerState.CONNECTING
    //#input(void onPost005()): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void onPost005()): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void onPost005()): com/dmdirc/ServerStatus.__Dispatch_Table.addHistoryEntry(Lcom/dmdirc/ServerState;Lcom/dmdirc/ServerState;)V
    //#input(void onPost005()): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void onPost005()): com/dmdirc/ServerStatus.__Dispatch_Table.getTransitionHistory()Ljava/lang/String;
    //#input(void onPost005()): com/dmdirc/ServerStatus.__Dispatch_Table.transition(Lcom/dmdirc/ServerState;)V
    //#input(void onPost005()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPost005()): com/dmdirc/actions/ActionManager.killSwitch
    //#input(void onPost005()): com/dmdirc/actions/ActionManager.listeners
    //#input(void onPost005()): com/dmdirc/actions/CoreActionType.SERVER_CONNECTED
    //#input(void onPost005()): com/dmdirc/actions/CoreActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void onPost005()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionMetaType]
    //#input(void onPost005()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ActionEvents]
    //#input(void onPost005()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ChannelEvents]
    //#input(void onPost005()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ClientEvents]
    //#input(void onPost005()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/PluginEvents]
    //#input(void onPost005()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/QueryEvents]
    //#input(void onPost005()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ServerEvents]
    //#input(void onPost005()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCEvents]
    //#input(void onPost005()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[others]
    //#input(void onPost005()): com/dmdirc/actions/interfaces/ActionMetaType.__Dispatch_Table.getArity()I
    //#input(void onPost005()): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/CoreActionType]
    //#input(void onPost005()): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionType]
    //#input(void onPost005()): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCActions]
    //#input(void onPost005()): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[others]
    //#input(void onPost005()): com/dmdirc/actions/interfaces/ActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void onPost005()): com/dmdirc/actions/metatypes/ActionEvents.__Dispatch_Table.getArity()I
    //#input(void onPost005()): com/dmdirc/actions/metatypes/ChannelEvents.__Dispatch_Table.getArity()I
    //#input(void onPost005()): com/dmdirc/actions/metatypes/ClientEvents.__Dispatch_Table.getArity()I
    //#input(void onPost005()): com/dmdirc/actions/metatypes/PluginEvents.__Dispatch_Table.getArity()I
    //#input(void onPost005()): com/dmdirc/actions/metatypes/QueryEvents.__Dispatch_Table.getArity()I
    //#input(void onPost005()): com/dmdirc/actions/metatypes/ServerEvents.__Dispatch_Table.getArity()I
    //#input(void onPost005()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPost005()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPost005()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPost005()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void onPost005()): com/dmdirc/addons/dcc/actions/DCCActions.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void onPost005()): com/dmdirc/addons/dcc/actions/DCCEvents.__Dispatch_Table.getArity()I
    //#input(void onPost005()): this
    //#input(void onPost005()): this.__Tag
    //#input(void onPost005()): this.autochannels
    //#input(void onPost005()): this.changer
    //#input(void onPost005()): this.channels
    //#input(void onPost005()): this.config
    //#input(void onPost005()): this.ignoreList
    //#input(void onPost005()): this.listeners
    //#input(void onPost005()): this.myState
    //#input(void onPost005()): this.myState.__Tag
    //#input(void onPost005()): this.myState.history
    //#input(void onPost005()): this.myState.state
    //#input(void onPost005()): this.myState.state._tainted
    //#input(void onPost005()): this.myState.state.transitions
    //#input(void onPost005()): this.parser
    //#input(void onPost005()): this.serverInfo
    //#output(void onPost005()): com/dmdirc/ServerManager.me
    //#output(void onPost005()): new ArrayList(ServerManager#1) num objects
    //#output(void onPost005()): new ServerManager(getServerManager#1) num objects
    //#output(void onPost005()): new ServerManager(getServerManager#1).__Tag
    //#output(void onPost005()): new ServerManager(getServerManager#1).servers
    //#output(void onPost005()): this.converter
    //#output(void onPost005()): this.icon
    //#output(void onPost005()): this.myState.state
    //#new obj(void onPost005()): new ArrayList(ServerManager#1)
    //#new obj(void onPost005()): new ServerManager(getServerManager#1)
    //#pre[4] (void onPost005()): init'ed(com/dmdirc/actions/ActionManager.killSwitch)
    //#pre[8] (void onPost005()): this.myState.state != null
    //#pre[10] (void onPost005()): this.__Tag == com/dmdirc/Server
    //#pre[11] (void onPost005()): this.autochannels != null
    //#pre[14] (void onPost005()): this.config != null
    //#pre[15] (void onPost005()): this.ignoreList != null
    //#pre[16] (void onPost005()): this.listeners != null
    //#pre[18] (void onPost005()): this.myState != null
    //#pre[20] (void onPost005()): this.myState.__Tag == com/dmdirc/ServerStatus
    //#pre[21] (void onPost005()): this.myState.history != null
    //#pre[23] (void onPost005()): this.myState.state.transitions != null
    //#pre[24] (void onPost005()): this.parser != null
    //#pre[25] (void onPost005()): this.serverInfo != null
    //#pre[2] (void onPost005()): (soft) com.dmdirc.actions.CoreActionType__static_init.new CoreActionType(CoreActionType__static_init#16).type != null
    //#pre[5] (void onPost005()): (soft) init'ed(com/dmdirc/ServerManager.me)
    //#pre[13] (void onPost005()): (soft) this.channels != null
    //#presumption(void onPost005()): chan.channelInfo@1381 != null
    //#presumption(void onPost005()): chan.config@1381 != null
    //#presumption(void onPost005()): chan.listeners@1381 != null
    //#presumption(void onPost005()): chan.server.__Tag@1381 == com/dmdirc/Server
    //#presumption(void onPost005()): chan.server.parser@1381 != null
    //#presumption(void onPost005()): chan.server@1381 != null
    //#presumption(void onPost005()): java.util.Iterator:next(...).__Tag@1381 == com/dmdirc/Channel
    //#presumption(void onPost005()): java.util.Iterator:next(...)@1381 != null
    //#presumption(void onPost005()): java.util.Map:values(...)@1381 != null
    //#post(void onPost005()): com/dmdirc/ServerManager.me == old com/dmdirc/ServerManager.me
    //#post(void onPost005()): init'ed(this.converter)
    //#post(void onPost005()): this.icon == One-of{old this.icon, &"secure-server", &"server", &"server-disconnected", &"channel"}
    //#post(void onPost005()): this.icon in Addr_Set{&"secure-server",&"server",&"channel"}
    //#post(void onPost005()): this.myState.state == &com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#3)
    //#post(void onPost005()): new ArrayList(ServerManager#1) num objects == 0, if init'ed
    //#post(void onPost005()): new ServerManager(getServerManager#1) num objects == 0, if init'ed
    //#post(void onPost005()): new ServerManager(getServerManager#1).__Tag not init'ed, if init'ed
    //#post(void onPost005()): new ServerManager(getServerManager#1).servers == null
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void onPost005()): Effects-of-calling:getConfigManager
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.IgnoreList:clear
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionList
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.IgnoreList:addAll
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getIRCD
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.String:endsWith
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getHost
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.config.ConfigManager:hasOptionString
    //#unanalyzed(void onPost005()): Effects-of-calling:getParser
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void onPost005()): Effects-of-calling:getType
    //#unanalyzed(void onPost005()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void onPost005()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void onPost005()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void onPost005()): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void onPost005()): Effects-of-calling:trigger
    //#unanalyzed(void onPost005()): Effects-of-calling:getArity
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(void onPost005()): Effects-of-calling:triggerActions
    //#unanalyzed(void onPost005()): Effects-of-calling:getUI
    //#unanalyzed(void onPost005()): Effects-of-calling:getFrame
    //#unanalyzed(void onPost005()): Effects-of-calling:getState
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.util.RollingList:getList
    //#unanalyzed(void onPost005()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.ServerState:name
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.Thread:currentThread
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.Thread:getStackTrace
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.StackTraceElement:toString
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.Thread:getName
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.util.RollingList:add
    //#unanalyzed(void onPost005()): Effects-of-calling:java.util.List:contains
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.Object:notifyAll
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.parser.irc.ChannelInfo:getName
    //#unanalyzed(void onPost005()): Effects-of-calling:setIcon
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:joinChannel
    //#unanalyzed(void onPost005()): Effects-of-calling:activateFrame
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.IllegalStateException
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getSSL
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getNetworkName
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getServerName
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getBoolChanModes
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getListChanModes
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getSetOnlyChanModes
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getSetUnsetChanModes
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getUserModeString
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.String:toCharArray
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.StringBuffer:length
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.Exception
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.actions.ConditionTree$OPERATION:ordinal
    //#unanalyzed(void onPost005()): Effects-of-calling:java.util.List:size
    //#unanalyzed(void onPost005()): Effects-of-calling:java.util.Deque:pollFirst
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.Character:instanceof
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(void onPost005()): Effects-of-calling:java.util.Deque:isEmpty
    //#unanalyzed(void onPost005()): Effects-of-calling:readTerm
    //#unanalyzed(void onPost005()): Effects-of-calling:java.util.ArrayDeque
    //#unanalyzed(void onPost005()): Effects-of-calling:java.util.Deque:pollLast
    //#unanalyzed(void onPost005()): Effects-of-calling:java.util.Deque:addFirst
    //#unanalyzed(void onPost005()): Effects-of-calling:parseStack
    //#unanalyzed(void onPost005()): Effects-of-calling:java.util.Deque:poll
    //#unanalyzed(void onPost005()): Effects-of-calling:java.util.Deque:add
    //#unanalyzed(void onPost005()): Effects-of-calling:java.util.Deque:size
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.Integer:parseInt
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptions
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.StringBuilder:indexOf
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.StringBuilder:replace
    //#unanalyzed(void onPost005()): Effects-of-calling:java.util.Map:entrySet
    //#unanalyzed(void onPost005()): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void onPost005()): Effects-of-calling:java.util.Map$Entry:getKey
    //#unanalyzed(void onPost005()): Effects-of-calling:java.util.Map$Entry:getValue
    //#unanalyzed(void onPost005()): Effects-of-calling:[Ljava.lang.String;:instanceof
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.String:instanceof
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.StringBuffer:insert
    //#unanalyzed(void onPost005()): Effects-of-calling:doServerSubstitutions
    //#unanalyzed(void onPost005()): Effects-of-calling:doComponentSubstitutions
    //#unanalyzed(void onPost005()): Effects-of-calling:getServer
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.ServerState:equals
    //#unanalyzed(void onPost005()): Effects-of-calling:getCompatibleComponents
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.Object:toString
    //#unanalyzed(void onPost005()): Effects-of-calling:get
    //#unanalyzed(void onPost005()): Effects-of-calling:getArgTypes
    //#unanalyzed(void onPost005()): Effects-of-calling:test
    //#unanalyzed(void onPost005()): Effects-of-calling:evaluate
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getActiveWindow
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:instanceof
    //#unanalyzed(void onPost005()): Effects-of-calling:java.util.List:get
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.commandparser.parsers.CommandParser:parseCommand
    //#unanalyzed(void onPost005()): Effects-of-calling:java.lang.StringBuffer:setLength
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void onPost005()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:activateFrame
    //#test_vector(void onPost005()): com.dmdirc.config.ConfigManager:getOptionBool(...)@1380: {0}, {1}
    //#test_vector(void onPost005()): java.util.Iterator:hasNext(...)@1381: {0}, {1}
    //#test_vector(void onPost005()): java.util.Iterator:hasNext(...)@1386: {0}, {1}
            if (myState.getState() != ServerState.CONNECTING) {
                // Shouldn't happen
                throw new IllegalStateException("Received onPost005 while not "
    //#Server.java:1362: ?conditional throw
    //#    getState(...)@1360 == com/dmdirc/ServerState.CONNECTING
    //#    severity: LOW
    //#    class: com.dmdirc.Server
    //#    method: void onPost005()
    //#    basic block: bb_2
    //#    assertion: getState(...)@1360 == com/dmdirc/ServerState.CONNECTING
    //#    VN: &com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#1) == this.myState.state
    //#    Expected: {1}
    //#    Bad: {0}
    //#    Attribs:  Int  Exp in +/-1000  Exp singleton  Bad singleton  Bad overlaps +/-1000  Bad < Exp
                        + "connecting\n\n" + myState.getTransitionHistory());
            }
        
            if (myState.getState() != ServerState.CONNECTING) {
    //#Server.java:1366: Warning: test always goes same way
    //#    Test predetermined because getState(...)@1366 == com/dmdirc/ServerState.CONNECTING
    //#    severity: LOW
    //#    class: com.dmdirc.Server
    //#    method: void onPost005()
    //#    from bb: bb_4
    //#    live edge: bb_4-->bb_6
    //#    tested vn: &com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#1) == this.myState.state
    //#    tested vn values: {1}
                // We've transitioned while waiting for the lock. Just abort.
                return;
    //#Server.java:1368: Warning: dead code
    //#    Dead code here because getState(...)@1366 == com/dmdirc/ServerState.CONNECTING
    //#    severity: LOW
    //#    class: com.dmdirc.Server
    //#    method: void onPost005()
    //#    dead bb: bb_5
            }

            myState.transition(ServerState.CONNECTED);

            updateIcon();

            getConfigManager().migrate(parser.getIRCD(true), getNetwork(), getName());
    //#Server.java:1375: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getIRCD(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onPost005()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getIRCD(bool)
    //#Server.java:1375: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.ConfigManager:migrate(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onPost005()
    //#    unanalyzed callee: void com.dmdirc.config.ConfigManager:migrate(String, String, String)
            updateIgnoreList();

            converter = parser.getIRCStringConverter();
    //#Server.java:1378: Warning: method not available - call not analyzed
    //#    call on IRCStringConverter com.dmdirc.parser.irc.IRCParser:getIRCStringConverter()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onPost005()
    //#    unanalyzed callee: IRCStringConverter com.dmdirc.parser.irc.IRCParser:getIRCStringConverter()

            if (getConfigManager().getOptionBool(DOMAIN_GENERAL, "rejoinchannels")) {
    //#Server.java:1380: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onPost005()
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
                for (Channel chan : channels.values()) {
                    chan.join();
                }
            }

            for (String channel : autochannels) {
                parser.joinChannel(channel);
    //#Server.java:1387: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:joinChannel(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void onPost005()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:joinChannel(String)
            }

            checkModeAliases();
        }

        ActionManager.processEvent(CoreActionType.SERVER_CONNECTED, null, this);
    //#Server.java:1393: ?!precondition failure
    //#    com/dmdirc/actions/ActionManager.processEvent: (soft) type.type.__Tag in {com/dmdirc/actions/interfaces/ActionMetaType, com/dmdirc/actions/metatypes/ActionEvents, com/dmdirc/actions/metatypes/ChannelEvents, com/dmdirc/actions/metatypes/ClientEvents, com/dmdirc/actions/metatypes/PluginEvents, com/dmdirc/actions/metatypes/QueryEvents, com/dmdirc/actions/metatypes/ServerEvents, com/dmdirc/addons/dcc/actions/DCCEvents}
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.Server
    //#    method: void onPost005()
    //#    basic block: bb_16
    //#    assertion: (soft) undefined in {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    callee: void com/dmdirc/actions/ActionManager.processEvent(ActionType, StringBuffer, Object[])
    //#    callee assertion: (soft) type.type.__Tag in {com/dmdirc/actions/interfaces/ActionMetaType, com/dmdirc/actions/metatypes/ActionEvents, com/dmdirc/actions/metatypes/ChannelEvents, com/dmdirc/actions/metatypes/ClientEvents, com/dmdirc/actions/metatypes/PluginEvents, com/dmdirc/actions/metatypes/QueryEvents, com/dmdirc/actions/metatypes/ServerEvents, com/dmdirc/addons/dcc/actions/DCCEvents}
    //#    callee file: ActionManager.java
    //#    callee precondition index: [29]
    //#    callee srcpos: 365
    //#    VN: undefined
    //#    Expected: {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    Bad: {0, Invalid}
    //#    Attribs:  Int  Bad singleton  Bad overlaps +/-1000  Soft  Bad < Exp
    }
    //#Server.java:1394: end of method: void com.dmdirc.Server.onPost005()

    /**
     * Checks that we have the neccessary mode aliases for this server.
     */
    private void checkModeAliases() {
        // Check we have mode aliases
        final String modes = parser.getBoolChanModes() + parser.getListChanModes()
    //#Server.java:1401: method: void com.dmdirc.Server.checkModeAliases()
    //#Server.java:1401: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getBoolChanModes()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void checkModeAliases()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getBoolChanModes()
    //#Server.java:1401: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getListChanModes()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void checkModeAliases()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getListChanModes()
    //#Server.java:1401: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getSetOnlyChanModes()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void checkModeAliases()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getSetOnlyChanModes()
    //#Server.java:1401: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getSetUnsetChanModes()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void checkModeAliases()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getSetUnsetChanModes()
    //#input(void checkModeAliases()): " ("._tainted
    //#input(void checkModeAliases()): " ["._tainted
    //#input(void checkModeAliases()): "&#10;"._tainted
    //#input(void checkModeAliases()): "&#10;&#10;"._tainted
    //#input(void checkModeAliases()): ")"._tainted
    //#input(void checkModeAliases()): ")&#10;"._tainted
    //#input(void checkModeAliases()): "."._tainted
    //#input(void checkModeAliases()): "IRCd: "._tainted
    //#input(void checkModeAliases()): "Missing mode aliases: "._tainted
    //#input(void checkModeAliases()): "Mode alias version: "._tainted
    //#input(void checkModeAliases()): "Network: "._tainted
    //#input(void checkModeAliases()): "]"._tainted
    //#input(void checkModeAliases()): "biz"._tainted
    //#input(void checkModeAliases()): "channel: +"._tainted
    //#input(void checkModeAliases()): "com"._tainted
    //#input(void checkModeAliases()): "getNetwork called when parser is null (state: "._tainted
    //#input(void checkModeAliases()): "info"._tainted
    //#input(void checkModeAliases()): "mode"._tainted
    //#input(void checkModeAliases()): "net"._tainted
    //#input(void checkModeAliases()): "org"._tainted
    //#input(void checkModeAliases()): "umode"._tainted
    //#input(void checkModeAliases()): "user: +"._tainted
    //#input(void checkModeAliases()): DOMAIN_SERVER
    //#input(void checkModeAliases()): __Descendant_Table[com/dmdirc/Server]
    //#input(void checkModeAliases()): __Descendant_Table[others]
    //#input(void checkModeAliases()): __Dispatch_Table.getNetwork()Ljava/lang/String;
    //#input(void checkModeAliases()): __Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void checkModeAliases()): com.dmdirc.logger.ErrorLevel.LOW
    //#input(void checkModeAliases()): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void checkModeAliases()): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void checkModeAliases()): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void checkModeAliases()): this
    //#input(void checkModeAliases()): this.__Tag
    //#input(void checkModeAliases()): this.config
    //#input(void checkModeAliases()): this.myState
    //#input(void checkModeAliases()): this.myState.__Tag
    //#input(void checkModeAliases()): this.myState.state._tainted
    //#input(void checkModeAliases()): this.parser
    //#pre[9] (void checkModeAliases()): this.parser != null
    //#pre[2] (void checkModeAliases()): (soft) this.__Tag == com/dmdirc/Server
    //#pre[3] (void checkModeAliases()): (soft) this.config != null
    //#presumption(void checkModeAliases()): arr$.length@1408 <= 4_294_967_295
    //#presumption(void checkModeAliases()): arr$.length@1414 <= 4_294_967_295
    //#presumption(void checkModeAliases()): init'ed(com.dmdirc.logger.ErrorLevel.LOW)
    //#presumption(void checkModeAliases()): com.dmdirc.parser.irc.IRCParser:getUserModeString(...)@1403 != null
    //#unanalyzed(void checkModeAliases()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void checkModeAliases()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void checkModeAliases()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void checkModeAliases()): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void checkModeAliases()): Effects-of-calling:java.lang.String:endsWith
    //#unanalyzed(void checkModeAliases()): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void checkModeAliases()): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void checkModeAliases()): Effects-of-calling:java.lang.IllegalStateException
    //#unanalyzed(void checkModeAliases()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getNetworkName
    //#unanalyzed(void checkModeAliases()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getServerName
    //#test_vector(void checkModeAliases()): com.dmdirc.config.ConfigManager:hasOptionString(...)@1409: {1}, {0}
    //#test_vector(void checkModeAliases()): com.dmdirc.config.ConfigManager:hasOptionString(...)@1415: {1}, {0}
    //#test_vector(void checkModeAliases()): java.lang.StringBuffer:length(...)@1423: {-2_147_483_648..0}, {1..4_294_967_295}
    //#test_vector(void checkModeAliases()): java.lang.StringBuffer:length(...)@1428: {-2_147_483_648..0}, {1..4_294_967_295}
    //#test_vector(void checkModeAliases()): java.lang.StringBuffer:length(...)@1429: {-2_147_483_648..0}, {1..4_294_967_295}
                + parser.getSetOnlyChanModes() + parser.getSetUnsetChanModes();
        final String umodes = parser.getUserModeString();
    //#Server.java:1403: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getUserModeString()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void checkModeAliases()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getUserModeString()

        final StringBuffer missingModes = new StringBuffer();
        final StringBuffer missingUmodes = new StringBuffer();

        for (char mode : modes.toCharArray()) {
            if (!getConfigManager().hasOptionString(DOMAIN_SERVER, "mode" + mode)) {
    //#Server.java:1409: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void checkModeAliases()
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
                missingModes.append(mode);
            }
        }

        for (char mode : umodes.toCharArray()) {
            if (!getConfigManager().hasOptionString(DOMAIN_SERVER, "umode" + mode)) {
    //#Server.java:1415: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void checkModeAliases()
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
                missingUmodes.append(mode);
            }
        }

        if (missingModes.length() + missingUmodes.length() > 0) {
            final StringBuffer missing = new StringBuffer("Missing mode aliases: ");

            if (missingModes.length() > 0) {
                missing.append("channel: +");
                missing.append(missingModes);
            }

            if (missingUmodes.length() > 0) {
                if (missingModes.length() > 0) {
                    missing.append(' ');
                }

                missing.append("user: +");
                missing.append(missingUmodes);
            }

            Logger.appError(ErrorLevel.LOW, missing.toString() + " ["
    //#Server.java:1437: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getIRCD(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void checkModeAliases()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getIRCD(bool)
    //#Server.java:1437: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void checkModeAliases()
    //#    unanalyzed callee: String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#Server.java:1437: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.logger.Logger:appError(ErrorLevel, String, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void checkModeAliases()
    //#    unanalyzed callee: void com.dmdirc.logger.Logger:appError(ErrorLevel, String, Throwable)
                    + parser.getIRCD(true) + "]",
                    new Exception(missing.toString() + "\n" // NOPMD
                    + "Network: " + getNetwork() + "\n"
                    + "IRCd: " + parser.getIRCD(false)
                    + " (" + parser.getIRCD(true) + ")\n"
                    + "Mode alias version: "
                    + getConfigManager().getOption("identity", "modealiasversion")
                    + "\n\n"));
        }
    }
    //#Server.java:1447: end of method: void com.dmdirc.Server.checkModeAliases()

    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Ignore lists">

    /**
     * Retrieves this server's ignore list.
     *
     * @return This server's ignore list
     */
    public IgnoreList getIgnoreList() {
        return ignoreList;
    //#Server.java:1459: method: IgnoreList com.dmdirc.Server.getIgnoreList()
    //#input(IgnoreList getIgnoreList()): this
    //#input(IgnoreList getIgnoreList()): this.ignoreList
    //#output(IgnoreList getIgnoreList()): return_value
    //#post(IgnoreList getIgnoreList()): return_value == this.ignoreList
    //#post(IgnoreList getIgnoreList()): init'ed(return_value)
    //#Server.java:1459: end of method: IgnoreList com.dmdirc.Server.getIgnoreList()
    }

    /**
     * Updates this server's ignore list to use the entries stored in the
     * config manager.
     */
    public void updateIgnoreList() {
        ignoreList.clear();
    //#Server.java:1467: method: void com.dmdirc.Server.updateIgnoreList()
    //#Server.java:1467: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.IgnoreList:clear()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void updateIgnoreList()
    //#    unanalyzed callee: void com.dmdirc.IgnoreList:clear()
    //#input(void updateIgnoreList()): this
    //#input(void updateIgnoreList()): this.config
    //#input(void updateIgnoreList()): this.ignoreList
    //#pre[2] (void updateIgnoreList()): this.config != null
    //#pre[3] (void updateIgnoreList()): this.ignoreList != null
        ignoreList.addAll(getConfigManager().getOptionList("network", "ignorelist"));
    //#Server.java:1468: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.config.ConfigManager:getOptionList(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void updateIgnoreList()
    //#    unanalyzed callee: List com.dmdirc.config.ConfigManager:getOptionList(String, String)
    //#Server.java:1468: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.IgnoreList:addAll(List)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void updateIgnoreList()
    //#    unanalyzed callee: void com.dmdirc.IgnoreList:addAll(List)
    }
    //#Server.java:1469: end of method: void com.dmdirc.Server.updateIgnoreList()

    /**
     * Saves the contents of our ignore list to the network identity.
     */
    public void saveIgnoreList() {
        getNetworkIdentity().setOption("network", "ignorelist", ignoreList.getRegexList());
    //#Server.java:1475: method: void com.dmdirc.Server.saveIgnoreList()
    //#Server.java:1475: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.Identity:setOption(String, String, List)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void saveIgnoreList()
    //#    unanalyzed callee: void com.dmdirc.config.Identity:setOption(String, String, List)
    //#input(void saveIgnoreList()): ")"._tainted
    //#input(void saveIgnoreList()): "."._tainted
    //#input(void saveIgnoreList()): "biz"._tainted
    //#input(void saveIgnoreList()): "com"._tainted
    //#input(void saveIgnoreList()): "getNetwork called when parser is null (state: "._tainted
    //#input(void saveIgnoreList()): "info"._tainted
    //#input(void saveIgnoreList()): "net"._tainted
    //#input(void saveIgnoreList()): "org"._tainted
    //#input(void saveIgnoreList()): __Descendant_Table[com/dmdirc/Server]
    //#input(void saveIgnoreList()): __Descendant_Table[others]
    //#input(void saveIgnoreList()): __Dispatch_Table.getNetwork()Ljava/lang/String;
    //#input(void saveIgnoreList()): __Dispatch_Table.getNetworkIdentity()Lcom/dmdirc/config/Identity;
    //#input(void saveIgnoreList()): __Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void saveIgnoreList()): com/dmdirc/IgnoreList.__Descendant_Table[com/dmdirc/IgnoreList]
    //#input(void saveIgnoreList()): com/dmdirc/IgnoreList.__Descendant_Table[others]
    //#input(void saveIgnoreList()): com/dmdirc/IgnoreList.__Dispatch_Table.getRegexList()Ljava/util/List;
    //#input(void saveIgnoreList()): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void saveIgnoreList()): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void saveIgnoreList()): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void saveIgnoreList()): this
    //#input(void saveIgnoreList()): this.__Tag
    //#input(void saveIgnoreList()): this.ignoreList
    //#input(void saveIgnoreList()): this.ignoreList.__Tag
    //#input(void saveIgnoreList()): this.ignoreList.ignoreInfo
    //#input(void saveIgnoreList()): this.myState
    //#input(void saveIgnoreList()): this.myState.__Tag
    //#input(void saveIgnoreList()): this.myState.state._tainted
    //#input(void saveIgnoreList()): this.parser
    //#pre[2] (void saveIgnoreList()): this.__Tag == com/dmdirc/Server
    //#pre[3] (void saveIgnoreList()): this.ignoreList != null
    //#pre[4] (void saveIgnoreList()): this.ignoreList.__Tag == com/dmdirc/IgnoreList
    //#pre[5] (void saveIgnoreList()): init'ed(this.ignoreList.ignoreInfo)
    //#pre[11] (void saveIgnoreList()): this.parser != null
    //#presumption(void saveIgnoreList()): com.dmdirc.config.IdentityManager:getNetworkConfig(...)@1497 != null
    //#unanalyzed(void saveIgnoreList()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void saveIgnoreList()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void saveIgnoreList()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void saveIgnoreList()): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void saveIgnoreList()): Effects-of-calling:java.lang.String:endsWith
    //#unanalyzed(void saveIgnoreList()): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void saveIgnoreList()): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void saveIgnoreList()): Effects-of-calling:getNetwork
    //#unanalyzed(void saveIgnoreList()): Effects-of-calling:com.dmdirc.config.IdentityManager:getNetworkConfig
    //#unanalyzed(void saveIgnoreList()): Effects-of-calling:java.lang.IllegalStateException
    //#unanalyzed(void saveIgnoreList()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getNetworkName
    //#unanalyzed(void saveIgnoreList()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getServerName
    //#unanalyzed(void saveIgnoreList()): Effects-of-calling:java.util.ArrayList
    }
    //#Server.java:1476: end of method: void com.dmdirc.Server.saveIgnoreList()

    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Identity handling">

    /**
     * Retrieves the identity for this server.
     *
     * @return This server's identity
     */
    public Identity getServerIdentity() {
        return IdentityManager.getServerConfig(getName());
    //#Server.java:1488: method: Identity com.dmdirc.Server.getServerIdentity()
    //#Server.java:1488: Warning: method not available - call not analyzed
    //#    call on Identity com.dmdirc.config.IdentityManager:getServerConfig(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: Identity getServerIdentity()
    //#    unanalyzed callee: Identity com.dmdirc.config.IdentityManager:getServerConfig(String)
    //#input(Identity getServerIdentity()): __Descendant_Table[com/dmdirc/Server]
    //#input(Identity getServerIdentity()): __Descendant_Table[others]
    //#input(Identity getServerIdentity()): __Dispatch_Table.getName()Ljava/lang/String;
    //#input(Identity getServerIdentity()): this
    //#input(Identity getServerIdentity()): this.__Tag
    //#input(Identity getServerIdentity()): this.serverInfo
    //#output(Identity getServerIdentity()): return_value
    //#pre[2] (Identity getServerIdentity()): this.__Tag == com/dmdirc/Server
    //#pre[3] (Identity getServerIdentity()): this.serverInfo != null
    //#post(Identity getServerIdentity()): init'ed(return_value)
    //#unanalyzed(Identity getServerIdentity()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getHost
    //#Server.java:1488: end of method: Identity com.dmdirc.Server.getServerIdentity()
    }

    /**
     * Retrieves the identity for this server's network.
     *
     * @return This server's network identity
     */
    public Identity getNetworkIdentity() {
        return IdentityManager.getNetworkConfig(getNetwork());
    //#Server.java:1497: method: Identity com.dmdirc.Server.getNetworkIdentity()
    //#Server.java:1497: Warning: method not available - call not analyzed
    //#    call on Identity com.dmdirc.config.IdentityManager:getNetworkConfig(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: Identity getNetworkIdentity()
    //#    unanalyzed callee: Identity com.dmdirc.config.IdentityManager:getNetworkConfig(String)
    //#input(Identity getNetworkIdentity()): ")"._tainted
    //#input(Identity getNetworkIdentity()): "."._tainted
    //#input(Identity getNetworkIdentity()): "biz"._tainted
    //#input(Identity getNetworkIdentity()): "com"._tainted
    //#input(Identity getNetworkIdentity()): "getNetwork called when parser is null (state: "._tainted
    //#input(Identity getNetworkIdentity()): "info"._tainted
    //#input(Identity getNetworkIdentity()): "net"._tainted
    //#input(Identity getNetworkIdentity()): "org"._tainted
    //#input(Identity getNetworkIdentity()): __Descendant_Table[com/dmdirc/Server]
    //#input(Identity getNetworkIdentity()): __Descendant_Table[others]
    //#input(Identity getNetworkIdentity()): __Dispatch_Table.getNetwork()Ljava/lang/String;
    //#input(Identity getNetworkIdentity()): __Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(Identity getNetworkIdentity()): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(Identity getNetworkIdentity()): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(Identity getNetworkIdentity()): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(Identity getNetworkIdentity()): this
    //#input(Identity getNetworkIdentity()): this.__Tag
    //#input(Identity getNetworkIdentity()): this.myState
    //#input(Identity getNetworkIdentity()): this.myState.__Tag
    //#input(Identity getNetworkIdentity()): this.myState.state._tainted
    //#input(Identity getNetworkIdentity()): this.parser
    //#output(Identity getNetworkIdentity()): return_value
    //#pre[2] (Identity getNetworkIdentity()): this.__Tag == com/dmdirc/Server
    //#pre[8] (Identity getNetworkIdentity()): this.parser != null
    //#post(Identity getNetworkIdentity()): init'ed(return_value)
    //#unanalyzed(Identity getNetworkIdentity()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(Identity getNetworkIdentity()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(Identity getNetworkIdentity()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(Identity getNetworkIdentity()): Effects-of-calling:java.lang.String:split
    //#unanalyzed(Identity getNetworkIdentity()): Effects-of-calling:java.lang.String:endsWith
    //#unanalyzed(Identity getNetworkIdentity()): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(Identity getNetworkIdentity()): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(Identity getNetworkIdentity()): Effects-of-calling:java.lang.IllegalStateException
    //#unanalyzed(Identity getNetworkIdentity()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getNetworkName
    //#unanalyzed(Identity getNetworkIdentity()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getServerName
    //#Server.java:1497: end of method: Identity com.dmdirc.Server.getNetworkIdentity()
    }

    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Invite handling">

    /**
     * Adds an invite listener to this server.
     *
     * @param listener The listener to be added
     */
    public void addInviteListener(final InviteListener listener) {
        synchronized (listeners) {
    //#Server.java:1510: method: void com.dmdirc.Server.addInviteListener(InviteListener)
    //#input(void addInviteListener(InviteListener)): listener
    //#input(void addInviteListener(InviteListener)): this
    //#input(void addInviteListener(InviteListener)): this.listeners
    //#input(void addInviteListener(InviteListener)): this.listeners.__Lock
    //#pre[3] (void addInviteListener(InviteListener)): this.listeners != null
            listeners.add(InviteListener.class, listener);
    //#Server.java:1511: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.util.ListenerList:add(Class, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void addInviteListener(InviteListener)
    //#    unanalyzed callee: void com.dmdirc.util.ListenerList:add(Class, Object)
        }
    }
    //#Server.java:1513: end of method: void com.dmdirc.Server.addInviteListener(InviteListener)

    /**
     * Removes an invite listener from this server.
     *
     * @param listener The listener to be removed
     */
    public void removeInviteListener(final InviteListener listener) {
        synchronized (listeners) {
    //#Server.java:1521: method: void com.dmdirc.Server.removeInviteListener(InviteListener)
    //#input(void removeInviteListener(InviteListener)): listener
    //#input(void removeInviteListener(InviteListener)): this
    //#input(void removeInviteListener(InviteListener)): this.listeners
    //#input(void removeInviteListener(InviteListener)): this.listeners.__Lock
    //#pre[3] (void removeInviteListener(InviteListener)): this.listeners != null
            listeners.remove(InviteListener.class, listener);
    //#Server.java:1522: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.util.ListenerList:remove(Class, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void removeInviteListener(InviteListener)
    //#    unanalyzed callee: void com.dmdirc.util.ListenerList:remove(Class, Object)
        }
    }
    //#Server.java:1524: end of method: void com.dmdirc.Server.removeInviteListener(InviteListener)

    /**
     * Adds an invite to this server, and fires the appropriate listeners.
     *
     * @param invite The invite to be added
     */
    public void addInvite(final Invite invite) {
        synchronized (invites) {
    //#Server.java:1532: method: void com.dmdirc.Server.addInvite(Invite)
    //#input(void addInvite(Invite)): __Descendant_Table[com/dmdirc/Server]
    //#input(void addInvite(Invite)): __Descendant_Table[others]
    //#input(void addInvite(Invite)): __Dispatch_Table.removeInvite(Lcom/dmdirc/Invite;)V
    //#input(void addInvite(Invite)): com/dmdirc/Invite.__Descendant_Table[com/dmdirc/Invite]
    //#input(void addInvite(Invite)): com/dmdirc/Invite.__Descendant_Table[others]
    //#input(void addInvite(Invite)): com/dmdirc/Invite.__Dispatch_Table.getChannel()Ljava/lang/String;
    //#input(void addInvite(Invite)): invite
    //#input(void addInvite(Invite)): invite.__Tag
    //#input(void addInvite(Invite)): invite.channel
    //#input(void addInvite(Invite)): this
    //#input(void addInvite(Invite)): this.__Tag
    //#input(void addInvite(Invite)): this.invites
    //#input(void addInvite(Invite)): this.listeners
    //#pre[6] (void addInvite(Invite)): this.invites != null
    //#pre[8] (void addInvite(Invite)): this.listeners != null
    //#pre[1] (void addInvite(Invite)): (soft) invite != null
    //#pre[2] (void addInvite(Invite)): (soft) invite.__Tag == com/dmdirc/Invite
    //#pre[5] (void addInvite(Invite)): (soft) this.__Tag == com/dmdirc/Server
    //#presumption(void addInvite(Invite)): com.dmdirc.util.ListenerList:get(...)@1542 != null
    //#presumption(void addInvite(Invite)): java.util.ArrayList:iterator(...)@1533 != null
    //#presumption(void addInvite(Invite)): java.util.Iterator:next(...).__Tag@1533 == com/dmdirc/Invite
    //#presumption(void addInvite(Invite)): java.util.Iterator:next(...)@1533 != null
    //#presumption(void addInvite(Invite)): java.util.Iterator:next(...)@1542 != null
    //#presumption(void addInvite(Invite)): oldInvite.channel@1533 != null
    //#unanalyzed(void addInvite(Invite)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void addInvite(Invite)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void addInvite(Invite)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void addInvite(Invite)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void addInvite(Invite)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addInvite(Invite)): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void addInvite(Invite)): Effects-of-calling:com.dmdirc.interfaces.InviteListener:inviteExpired
    //#test_vector(void addInvite(Invite)): java.lang.String:equals(...)@1534: {0}, {1}
    //#test_vector(void addInvite(Invite)): java.util.Iterator:hasNext(...)@1533: {0}, {1}
    //#test_vector(void addInvite(Invite)): java.util.Iterator:hasNext(...)@1542: {1}, {0}
            for (Invite oldInvite : new ArrayList<Invite>(invites)) {
                if (oldInvite.getChannel().equals(invite.getChannel())) {
                    removeInvite(oldInvite);
                }
            }

            invites.add(invite);

            synchronized (listeners) {
                for (InviteListener listener : listeners.get(InviteListener.class)) {
    //#Server.java:1542: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.util.ListenerList:get(Class)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void addInvite(Invite)
    //#    unanalyzed callee: List com.dmdirc.util.ListenerList:get(Class)
                    listener.inviteReceived(this, invite);
    //#Server.java:1543: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.interfaces.InviteListener:inviteReceived(Server, Invite)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void addInvite(Invite)
    //#    unanalyzed callee: void com.dmdirc.interfaces.InviteListener:inviteReceived(Server, Invite)
                }
            }
        }
    }
    //#Server.java:1547: end of method: void com.dmdirc.Server.addInvite(Invite)

    /**
     * Removes all invites for the specified channel.
     *
     * @param channel The channel to remove invites for
     */
    public void removeInvites(final String channel) {
        for (Invite invite : new ArrayList<Invite>(invites)) {
    //#Server.java:1555: method: void com.dmdirc.Server.removeInvites(String)
    //#input(void removeInvites(String)): __Descendant_Table[com/dmdirc/Server]
    //#input(void removeInvites(String)): __Descendant_Table[others]
    //#input(void removeInvites(String)): __Dispatch_Table.removeInvite(Lcom/dmdirc/Invite;)V
    //#input(void removeInvites(String)): channel
    //#input(void removeInvites(String)): com/dmdirc/Invite.__Descendant_Table[com/dmdirc/Invite]
    //#input(void removeInvites(String)): com/dmdirc/Invite.__Descendant_Table[others]
    //#input(void removeInvites(String)): com/dmdirc/Invite.__Dispatch_Table.getChannel()Ljava/lang/String;
    //#input(void removeInvites(String)): this
    //#input(void removeInvites(String)): this.__Tag
    //#input(void removeInvites(String)): this.invites
    //#input(void removeInvites(String)): this.listeners
    //#pre[3] (void removeInvites(String)): (soft) this.__Tag == com/dmdirc/Server
    //#pre[4] (void removeInvites(String)): (soft) this.invites != null
    //#pre[6] (void removeInvites(String)): (soft) this.listeners != null
    //#presumption(void removeInvites(String)): invite.channel@1555 != null
    //#presumption(void removeInvites(String)): java.util.ArrayList:iterator(...)@1555 != null
    //#presumption(void removeInvites(String)): java.util.Iterator:next(...).__Tag@1555 == com/dmdirc/Invite
    //#presumption(void removeInvites(String)): java.util.Iterator:next(...)@1555 != null
    //#unanalyzed(void removeInvites(String)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void removeInvites(String)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void removeInvites(String)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void removeInvites(String)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void removeInvites(String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void removeInvites(String)): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void removeInvites(String)): Effects-of-calling:com.dmdirc.interfaces.InviteListener:inviteExpired
    //#test_vector(void removeInvites(String)): java.lang.String:equals(...)@1556: {0}, {1}
    //#test_vector(void removeInvites(String)): java.util.Iterator:hasNext(...)@1555: {0}, {1}
            if (invite.getChannel().equals(channel)) {
                removeInvite(invite);
            }
        }
    }
    //#Server.java:1560: end of method: void com.dmdirc.Server.removeInvites(String)

    /**
     * Removes all invites for all channels.
     */
    private void removeInvites() {
        for (Invite invite : new ArrayList<Invite>(invites)) {
    //#Server.java:1566: method: void com.dmdirc.Server.removeInvites()
    //#input(void removeInvites()): __Descendant_Table[com/dmdirc/Server]
    //#input(void removeInvites()): __Descendant_Table[others]
    //#input(void removeInvites()): __Dispatch_Table.removeInvite(Lcom/dmdirc/Invite;)V
    //#input(void removeInvites()): com/dmdirc/Invite.__Descendant_Table[com/dmdirc/Invite]
    //#input(void removeInvites()): com/dmdirc/Invite.__Descendant_Table[others]
    //#input(void removeInvites()): this
    //#input(void removeInvites()): this.__Tag
    //#input(void removeInvites()): this.invites
    //#input(void removeInvites()): this.listeners
    //#pre[2] (void removeInvites()): (soft) this.__Tag == com/dmdirc/Server
    //#pre[3] (void removeInvites()): (soft) this.invites != null
    //#pre[5] (void removeInvites()): (soft) this.listeners != null
    //#presumption(void removeInvites()): java.util.ArrayList:iterator(...)@1566 != null
    //#presumption(void removeInvites()): java.util.Iterator:next(...).__Tag@1566 == com/dmdirc/Invite
    //#unanalyzed(void removeInvites()): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void removeInvites()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void removeInvites()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void removeInvites()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void removeInvites()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void removeInvites()): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void removeInvites()): Effects-of-calling:com.dmdirc.interfaces.InviteListener:inviteExpired
    //#test_vector(void removeInvites()): java.util.Iterator:hasNext(...)@1566: {0}, {1}
            removeInvite(invite);
        }
    }
    //#Server.java:1569: end of method: void com.dmdirc.Server.removeInvites()

    /**
     * Removes an invite from this server, and fires the appropriate listeners.
     *
     * @param invite The invite to be removed
     */
    public void removeInvite(final Invite invite) {
        synchronized (invites) {
    //#Server.java:1577: method: void com.dmdirc.Server.removeInvite(Invite)
    //#input(void removeInvite(Invite)): invite
    //#input(void removeInvite(Invite)): this
    //#input(void removeInvite(Invite)): this.invites
    //#input(void removeInvite(Invite)): this.invites.__Lock
    //#input(void removeInvite(Invite)): this.listeners
    //#input(void removeInvite(Invite)): this.listeners.__Lock
    //#pre[3] (void removeInvite(Invite)): this.invites != null
    //#pre[4] (void removeInvite(Invite)): this.listeners != null
    //#presumption(void removeInvite(Invite)): com.dmdirc.util.ListenerList:get(...)@1581 != null
    //#presumption(void removeInvite(Invite)): java.util.Iterator:next(...)@1581 != null
    //#test_vector(void removeInvite(Invite)): java.util.Iterator:hasNext(...)@1581: {1}, {0}
            invites.remove(invite);

            synchronized (listeners) {
                for (InviteListener listener : listeners.get(InviteListener.class)) {
    //#Server.java:1581: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.util.ListenerList:get(Class)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void removeInvite(Invite)
    //#    unanalyzed callee: List com.dmdirc.util.ListenerList:get(Class)
                    listener.inviteExpired(this, invite);
    //#Server.java:1582: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.interfaces.InviteListener:inviteExpired(Server, Invite)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void removeInvite(Invite)
    //#    unanalyzed callee: void com.dmdirc.interfaces.InviteListener:inviteExpired(Server, Invite)
                }
            }
        }
    }
    //#Server.java:1586: end of method: void com.dmdirc.Server.removeInvite(Invite)

    /**
     * Retusnt the list of invites for this server.
     *
     * @return Invite list
     */
    public List<Invite> getInvites() {
        return invites;
    //#Server.java:1594: method: List com.dmdirc.Server.getInvites()
    //#input(List getInvites()): this
    //#input(List getInvites()): this.invites
    //#output(List getInvites()): return_value
    //#post(List getInvites()): return_value == this.invites
    //#post(List getInvites()): init'ed(return_value)
    //#Server.java:1594: end of method: List com.dmdirc.Server.getInvites()
    }

    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Away state handling">

    /**
     * Adds an away state lisener to this server.
     *
     * @param listener The listener to be added
     */
    public void addAwayStateListener(final AwayStateListener listener) {
        synchronized (listeners) {
    //#Server.java:1607: method: void com.dmdirc.Server.addAwayStateListener(AwayStateListener)
    //#input(void addAwayStateListener(AwayStateListener)): listener
    //#input(void addAwayStateListener(AwayStateListener)): this
    //#input(void addAwayStateListener(AwayStateListener)): this.listeners
    //#input(void addAwayStateListener(AwayStateListener)): this.listeners.__Lock
    //#pre[3] (void addAwayStateListener(AwayStateListener)): this.listeners != null
            listeners.add(AwayStateListener.class, listener);
    //#Server.java:1608: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.util.ListenerList:add(Class, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void addAwayStateListener(AwayStateListener)
    //#    unanalyzed callee: void com.dmdirc.util.ListenerList:add(Class, Object)
        }
    }
    //#Server.java:1610: end of method: void com.dmdirc.Server.addAwayStateListener(AwayStateListener)

    /**
     * Removes an away state lisener from this server.
     *
     * @param listener The listener to be removed
     */
    public void removeAwayStateListener(final AwayStateListener listener) {
        synchronized (listeners) {
    //#Server.java:1618: method: void com.dmdirc.Server.removeAwayStateListener(AwayStateListener)
    //#input(void removeAwayStateListener(AwayStateListener)): listener
    //#input(void removeAwayStateListener(AwayStateListener)): this
    //#input(void removeAwayStateListener(AwayStateListener)): this.listeners
    //#input(void removeAwayStateListener(AwayStateListener)): this.listeners.__Lock
    //#pre[3] (void removeAwayStateListener(AwayStateListener)): this.listeners != null
            listeners.remove(AwayStateListener.class, listener);
    //#Server.java:1619: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.util.ListenerList:remove(Class, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void removeAwayStateListener(AwayStateListener)
    //#    unanalyzed callee: void com.dmdirc.util.ListenerList:remove(Class, Object)
        }
    }
    //#Server.java:1621: end of method: void com.dmdirc.Server.removeAwayStateListener(AwayStateListener)

    /**
     * Updates our away state and fires the relevant listeners.
     *
     * @param message The away message to use, or null if we're not away.
     */
    public void updateAwayState(final String message) {
        if ((awayMessage != null && awayMessage.equals(message))
    //#Server.java:1629: method: void com.dmdirc.Server.updateAwayState(String)
    //#input(void updateAwayState(String)): message
    //#input(void updateAwayState(String)): this
    //#input(void updateAwayState(String)): this.awayMessage
    //#input(void updateAwayState(String)): this.listeners
    //#input(void updateAwayState(String)): this.listeners.__Lock
    //#output(void updateAwayState(String)): this.awayMessage
    //#pre[2] (void updateAwayState(String)): init'ed(this.awayMessage)
    //#pre[4] (void updateAwayState(String)): (soft) this.listeners != null
    //#presumption(void updateAwayState(String)): com.dmdirc.util.ListenerList:get(...)@1638 != null
    //#presumption(void updateAwayState(String)): com.dmdirc.util.ListenerList:get(...)@1642 != null
    //#presumption(void updateAwayState(String)): java.util.Iterator:next(...)@1638 != null
    //#presumption(void updateAwayState(String)): java.util.Iterator:next(...)@1642 != null
    //#post(void updateAwayState(String)): this.awayMessage == One-of{old this.awayMessage, message}
    //#post(void updateAwayState(String)): init'ed(this.awayMessage)
    //#test_vector(void updateAwayState(String)): message: Inverse{null}, Addr_Set{null}
    //#test_vector(void updateAwayState(String)): this.awayMessage: Addr_Set{null}, Inverse{null}
    //#test_vector(void updateAwayState(String)): java.lang.String:equals(...)@1629: {1}, {0}
                || (awayMessage == null && message == null)) {
            return;
        }

        awayMessage = message;

        synchronized (listeners) {
            if (message == null) {
                for (AwayStateListener listener : listeners.get(AwayStateListener.class)) {
    //#Server.java:1638: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.util.ListenerList:get(Class)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void updateAwayState(String)
    //#    unanalyzed callee: List com.dmdirc.util.ListenerList:get(Class)
                    listener.onBack();
    //#Server.java:1639: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.interfaces.AwayStateListener:onBack()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void updateAwayState(String)
    //#    unanalyzed callee: void com.dmdirc.interfaces.AwayStateListener:onBack()
                }
            } else {
                for (AwayStateListener listener : listeners.get(AwayStateListener.class)) {
    //#Server.java:1642: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.util.ListenerList:get(Class)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void updateAwayState(String)
    //#    unanalyzed callee: List com.dmdirc.util.ListenerList:get(Class)
                    listener.onAway(message);
    //#Server.java:1643: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.interfaces.AwayStateListener:onAway(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.Server
    //#    method: void updateAwayState(String)
    //#    unanalyzed callee: void com.dmdirc.interfaces.AwayStateListener:onAway(String)
                }
            }
        }
    }
    //#Server.java:1647: end of method: void com.dmdirc.Server.updateAwayState(String)

    // </editor-fold>

}
    //#Server.java:: end of class: com.dmdirc.Server$4
    //#output(com.dmdirc.Server$3__static_init): __Descendant_Table[com/dmdirc/Server$3]
    //#output(com.dmdirc.Server$3__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.Server$3__static_init): __Descendant_Table[com/dmdirc/Server$3] == &__Dispatch_Table
    //#post(com.dmdirc.Server$3__static_init): __Dispatch_Table.run()V == &run
    //#Server.java:: end of method: com.dmdirc.Server$3.com.dmdirc.Server$3__static_init
    //#Server.java:: end of class: com.dmdirc.Server$3
    //#output(com.dmdirc.Server$2__static_init): __Descendant_Table[com/dmdirc/Server$2]
    //#output(com.dmdirc.Server$2__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.Server$2__static_init): __Descendant_Table[com/dmdirc/Server$2] == &__Dispatch_Table
    //#post(com.dmdirc.Server$2__static_init): __Dispatch_Table.run()V == &run
    //#Server.java:: end of method: com.dmdirc.Server$2.com.dmdirc.Server$2__static_init
    //#Server.java:: end of class: com.dmdirc.Server$2
    //#output(com.dmdirc.Server$1__static_init): __Descendant_Table[com/dmdirc/Server$1]
    //#output(com.dmdirc.Server$1__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.Server$1__static_init): __Descendant_Table[com/dmdirc/Server$1] == &__Dispatch_Table
    //#post(com.dmdirc.Server$1__static_init): __Dispatch_Table.run()V == &run
    //#Server.java:: end of method: com.dmdirc.Server$1.com.dmdirc.Server$1__static_init
    //#Server.java:: end of class: com.dmdirc.Server$1
    //#Server.java:: end of class: com.dmdirc.Server
