docs: def _merge_points(self, function_address):
          """
          Return the ordered merge points for a specific function.
  
          :param int function_address: Address of the querying function.
          :return: A list of sorted merge points (addresses).
          :rtype: list
          """
  
          # we are entering a new function. now it's time to figure out how to optimally traverse the control flow
          # graph by generating the sorted merge points
          try:
              new_function = self.kb.functions[function_address]
          except KeyError:
              # the function does not exist
              return [ ]
  
          if function_address not in self._function_merge_points:
              ordered_merge_points = CFGUtils.find_merge_points(function_address, new_function.endpoints,
                                                             new_function.graph)
              self._function_merge_points[function_address] = ordered_merge_points
  
          return self._function_merge_points[function_address]