code: func (n *Manager) ApplyConfig(conf *config.Config) error {
  	n.mtx.Lock()
  	defer n.mtx.Unlock()
  
  	n.opts.ExternalLabels = conf.GlobalConfig.ExternalLabels
  	n.opts.RelabelConfigs = conf.AlertingConfig.AlertRelabelConfigs
  
  	amSets := make(map[string]*alertmanagerSet)
  
  	for _, cfg := range conf.AlertingConfig.AlertmanagerConfigs {
  		ams, err := newAlertmanagerSet(cfg, n.logger)
  		if err != nil {
  			return err
  		}
  
  		ams.metrics = n.metrics
  
  		// The config hash is used for the map lookup identifier.
  		b, err := json.Marshal(cfg)
  		if err != nil {
  			return err
  		}
  		amSets[fmt.Sprintf("%x", md5.Sum(b))] = ams
  	}
  
  	n.alertmanagers = amSets
  
  	return nil
  }
docs: // ApplyConfig updates the status state as the new config requires.