private FlatNode whoShouldFire(FlatNode start, HashMap executionCounts,
private FlatNode whoShouldFire(FlatNode current, HashMap executionCounts,
    private FlatNode whoShouldFire(FlatNode start, HashMap executionCounts, 				    SimulationCounter counters)     {	//breadth first search from bottom	HashSet visited = new HashSet();	Vector queue = new Vector();	FlatNode node;	FlatNode mostDownStream = null;				//System.out.println("Starting from " + Namer.getName(start.contents));		queue.add(start);	while (!queue.isEmpty()) {	    node = (FlatNode)queue.get(0);	    visited.add(node);	    if (canFire(node, executionCounts, counters)) {		mostDownStream = node;	    }	    queue.remove(0);	    for (int i = 0; i < node.ways; i++) {		if (!visited.contains(node.edges[i]))			queue.add(node.edges[i]);	    }	}	//no node can fire	return mostDownStream;    }