code: def merge(final, update, path=None):
          
          if final is None:
              return None
          if update is None:
              return final
          if path is None:
              path = []
  
          for key in update:
              if key in final:
                  if isinstance(final[key], dict) and isinstance(update[key], dict):
                      EBUtils.merge(final[key], update[key], path + [str(key)])
                  elif final[key] == update[key]:
                      pass  # same leaf value
                  else:
                      raise ValueError('Conflict at %s' % '.'.join(path + [str(key)]))
              else:
                  final[key] = update[key]
          return final
docs: Deep merges dictionary object b into a.
          :param final:
          :param update:
          :param path: 
          :return: