code: func DecodeBytes(token string, key interface{}) ([]byte, map[string]interface{}, error) {
  	parts, err := compact.Parse(token)
  
  	if err != nil {
  		return nil, nil, err
  	}
  
  	if len(parts) == 3 {
  		return verify(parts, key)
  	}
  
  	if len(parts) == 5 {
  		return decrypt(parts, key)
  	}
  
  	return nil, nil, errors.New(fmt.Sprintf("jwt.DecodeBytes() expects token of 3 or 5 parts, but was given: %v parts", len(parts)))
  }
docs: // Decode verifies, decrypts and decompresses given JWT token using management key.
  // Management key is of different type for different key management or signing algorithms, see specific alg implementation documentation.
  //
  // Returns decoded payload as a raw bytes, headers and not nil error if something went wrong.