code: func merge(updateOld, updateNew []*endpoint.Endpoint) []*endpoint.Endpoint {
  	findMatch := func(template *endpoint.Endpoint) *endpoint.Endpoint {
  		for _, new := range updateNew {
  			if template.DNSName == new.DNSName &&
  				template.RecordType == new.RecordType {
  				return new
  			}
  		}
  		return nil
  	}
  
  	var result []*endpoint.Endpoint
  	for _, old := range updateOld {
  		matchingNew := findMatch(old)
  		if matchingNew == nil {
  			// no match, shouldn't happen
  			continue
  		}
  
  		if !matchingNew.Targets.Same(old.Targets) {
  			// new target: always update, TTL will be overwritten too if necessary
  			result = append(result, matchingNew)
  			continue
  		}
  
  		if matchingNew.RecordTTL != 0 && matchingNew.RecordTTL != old.RecordTTL {
  			// same target, but new non-zero TTL set in k8s, must update
  			// probably would happen only if there is a bug in the code calling the provider
  			result = append(result, matchingNew)
  		}
  	}
  
  	return result
  }
docs: // merge produces a singe list of records that can be used as a replacement.
  // Dyn allows to replace all records with a single call
  // Invariant: the result contains only elements from the updateNew parameter