code: def _merge_catalog_definitions(dict1, dict2):
      
      if not dict2:
          return dict1.copy()
  
      outdict = {}
      # Use dict1 as a template
      for k, v in dict1.items():
          if k not in dict2 and isinstance(v, dict):
              outdict[k] = v.copy()
              continue
          if k not in dict2 and isinstance(v, list):
              outdict[k] = v[:]
              continue
          if k == 'indexes':
              sdict1 = v.copy()
              sdict2 = dict2[k].copy()
              sdict1.update(sdict2)
              outdict[k] = sdict1
              continue
          if k in ['types', 'columns']:
              list1 = v
              list2 = dict2[k]
              outdict[k] = list(set(list1 + list2))
              continue
          if isinstance(v, dict):
              sdict1 = v.copy()
              sdict2 = dict2[k].copy()
              outdict[k] = _merge_catalog_definitions(sdict1, sdict2)
  
      # Now, add the rest of keys from dict2 that don't exist in dict1
      for k, v in dict2.items():
          if k in outdict:
              continue
          outdict[k] = v.copy()
      return outdict
docs: Merges two dictionaries that represent catalogs definitions. The first
      dictionary contains the catalogs structure by default and the second dict
      contains additional information. Usually, the former is the Bika LIMS
      catalogs definition and the latter is the catalogs definition of an add-on
      The structure of each dict as follows:
          {
              CATALOG_ID: {
                  'types':   ['ContentType', ...],
                  'indexes': {
                      'UID': 'FieldIndex',
                      ...
                  },
                  'columns': [
                      'Title',
                      ...
                  ]
              }
          }
  
      :param dict1: The dictionary to be used as the main template (defaults)
      :type dict1: dict
      :param dict2: The dictionary with additional information
      :type dict2: dict
      :returns: A merged dict with the same structure as the dicts passed in
      :rtype: dict