Copyright (c) 2003-2005 Tom Wu