anchor.diff:  
     @override
     String toString() => '$description $mode';
  +
  +  /// Called when this pin's state has changed.
  +  /// Forward the event to listeners after filtering duplicate interrupts.
  +  void _handleInterrupt(int newValue) {
  +    if (_events != null && _lastInterruptValue != newValue) {
  +      _lastInterruptValue = newValue;
  +      _events.add(new PinEvent(this, newValue));
  +    }
  +  }
   }
   
   /// An event indicating that a pin has changed state.
  
positive.code:     return pin;
    }
  
    /// An event indicating the given pin's state has changed.
    void _handleInterrupt(message) {
      if (message is int) {
        int value = (message & GpioHardware.pinValueMask) != 0 ? 1 : 0;
        int pinNum = message & GpioHardware.pinNumMask;
        if (0 <= pinNum && pinNum < _pins.length) {
          var pin = _pins[pinNum];
          if (pin._events != null) {
            pin._events.add(new PinEvent(pin, value));
          }
        }
      }
    }
  
negative.code:   /// The event stream controller or null if none.
    StreamController<PinEvent> _events;
  
    /// The pin's value at the time of the last interrupt.
    /// This is used to filter duplicate interrupts.
    int _lastInterruptValue;
  
    Pin._(this.pinNum, PinMode mode) {
      this.mode = mode;
    }
  