code: func (c *Challenge) Solve(authz acme.Authorization) error {
  	domain := authz.Identifier.Value
  	log.Infof("[%s] acme: Trying to solve TLS-ALPN-01", challenge.GetTargetedDomain(authz))
  
  	chlng, err := challenge.FindChallenge(challenge.TLSALPN01, authz)
  	if err != nil {
  		return err
  	}
  
  	// Generate the Key Authorization for the challenge
  	keyAuth, err := c.core.GetKeyAuthorization(chlng.Token)
  	if err != nil {
  		return err
  	}
  
  	err = c.provider.Present(domain, chlng.Token, keyAuth)
  	if err != nil {
  		return fmt.Errorf("[%s] acme: error presenting token: %v", challenge.GetTargetedDomain(authz), err)
  	}
  	defer func() {
  		err := c.provider.CleanUp(domain, chlng.Token, keyAuth)
  		if err != nil {
  			log.Warnf("[%s] acme: error cleaning up: %v", challenge.GetTargetedDomain(authz), err)
  		}
  	}()
  
  	chlng.KeyAuthorization = keyAuth
  	return c.validate(c.core, domain, chlng)
  }
docs: // Solve manages the provider to validate and solve the challenge.