code: func decodeTemplateID(templateID string) (*chainhash.Hash, int64, error) {
  	fields := strings.Split(templateID, "-")
  	if len(fields) != 2 {
  		return nil, 0, errors.New("invalid longpollid format")
  	}
  
  	prevHash, err := chainhash.NewHashFromStr(fields[0])
  	if err != nil {
  		return nil, 0, errors.New("invalid longpollid format")
  	}
  	lastGenerated, err := strconv.ParseInt(fields[1], 10, 64)
  	if err != nil {
  		return nil, 0, errors.New("invalid longpollid format")
  	}
  
  	return prevHash, lastGenerated, nil
  }
docs: // decodeTemplateID decodes an ID that is used to uniquely identify a block
  // template.  This is mainly used as a mechanism to track when to update clients
  // that are using long polling for block templates.  The ID consists of the
  // previous block hash for the associated template and the time the associated
  // template was generated.