if (redundant()) { size = Address.ZERO; return; }
    private void calculateSize()     {	if (redundant()) {	    size = Address.ZERO;	    return;	}	    	//we'll make it 32 byte aligned	if (source.isFilterTrace()) {	    //the size is the max of the multiplicities	    //times the push rate	    FilterInfo fi = FilterInfo.getFilterInfo((FilterTraceNode)source);	    int maxItems = Math.max(fi.initMult,				    Math.max(fi.primePump, fi.steadyMult));	    maxItems *= fi.push;	    //account for the initpush	    	    if (fi.push < fi.prePush)		maxItems += (fi.prePush - fi.push);	    size = (Address.ZERO.add(maxItems)).add32Byte(0);	}	else if (dest.isFilterTrace())	{	    //this is not a perfect estimation but who cares	    FilterInfo fi = FilterInfo.getFilterInfo((FilterTraceNode)dest);	    int maxItems = Math.max(fi.steadyMult,				    Math.max(fi.initMult, fi.primePump));	   	    maxItems *= fi.pop;	    //now account for initpop, initpeek, peek	    maxItems += (fi.prePeek + fi.prePop + fi.prePeek);	    	    size = (Address.ZERO.add(maxItems)).add32Byte(0);	}	else {	    InputTraceNode in = (InputTraceNode)dest;	    OutputTraceNode out = (OutputTraceNode)source;	    //max of the buffer size in the various stages...	    int maxItems = Math.max(Util.steadyBufferSize(in, out),				    Math.max(Util.initBufferSize(in, out),					     Util.primePumpBufferSize(in, out)));	    size = (Address.ZERO.add(maxItems)).add32Byte(0);	}    }