text: import AppKit
  import Carbon
  
  public final class HotKey {
      // MARK: - Types
  
      public typealias Handler = () -> Void
  
      // MARK: - Properties
  
      let identifier = UUID()
  
      public let keyCombo: KeyCombo
      public var keyDownHandler: Handler?
      public var keyUpHandler: Handler?
      public var isPaused = false {
          didSet {
              if isPaused {
                  HotKeysController.unregister(self)
              } else {
                  HotKeysController.register(self)
              }
          }
      }
  
      // MARK: - Initializers
  
      public init(keyCombo: KeyCombo, keyDownHandler: Handler? = nil, keyUpHandler: Handler? = nil) {
          self.keyCombo = keyCombo
          self.keyDownHandler = keyDownHandler
          self.keyUpHandler = keyUpHandler
  
          HotKeysController.register(self)
      }
  
      public convenience init(carbonKeyCode: UInt32, carbonModifiers: UInt32, keyDownHandler: Handler? = nil, keyUpHandler: Handler? = nil) {
          let keyCombo = KeyCombo(carbonKeyCode: carbonKeyCode, carbonModifiers: carbonModifiers)
          self.init(keyCombo: keyCombo, keyDownHandler: keyDownHandler, keyUpHandler: keyUpHandler)
      }
  
      public convenience init(key: Key, modifiers: NSEvent.ModifierFlags, keyDownHandler: Handler? = nil, keyUpHandler: Handler? = nil) {
          let keyCombo = KeyCombo(key: key, modifiers: modifiers)
          self.init(keyCombo: keyCombo, keyDownHandler: keyDownHandler, keyUpHandler: keyUpHandler)
      }
  
      deinit {
          HotKeysController.unregister(self)
      }
  }
  