<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def BuildFilterFindSpecs( self, artifact_definitions_path, custom_artifacts_path, knowledge_base_object, artifact_filter_names=None, filter_file_path=None):
 """Builds find specifications from artifacts or filter file if available. Args: artifact_definitions_path (str):
 path to artifact definitions file. custom_artifacts_path (str):
 path to custom artifact definitions file. knowledge_base_object (KnowledgeBase):
 knowledge base. artifact_filter_names (Optional[list[str]]):
 names of artifact definitions that are used for filtering file system and Windows Registry key paths. filter_file_path (Optional[str]):
 path of filter file. Returns: list[dfvfs.FindSpec]: find specifications for the file source type. Raises: InvalidFilter: if no valid FindSpecs are built. """

    environment_variables = knowledge_base_object.GetEnvironmentVariables()
    find_specs = None
    if artifact_filter_names:
      logger.debug(
          'building find specification based on artifacts: {0:s}'.format(
              ', '.join(artifact_filter_names)))

      artifacts_registry_object = BaseEngine.BuildArtifactsRegistry(
          artifact_definitions_path, custom_artifacts_path)
      self._artifacts_filter_helper = (
          artifact_filters.ArtifactDefinitionsFilterHelper(
              artifacts_registry_object, knowledge_base_object))
      self._artifacts_filter_helper.BuildFindSpecs(
          artifact_filter_names, environment_variables=environment_variables)

      # If the user selected Windows Registry artifacts we have to ensure
      # the Windows Registry files are parsed.
      if self._artifacts_filter_helper.registry_find_specs:
        self._artifacts_filter_helper.BuildFindSpecs(
            self._WINDOWS_REGISTRY_FILES_ARTIFACT_NAMES,
            environment_variables=environment_variables)

      find_specs = self._artifacts_filter_helper.file_system_find_specs

      if not find_specs:
        raise errors.InvalidFilter(
            'No valid file system find specifications were built from '
            'artifacts.')

    elif filter_file_path:
      logger.debug(
          'building find specification based on filter file: {0:s}'.format(
              filter_file_path))

      filter_file_object = filter_file.FilterFile(filter_file_path)
      find_specs = filter_file_object.BuildFindSpecs(
          environment_variables=environment_variables)

      if not find_specs:
        raise errors.InvalidFilter(
            'No valid file system find specifications were built from filter '
            'file.')

    return find_specs