<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def download_supplementary_files(self, directory="./", download_sra=True, email=None, sra_kwargs=None):
 """Download all supplementary data available for the sample. Args: directory (:obj:`str`):
 Directory to download the data (in this directory function will create new directory with the files). Defaults to "./". download_sra (:obj:`bool`):
 Indicates whether to download SRA raw data too. Defaults to True. email (:obj:`str`):
 E-mail that will be provided to the Entrez. It is mandatory if download_sra=True. Defaults to None. sra_kwargs (:obj:`dict`, optional):
 Kwargs passed to the download_SRA method. Defaults to None. Returns: :obj:`dict`: A key-value pair of name taken from the metadata and paths downloaded, in the case of SRA files the key is ``SRA``. """

        directory_path = os.path.abspath(
            os.path.join(directory, "%s_%s_%s" % (
                'Supp',
                self.get_accession(),
                # the directory name cannot contain many of the signs
                re.sub(r'[\s\*\?\(\),\.;]', '_', self.metadata['title'][0]))))

        utils.mkdir_p(os.path.abspath(directory_path))
        downloaded_paths = dict()
        if sra_kwargs is None:
            sra_kwargs = {}
        # Possible erroneous values that could be identified and skipped right
        # after
        blacklist = ('NONE',)
        for metakey, metavalue in iteritems(self.metadata):
            if 'supplementary_file' in metakey:
                assert len(metavalue) == 1 and metavalue != ''
                if metavalue[0] in blacklist:
                    logger.warn("%s value is blacklisted as '%s' - skipping" %
                                (metakey, metavalue[0]))
                    continue
                # SRA will be downloaded elsewhere
                if 'sra' not in metavalue[0]:
                    download_path = os.path.abspath(os.path.join(
                        directory,
                        os.path.join(directory_path,
                                     metavalue[0].split("/")[-1])))
                    try:
                        utils.download_from_url(metavalue[0], download_path)
                        downloaded_paths[metavalue[0]] = download_path
                    except Exception as err:
                        logger.error(
                            "Cannot download %s supplementary file (%s)" % (
                                self.get_accession(), err))
        if download_sra:
            try:
                downloaded_files = self.download_SRA(
                    email,
                    directory=directory,
                    **sra_kwargs)
                downloaded_paths.update(downloaded_files)
            except Exception as err:
                logger.error("Cannot download %s SRA file (%s)" % (
                    self.get_accession(), err))
        return downloaded_paths