code: func newCachedMutexedWarmedUpAuth(underlying temporaryCredentialGenerator) (Auth, error) {
  	rv := &cachedMutexedAuth{
  		underlying: underlying,
  	}
  	_, err := rv.KeyForSigning(time.Now())
  	if err != nil {
  		return nil, err
  	}
  	return rv, nil
  }
docs: // newCachedMutexedWarmedUpAuth wraps another auth object
  // with a cache that is thread-safe, and will always attempt
  // to fetch credentials when initialised.
  // The underlying Auth object will only be called if the time is
  // past the last returned expiration time.