{"id":20938273,"url":"https://github.com/fedarko/strainflye","last_synced_at":"2025-08-19T11:13:49.191Z","repository":{"id":49743545,"uuid":"428817332","full_name":"fedarko/strainFlye","owner":"fedarko","description":"Pipeline for analyzing (rare) mutations in metagenome-assembled genomes","archived":false,"fork":false,"pushed_at":"2025-04-04T03:46:39.000Z","size":15113,"stargazers_count":11,"open_issues_count":30,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-13T22:40:13.799Z","etag":null,"topics":["bioinformatics","metagenomics","phasing","variant-calling"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fedarko.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-11-16T21:21:40.000Z","updated_at":"2025-04-04T03:46:43.000Z","dependencies_parsed_at":"2024-04-09T21:38:48.005Z","dependency_job_id":null,"html_url":"https://github.com/fedarko/strainFlye","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/fedarko/strainFlye","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fedarko%2FstrainFlye","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fedarko%2FstrainFlye/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fedarko%2FstrainFlye/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fedarko%2FstrainFlye/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fedarko","download_url":"https://codeload.github.com/fedarko/strainFlye/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fedarko%2FstrainFlye/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271143398,"owners_count":24706346,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-19T02:00:09.176Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bioinformatics","metagenomics","phasing","variant-calling"],"created_at":"2024-11-18T22:49:54.963Z","updated_at":"2025-08-19T11:13:49.166Z","avatar_url":"https://github.com/fedarko.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# strainFlye\n\n\u003ca href=\"https://github.com/fedarko/strainFlye/actions/workflows/main.yml\"\u003e\u003cimg src=\"https://github.com/fedarko/strainFlye/actions/workflows/main.yml/badge.svg\" alt=\"strainFlye CI\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://codecov.io/gh/fedarko/strainFlye\"\u003e\u003cimg src=\"https://codecov.io/gh/fedarko/strainFlye/branch/main/graph/badge.svg\" alt=\"Code Coverage\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://anaconda.org/bioconda/strainflye\"\u003e\u003cimg src=\"https://img.shields.io/conda/vn/bioconda/strainflye.svg?color=43b02a\" alt=\"bioconda\" /\u003e\u003c/a\u003e\n\nstrainFlye is a pipeline for calling, analyzing, and phasing rare\nsingle-nucleotide mutations in metagenome-assembled genomes produced from\nlong and accurate reads—for example, PacBio HiFi reads.\n\nThe main inputs to strainFlye are 1) reads and 2) contigs.\nHowever, most steps in the pipeline can be \"jumped to\" if you already have\nother files prepared (e.g. an alignment of reads to contigs, or\nexisting single-nucleotide mutation calls within contigs). See below for a\nflow chart of strainFlye's pipeline (created with\n[Mermaid](https://github.com/mermaid-js/mermaid)); if you have trouble viewing\nthis flow chart, [here are some other ways to view\nit](https://github.com/fedarko/strainFlye/issues/56#issuecomment-1532479959).\n\n```mermaid\nflowchart LR\n    classDef art fill:#acfeb1,stroke:#086408,color:black\n    classDef pgm fill:#88bbff,stroke:#3333aa,color:black\n    classDef ext fill:#ffbb88,stroke:#755237,color:black\n    0((\"Contigs\u003cbr/\u003e(FASTA)\")):::art --\u003e A:::pgm;\n    1((\"Reads\u003cbr/\u003e((gzipped) FASTA\u003cbr/\u003eor FASTQ)\")):::art ---\u003e A\n    2((\"Assembly graph\u003cbr/\u003e(GFA 1)\")):::art -.-\u003e|\"(Optional)\"| A\n    A[strainFlye align] --\u003e 3((\"Alignment of\u003cbr/\u003ereads to contigs\u003cbr/\u003e(Indexed BAM)\")):::art\n    3 --\u003e C[\"strainFlye call p-mutation\u003cbr/\u003e(Call mutations\u003cbr/\u003eusing frequencies)\"]:::pgm\n    0 --\u003e C\n    3 --\u003e D[\"strainFlye call r-mutation\u003cbr/\u003e(Call mutations\u003cbr/\u003eusing read counts)\"]:::pgm\n    0 --\u003e D\n    C --\u003e 4((\"Called mutations\u003cbr/\u003e(Indexed BCF)\")):::art\n    C --\u003e 5((\"Diversity indices\u003cbr/\u003e(TSV)\")):::art\n    D --\u003e 4\n    D --\u003e 5\n    0 --\u003e E[strainFlye fdr estimate]:::pgm\n    3 --\u003e E\n    4 --\u003e E\n    5 -..-\u003e|\"(Optional)\"| E\n    E --\u003e 6((\"FDR estimates\u003cbr/\u003e(TSV)\")):::art\n    E --\u003e 7((\"Number of\u003cbr/\u003emutations / Mb\u003cbr/\u003e(TSV)\")):::art\n    7 --\u003e Z{\"Plotting FDR curves\u003cbr/\u003e(see tutorial)\"}:::ext\n    6 --\u003e Z\n    6 --\u003e F[strainFlye fdr fix]:::pgm\n    4 --\u003e F --\u003e 11((\"Mutations with\u003cbr/\u003efixed FDR\u003cbr/\u003e(Indexed BCF)\")):::art\n    11 --\u003e G[strainFlye spot hot-features]:::pgm\n    8((\"Contig #quot;features#quot;\u003cbr/\u003e[probably genes]\u003cbr/\u003e(GFF3)\")):::art --\u003e G\n    G --\u003e 9((\"Hotspot features\u003cbr/\u003e(TSV)\")):::art\n    11 --\u003e H[strainFlye spot cold-gaps]:::pgm --\u003e 10((\"Coldspot gaps\u003cbr/\u003e(TSV)\")):::art\n    4 -.-\u003e|If desired, you can skip FDR estimation and fixing and use the unfiltered BCF file for downstream analyses| 11\n    11 --\u003e I[strainFlye smooth create]:::pgm --\u003e 12((\"Smoothed and\u003cbr/\u003evirtual reads\u003cbr/\u003e(gzipped FASTA)\")):::art\n    0 --\u003e I\n    3 --\u003e I\n    5 -.-\u003e|\"(Optional)\"| I\n    12 --\u003e J[strainFlye smooth assemble]:::pgm --\u003e 13((\"LJA assemblies\")):::art\n    11 --\u003e K\n    0 --\u003e K[strainFlye link nt]:::pgm --\u003e 14((\"Nucleotide\u003cbr/\u003e(co-)occurrence\u003cbr/\u003einformation\u003cbr/\u003e(Pickle)\")):::art\n    3 --\u003e K\n    14 --\u003e L[strainFlye link graph]:::pgm --\u003e 15((\"Link graphs\u003cbr/\u003e(DOT or Pickle)\")):::art\n    0 --\u003e M[strainFlye matrix count]:::pgm\n    3 --\u003e M\n    8 ---\u003e M\n    M --\u003e 16((\"3-mer count\u003cbr/\u003einformation\u003cbr/\u003e(Pickle)\")):::art\n    16 --\u003e N[strainFlye matrix fill]:::pgm --\u003e 17((\"Mutation matrices\u003cbr/\u003e(TSV or JSON)\")):::art\n    0 --\u003e O[strainFlye dynam covskew]:::pgm --\u003e 18((\"Coverage and\u003cbr/\u003eskew statistics\u003cbr/\u003e(TSV)\")):::art\n    3 --\u003e O\n    2 --\u003e P[strainFlye utils gfa-to-fasta]:::pgm --\u003e 0\n\n```\n\n## Installation\n\nLong story short, strainFlye is an ordinary Python package (currently\nsupporting Python 3.6 and 3.7). strainFlye depends on a few non-Python tools\n(e.g. minimap2, Prodigal, SAMtools), also.\n\n### Installation using conda (recommended)\n\nThe simplest way to install strainFlye is by using\n[conda](https://conda.io/) (or [mamba](https://mamba.readthedocs.io)).\nstrainFlye is available through the [bioconda](https://bioconda.github.io/)\nchannel:\n\n```bash\nconda install -c bioconda strainflye\n```\n\n#### Sidenote: troubleshooting installation problems\n\n- If you run into dependency conflicts when installing strainFlye into an\n  existing conda environment, you may want to just create a new conda environment\n  and install strainFlye into that. (See the \"workaround solution\" given in\n  [this issue](https://github.com/fedarko/strainFlye/issues/70) for an\n  example.)\n\n- If that still doesn't work, you can try installing from source -- see below.\n\n- And if _that_ doesn't work, no worries -- installing this stuff can be finicky.\n  Feel free to open an issue and I'll try to help out.\n\n### Installation from source\n\nPlease see the development documentation ([`CONTRIBUTING.md`](https://github.com/fedarko/strainFlye/blob/main/CONTRIBUTING.md)) for instructions.\n\n### Optional: install LJA in order to run `strainFlye smooth assemble`\n\nstrainFlye's `smooth` module includes two commands. The first,\n`strainFlye smooth create`, creates smoothed and virtual reads for each contig;\nthe second, `strainFlye smooth assemble`, assembles these reads using\n[LJA](https://github.com/AntonBankevich/LJA). LJA is not installed using the\nconda installation instructions above, so—in order to run the\n`strainFlye smooth assemble` command—you will need to\ninstall the LJA software (in particular, the\n[`simple_ec` branch](https://github.com/AntonBankevich/LJA/tree/simple_ec) of\nLJA).\n\nPlease see [LJA's manual](https://github.com/AntonBankevich/LJA/blob/main/docs/lja_manual.md)\nfor the most up-to-date installation instructions. Assuming that you have all\nof LJA's requirements installed, something like the following should work:\n\n```bash\ngit clone https://github.com/AntonBankevich/LJA.git\ncd LJA\ngit checkout simple_ec\ncmake .\nmake\n```\n\n... but this is subject to change as LJA is updated.\n\n## Documentation\n\n### Tutorial\n\n**[This Jupyter Notebook](https://nbviewer.org/github/fedarko/strainFlye/blob/main/docs/SheepGutExample.ipynb)** provides a tutorial demonstrating how to use strainFlye.\n\n### Command-line usage\n\nFirst, make sure you've activated the conda environment into which you\ninstalled strainFlye. From there, you can use strainFlye like any other\ncommand-line tool:\n\n\u003c!-- STARTDOCS --\u003e\n```\nUsage: strainFlye [OPTIONS] COMMAND [ARGS]...\n\n  Pipeline for the analysis of rare mutations in metagenomes.\n\n  Please consult https://github.com/fedarko/strainFlye if you have any\n  questions, comments, etc. about strainFlye. Thank you for using this tool!\n\nOptions:\n  -v, --version  Show the version and exit.\n  -h, --help     Show this message and exit.\n\nCommands:\n  align   Align reads to contigs, and filter the resulting alignment.\n  call    [+] Call mutations in contigs naïvely \u0026 compute diversity indices.\n  fdr     [+] Estimate and fix FDRs for contigs' naïve mutation calls.\n  spot    [+] Identify putative mutational hotspots or coldspots.\n  smooth  [+] Create and assemble smoothed and virtual reads.\n  link    [+] Create link graphs showing co-occurring alleles.\n  matrix  [+] Create codon and amino acid mutation matrices.\n  dynam   [+] Compute simple information about growth dynamics.\n  utils   [+] Miscellaneous utility commands provided with strainFlye.\n```\n\n### Quick descriptions of each strainFlye command\n\nClick on the headers below (e.g. \"**Alignment**\") to show details about the corresponding command(s).\nInput files / folders are listed in parentheses next to each command; optional\ninputs are given in [square brackets]. Parameters are omitted for the sake of brevity.\nFor more details, try running these commands from the terminal (e.g. `strainFlye align --help`).\n\n\u003c!-- for some reason, \u003cstrong\u003e was the only way i found to make summary text bold here successfully:\nhttps://codedragontech.com/createwithcodedragon/how-to-style-html-details-and-summary-tags/ --\u003e\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eAlignment\u003c/strong\u003e\u003c/summary\u003e\n\n- `strainFlye align` (contigs, reads, [GFA]) → BAM\n  \n  - Aligns reads to contigs using [minimap2](https://github.com/lh3/minimap2).\n  - Filters this alignment to remove certain types of problematic alignments.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eNaïve mutation identification, FDR estimation, and FDR fixing\u003c/strong\u003e\u003c/summary\u003e\n\n- `strainFlye call p-mutation` and `strainFlye call r-mutation` (contigs, BAM) → (BCF, diversity indices)\n  - Naïvely calls either _p_-mutations (frequency-based) or _r_-mutations (read-count-based).\n  - Computes diversity indices.\n\n- `strainFlye fdr estimate` (contigs, BAM, BCF, [diversity indices]) → (FDR estimates, # mutations / Mb)\n  - Estimates the FDRs of naïve mutation calls from `strainFlye call` using the target-decoy approach.\n  - Computes FDR estimates, and the number of naïvely called mutations per megabase, for each \"target\" (non-decoy) contig. These values can be used to plot FDR curves showing how the FDR estimate for a target contig varies as _p_ or _r_ varies.\n\n- `strainFlye fdr fix` (BCF, FDR estimates) → BCF\n  - Given a fixed FDR (e.g. _f = 1%_), returns a filtered BCF file with all target contigs' mutations filtered to use a threshold of _p_ or _r_ yielding an FDR estimate ≤ _f_.\n\u003c/details\u003e\n  \n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eHotspot and coldspot identification\u003c/strong\u003e\u003c/summary\u003e\n\n- `strainFlye spot hot-features` (BCF, [GFF3](https://github.com/The-Sequence-Ontology/Specifications/blob/master/gff3.md)) → hotspot TSV\n  - Identifies \"hotspot\" features from the GFF3 file, based on simple configurable thresholds (e.g. to be a \"hotspot,\" a feature must have at least _N_ mutations).\n\n- `strainFlye spot cold-gaps` (BCF) → coldspot TSV\n  - Identifies \"coldspot\" gaps between mutations, considering a gap to be a coldspot if it is at least a certain length.\n  - Assigns a _p_-value to the longest coldspot gap seen in each contig. (Note that the computation of this _p_-value makes a few simplifying assumptions; see the supplemental material of our paper for details.)\n\u003c/details\u003e\n  \n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003ePhasing\u003c/strong\u003e\u003c/summary\u003e\n\n- `strainFlye smooth create` (contigs, BAM, BCF, [diversity indices]) → smoothed and virtual reads\n  - Creates smoothed and virtual reads for each contig. These correspond to the original reads, but modified to remove all differences from the assembled contigs (aside from the mutations in the BCF file).\n\n- `strainFlye smooth assemble` (smoothed and virtual reads) → assemblies\n  - Uses [LJA](https://github.com/AntonBankevich/LJA) to assemble smoothed and virtual reads.\n  - See notes above about installing the `simple_ec` branch of LJA, which we rely on here.\n  - For information on LJA's outputs (assembled sequences, assembly graph, etc.) please see [its manual](https://github.com/AntonBankevich/LJA/blob/main/docs/lja_manual.md).\n\n- `strainFlye link nt` (contigs, BAM, BCF) → nucleotide (co-)occurrence information\n  - Computes nucleotide (co-)occurrence information for each contig.\n  - This information is stored in [pickle](https://docs.python.org/3/library/pickle.html) files.\n\n- `strainFlye link graph` (nucleotide (co-)occurrence information) → link graphs\n  - Converts the output of `strainFlye link nt` into link graphs (one per contig), representing which alleles of a contig tend to co-occur.\n  - Depending on the `-f`/`--output-format` parameter, link graphs are saved to either [DOT](https://en.wikipedia.org/wiki/DOT_(graph_description_language)) files or to [pickle](https://docs.python.org/3/library/pickle.html) files (each pickle file corresponds to a serialized [NetworkX](https://networkx.org) representation of a link graph).\n\u003c/details\u003e\n  \n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eMutation matrices\u003c/strong\u003e\u003c/summary\u003e\n\n- `strainFlye matrix count` (contigs, BAM, [GFF3](https://github.com/The-Sequence-Ontology/Specifications/blob/master/gff3.md)) → 3-mer count information\n  - Counts 3-mers aligned to the codons in the coding sequences (`CDS` or `SO:0000316` features in the GFF3 file) in each contig.\n  - This information is stored in [pickle](https://docs.python.org/3/library/pickle.html) files.\n\n- `strainFlye matrix fill` (3-mer count information) → mutation matrices\n  - Converts the output of `strainFlye matrix count` into codon and amino acid mutation matrices.\n  - Each contig is represented by its own directory, containing four files: a codon mutation matrix, an amino acid mutation matrix, codon reference counts (the number of times we saw a codon in all the coding sequences of a contig, ignoring mutations), and amino acid reference counts.\n  - Depending on the `-f`/`--output-format` parameter, these four files are saved as either TSV or JSON files.\n\u003c/details\u003e\n  \n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eGrowth dynamics\u003c/strong\u003e\u003c/summary\u003e\n\n- `strainFlye dynam covskew` (contigs, BAM) → coverage and skew TSVs\n  \n  - Computes information about binned coverages and GC skews in each contig.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eMiscellaneous utilities\u003c/strong\u003e\u003c/summary\u003e\n\n- `strainFlye utils gfa-to-fasta` (GFA) → FASTA\n  \n  - Converts a GFA 1 file to a FASTA file (and performs some sanity checking on it).\n\n\u003c/details\u003e\n    \n### Development documentation\n\nIf you're interested in making changes to strainFlye's code, please see\n[`CONTRIBUTING.md`](https://github.com/fedarko/strainFlye/blob/main/CONTRIBUTING.md)\nfor some tips on getting started.\n\n## Publication and citation\n\n**An article describing strainFlye is available in _Genome Research_\n[at this link](https://genome.cshlp.org/content/32/11-12/2119).** If you use\nstrainFlye in your work, please cite it! The BibTeX for this article is:\n\n```\n@article{fedarko2022,\n  author={Fedarko, Marcus W and Kolmogorov, Mikhail and Pevzner, Pavel A},\n  title={Analyzing rare mutations in metagenomes assembled using long and accurate reads},\n  journal={Genome Research},\n  publisher={Cold Spring Harbor Laboratory Press},\n  volume={32},\n  number={11-12},\n  pages={2119--2133},\n  year={2022},\n  doi={10.1101/gr.276917.122},\n  url={http://genome.cshlp.org/content/32/11-12/2119.abstract},\n  eprint={http://genome.cshlp.org/content/32/11-12/2119.full.pdf+html}\n}\n```\n\n### Citing \"wrapped tools\" within strainFlye\n\n- If you use `strainFlye align`, please also cite minimap2 ([Li 2018](https://academic.oup.com/bioinformatics/article/34/18/3094/4994778)),\n  which is used by this strainFlye command to perform alignment.\n  (Depending on the version of minimap2 you use, you may also want to cite\n  [Li 2021](https://academic.oup.com/bioinformatics/article/37/23/4572/6384570).)\n\n- If you use `strainFlye smooth assemble`, please also cite LJA\n  ([Bankevich _et al._, 2022](https://www.nature.com/articles/s41587-022-01220-6)),\n  which is used by this strainFlye command to perform assembly.\n\n## Miscellaneous notes about minor details you probably don't need to care about\n\n### Shell injection (only relevant if this is hosted on a web server)\n\nSome of strainFlye's commands use Python's\n[`subprocess` module](https://docs.python.org/3/library/subprocess.html) to run\nnon-Python software: minimap2, samtools, bcftools, Prodigal, LJA, etc.\nMost of the time, we do this using `subprocess.run()` with `shell=False`:\nlong story short, this helps prevent the problem of\n[shell injection](https://en.wikipedia.org/wiki/Code_injection#Shell_injection).\n\nHowever, as of writing, there are two places where strainFlye uses\n`subprocess.run()` with `shell=True`: in `strainFlye align` (when running\nminimap2 and samtools), and in `strainFlye smooth assemble` (when running LJA).\nThis is for convenience's sake, since we allow the user to pass in extra\nparameters to these commands (the `--minimap2-params` option for `strainFlye\nalign`, and the `--lja-params` option for `strainFlye smooth assemble`).\n\nOur use of `shell=True` in these two cases means that it's possible to make\nthese commands do unexpected things (see\n[Python's documentation here](https://docs.python.org/3/library/subprocess.html#security-considerations) for details).\n*This should not be a problem if you are running strainFlye directly.* However,\nif you decide to host strainFlye on a server somewhere (and you allow users to\nupload files, specify parameters, etc.) then you should be careful about\npreventing shell injection in these cases. Feel free to open an issue if you\nhave any questions about this.\n\n## Acknowledgements\n\n### Test datasets\n`sample1.gfa` (located in `strainflye/tests/inputs/`)\nwas downloaded from the [gfalint](https://github.com/sjackman/gfalint)\nrepository. The other GFA files in this folder beginning with `sample1` are\nalso based on this GFA file.\n\n### Tutorial dataset\nThe strainFlye tutorial (linked above, and located in `docs/`) uses the \"SheepGut\" dataset shown in the strainFlye paper. This dataset was previously described in [Kolmogorov _et al._, 2020](https://www.nature.com/articles/s41592-020-00971-x) and [Bickhart \u0026 Kolmogorov _et al._, 2022](https://www.nature.com/articles/s41587-021-01130-z).\n\n## Contact\n\nIf you have any questions, suggestions, comments, etc. about strainFlye, please feel free to [open an issue](https://github.com/fedarko/strainFlye/issues) in this repository!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffedarko%2Fstrainflye","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffedarko%2Fstrainflye","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffedarko%2Fstrainflye/lists"}