//# 1 errors, 521 messages
//#
/*
    //#ChannelClientInfo.java:1:1: class: com.dmdirc.parser.irc.ChannelClientInfo
    //#ChannelClientInfo.java:1:1: method: com.dmdirc.parser.irc.ChannelClientInfo.com.dmdirc.parser.irc.ChannelClientInfo__static_init
 * 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.parser.irc;

import java.util.HashMap;
import java.util.Map;

/**
 * Contains information about a client on a channel.
 * 
 * @author Shane Mc Cormack
 * @author Chris Smith
 * @see IRCParser
 */
public class ChannelClientInfo {
	/** Reference to ClientInfo object this represents. */
	private final ClientInfo cClient;
	/** Integer representation of the channel modes assocated with this user. */
	private long nModes;
	/** Reference to the parser object that owns this channelclient, Used for modes. */
	private final IRCParser myParser;
	/** Reference to the channel object that owns this channelclient. */
	private final ChannelInfo myChannel;
	/** A Map to allow applications to attach misc data to this object */
	private Map myMap;
	
	/**
	 * Create a ChannelClient instance of a CLient.
	 *
	 * @param tParser Refernce to parser that owns this channelclient (used for modes)
	 * @param client Client that this channelclient represents
	 * @param channel Channel that owns this channelclient
	 */	
	public ChannelClientInfo(final IRCParser tParser, final ClientInfo client, final ChannelInfo channel) {
    //#ChannelClientInfo.java:54: method: void com.dmdirc.parser.irc.ChannelClientInfo.com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): __Descendant_Table[com/dmdirc/parser/irc/ChannelClientInfo]
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): __Descendant_Table[others]
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): __Dispatch_Table.getChannel()Lcom/dmdirc/parser/irc/ChannelInfo;
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): channel
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): channel.__Tag
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): channel.sName
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): client
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): client.myChannelClientInfos
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): client.myParser
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): client.myParser.__Tag
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): client.myParser.stringConverter
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): client.myParser.stringConverter.__Tag
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): client.myParser.stringConverter.lowercase
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): client.myParser.stringConverter.lowercase.length
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): client.myParser.stringConverter.lowercase[0..65_535]
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): com/dmdirc/parser/irc/ChannelInfo.__Descendant_Table[com/dmdirc/parser/irc/ChannelInfo]
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): com/dmdirc/parser/irc/ChannelInfo.__Descendant_Table[others]
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): com/dmdirc/parser/irc/ChannelInfo.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): com/dmdirc/parser/irc/IRCParser.__Descendant_Table[com/dmdirc/parser/irc/IRCParser]
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): com/dmdirc/parser/irc/IRCParser.__Descendant_Table[others]
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): com/dmdirc/parser/irc/IRCParser.__Dispatch_Table.getIRCStringConverter()Lcom/dmdirc/parser/irc/IRCStringConverter;
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): com/dmdirc/parser/irc/IRCStringConverter.__Descendant_Table[com/dmdirc/parser/irc/IRCStringConverter]
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): com/dmdirc/parser/irc/IRCStringConverter.__Descendant_Table[others]
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): com/dmdirc/parser/irc/IRCStringConverter.__Dispatch_Table.toLowerCase(Ljava/lang/String;)Ljava/lang/String;
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): tParser
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): this
    //#input(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): this.__Tag
    //#output(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): client.myParser.stringConverter
    //#output(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new HashMap(ChannelClientInfo#1) num objects
    //#output(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new IRCStringConverter(getIRCStringConverter#1) num objects
    //#output(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new IRCStringConverter(getIRCStringConverter#1).__Tag
    //#output(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new IRCStringConverter(getIRCStringConverter#1).limit
    //#output(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new IRCStringConverter(getIRCStringConverter#1).lowercase
    //#output(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new IRCStringConverter(getIRCStringConverter#1).uppercase
    //#output(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new char[](IRCStringConverter#1) num objects
    //#output(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new char[](IRCStringConverter#1).length
    //#output(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new char[](IRCStringConverter#1)[0..65_535]
    //#output(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new char[](IRCStringConverter#2) num objects
    //#output(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new char[](IRCStringConverter#2).length
    //#output(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new char[](IRCStringConverter#2)[0..65_567]
    //#output(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): this.__Tag
    //#output(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): this.cClient
    //#output(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): this.myChannel
    //#output(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): this.myMap
    //#output(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): this.myParser
    //#new obj(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new HashMap(ChannelClientInfo#1)
    //#new obj(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new IRCStringConverter(getIRCStringConverter#1)
    //#new obj(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new char[](IRCStringConverter#1)
    //#new obj(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new char[](IRCStringConverter#2)
    //#pre[1] (void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): channel != null
    //#pre[2] (void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): channel.__Tag == com/dmdirc/parser/irc/ChannelInfo
    //#pre[3] (void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): channel.sName != null
    //#pre[4] (void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): client != null
    //#pre[5] (void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): client.myChannelClientInfos != null
    //#pre[6] (void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): client.myParser != null
    //#pre[7] (void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): client.myParser.__Tag == com/dmdirc/parser/irc/IRCParser
    //#pre[12] (void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): init'ed(client.myParser.stringConverter)
    //#pre[13] (void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): this.__Tag == com/dmdirc/parser/irc/ChannelClientInfo
    //#pre[8] (void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): (soft) client.myParser.stringConverter.__Tag == com/dmdirc/parser/irc/IRCStringConverter
    //#pre[9] (void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): (soft) client.myParser.stringConverter.lowercase != null
    //#pre[11] (void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): (soft) init'ed(client.myParser.stringConverter.lowercase[0..65_535])
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): client.myParser.stringConverter == One-of{old client.myParser.stringConverter, &new IRCStringConverter(getIRCStringConverter#1)}
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): client.myParser.stringConverter != null
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): this.__Tag == com/dmdirc/parser/irc/ChannelClientInfo
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): this.cClient == client
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): this.cClient != null
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): this.myChannel == channel
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): this.myChannel != null
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): this.myMap == &new HashMap(ChannelClientInfo#1)
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): this.myParser == tParser
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): init'ed(this.myParser)
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new HashMap(ChannelClientInfo#1) num objects == 1
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new IRCStringConverter(getIRCStringConverter#1) num objects <= 1
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new char[](IRCStringConverter#1) num objects == new IRCStringConverter(getIRCStringConverter#1) num objects
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new char[](IRCStringConverter#2) num objects == new IRCStringConverter(getIRCStringConverter#1) num objects
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new IRCStringConverter(getIRCStringConverter#1).__Tag == com/dmdirc/parser/irc/IRCStringConverter
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new IRCStringConverter(getIRCStringConverter#1).limit == 4
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new IRCStringConverter(getIRCStringConverter#1).lowercase == &new char[](IRCStringConverter#1)
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new IRCStringConverter(getIRCStringConverter#1).uppercase == &new char[](IRCStringConverter#2)
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new char[](IRCStringConverter#1).length == 127
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): new char[](IRCStringConverter#2).length == 127
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): possibly_updated(new char[](IRCStringConverter#1)[0..65_535])
    //#post(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): possibly_updated(new char[](IRCStringConverter#2)[0..65_567])
    //#unanalyzed(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): Effects-of-calling:getChannel
    //#unanalyzed(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): Effects-of-calling:getName
    //#unanalyzed(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): Effects-of-calling:java.lang.String:toCharArray
    //#unanalyzed(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): Effects-of-calling:java.lang.String
    //#unanalyzed(void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)): Effects-of-calling:java.util.Map:put
		myMap = new HashMap<Object, Object>();
		myParser = tParser;
		cClient = client;
		myChannel = channel;
		cClient.addChannelClientInfo(this);
    //#ChannelClientInfo.java:59: ?precondition failure
    //#    com/dmdirc/parser/irc/ClientInfo.addChannelClientInfo: (soft) init'ed(this.myParser.stringConverter.lowercase[0..65_535])
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.parser.irc.ChannelClientInfo
    //#    method: void com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)
    //#    basic block: Entry_BB_1
    //#    assertion: (soft) init'ed(this.cClient.myParser.stringConverter.lowercase[0..65_535])
    //#    callee: void com/dmdirc/parser/irc/ClientInfo.addChannelClientInfo(ChannelClientInfo)
    //#    callee assertion: (soft) init'ed(this.myParser.stringConverter.lowercase[0..65_535])
    //#    callee file: ClientInfo.java
    //#    callee precondition index: [14]
    //#    callee srcpos: 300
    //#    VN: this.cClient.myParser.stringConverter.lowercase[0..65_535]
    //#    Expected: {0..65_535}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Soft  Bad only invalid
	}
    //#ChannelClientInfo.java:60: end of method: void com.dmdirc.parser.irc.ChannelClientInfo.com.dmdirc.parser.irc.ChannelClientInfo(IRCParser, ClientInfo, ChannelInfo)
	
	/**
	 * Set the Map object attatched to this object.
	 *
	 * @param newMap New Map to attatch.
	 * @see #getMap
	 */
	public void setMap(final Map newMap) {
		myMap = newMap;
    //#ChannelClientInfo.java:69: method: void com.dmdirc.parser.irc.ChannelClientInfo.setMap(Map)
    //#input(void setMap(Map)): newMap
    //#input(void setMap(Map)): this
    //#output(void setMap(Map)): this.myMap
    //#post(void setMap(Map)): this.myMap == newMap
    //#post(void setMap(Map)): init'ed(this.myMap)
	}
    //#ChannelClientInfo.java:70: end of method: void com.dmdirc.parser.irc.ChannelClientInfo.setMap(Map)
	
	/**
	 * Get the Map object attatched to this object.
	 *
	 * @return Map to attatched to this.
	 * @see #setMap
	 */
	public Map getMap() {
		return myMap;
    //#ChannelClientInfo.java:79: method: Map com.dmdirc.parser.irc.ChannelClientInfo.getMap()
    //#input(Map getMap()): this
    //#input(Map getMap()): this.myMap
    //#output(Map getMap()): return_value
    //#pre[2] (Map getMap()): init'ed(this.myMap)
    //#post(Map getMap()): return_value == this.myMap
    //#post(Map getMap()): init'ed(return_value)
    //#ChannelClientInfo.java:79: end of method: Map com.dmdirc.parser.irc.ChannelClientInfo.getMap()
	}
	
	/**
	 * Get the client object represented by this channelclient.
	 *
	 * @return Client object represented by this channelclient
	 */
	public ClientInfo getClient() { return cClient; }
    //#ChannelClientInfo.java:87: method: ClientInfo com.dmdirc.parser.irc.ChannelClientInfo.getClient()
    //#input(ClientInfo getClient()): this
    //#input(ClientInfo getClient()): this.cClient
    //#output(ClientInfo getClient()): return_value
    //#post(ClientInfo getClient()): return_value == this.cClient
    //#post(ClientInfo getClient()): init'ed(return_value)
    //#ChannelClientInfo.java:87: end of method: ClientInfo com.dmdirc.parser.irc.ChannelClientInfo.getClient()
	/**
	 * Get the Channel object that owns this ChannelClient.
	 *
	 * @return Channel object that owns this ChannelClient
	 */
	public ChannelInfo getChannel() { return myChannel; }
    //#ChannelClientInfo.java:93: method: ChannelInfo com.dmdirc.parser.irc.ChannelClientInfo.getChannel()
    //#input(ChannelInfo getChannel()): this
    //#input(ChannelInfo getChannel()): this.myChannel
    //#output(ChannelInfo getChannel()): return_value
    //#post(ChannelInfo getChannel()): return_value == this.myChannel
    //#post(ChannelInfo getChannel()): init'ed(return_value)
    //#ChannelClientInfo.java:93: end of method: ChannelInfo com.dmdirc.parser.irc.ChannelClientInfo.getChannel()
	/**
	 * Get the nickname of the client object represented by this channelclient.
	 *
	 * @return Nickname of the Client object represented by this channelclient
	 */	
	public String getNickname() { return cClient.getNickname(); }	
    //#ChannelClientInfo.java:99: method: String com.dmdirc.parser.irc.ChannelClientInfo.getNickname()
    //#input(String getNickname()): this
    //#input(String getNickname()): this.cClient
    //#input(String getNickname()): this.cClient.sNickname
    //#output(String getNickname()): return_value
    //#pre[2] (String getNickname()): this.cClient != null
    //#pre[3] (String getNickname()): init'ed(this.cClient.sNickname)
    //#post(String getNickname()): return_value == this.cClient.sNickname
    //#post(String getNickname()): init'ed(return_value)
    //#ChannelClientInfo.java:99: end of method: String com.dmdirc.parser.irc.ChannelClientInfo.getNickname()
	
	/**
	 * Set the modes this client has (Prefix modes).
	 *
	 * @param nNewMode integer representing the modes this client has.
	 */
	public void setChanMode(final long nNewMode) { nModes = nNewMode; }
    //#ChannelClientInfo.java:106: method: void com.dmdirc.parser.irc.ChannelClientInfo.setChanMode(long)
    //#input(void setChanMode(long)): nNewMode
    //#input(void setChanMode(long)): this
    //#output(void setChanMode(long)): this.nModes
    //#post(void setChanMode(long)): this.nModes == nNewMode
    //#post(void setChanMode(long)): init'ed(this.nModes)
    //#ChannelClientInfo.java:106: end of method: void com.dmdirc.parser.irc.ChannelClientInfo.setChanMode(long)
	/**
	 * Get the modes this client has (Prefix modes).
	 *
	 * @return integer representing the modes this client has.
	 */
	public long getChanMode() { return nModes; }
    //#ChannelClientInfo.java:112: method: long com.dmdirc.parser.irc.ChannelClientInfo.getChanMode()
    //#input(long getChanMode()): this
    //#input(long getChanMode()): this.nModes
    //#output(long getChanMode()): return_value
    //#pre[2] (long getChanMode()): init'ed(this.nModes)
    //#post(long getChanMode()): return_value == this.nModes
    //#post(long getChanMode()): init'ed(return_value)
    //#ChannelClientInfo.java:112: end of method: long com.dmdirc.parser.irc.ChannelClientInfo.getChanMode()
	
	/**
	 * Get the modes this client has (Prefix modes) as a string.
	 * Returns all known modes that the client has.
	 * getChanModeStr(false).charAt(0) can be used to get the highest mode (o)
	 * getChanModeStr(true).charAt(0) can be used to get the highest prefix (@)
	 *
	 * @param bPrefix if this is true, prefixes will be returned (@+) not modes (ov)
	 * @return String representing the modes this client has.
	 */
	public String getChanModeStr(final boolean bPrefix) {
		StringBuilder sModes = new StringBuilder();
    //#ChannelClientInfo.java:124: method: String com.dmdirc.parser.irc.ChannelClientInfo.getChanModeStr(bool)
    //#input(String getChanModeStr(bool)): __Descendant_Table[com/dmdirc/parser/irc/ChannelClientInfo]
    //#input(String getChanModeStr(bool)): __Descendant_Table[others]
    //#input(String getChanModeStr(bool)): __Dispatch_Table.getChanMode()J
    //#input(String getChanModeStr(bool)): bPrefix
    //#input(String getChanModeStr(bool)): this
    //#input(String getChanModeStr(bool)): this.__Tag
    //#input(String getChanModeStr(bool)): this.myParser
    //#input(String getChanModeStr(bool)): this.myParser.hPrefixMap
    //#input(String getChanModeStr(bool)): this.myParser.hPrefixModes
    //#input(String getChanModeStr(bool)): this.myParser.nNextKeyPrefix
    //#input(String getChanModeStr(bool)): this.nModes
    //#output(String getChanModeStr(bool)): java.lang.StringBuilder:toString(...)._tainted
    //#output(String getChanModeStr(bool)): return_value
    //#new obj(String getChanModeStr(bool)): java.lang.StringBuilder:toString(...)
    //#pre[3] (String getChanModeStr(bool)): this.__Tag == com/dmdirc/parser/irc/ChannelClientInfo
    //#pre[4] (String getChanModeStr(bool)): this.myParser != null
    //#pre[7] (String getChanModeStr(bool)): init'ed(this.myParser.nNextKeyPrefix)
    //#pre[8] (String getChanModeStr(bool)): init'ed(this.nModes)
    //#pre[5] (String getChanModeStr(bool)): (soft) this.myParser.hPrefixMap != null
    //#pre[6] (String getChanModeStr(bool)): (soft) this.myParser.hPrefixModes != null
    //#presumption(String getChanModeStr(bool)): java.util.Iterator:next(...)@130 != null
    //#presumption(String getChanModeStr(bool)): java.util.Map:get(...)@131 != null
    //#presumption(String getChanModeStr(bool)): java.util.Map:get(...)@133 != null
    //#presumption(String getChanModeStr(bool)): java.util.Map:keySet(...)@130 != null
    //#post(String getChanModeStr(bool)): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(String getChanModeStr(bool)): return_value == &java.lang.StringBuilder:toString(...)
    //#test_vector(String getChanModeStr(bool)): bPrefix: {0}, {1}
    //#test_vector(String getChanModeStr(bool)): java.util.Iterator:hasNext(...)@130: {0}, {1}
		long nTemp = 0;
    //#ChannelClientInfo.java:125: Warning: unused assignment
    //#    Unused assignment into nTemp
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.parser.irc.ChannelClientInfo
    //#    method: String getChanModeStr(bool)
    //#    Attribs:  Uncertain
		final long nCurrentModes = this.getChanMode();

		for (long i = myParser.nNextKeyPrefix; i > 0; i = i / 2) {
			if ((nCurrentModes & i) == i) {
				for (char cTemp : myParser.hPrefixModes.keySet()) {
					nTemp = myParser.hPrefixModes.get(cTemp);
					if (nTemp == i) {
						if (bPrefix) { cTemp = myParser.hPrefixMap.get(cTemp); }
						sModes = sModes.append(cTemp);
						break;
					}
				}
			}
		}
		
		return sModes.toString();
    //#ChannelClientInfo.java:141: end of method: String com.dmdirc.parser.irc.ChannelClientInfo.getChanModeStr(bool)
	}

	/**
	 * Get the value of the most important mode this client has (Prefix modes).
	 * A higher value, is a more important mode, 0 = no modes.
	 *
	 * @return integer representing the value of the most important mode.
	 */
	public long getImportantModeValue() {
		for (long i = myParser.nNextKeyPrefix; i > 0; i = i / 2) {
    //#ChannelClientInfo.java:151: method: long com.dmdirc.parser.irc.ChannelClientInfo.getImportantModeValue()
    //#input(long getImportantModeValue()): this
    //#input(long getImportantModeValue()): this.myParser
    //#input(long getImportantModeValue()): this.myParser.nNextKeyPrefix
    //#input(long getImportantModeValue()): this.nModes
    //#output(long getImportantModeValue()): return_value
    //#pre[2] (long getImportantModeValue()): this.myParser != null
    //#pre[3] (long getImportantModeValue()): init'ed(this.myParser.nNextKeyPrefix)
    //#pre[4] (long getImportantModeValue()): (soft) init'ed(this.nModes)
    //#post(long getImportantModeValue()): return_value >= 0
			if ((nModes & i) == i) { return i; }
		}
		return 0;
    //#ChannelClientInfo.java:154: end of method: long com.dmdirc.parser.irc.ChannelClientInfo.getImportantModeValue()
	}
	
	/**
	 * Get the most important mode this client has (o, v etc), or an empty
     * string if the client has no modes.
	 *
	 * @return String representing the most important mode.
	 */
	public String getImportantMode() {
		String sModes = this.getChanModeStr(false);
    //#ChannelClientInfo.java:164: method: String com.dmdirc.parser.irc.ChannelClientInfo.getImportantMode()
    //#input(String getImportantMode()): ""._tainted
    //#input(String getImportantMode()): __Descendant_Table[com/dmdirc/parser/irc/ChannelClientInfo]
    //#input(String getImportantMode()): __Descendant_Table[others]
    //#input(String getImportantMode()): __Dispatch_Table.getChanMode()J
    //#input(String getImportantMode()): __Dispatch_Table.getChanModeStr(Z)Ljava/lang/String;
    //#input(String getImportantMode()): this
    //#input(String getImportantMode()): this.__Tag
    //#input(String getImportantMode()): this.myParser
    //#input(String getImportantMode()): this.myParser.hPrefixMap
    //#input(String getImportantMode()): this.myParser.hPrefixModes
    //#input(String getImportantMode()): this.myParser.nNextKeyPrefix
    //#input(String getImportantMode()): this.nModes
    //#output(String getImportantMode()): java.lang.StringBuilder:toString(...)._tainted
    //#output(String getImportantMode()): return_value
    //#new obj(String getImportantMode()): java.lang.StringBuilder:toString(...)
    //#pre[2] (String getImportantMode()): this.__Tag == com/dmdirc/parser/irc/ChannelClientInfo
    //#pre[3] (String getImportantMode()): this.myParser != null
    //#pre[6] (String getImportantMode()): init'ed(this.myParser.nNextKeyPrefix)
    //#pre[7] (String getImportantMode()): init'ed(this.nModes)
    //#pre[4] (String getImportantMode()): (soft) this.myParser.hPrefixMap != null
    //#pre[5] (String getImportantMode()): (soft) this.myParser.hPrefixModes != null
    //#post(String getImportantMode()): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(String getImportantMode()): return_value == One-of{&java.lang.StringBuilder:toString(...)}
    //#post(String getImportantMode()): return_value in Addr_Set{&java.lang.StringBuilder:toString(...),&java.lang.StringBuilder:toString(...)}
    //#unanalyzed(String getImportantMode()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(String getImportantMode()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(String getImportantMode()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(String getImportantMode()): Effects-of-calling:java.util.Map:keySet
    //#unanalyzed(String getImportantMode()): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(String getImportantMode()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(String getImportantMode()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(String getImportantMode()): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(String getImportantMode()): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(String getImportantMode()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(String getImportantMode()): Effects-of-calling:java.lang.Long:longValue
    //#test_vector(String getImportantMode()): java.lang.String:isEmpty(...)@165: {1}, {0}
		if (!sModes.isEmpty()) { sModes = "" + sModes.charAt(0); }
		return sModes;
    //#ChannelClientInfo.java:166: end of method: String com.dmdirc.parser.irc.ChannelClientInfo.getImportantMode()
	}
	
	/**
	 * Get the most important prefix this client has (@, + etc), or an empty
     * string if the client has no modes.
	 *
	 * @return String representing the most important mode.
	 */
	public String getImportantModePrefix() {
		String sModes = this.getChanModeStr(true);
    //#ChannelClientInfo.java:176: method: String com.dmdirc.parser.irc.ChannelClientInfo.getImportantModePrefix()
    //#input(String getImportantModePrefix()): ""._tainted
    //#input(String getImportantModePrefix()): __Descendant_Table[com/dmdirc/parser/irc/ChannelClientInfo]
    //#input(String getImportantModePrefix()): __Descendant_Table[others]
    //#input(String getImportantModePrefix()): __Dispatch_Table.getChanMode()J
    //#input(String getImportantModePrefix()): __Dispatch_Table.getChanModeStr(Z)Ljava/lang/String;
    //#input(String getImportantModePrefix()): this
    //#input(String getImportantModePrefix()): this.__Tag
    //#input(String getImportantModePrefix()): this.myParser
    //#input(String getImportantModePrefix()): this.myParser.hPrefixMap
    //#input(String getImportantModePrefix()): this.myParser.hPrefixModes
    //#input(String getImportantModePrefix()): this.myParser.nNextKeyPrefix
    //#input(String getImportantModePrefix()): this.nModes
    //#output(String getImportantModePrefix()): java.lang.StringBuilder:toString(...)._tainted
    //#output(String getImportantModePrefix()): return_value
    //#new obj(String getImportantModePrefix()): java.lang.StringBuilder:toString(...)
    //#pre[2] (String getImportantModePrefix()): this.__Tag == com/dmdirc/parser/irc/ChannelClientInfo
    //#pre[3] (String getImportantModePrefix()): this.myParser != null
    //#pre[6] (String getImportantModePrefix()): init'ed(this.myParser.nNextKeyPrefix)
    //#pre[7] (String getImportantModePrefix()): init'ed(this.nModes)
    //#pre[4] (String getImportantModePrefix()): (soft) this.myParser.hPrefixMap != null
    //#pre[5] (String getImportantModePrefix()): (soft) this.myParser.hPrefixModes != null
    //#post(String getImportantModePrefix()): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(String getImportantModePrefix()): return_value == One-of{&java.lang.StringBuilder:toString(...)}
    //#post(String getImportantModePrefix()): return_value in Addr_Set{&java.lang.StringBuilder:toString(...),&java.lang.StringBuilder:toString(...)}
    //#unanalyzed(String getImportantModePrefix()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(String getImportantModePrefix()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(String getImportantModePrefix()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(String getImportantModePrefix()): Effects-of-calling:java.util.Map:keySet
    //#unanalyzed(String getImportantModePrefix()): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(String getImportantModePrefix()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(String getImportantModePrefix()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(String getImportantModePrefix()): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(String getImportantModePrefix()): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(String getImportantModePrefix()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(String getImportantModePrefix()): Effects-of-calling:java.lang.Long:longValue
    //#test_vector(String getImportantModePrefix()): java.lang.String:isEmpty(...)@177: {1}, {0}
		if (!sModes.isEmpty()) { sModes = "" + sModes.charAt(0); }
		return sModes;
    //#ChannelClientInfo.java:178: end of method: String com.dmdirc.parser.irc.ChannelClientInfo.getImportantModePrefix()
	}
	

	/**
	 * Get the String Value of ChannelClientInfo (ie @Nickname).
	 *
	 * @return String Value of user (inc prefix) (ie @Nickname)
	 */
	@Override
	public String toString() { 
		return this.getImportantModePrefix() + this.getNickname();
    //#ChannelClientInfo.java:189: method: String com.dmdirc.parser.irc.ChannelClientInfo.toString()
    //#input(String toString()): ""._tainted
    //#input(String toString()): __Descendant_Table[com/dmdirc/parser/irc/ChannelClientInfo]
    //#input(String toString()): __Descendant_Table[others]
    //#input(String toString()): __Dispatch_Table.getChanMode()J
    //#input(String toString()): __Dispatch_Table.getChanModeStr(Z)Ljava/lang/String;
    //#input(String toString()): __Dispatch_Table.getImportantModePrefix()Ljava/lang/String;
    //#input(String toString()): __Dispatch_Table.getNickname()Ljava/lang/String;
    //#input(String toString()): this
    //#input(String toString()): this.__Tag
    //#input(String toString()): this.cClient
    //#input(String toString()): this.cClient.sNickname
    //#input(String toString()): this.cClient.sNickname._tainted
    //#input(String toString()): this.myParser
    //#input(String toString()): this.myParser.hPrefixMap
    //#input(String toString()): this.myParser.hPrefixModes
    //#input(String toString()): this.myParser.nNextKeyPrefix
    //#input(String toString()): this.nModes
    //#output(String toString()): java.lang.StringBuilder:toString(...)._tainted
    //#output(String toString()): return_value
    //#new obj(String toString()): java.lang.StringBuilder:toString(...)
    //#pre[2] (String toString()): this.__Tag == com/dmdirc/parser/irc/ChannelClientInfo
    //#pre[3] (String toString()): this.cClient != null
    //#pre[4] (String toString()): init'ed(this.cClient.sNickname)
    //#pre[6] (String toString()): this.myParser != null
    //#pre[9] (String toString()): init'ed(this.myParser.nNextKeyPrefix)
    //#pre[10] (String toString()): init'ed(this.nModes)
    //#pre[7] (String toString()): (soft) this.myParser.hPrefixMap != null
    //#pre[8] (String toString()): (soft) this.myParser.hPrefixModes != null
    //#post(String toString()): java.lang.StringBuilder:toString(...)._tainted == this.cClient.sNickname._tainted
    //#post(String toString()): init'ed(java.lang.StringBuilder:toString(...)._tainted)
    //#post(String toString()): return_value == &java.lang.StringBuilder:toString(...)
    //#unanalyzed(String toString()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(String toString()): Effects-of-calling:getChanModeStr
    //#unanalyzed(String toString()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(String toString()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(String toString()): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(String toString()): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(String toString()): Effects-of-calling:java.util.Map:keySet
    //#unanalyzed(String toString()): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(String toString()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(String toString()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(String toString()): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(String toString()): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(String toString()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(String toString()): Effects-of-calling:java.lang.Long:longValue
    //#ChannelClientInfo.java:189: end of method: String com.dmdirc.parser.irc.ChannelClientInfo.toString()
	}	
	
	/**
	 * Attempt to kick this user from the channel.
	 *
	 * @param sReason Why are they being kicked? "" for no reason
	 */
	public void kick(final String sReason) {
		myParser.sendString("KICK " + myChannel + " " + this.getNickname() + (sReason.isEmpty() ? sReason : " :" + sReason));
    //#ChannelClientInfo.java:198: method: void com.dmdirc.parser.irc.ChannelClientInfo.kick(String)
    //#input(void kick(String)): " "._tainted
    //#input(void kick(String)): " :"._tainted
    //#input(void kick(String)): " for mode "._tainted
    //#input(void kick(String)): "Callback not found: "._tainted
    //#input(void kick(String)): "Intercepted mode request for "._tainted
    //#input(void kick(String)): "KICK "._tainted
    //#input(void kick(String)): "OnDataOut"._tainted
    //#input(void kick(String)): "OnDebugInfo"._tainted
    //#input(void kick(String)): __Descendant_Table[com/dmdirc/parser/irc/ChannelClientInfo]
    //#input(void kick(String)): __Descendant_Table[others]
    //#input(void kick(String)): __Dispatch_Table.getNickname()Ljava/lang/String;
    //#input(void kick(String)): com/dmdirc/parser/irc/ChannelInfo.__Descendant_Table[com/dmdirc/parser/irc/ChannelInfo]
    //#input(void kick(String)): com/dmdirc/parser/irc/ChannelInfo.__Descendant_Table[others]
    //#input(void kick(String)): com/dmdirc/parser/irc/ChannelInfo.__Dispatch_Table.getListModeQueue()Ljava/util/Queue;
    //#input(void kick(String)): com/dmdirc/parser/irc/IRCParser.__Descendant_Table[com/dmdirc/parser/irc/IRCParser]
    //#input(void kick(String)): com/dmdirc/parser/irc/IRCParser.__Descendant_Table[others]
    //#input(void kick(String)): com/dmdirc/parser/irc/IRCParser.__Dispatch_Table.callDataOut(Ljava/lang/String;Z)Z
    //#input(void kick(String)): com/dmdirc/parser/irc/IRCParser.__Dispatch_Table.callDebugInfo(ILjava/lang/String;)Z
    //#input(void kick(String)): com/dmdirc/parser/irc/IRCParser.__Dispatch_Table.doSendString(Ljava/lang/String;Z)V
    //#input(void kick(String)): com/dmdirc/parser/irc/IRCParser.__Dispatch_Table.getChannelInfo(Ljava/lang/String;)Lcom/dmdirc/parser/irc/ChannelInfo;
    //#input(void kick(String)): com/dmdirc/parser/irc/IRCParser.__Dispatch_Table.getIRCStringConverter()Lcom/dmdirc/parser/irc/IRCStringConverter;
    //#input(void kick(String)): com/dmdirc/parser/irc/IRCParser.__Dispatch_Table.getSocketState()Lcom/dmdirc/parser/irc/SocketState;
    //#input(void kick(String)): com/dmdirc/parser/irc/IRCParser.__Dispatch_Table.sendString(Ljava/lang/String;)V
    //#input(void kick(String)): com/dmdirc/parser/irc/IRCStringConverter.__Descendant_Table[com/dmdirc/parser/irc/IRCStringConverter]
    //#input(void kick(String)): com/dmdirc/parser/irc/IRCStringConverter.__Descendant_Table[others]
    //#input(void kick(String)): com/dmdirc/parser/irc/IRCStringConverter.__Dispatch_Table.toLowerCase(Ljava/lang/String;)Ljava/lang/String;
    //#input(void kick(String)): com/dmdirc/parser/irc/SocketState.OPEN
    //#input(void kick(String)): com/dmdirc/parser/irc/callbacks/CallbackObject.__Descendant_Table[com/dmdirc/parser/irc/callbacks/CallbackObjectSpecific]
    //#input(void kick(String)): com/dmdirc/parser/irc/callbacks/CallbackObject.__Descendant_Table[com/dmdirc/parser/irc/callbacks/CallbackObject]
    //#input(void kick(String)): com/dmdirc/parser/irc/callbacks/CallbackObject.__Descendant_Table[others]
    //#input(void kick(String)): com/dmdirc/parser/irc/callbacks/CallbackObject.__Dispatch_Table.call([Ljava/lang/Object;)Z
    //#input(void kick(String)): com/dmdirc/parser/irc/callbacks/CallbackObjectSpecific.__Dispatch_Table.call([Ljava/lang/Object;)Z
    //#input(void kick(String)): sReason
    //#input(void kick(String)): sReason._tainted
    //#input(void kick(String)): this
    //#input(void kick(String)): this.__Tag
    //#input(void kick(String)): this.cClient
    //#input(void kick(String)): this.cClient.sNickname
    //#input(void kick(String)): this.cClient.sNickname._tainted
    //#input(void kick(String)): this.myChannel
    //#input(void kick(String)): this.myChannel._tainted
    //#input(void kick(String)): this.myParser
    //#input(void kick(String)): this.myParser.__Tag
    //#input(void kick(String)): this.myParser.cMyself
    //#input(void kick(String)): this.myParser.currentSocketState
    //#input(void kick(String)): this.myParser.hChanModesOther
    //#input(void kick(String)): this.myParser.hChannelList
    //#input(void kick(String)): this.myParser.myCallbackManager
    //#input(void kick(String)): this.myParser.myCallbackManager.callbackHash
    //#input(void kick(String)): this.myParser.out
    //#input(void kick(String)): this.myParser.stringConverter
    //#input(void kick(String)): this.myParser.stringConverter.__Tag
    //#input(void kick(String)): this.myParser.stringConverter.lowercase
    //#input(void kick(String)): this.myParser.stringConverter.lowercase.length
    //#output(void kick(String)): java.lang.String:substring(...)._tainted
    //#output(void kick(String)): new IRCStringConverter(getIRCStringConverter#1) num objects
    //#output(void kick(String)): new IRCStringConverter(getIRCStringConverter#1).__Tag
    //#output(void kick(String)): new IRCStringConverter(getIRCStringConverter#1).limit
    //#output(void kick(String)): new IRCStringConverter(getIRCStringConverter#1).lowercase
    //#output(void kick(String)): new IRCStringConverter(getIRCStringConverter#1).uppercase
    //#output(void kick(String)): new char[](IRCStringConverter#1) num objects
    //#output(void kick(String)): new char[](IRCStringConverter#1).length
    //#output(void kick(String)): new char[](IRCStringConverter#1)[0..65_535]
    //#output(void kick(String)): new char[](IRCStringConverter#2) num objects
    //#output(void kick(String)): new char[](IRCStringConverter#2).length
    //#output(void kick(String)): new char[](IRCStringConverter#2)[0..65_567]
    //#output(void kick(String)): this.myParser.cMyself.myAwayReason
    //#output(void kick(String)): this.myParser.stringConverter
    //#new obj(void kick(String)): java.lang.String:substring(...)
    //#new obj(void kick(String)): new IRCStringConverter(getIRCStringConverter#1)
    //#new obj(void kick(String)): new char[](IRCStringConverter#1)
    //#new obj(void kick(String)): new char[](IRCStringConverter#2)
    //#pre[3] (void kick(String)): sReason != null
    //#pre[6] (void kick(String)): this.__Tag == com/dmdirc/parser/irc/ChannelClientInfo
    //#pre[7] (void kick(String)): this.cClient != null
    //#pre[8] (void kick(String)): init'ed(this.cClient.sNickname)
    //#pre[12] (void kick(String)): this.myParser != null
    //#pre[13] (void kick(String)): this.myParser.__Tag == com/dmdirc/parser/irc/IRCParser
    //#pre[21] (void kick(String)): init'ed(this.myParser.out)
    //#pre[2] (void kick(String)): (soft) init'ed(this.myParser.stringConverter)
    //#pre[14] (void kick(String)): (soft) this.myParser.cMyself != null
    //#pre[15] (void kick(String)): (soft) init'ed(this.myParser.currentSocketState)
    //#pre[16] (void kick(String)): (soft) this.myParser.hChanModesOther != null
    //#pre[17] (void kick(String)): (soft) this.myParser.hChannelList != null
    //#pre[19] (void kick(String)): (soft) this.myParser.myCallbackManager != null
    //#pre[20] (void kick(String)): (soft) this.myParser.myCallbackManager.callbackHash != null
    //#post(void kick(String)): init'ed(java.lang.String:substring(...)._tainted)
    //#post(void kick(String)): possibly_updated(this.myParser.cMyself.myAwayReason)
    //#post(void kick(String)): this.myParser.stringConverter == One-of{old this.myParser.stringConverter, &new IRCStringConverter(getIRCStringConverter#1)}
    //#post(void kick(String)): init'ed(this.myParser.stringConverter)
    //#post(void kick(String)): new IRCStringConverter(getIRCStringConverter#1) num objects <= 1
    //#post(void kick(String)): new char[](IRCStringConverter#1) num objects == new IRCStringConverter(getIRCStringConverter#1) num objects
    //#post(void kick(String)): new char[](IRCStringConverter#2) num objects == new IRCStringConverter(getIRCStringConverter#1) num objects
    //#post(void kick(String)): init'ed(new IRCStringConverter(getIRCStringConverter#1).__Tag)
    //#post(void kick(String)): init'ed(new IRCStringConverter(getIRCStringConverter#1).limit)
    //#post(void kick(String)): init'ed(new IRCStringConverter(getIRCStringConverter#1).lowercase)
    //#post(void kick(String)): init'ed(new IRCStringConverter(getIRCStringConverter#1).uppercase)
    //#post(void kick(String)): init'ed(new char[](IRCStringConverter#1).length)
    //#post(void kick(String)): possibly_updated(new char[](IRCStringConverter#1)[0..65_535])
    //#post(void kick(String)): init'ed(new char[](IRCStringConverter#2).length)
    //#post(void kick(String)): possibly_updated(new char[](IRCStringConverter#2)[0..65_567])
    //#unanalyzed(void kick(String)): Effects-of-calling:java.lang.String:toCharArray
    //#unanalyzed(void kick(String)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void kick(String)): Effects-of-calling:java.lang.String
    //#unanalyzed(void kick(String)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void kick(String)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void kick(String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void kick(String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void kick(String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void kick(String)): Effects-of-calling:java.lang.String:indexOf
    //#unanalyzed(void kick(String)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void kick(String)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void kick(String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void kick(String)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void kick(String)): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void kick(String)): Effects-of-calling:java.lang.Byte:byteValue
    //#unanalyzed(void kick(String)): Effects-of-calling:doSendString
    //#unanalyzed(void kick(String)): Effects-of-calling:java.lang.String:toLowerCase
    //#unanalyzed(void kick(String)): Effects-of-calling:java.lang.RuntimeException
    //#unanalyzed(void kick(String)): Effects-of-calling:call
    //#unanalyzed(void kick(String)): Effects-of-calling:java.lang.Boolean:valueOf
    //#unanalyzed(void kick(String)): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void kick(String)): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void kick(String)): Effects-of-calling:java.io.PrintWriter:printf
    //#unanalyzed(void kick(String)): Effects-of-calling:setAwayReason
    //#unanalyzed(void kick(String)): Effects-of-calling:java.util.LinkedList
    //#unanalyzed(void kick(String)): Effects-of-calling:getListModeQueue
    //#unanalyzed(void kick(String)): Effects-of-calling:java.util.LinkedList:contains
    //#unanalyzed(void kick(String)): Effects-of-calling:java.util.Queue:offer
    //#unanalyzed(void kick(String)): Effects-of-calling:java.util.LinkedList:offer
    //#unanalyzed(void kick(String)): Effects-of-calling:java.lang.System:currentTimeMillis
	}
    //#ChannelClientInfo.java:199: end of method: void com.dmdirc.parser.irc.ChannelClientInfo.kick(String)
	
	/**
	 * Get the "Complete" String Value of ChannelClientInfo (ie @+Nickname).
	 *
	 * @return String Value of user (inc prefix) (ie @+Nickname)
	 */
	public String toFullString() { return this.getChanModeStr(true) + this.getNickname(); }	
    //#ChannelClientInfo.java:206: method: String com.dmdirc.parser.irc.ChannelClientInfo.toFullString()
    //#input(String toFullString()): __Descendant_Table[com/dmdirc/parser/irc/ChannelClientInfo]
    //#input(String toFullString()): __Descendant_Table[others]
    //#input(String toFullString()): __Dispatch_Table.getChanMode()J
    //#input(String toFullString()): __Dispatch_Table.getChanModeStr(Z)Ljava/lang/String;
    //#input(String toFullString()): __Dispatch_Table.getNickname()Ljava/lang/String;
    //#input(String toFullString()): this
    //#input(String toFullString()): this.__Tag
    //#input(String toFullString()): this.cClient
    //#input(String toFullString()): this.cClient.sNickname
    //#input(String toFullString()): this.cClient.sNickname._tainted
    //#input(String toFullString()): this.myParser
    //#input(String toFullString()): this.myParser.hPrefixMap
    //#input(String toFullString()): this.myParser.hPrefixModes
    //#input(String toFullString()): this.myParser.nNextKeyPrefix
    //#input(String toFullString()): this.nModes
    //#output(String toFullString()): java.lang.StringBuilder:toString(...)._tainted
    //#output(String toFullString()): return_value
    //#new obj(String toFullString()): java.lang.StringBuilder:toString(...)
    //#pre[2] (String toFullString()): this.__Tag == com/dmdirc/parser/irc/ChannelClientInfo
    //#pre[3] (String toFullString()): this.cClient != null
    //#pre[4] (String toFullString()): init'ed(this.cClient.sNickname)
    //#pre[6] (String toFullString()): this.myParser != null
    //#pre[9] (String toFullString()): init'ed(this.myParser.nNextKeyPrefix)
    //#pre[10] (String toFullString()): init'ed(this.nModes)
    //#pre[7] (String toFullString()): (soft) this.myParser.hPrefixMap != null
    //#pre[8] (String toFullString()): (soft) this.myParser.hPrefixModes != null
    //#post(String toFullString()): java.lang.StringBuilder:toString(...)._tainted == this.cClient.sNickname._tainted
    //#post(String toFullString()): init'ed(java.lang.StringBuilder:toString(...)._tainted)
    //#post(String toFullString()): return_value == &java.lang.StringBuilder:toString(...)
    //#unanalyzed(String toFullString()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(String toFullString()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(String toFullString()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(String toFullString()): Effects-of-calling:java.util.Map:keySet
    //#unanalyzed(String toFullString()): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(String toFullString()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(String toFullString()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(String toFullString()): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(String toFullString()): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(String toFullString()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(String toFullString()): Effects-of-calling:java.lang.Long:longValue
    //#ChannelClientInfo.java:206: end of method: String com.dmdirc.parser.irc.ChannelClientInfo.toFullString()

}

    //#output(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Descendant_Table[com/dmdirc/parser/irc/ChannelClientInfo]
    //#output(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.getChanMode()J
    //#output(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.getChanModeStr(Z)Ljava/lang/String;
    //#output(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.getChannel()Lcom/dmdirc/parser/irc/ChannelInfo;
    //#output(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.getClient()Lcom/dmdirc/parser/irc/ClientInfo;
    //#output(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.getImportantMode()Ljava/lang/String;
    //#output(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.getImportantModePrefix()Ljava/lang/String;
    //#output(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.getImportantModeValue()J
    //#output(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.getMap()Ljava/util/Map;
    //#output(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.getNickname()Ljava/lang/String;
    //#output(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.kick(Ljava/lang/String;)V
    //#output(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.setChanMode(J)V
    //#output(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.setMap(Ljava/util/Map;)V
    //#output(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.toFullString()Ljava/lang/String;
    //#output(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.toString()Ljava/lang/String;
    //#post(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Descendant_Table[com/dmdirc/parser/irc/ChannelClientInfo] == &__Dispatch_Table
    //#post(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.getChanMode()J == &getChanMode
    //#post(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.getChanModeStr(Z)Ljava/lang/String; == &getChanModeStr
    //#post(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.getChannel()Lcom/dmdirc/parser/irc/ChannelInfo; == &getChannel
    //#post(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.getClient()Lcom/dmdirc/parser/irc/ClientInfo; == &getClient
    //#post(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.getImportantMode()Ljava/lang/String; == &getImportantMode
    //#post(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.getImportantModePrefix()Ljava/lang/String; == &getImportantModePrefix
    //#post(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.getImportantModeValue()J == &getImportantModeValue
    //#post(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.getMap()Ljava/util/Map; == &getMap
    //#post(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.getNickname()Ljava/lang/String; == &getNickname
    //#post(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.kick(Ljava/lang/String;)V == &kick
    //#post(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.setChanMode(J)V == &setChanMode
    //#post(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.setMap(Ljava/util/Map;)V == &setMap
    //#post(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.toFullString()Ljava/lang/String; == &toFullString
    //#post(com.dmdirc.parser.irc.ChannelClientInfo__static_init): __Dispatch_Table.toString()Ljava/lang/String; == &toString
    //#ChannelClientInfo.java:: end of method: com.dmdirc.parser.irc.ChannelClientInfo.com.dmdirc.parser.irc.ChannelClientInfo__static_init
    //#ChannelClientInfo.java:: end of class: com.dmdirc.parser.irc.ChannelClientInfo
