code: func (w *Wallet) Status() (string, error) {
  	w.lock.Lock()
  	defer w.lock.Unlock()
  
  	// If the card is not paired, we can only wait
  	if !w.session.paired() {
  		return "Unpaired, waiting for pairing password", nil
  	}
  	// Yay, we have an encrypted session, retrieve the actual status
  	status, err := w.session.walletStatus()
  	if err != nil {
  		return fmt.Sprintf("Failed: %v", err), err
  	}
  	switch {
  	case !w.session.verified && status.PinRetryCount == 0:
  		return fmt.Sprintf("Blocked, waiting for PUK and new PIN"), nil
  	case !w.session.verified:
  		return fmt.Sprintf("Locked, waiting for PIN (%d attempts left)", status.PinRetryCount), nil
  	case !status.Initialized:
  		return fmt.Sprintf("Empty, waiting for initialization"), nil
  	default:
  		return fmt.Sprintf("Online"), nil
  	}
  }
docs: // Status returns a textual status to aid the user in the current state of the
  // wallet. It also returns an error indicating any failure the wallet might have
  // encountered.