Program: 45081
Project: 45081
Buggy source:
private void handleUserIdleness(UserIdlenessEvent event){
  Aggregator aggregator=Aggregator.getInstance();
  Time idlenessDuration=event.getDuration();
  Time now=event.getScheduledTime();
  Time currentStateActualDuration=now.minus(currentStateStartTime);
  if (currentStateName.equals(ShutdownEvent.EVENT_NAME)) {
    aggregator.aggregateShutdownDuration(getId(),currentStateActualDuration);
  }
 else   if (currentStateName.equals(SleepEvent.EVENT_NAME)) {
    aggregator.aggregateSleepingDuration(getId(),currentStateActualDuration);
  }
 else   if (currentStateName.equals(UserActivityEvent.EVENT_NAME)) {
    aggregator.aggregateActiveDuration(getId(),currentStateActualDuration);
  }
 else   if (currentStateName.equals(UserIdlenessEvent.EVENT_NAME)) {
    aggregateIdlenessPeriod(currentStateActualDuration);
  }
  currentStateName=UserIdlenessEvent.EVENT_NAME;
  currentStateStartTime=now;
  if (idlenessDuration.isEarlierThan(timeBeforeSleep)) {
    supposedCurrentStateEndTime=currentStateStartTime.plus(event.getDuration());
  }
 else {
    Time bedTime=now.plus(timeBeforeSleep);
    Time sleepDuration=now.plus(idlenessDuration).minus(bedTime);
    if (!sleepDuration.isEarlierThan(SLEEP_TRANSITION_DURATION.times(2))) {
      send(new SleepEvent(this,bedTime,sleepDuration));
      supposedCurrentStateEndTime=currentStateStartTime.plus(timeBeforeSleep);
    }
 else {
      supposedCurrentStateEndTime=currentStateStartTime.plus(event.getDuration());
    }
  }
  handlePendingFileSystemActivityEvents();
}

Fixed version (ground truth):
private void handleUserIdleness(UserIdlenessEvent event){
  Aggregator aggregator=Aggregator.getInstance();
  Time idlenessDuration=event.getDuration();
  Time now=event.getScheduledTime();
  Time currentStateActualDuration=now.minus(currentStateStartTime);
  if (currentStateName.equals(ShutdownEvent.EVENT_NAME)) {
    aggregator.aggregateShutdownDuration(getId(),currentStateActualDuration);
  }
 else   if (currentStateName.equals(SleepEvent.EVENT_NAME)) {
    aggregator.aggregateSleepingDuration(getId(),currentStateActualDuration);
  }
 else   if (currentStateName.equals(UserActivityEvent.EVENT_NAME)) {
    aggregator.aggregateActiveDuration(getId(),currentStateActualDuration);
  }
 else   if (currentStateName.equals(UserIdlenessEvent.EVENT_NAME)) {
    aggregateIdlenessPeriod(currentStateActualDuration);
  }
  currentStateName=UserIdlenessEvent.EVENT_NAME;
  currentStateStartTime=now;
  if (idlenessDuration.isEarlierThan(timeBeforeSleep)) {
    supposedCurrentStateEndTime=currentStateStartTime.plus(event.getDuration());
  }
 else {
    Time bedTime=now.plus(timeBeforeSleep);
    Time sleepDuration=now.plus(idlenessDuration).minus(bedTime);
    if (!sleepDuration.isEarlierThan(SLEEP_TRANSITION_DURATION.times(2))) {
      System.out.println("String_Node_Str" + bedTime + "String_Node_Str"+ getId());
      send(new SleepEvent(this,bedTime,sleepDuration));
      supposedCurrentStateEndTime=currentStateStartTime.plus(timeBeforeSleep);
    }
 else {
      supposedCurrentStateEndTime=currentStateStartTime.plus(event.getDuration());
    }
  }
  handlePendingFileSystemActivityEvents();
}