Program: 72978
Project: 72978
Buggy source:
/** 
 * Initiate a send of the specified token to the specified receiver. This method will schedule a refiring of this actor if there is not one already scheduled.
 * @param source Sender of the token.
 * @param receiver The receiver to send to.
 * @param token The token to send.
 * @exception IllegalActionException If the refiring request fails.
 */
public void sendToken(Receiver source,Receiver receiver,Token token) throws IllegalActionException {
  if (getDirector() instanceof DEDirector && token == null) {
    return;
  }
  Time currentTime=getDirector().getModelTime();
  if (_nextTimeFree == null || _tokens.size() == 0 || currentTime.compareTo(_nextTimeFree) != 0 || receiver != _nextReceiver) {
    if (getDirector() instanceof FixedPointDirector) {
      receiver.put(null);
    }
  }
  Token tokenToSend=_receiversAndTokensToSendTo.get(receiver);
  if (tokenToSend != null) {
    if (!tokenToSend.equals(token)) {
      throw new IllegalActionException(this,receiver.getContainer(),"String_Node_Str" + tokenToSend + "String_Node_Str"+ token+ "String_Node_Str");
    }
  }
 else {
    if (token != null) {
      _receiversAndTokensToSendTo.put(receiver,token);
      _tempReceiverQueue.put(receiver);
      if (!(getDirector() instanceof FixedPointDirector)) {
        _tokens.put(new Object[]{receiver,token});
        _tokenCount++;
        sendQMTokenEvent((Actor)source.getContainer().getContainer(),0,_tokenCount,EventType.RECEIVED);
        if (_tokens.size() == 1) {
          _scheduleRefire();
        }
      }
    }
  }
  if (_debugging) {
    _debug("String_Node_Str" + getDirector().getModelTime() + "String_Node_Str"+ receiver.getContainer().getFullName()+ "String_Node_Str"+ token);
  }
}

Fixed version (ground truth):
/** 
 * Initiate a send of the specified token to the specified receiver. This method will schedule a refiring of this actor if there is not one already scheduled.
 * @param source Sender of the token.
 * @param receiver The receiver to send to.
 * @param token The token to send.
 * @exception IllegalActionException If the refiring request fails.
 */
public void sendToken(Receiver source,Receiver receiver,Token token) throws IllegalActionException {
  if (getDirector() instanceof DEDirector && token == null) {
    return;
  }
  Time currentTime=getDirector().getModelTime();
  if (_nextTimeFree == null || _tokens.size() == 0 || currentTime.compareTo(_nextTimeFree) != 0 || receiver != _nextReceiver) {
    if (getDirector() instanceof FixedPointDirector) {
      receiver.put(null);
    }
  }
  Token tokenToSend=_receiversAndTokensToSendTo.get(receiver);
  if (tokenToSend != null) {
    if (!tokenToSend.equals(token)) {
      throw new IllegalActionException(this,receiver.getContainer(),"String_Node_Str" + tokenToSend + "String_Node_Str"+ token+ "String_Node_Str");
    }
  }
 else {
    if (token != null) {
      _receiversAndTokensToSendTo.put(receiver,token);
      _tempReceiverQueue.put(receiver);
      if (!(getDirector() instanceof FixedPointDirector)) {
        _tokens.put(new Object[]{receiver,token});
        _tokenCount++;
        sendQMTokenEvent((Actor)source.getContainer().getContainer(),0,_tokenCount,EventType.RECEIVED);
        if (_tokens.size() == 1) {
          _scheduleRefire();
        }
        _receiversAndTokensToSendTo.clear();
      }
    }
  }
  if (_debugging) {
    _debug("String_Node_Str" + getDirector().getModelTime() + "String_Node_Str"+ receiver.getContainer().getFullName()+ "String_Node_Str"+ token);
  }
}