diff --git a/.gitignore b/.gitignore
index 3fe46ea01..ad225b41d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,7 +3,7 @@ node_modules
.secrets
.actrc
.DS_Store
-.gh-pages
-.api
+/.gh-pages/
+/.api/
.env
-/temp
\ No newline at end of file
+/temp/
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 022381c63..1ddaf545d 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -12,7 +12,7 @@
You have several options:
-1. Create a new [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=streams:add&projects=&template=-----streams_add.yml&title=Add%3A+) and provide all the required information. If the request is approved, the link will be added to the playlist in the next update.
+1. Create a new [issue](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=streams:add&projects=&template=1_streams_add.yml&title=Add%3A+) and provide all the required information. If the request is approved, the link will be added to the playlist in the next update.
2. Add the link to the playlist directly using a [pull request](https://github.com/iptv-org/iptv/pulls).
@@ -51,7 +51,7 @@ If the link answers, you're with an Xtream Codes server.
### How to report a broken stream?
-Fill out this [form](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=broken+stream&projects=&template=---broken-stream.yml&title=Broken%3A+) and as soon as a working replacement appears, we will add it to the playlist or at least remove the non-working one.
+Fill out this [form](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=broken+stream,streams:remove&projects=&template=3_broken-stream.yml&title=Broken%3A+) and as soon as a working replacement appears, we will add it to the playlist or at least remove the non-working one.
The only thing before publishing your report is to make sure that:
@@ -93,7 +93,7 @@ After that, all you have to do is report any broken streams you find.
### How do I remove my channel from playlist?
-To request removal of a link to a channel from the repository, you need to fill out this [form](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=removal+request&projects=&template=-removal-request.yml&title=Remove%3A+) and wait for the request to be reviewed (this usually takes no more than 1 business day). And if the request is approved, links to the channel will be immediately removed from the repository.
+To request removal of a link to a channel from the repository, you need to fill out this [form](https://github.com/iptv-org/iptv/issues/new?assignees=&labels=removal+request&projects=&template=6_copyright-claim.yml&title=Remove%3A+) and wait for the request to be reviewed (this usually takes no more than 1 business day). And if the request is approved, links to the channel will be immediately removed from the repository.
The channel will also be added to our [blocklist](https://github.com/iptv-org/database/blob/master/data/blocklist.csv) to avoid its appearance in our playlists in the future.
diff --git a/README.md b/README.md
index 93ad85c86..547810ecf 100644
--- a/README.md
+++ b/README.md
@@ -54,35 +54,35 @@ Same thing, but split up into separate files:
| Category | Channels | Playlist |
- | Animation | 46 | https://iptv-org.github.io/iptv/categories/animation.m3u |
+ | Animation | 45 | https://iptv-org.github.io/iptv/categories/animation.m3u |
| Auto | 14 | https://iptv-org.github.io/iptv/categories/auto.m3u |
- | Business | 61 | https://iptv-org.github.io/iptv/categories/business.m3u |
+ | Business | 60 | https://iptv-org.github.io/iptv/categories/business.m3u |
| Classic | 44 | https://iptv-org.github.io/iptv/categories/classic.m3u |
- | Comedy | 59 | https://iptv-org.github.io/iptv/categories/comedy.m3u |
- | Cooking | 24 | https://iptv-org.github.io/iptv/categories/cooking.m3u |
- | Culture | 168 | https://iptv-org.github.io/iptv/categories/culture.m3u |
- | Documentary | 81 | https://iptv-org.github.io/iptv/categories/documentary.m3u |
- | Education | 152 | https://iptv-org.github.io/iptv/categories/education.m3u |
- | Entertainment | 545 | https://iptv-org.github.io/iptv/categories/entertainment.m3u |
+ | Comedy | 60 | https://iptv-org.github.io/iptv/categories/comedy.m3u |
+ | Cooking | 23 | https://iptv-org.github.io/iptv/categories/cooking.m3u |
+ | Culture | 167 | https://iptv-org.github.io/iptv/categories/culture.m3u |
+ | Documentary | 78 | https://iptv-org.github.io/iptv/categories/documentary.m3u |
+ | Education | 150 | https://iptv-org.github.io/iptv/categories/education.m3u |
+ | Entertainment | 543 | https://iptv-org.github.io/iptv/categories/entertainment.m3u |
| Family | 35 | https://iptv-org.github.io/iptv/categories/family.m3u |
- | General | 2346 | https://iptv-org.github.io/iptv/categories/general.m3u |
- | Kids | 181 | https://iptv-org.github.io/iptv/categories/kids.m3u |
+ | General | 2344 | https://iptv-org.github.io/iptv/categories/general.m3u |
+ | Kids | 174 | https://iptv-org.github.io/iptv/categories/kids.m3u |
| Legislative | 192 | https://iptv-org.github.io/iptv/categories/legislative.m3u |
- | Lifestyle | 78 | https://iptv-org.github.io/iptv/categories/lifestyle.m3u |
- | Movies | 236 | https://iptv-org.github.io/iptv/categories/movies.m3u |
- | Music | 664 | https://iptv-org.github.io/iptv/categories/music.m3u |
- | News | 767 | https://iptv-org.github.io/iptv/categories/news.m3u |
+ | Lifestyle | 77 | https://iptv-org.github.io/iptv/categories/lifestyle.m3u |
+ | Movies | 234 | https://iptv-org.github.io/iptv/categories/movies.m3u |
+ | Music | 660 | https://iptv-org.github.io/iptv/categories/music.m3u |
+ | News | 768 | https://iptv-org.github.io/iptv/categories/news.m3u |
| Outdoor | 40 | https://iptv-org.github.io/iptv/categories/outdoor.m3u |
| Relax | 2 | https://iptv-org.github.io/iptv/categories/relax.m3u |
- | Religious | 692 | https://iptv-org.github.io/iptv/categories/religious.m3u |
+ | Religious | 693 | https://iptv-org.github.io/iptv/categories/religious.m3u |
| Science | 21 | https://iptv-org.github.io/iptv/categories/science.m3u |
| Series | 149 | https://iptv-org.github.io/iptv/categories/series.m3u |
- | Shop | 86 | https://iptv-org.github.io/iptv/categories/shop.m3u |
- | Sports | 268 | https://iptv-org.github.io/iptv/categories/sports.m3u |
+ | Shop | 87 | https://iptv-org.github.io/iptv/categories/shop.m3u |
+ | Sports | 263 | https://iptv-org.github.io/iptv/categories/sports.m3u |
| Travel | 39 | https://iptv-org.github.io/iptv/categories/travel.m3u |
| Weather | 13 | https://iptv-org.github.io/iptv/categories/weather.m3u |
| XXX | 0 | https://iptv-org.github.io/iptv/categories/xxx.m3u |
- | Undefined | 4721 | https://iptv-org.github.io/iptv/categories/undefined.m3u |
+ | Undefined | 4710 | https://iptv-org.github.io/iptv/categories/undefined.m3u |
@@ -112,10 +112,10 @@ Same thing, but split up into separate files:
| Adhola | 1 | https://iptv-org.github.io/iptv/languages/adh.m3u |
| Afghan Persian | 7 | https://iptv-org.github.io/iptv/languages/prs.m3u |
| Afrikaans | 3 | https://iptv-org.github.io/iptv/languages/afr.m3u |
- | Albanian | 37 | https://iptv-org.github.io/iptv/languages/sqi.m3u |
+ | Albanian | 46 | https://iptv-org.github.io/iptv/languages/sqi.m3u |
| Alur | 1 | https://iptv-org.github.io/iptv/languages/alz.m3u |
| Amharic | 7 | https://iptv-org.github.io/iptv/languages/amh.m3u |
- | Arabic | 393 | https://iptv-org.github.io/iptv/languages/ara.m3u |
+ | Arabic | 392 | https://iptv-org.github.io/iptv/languages/ara.m3u |
| Armenian | 25 | https://iptv-org.github.io/iptv/languages/hye.m3u |
| Assamese | 7 | https://iptv-org.github.io/iptv/languages/asm.m3u |
| Assyrian Neo-Aramaic | 1 | https://iptv-org.github.io/iptv/languages/aii.m3u |
@@ -138,7 +138,7 @@ Same thing, but split up into separate files:
| Chewa | 3 | https://iptv-org.github.io/iptv/languages/nya.m3u |
| Chhattisgarhi | 1 | https://iptv-org.github.io/iptv/languages/hne.m3u |
| Chiga | 1 | https://iptv-org.github.io/iptv/languages/cgg.m3u |
- | Chinese | 188 | https://iptv-org.github.io/iptv/languages/zho.m3u |
+ | Chinese | 181 | https://iptv-org.github.io/iptv/languages/zho.m3u |
| Croatian | 22 | https://iptv-org.github.io/iptv/languages/hrv.m3u |
| Czech | 35 | https://iptv-org.github.io/iptv/languages/ces.m3u |
| Danish | 19 | https://iptv-org.github.io/iptv/languages/dan.m3u |
@@ -150,7 +150,7 @@ Same thing, but split up into separate files:
| Dutch | 188 | https://iptv-org.github.io/iptv/languages/nld.m3u |
| Dyula | 1 | https://iptv-org.github.io/iptv/languages/dyu.m3u |
| Egyptian Arabic | 2 | https://iptv-org.github.io/iptv/languages/arz.m3u |
- | English | 2113 | https://iptv-org.github.io/iptv/languages/eng.m3u |
+ | English | 2109 | https://iptv-org.github.io/iptv/languages/eng.m3u |
| Estonian | 9 | https://iptv-org.github.io/iptv/languages/est.m3u |
| Ewe | 2 | https://iptv-org.github.io/iptv/languages/ewe.m3u |
| Faroese | 1 | https://iptv-org.github.io/iptv/languages/fao.m3u |
@@ -158,14 +158,14 @@ Same thing, but split up into separate files:
| Filipino | 1 | https://iptv-org.github.io/iptv/languages/fil.m3u |
| Finnish | 23 | https://iptv-org.github.io/iptv/languages/fin.m3u |
| Fon | 3 | https://iptv-org.github.io/iptv/languages/fon.m3u |
- | French | 418 | https://iptv-org.github.io/iptv/languages/fra.m3u |
+ | French | 414 | https://iptv-org.github.io/iptv/languages/fra.m3u |
| Fulah | 2 | https://iptv-org.github.io/iptv/languages/ful.m3u |
| Gaelic | 2 | https://iptv-org.github.io/iptv/languages/gla.m3u |
| Galician | 13 | https://iptv-org.github.io/iptv/languages/glg.m3u |
| Ganda | 5 | https://iptv-org.github.io/iptv/languages/lug.m3u |
| Gen | 1 | https://iptv-org.github.io/iptv/languages/gej.m3u |
| Georgian | 9 | https://iptv-org.github.io/iptv/languages/kat.m3u |
- | German | 257 | https://iptv-org.github.io/iptv/languages/deu.m3u |
+ | German | 259 | https://iptv-org.github.io/iptv/languages/deu.m3u |
| Gikuyu | 2 | https://iptv-org.github.io/iptv/languages/kik.m3u |
| Goan Konkani | 1 | https://iptv-org.github.io/iptv/languages/gom.m3u |
| Greek | 125 | https://iptv-org.github.io/iptv/languages/ell.m3u |
@@ -184,14 +184,14 @@ Same thing, but split up into separate files:
| Iranian Persian | 1 | https://iptv-org.github.io/iptv/languages/pes.m3u |
| Irish | 7 | https://iptv-org.github.io/iptv/languages/gle.m3u |
| Isekiri | 1 | https://iptv-org.github.io/iptv/languages/its.m3u |
- | Italian | 288 | https://iptv-org.github.io/iptv/languages/ita.m3u |
- | Japanese | 70 | https://iptv-org.github.io/iptv/languages/jpn.m3u |
+ | Italian | 289 | https://iptv-org.github.io/iptv/languages/ita.m3u |
+ | Japanese | 69 | https://iptv-org.github.io/iptv/languages/jpn.m3u |
| Javanese | 3 | https://iptv-org.github.io/iptv/languages/jav.m3u |
| Kabiyรจ | 1 | https://iptv-org.github.io/iptv/languages/kbp.m3u |
| Kabyle | 1 | https://iptv-org.github.io/iptv/languages/kab.m3u |
| Kannada | 11 | https://iptv-org.github.io/iptv/languages/kan.m3u |
| Kapampangan | 1 | https://iptv-org.github.io/iptv/languages/pam.m3u |
- | Kazakh | 29 | https://iptv-org.github.io/iptv/languages/kaz.m3u |
+ | Kazakh | 28 | https://iptv-org.github.io/iptv/languages/kaz.m3u |
| Khmer | 22 | https://iptv-org.github.io/iptv/languages/khm.m3u |
| Khorasani Turkish | 1 | https://iptv-org.github.io/iptv/languages/kmz.m3u |
| Kinyarwanda | 7 | https://iptv-org.github.io/iptv/languages/kin.m3u |
@@ -201,19 +201,19 @@ Same thing, but split up into separate files:
| Konkani (macrolanguage) | 2 | https://iptv-org.github.io/iptv/languages/kok.m3u |
| Korean | 96 | https://iptv-org.github.io/iptv/languages/kor.m3u |
| Kumam | 1 | https://iptv-org.github.io/iptv/languages/kdi.m3u |
- | Kurdish | 31 | https://iptv-org.github.io/iptv/languages/kur.m3u |
+ | Kurdish | 32 | https://iptv-org.github.io/iptv/languages/kur.m3u |
| Lango (Uganda) | 1 | https://iptv-org.github.io/iptv/languages/laj.m3u |
| Lao | 8 | https://iptv-org.github.io/iptv/languages/lao.m3u |
- | Latin | 3 | https://iptv-org.github.io/iptv/languages/lat.m3u |
- | Latvian | 13 | https://iptv-org.github.io/iptv/languages/lav.m3u |
+ | Latin | 2 | https://iptv-org.github.io/iptv/languages/lat.m3u |
+ | Latvian | 8 | https://iptv-org.github.io/iptv/languages/lav.m3u |
| Letzeburgesch | 12 | https://iptv-org.github.io/iptv/languages/ltz.m3u |
| Lingala | 5 | https://iptv-org.github.io/iptv/languages/lin.m3u |
| Lithuanian | 8 | https://iptv-org.github.io/iptv/languages/lit.m3u |
| Luba-Lulua | 1 | https://iptv-org.github.io/iptv/languages/lua.m3u |
| Macedonian | 34 | https://iptv-org.github.io/iptv/languages/mkd.m3u |
| Maithili | 1 | https://iptv-org.github.io/iptv/languages/mai.m3u |
- | Malay | 17 | https://iptv-org.github.io/iptv/languages/msa.m3u |
- | Malayalam | 64 | https://iptv-org.github.io/iptv/languages/mal.m3u |
+ | Malay | 18 | https://iptv-org.github.io/iptv/languages/msa.m3u |
+ | Malayalam | 65 | https://iptv-org.github.io/iptv/languages/mal.m3u |
| Maltese | 8 | https://iptv-org.github.io/iptv/languages/mlt.m3u |
| Mandarin Chinese | 3 | https://iptv-org.github.io/iptv/languages/cmn.m3u |
| Mandinka | 1 | https://iptv-org.github.io/iptv/languages/mnk.m3u |
@@ -234,25 +234,25 @@ Same thing, but split up into separate files:
| Papiamento | 18 | https://iptv-org.github.io/iptv/languages/pap.m3u |
| Parsi-Dari | 3 | https://iptv-org.github.io/iptv/languages/prd.m3u |
| Pashto | 16 | https://iptv-org.github.io/iptv/languages/pus.m3u |
- | Persian | 138 | https://iptv-org.github.io/iptv/languages/fas.m3u |
- | Polish | 152 | https://iptv-org.github.io/iptv/languages/pol.m3u |
- | Portuguese | 334 | https://iptv-org.github.io/iptv/languages/por.m3u |
+ | Persian | 139 | https://iptv-org.github.io/iptv/languages/fas.m3u |
+ | Polish | 141 | https://iptv-org.github.io/iptv/languages/pol.m3u |
+ | Portuguese | 337 | https://iptv-org.github.io/iptv/languages/por.m3u |
| Pulaar | 1 | https://iptv-org.github.io/iptv/languages/fuc.m3u |
| Quechua | 1 | https://iptv-org.github.io/iptv/languages/que.m3u |
| Romanian | 127 | https://iptv-org.github.io/iptv/languages/ron.m3u |
| Romany | 1 | https://iptv-org.github.io/iptv/languages/rom.m3u |
| Rundi | 1 | https://iptv-org.github.io/iptv/languages/run.m3u |
- | Russian | 279 | https://iptv-org.github.io/iptv/languages/rus.m3u |
+ | Russian | 259 | https://iptv-org.github.io/iptv/languages/rus.m3u |
| Saint Lucian Creole French | 2 | https://iptv-org.github.io/iptv/languages/acf.m3u |
| Samoan | 2 | https://iptv-org.github.io/iptv/languages/smo.m3u |
| Santali | 1 | https://iptv-org.github.io/iptv/languages/sat.m3u |
- | Serbian | 46 | https://iptv-org.github.io/iptv/languages/srp.m3u |
+ | Serbian | 47 | https://iptv-org.github.io/iptv/languages/srp.m3u |
| Serbo-Croatian | 1 | https://iptv-org.github.io/iptv/languages/hbs.m3u |
| Sinhala | 5 | https://iptv-org.github.io/iptv/languages/sin.m3u |
| Slovak | 49 | https://iptv-org.github.io/iptv/languages/slk.m3u |
| Slovenian | 13 | https://iptv-org.github.io/iptv/languages/slv.m3u |
| Somali | 11 | https://iptv-org.github.io/iptv/languages/som.m3u |
- | Spanish | 2070 | https://iptv-org.github.io/iptv/languages/spa.m3u |
+ | Spanish | 2072 | https://iptv-org.github.io/iptv/languages/spa.m3u |
| Sranan Tongo | 3 | https://iptv-org.github.io/iptv/languages/srn.m3u |
| Swahili | 24 | https://iptv-org.github.io/iptv/languages/swa.m3u |
| Swedish | 16 | https://iptv-org.github.io/iptv/languages/swe.m3u |
@@ -271,7 +271,7 @@ Same thing, but split up into separate files:
| Tooro | 1 | https://iptv-org.github.io/iptv/languages/ttj.m3u |
| Tswana | 1 | https://iptv-org.github.io/iptv/languages/tsn.m3u |
| Tumzabt | 1 | https://iptv-org.github.io/iptv/languages/mzb.m3u |
- | Turkish | 259 | https://iptv-org.github.io/iptv/languages/tur.m3u |
+ | Turkish | 260 | https://iptv-org.github.io/iptv/languages/tur.m3u |
| Turkmen | 8 | https://iptv-org.github.io/iptv/languages/tuk.m3u |
| Uighur | 3 | https://iptv-org.github.io/iptv/languages/uig.m3u |
| Ukrainian | 60 | https://iptv-org.github.io/iptv/languages/ukr.m3u |
@@ -284,9 +284,9 @@ Same thing, but split up into separate files:
| Yakut | 1 | https://iptv-org.github.io/iptv/languages/sah.m3u |
| Yoruba | 1 | https://iptv-org.github.io/iptv/languages/yor.m3u |
| Yucatec Maya | 1 | https://iptv-org.github.io/iptv/languages/yua.m3u |
- | Yue Chinese | 7 | https://iptv-org.github.io/iptv/languages/yue.m3u |
+ | Yue Chinese | 5 | https://iptv-org.github.io/iptv/languages/yue.m3u |
| Zarma | 1 | https://iptv-org.github.io/iptv/languages/dje.m3u |
- | Undefined | 2889 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
+ | Undefined | 2880 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
@@ -316,11 +316,11 @@ Same thing, but split up into separate files:
| ๐ฆ๐ฑ Albania | 42 | https://iptv-org.github.io/iptv/countries/al.m3u |
| ๐ฉ๐ฟ Algeria | 71 | https://iptv-org.github.io/iptv/countries/dz.m3u |
| ๐ฆ๐ธ American Samoa | 5 | https://iptv-org.github.io/iptv/countries/as.m3u |
- | ๐ฆ๐ฉ Andorra | 34 | https://iptv-org.github.io/iptv/countries/ad.m3u |
+ | ๐ฆ๐ฉ Andorra | 33 | https://iptv-org.github.io/iptv/countries/ad.m3u |
| ๐ฆ๐ด Angola | 27 | https://iptv-org.github.io/iptv/countries/ao.m3u |
| ๐ฆ๐ฎ Anguilla | 12 | https://iptv-org.github.io/iptv/countries/ai.m3u |
| ๐ฆ๐ฌ Antigua and Barbuda | 13 | https://iptv-org.github.io/iptv/countries/ag.m3u |
- | ๐ฆ๐ท Argentina | 222 | https://iptv-org.github.io/iptv/countries/ar.m3u |
+ | ๐ฆ๐ท Argentina | 224 | https://iptv-org.github.io/iptv/countries/ar.m3u |
| Buenos Aires | 18 | https://iptv-org.github.io/iptv/subdivisions/ar-b.m3u |
| Catamarca | 1 | https://iptv-org.github.io/iptv/subdivisions/ar-k.m3u |
| Chaco | 3 | https://iptv-org.github.io/iptv/subdivisions/ar-h.m3u |
@@ -343,31 +343,33 @@ Same thing, but split up into separate files:
| Santa Fe | 3 | https://iptv-org.github.io/iptv/subdivisions/ar-s.m3u |
| Santiago del Estero | 1 | https://iptv-org.github.io/iptv/subdivisions/ar-g.m3u |
| Tucuman | 2 | https://iptv-org.github.io/iptv/subdivisions/ar-t.m3u |
- | ๐ฆ๐ฒ Armenia | 55 | https://iptv-org.github.io/iptv/countries/am.m3u |
+ | ๐ฆ๐ฒ Armenia | 52 | https://iptv-org.github.io/iptv/countries/am.m3u |
| ๐ฆ๐ผ Aruba | 21 | https://iptv-org.github.io/iptv/countries/aw.m3u |
- | ๐ฆ๐บ Australia | 38 | https://iptv-org.github.io/iptv/countries/au.m3u |
- | ๐ฆ๐น Austria | 74 | https://iptv-org.github.io/iptv/countries/at.m3u |
- | ๐ฆ๐ฟ Azerbaijan | 49 | https://iptv-org.github.io/iptv/countries/az.m3u |
+ | ๐ฆ๐บ Australia | 40 | https://iptv-org.github.io/iptv/countries/au.m3u |
+ | ๐ฆ๐น Austria | 75 | https://iptv-org.github.io/iptv/countries/at.m3u |
+ | Karnten | 1 | https://iptv-org.github.io/iptv/subdivisions/at-2.m3u |
+ | Steiermark | 1 | https://iptv-org.github.io/iptv/subdivisions/at-6.m3u |
+ | ๐ฆ๐ฟ Azerbaijan | 46 | https://iptv-org.github.io/iptv/countries/az.m3u |
| ๐ง๐ธ Bahamas | 15 | https://iptv-org.github.io/iptv/countries/bs.m3u |
| ๐ง๐ญ Bahrain | 46 | https://iptv-org.github.io/iptv/countries/bh.m3u |
| ๐ง๐ฉ Bangladesh | 20 | https://iptv-org.github.io/iptv/countries/bd.m3u |
| ๐ง๐ง Barbados | 13 | https://iptv-org.github.io/iptv/countries/bb.m3u |
- | ๐ง๐พ Belarus | 50 | https://iptv-org.github.io/iptv/countries/by.m3u |
- | ๐ง๐ช Belgium | 71 | https://iptv-org.github.io/iptv/countries/be.m3u |
+ | ๐ง๐พ Belarus | 47 | https://iptv-org.github.io/iptv/countries/by.m3u |
+ | ๐ง๐ช Belgium | 70 | https://iptv-org.github.io/iptv/countries/be.m3u |
| ๐ง๐ฟ Belize | 9 | https://iptv-org.github.io/iptv/countries/bz.m3u |
| ๐ง๐ฏ Benin | 33 | https://iptv-org.github.io/iptv/countries/bj.m3u |
| ๐ง๐ฒ Bermuda | 7 | https://iptv-org.github.io/iptv/countries/bm.m3u |
| ๐ง๐น Bhutan | 5 | https://iptv-org.github.io/iptv/countries/bt.m3u |
- | ๐ง๐ด Bolivia | 127 | https://iptv-org.github.io/iptv/countries/bo.m3u |
+ | ๐ง๐ด Bolivia | 129 | https://iptv-org.github.io/iptv/countries/bo.m3u |
| Cochabamba | 1 | https://iptv-org.github.io/iptv/subdivisions/bo-c.m3u |
| La Paz | 2 | https://iptv-org.github.io/iptv/subdivisions/bo-l.m3u |
| Oruro | 1 | https://iptv-org.github.io/iptv/subdivisions/bo-o.m3u |
| Santa Cruz | 2 | https://iptv-org.github.io/iptv/subdivisions/bo-s.m3u |
| ๐ง๐ถ Bonaire | 5 | https://iptv-org.github.io/iptv/countries/bq.m3u |
- | ๐ง๐ฆ Bosnia and Herzegovina | 46 | https://iptv-org.github.io/iptv/countries/ba.m3u |
+ | ๐ง๐ฆ Bosnia and Herzegovina | 45 | https://iptv-org.github.io/iptv/countries/ba.m3u |
| ๐ง๐ผ Botswana | 24 | https://iptv-org.github.io/iptv/countries/bw.m3u |
| ๐ง๐ป Bouvet Island | 5 | https://iptv-org.github.io/iptv/countries/bv.m3u |
- | ๐ง๐ท Brazil | 298 | https://iptv-org.github.io/iptv/countries/br.m3u |
+ | ๐ง๐ท Brazil | 301 | https://iptv-org.github.io/iptv/countries/br.m3u |
| Alagoas | 3 | https://iptv-org.github.io/iptv/subdivisions/br-al.m3u |
| Amazonas | 1 | https://iptv-org.github.io/iptv/subdivisions/br-am.m3u |
| Bahia | 5 | https://iptv-org.github.io/iptv/subdivisions/br-ba.m3u |
@@ -391,12 +393,12 @@ Same thing, but split up into separate files:
| Sao Paulo | 24 | https://iptv-org.github.io/iptv/subdivisions/br-sp.m3u |
| ๐ป๐ฌ British Virgin Islands | 14 | https://iptv-org.github.io/iptv/countries/vg.m3u |
| ๐ง๐ณ Brunei | 17 | https://iptv-org.github.io/iptv/countries/bn.m3u |
- | ๐ง๐ฌ Bulgaria | 63 | https://iptv-org.github.io/iptv/countries/bg.m3u |
- | ๐ง๐ซ Burkina Faso | 26 | https://iptv-org.github.io/iptv/countries/bf.m3u |
+ | ๐ง๐ฌ Bulgaria | 62 | https://iptv-org.github.io/iptv/countries/bg.m3u |
+ | ๐ง๐ซ Burkina Faso | 28 | https://iptv-org.github.io/iptv/countries/bf.m3u |
| ๐ง๐ฎ Burundi | 24 | https://iptv-org.github.io/iptv/countries/bi.m3u |
| ๐ฐ๐ญ Cambodia | 35 | https://iptv-org.github.io/iptv/countries/kh.m3u |
| ๐จ๐ฒ Cameroon | 55 | https://iptv-org.github.io/iptv/countries/cm.m3u |
- | ๐จ๐ฆ Canada | 171 | https://iptv-org.github.io/iptv/countries/ca.m3u |
+ | ๐จ๐ฆ Canada | 172 | https://iptv-org.github.io/iptv/countries/ca.m3u |
| Alberta | 5 | https://iptv-org.github.io/iptv/subdivisions/ca-ab.m3u |
| British Columbia | 5 | https://iptv-org.github.io/iptv/subdivisions/ca-bc.m3u |
| Manitoba | 3 | https://iptv-org.github.io/iptv/subdivisions/ca-mb.m3u |
@@ -423,8 +425,8 @@ Same thing, but split up into separate files:
| Maule | 1 | https://iptv-org.github.io/iptv/subdivisions/cl-ml.m3u |
| Nuble | 3 | https://iptv-org.github.io/iptv/subdivisions/cl-nb.m3u |
| Valparaiso | 2 | https://iptv-org.github.io/iptv/subdivisions/cl-vs.m3u |
- | ๐จ๐ณ China | 143 | https://iptv-org.github.io/iptv/countries/cn.m3u |
- | ๐จ๐ด Colombia | 193 | https://iptv-org.github.io/iptv/countries/co.m3u |
+ | ๐จ๐ณ China | 138 | https://iptv-org.github.io/iptv/countries/cn.m3u |
+ | ๐จ๐ด Colombia | 194 | https://iptv-org.github.io/iptv/countries/co.m3u |
| Antioquia | 1 | https://iptv-org.github.io/iptv/subdivisions/co-ant.m3u |
| Atlantico | 1 | https://iptv-org.github.io/iptv/subdivisions/co-atl.m3u |
| Bolivar | 1 | https://iptv-org.github.io/iptv/subdivisions/co-bol.m3u |
@@ -443,19 +445,19 @@ Same thing, but split up into separate files:
| Valle del Cauca | 5 | https://iptv-org.github.io/iptv/subdivisions/co-vac.m3u |
| ๐ฐ๐ฒ Comoros | 60 | https://iptv-org.github.io/iptv/countries/km.m3u |
| ๐จ๐ฐ Cook Islands | 5 | https://iptv-org.github.io/iptv/countries/ck.m3u |
- | ๐จ๐ท Costa Rica | 136 | https://iptv-org.github.io/iptv/countries/cr.m3u |
+ | ๐จ๐ท Costa Rica | 137 | https://iptv-org.github.io/iptv/countries/cr.m3u |
| Puntarenas | 1 | https://iptv-org.github.io/iptv/subdivisions/cr-p.m3u |
| San Jose | 1 | https://iptv-org.github.io/iptv/subdivisions/cr-sj.m3u |
- | ๐ญ๐ท Croatia | 62 | https://iptv-org.github.io/iptv/countries/hr.m3u |
- | ๐จ๐บ Cuba | 67 | https://iptv-org.github.io/iptv/countries/cu.m3u |
+ | ๐ญ๐ท Croatia | 61 | https://iptv-org.github.io/iptv/countries/hr.m3u |
+ | ๐จ๐บ Cuba | 68 | https://iptv-org.github.io/iptv/countries/cu.m3u |
| ๐จ๐ผ Curacao | 18 | https://iptv-org.github.io/iptv/countries/cw.m3u |
- | ๐จ๐พ Cyprus | 73 | https://iptv-org.github.io/iptv/countries/cy.m3u |
- | ๐จ๐ฟ Czech Republic | 72 | https://iptv-org.github.io/iptv/countries/cz.m3u |
+ | ๐จ๐พ Cyprus | 72 | https://iptv-org.github.io/iptv/countries/cy.m3u |
+ | ๐จ๐ฟ Czech Republic | 71 | https://iptv-org.github.io/iptv/countries/cz.m3u |
| ๐จ๐ฉ Democratic Republic of the Congo | 60 | https://iptv-org.github.io/iptv/countries/cd.m3u |
- | ๐ฉ๐ฐ Denmark | 58 | https://iptv-org.github.io/iptv/countries/dk.m3u |
+ | ๐ฉ๐ฐ Denmark | 57 | https://iptv-org.github.io/iptv/countries/dk.m3u |
| ๐ฉ๐ฏ Djibouti | 63 | https://iptv-org.github.io/iptv/countries/dj.m3u |
| ๐ฉ๐ฒ Dominica | 13 | https://iptv-org.github.io/iptv/countries/dm.m3u |
- | ๐ฉ๐ด Dominican Republic | 251 | https://iptv-org.github.io/iptv/countries/do.m3u |
+ | ๐ฉ๐ด Dominican Republic | 253 | https://iptv-org.github.io/iptv/countries/do.m3u |
| Distrito Nacional (Santo Domingo) | 2 | https://iptv-org.github.io/iptv/subdivisions/do-01.m3u |
| El Seibo | 1 | https://iptv-org.github.io/iptv/subdivisions/do-08.m3u |
| La Altagracia | 2 | https://iptv-org.github.io/iptv/subdivisions/do-11.m3u |
@@ -466,32 +468,32 @@ Same thing, but split up into separate files:
| Santiago | 1 | https://iptv-org.github.io/iptv/subdivisions/do-25.m3u |
| Valverde | 1 | https://iptv-org.github.io/iptv/subdivisions/do-27.m3u |
| ๐น๐ฑ East Timor | 10 | https://iptv-org.github.io/iptv/countries/tl.m3u |
- | ๐ช๐จ Ecuador | 138 | https://iptv-org.github.io/iptv/countries/ec.m3u |
+ | ๐ช๐จ Ecuador | 139 | https://iptv-org.github.io/iptv/countries/ec.m3u |
| Azuay | 1 | https://iptv-org.github.io/iptv/subdivisions/ec-a.m3u |
| Loja | 2 | https://iptv-org.github.io/iptv/subdivisions/ec-l.m3u |
| Orellana | 1 | https://iptv-org.github.io/iptv/subdivisions/ec-d.m3u |
| ๐ช๐ฌ Egypt | 92 | https://iptv-org.github.io/iptv/countries/eg.m3u |
- | ๐ธ๐ป El Salvador | 99 | https://iptv-org.github.io/iptv/countries/sv.m3u |
+ | ๐ธ๐ป El Salvador | 100 | https://iptv-org.github.io/iptv/countries/sv.m3u |
| ๐ฌ๐ถ Equatorial Guinea | 27 | https://iptv-org.github.io/iptv/countries/gq.m3u |
| ๐ช๐ท Eritrea | 23 | https://iptv-org.github.io/iptv/countries/er.m3u |
- | ๐ช๐ช Estonia | 66 | https://iptv-org.github.io/iptv/countries/ee.m3u |
+ | ๐ช๐ช Estonia | 65 | https://iptv-org.github.io/iptv/countries/ee.m3u |
| ๐ช๐น Ethiopia | 27 | https://iptv-org.github.io/iptv/countries/et.m3u |
| ๐ซ๐ฐ Falkland Islands | 5 | https://iptv-org.github.io/iptv/countries/fk.m3u |
| ๐ซ๐ด Faroe Islands | 1 | https://iptv-org.github.io/iptv/countries/fo.m3u |
| ๐ซ๐ฏ Fiji | 6 | https://iptv-org.github.io/iptv/countries/fj.m3u |
- | ๐ซ๐ฎ Finland | 63 | https://iptv-org.github.io/iptv/countries/fi.m3u |
+ | ๐ซ๐ฎ Finland | 62 | https://iptv-org.github.io/iptv/countries/fi.m3u |
| Keski-Suomi | 1 | https://iptv-org.github.io/iptv/subdivisions/fi-08.m3u |
| Pohjanmaa | 1 | https://iptv-org.github.io/iptv/subdivisions/fi-12.m3u |
- | ๐ซ๐ท France | 155 | https://iptv-org.github.io/iptv/countries/fr.m3u |
- | ๐ฌ๐ซ French Guiana | 18 | https://iptv-org.github.io/iptv/countries/gf.m3u |
+ | ๐ซ๐ท France | 154 | https://iptv-org.github.io/iptv/countries/fr.m3u |
+ | ๐ฌ๐ซ French Guiana | 19 | https://iptv-org.github.io/iptv/countries/gf.m3u |
| ๐ต๐ซ French Polynesia | 6 | https://iptv-org.github.io/iptv/countries/pf.m3u |
| ๐น๐ซ French Southern Territories | 23 | https://iptv-org.github.io/iptv/countries/tf.m3u |
| ๐ฌ๐ฆ Gabon | 28 | https://iptv-org.github.io/iptv/countries/ga.m3u |
| ๐ฌ๐ฒ Gambia | 24 | https://iptv-org.github.io/iptv/countries/gm.m3u |
- | ๐ฌ๐ช Georgia | 37 | https://iptv-org.github.io/iptv/countries/ge.m3u |
- | ๐ฉ๐ช Germany | 249 | https://iptv-org.github.io/iptv/countries/de.m3u |
+ | ๐ฌ๐ช Georgia | 36 | https://iptv-org.github.io/iptv/countries/ge.m3u |
+ | ๐ฉ๐ช Germany | 248 | https://iptv-org.github.io/iptv/countries/de.m3u |
| ๐ฌ๐ญ Ghana | 42 | https://iptv-org.github.io/iptv/countries/gh.m3u |
- | ๐ฌ๐ท Greece | 146 | https://iptv-org.github.io/iptv/countries/gr.m3u |
+ | ๐ฌ๐ท Greece | 145 | https://iptv-org.github.io/iptv/countries/gr.m3u |
| Attiki | 10 | https://iptv-org.github.io/iptv/subdivisions/gr-i.m3u |
| Dytiki Ellada | 5 | https://iptv-org.github.io/iptv/subdivisions/gr-g.m3u |
| Dytiki Makedonia | 2 | https://iptv-org.github.io/iptv/subdivisions/gr-c.m3u |
@@ -503,9 +505,9 @@ Same thing, but split up into separate files:
| Thessalia | 4 | https://iptv-org.github.io/iptv/subdivisions/gr-e.m3u |
| ๐ฌ๐ฑ Greenland | 7 | https://iptv-org.github.io/iptv/countries/gl.m3u |
| ๐ฌ๐ฉ Grenada | 12 | https://iptv-org.github.io/iptv/countries/gd.m3u |
- | ๐ฌ๐ต Guadeloupe | 26 | https://iptv-org.github.io/iptv/countries/gp.m3u |
+ | ๐ฌ๐ต Guadeloupe | 27 | https://iptv-org.github.io/iptv/countries/gp.m3u |
| ๐ฌ๐บ Guam | 7 | https://iptv-org.github.io/iptv/countries/gu.m3u |
- | ๐ฌ๐น Guatemala | 147 | https://iptv-org.github.io/iptv/countries/gt.m3u |
+ | ๐ฌ๐น Guatemala | 148 | https://iptv-org.github.io/iptv/countries/gt.m3u |
| Escuintla | 2 | https://iptv-org.github.io/iptv/subdivisions/gt-05.m3u |
| Huehuetenango | 1 | https://iptv-org.github.io/iptv/subdivisions/gt-13.m3u |
| Izabal | 1 | https://iptv-org.github.io/iptv/subdivisions/gt-18.m3u |
@@ -518,11 +520,11 @@ Same thing, but split up into separate files:
| ๐ฌ๐ณ Guinea | 35 | https://iptv-org.github.io/iptv/countries/gn.m3u |
| ๐ฌ๐ผ Guinea-Bissau | 23 | https://iptv-org.github.io/iptv/countries/gw.m3u |
| ๐ฌ๐พ Guyana | 18 | https://iptv-org.github.io/iptv/countries/gy.m3u |
- | ๐ญ๐น Haiti | 44 | https://iptv-org.github.io/iptv/countries/ht.m3u |
- | ๐ญ๐ณ Honduras | 138 | https://iptv-org.github.io/iptv/countries/hn.m3u |
- | ๐ญ๐ฐ Hong Kong | 14 | https://iptv-org.github.io/iptv/countries/hk.m3u |
- | ๐ญ๐บ Hungary | 138 | https://iptv-org.github.io/iptv/countries/hu.m3u |
- | ๐ฎ๐ธ Iceland | 33 | https://iptv-org.github.io/iptv/countries/is.m3u |
+ | ๐ญ๐น Haiti | 45 | https://iptv-org.github.io/iptv/countries/ht.m3u |
+ | ๐ญ๐ณ Honduras | 139 | https://iptv-org.github.io/iptv/countries/hn.m3u |
+ | ๐ญ๐ฐ Hong Kong | 11 | https://iptv-org.github.io/iptv/countries/hk.m3u |
+ | ๐ญ๐บ Hungary | 137 | https://iptv-org.github.io/iptv/countries/hu.m3u |
+ | ๐ฎ๐ธ Iceland | 32 | https://iptv-org.github.io/iptv/countries/is.m3u |
| ๐ฎ๐ณ India | 304 | https://iptv-org.github.io/iptv/countries/in.m3u |
| ๐ฎ๐ฉ Indonesia | 143 | https://iptv-org.github.io/iptv/countries/id.m3u |
| Aceh | 2 | https://iptv-org.github.io/iptv/subdivisions/id-ac.m3u |
@@ -554,15 +556,15 @@ Same thing, but split up into separate files:
| Sumatera Barat | 2 | https://iptv-org.github.io/iptv/subdivisions/id-sb.m3u |
| Sumatera Selatan | 2 | https://iptv-org.github.io/iptv/subdivisions/id-ss.m3u |
| Yogyakarta | 3 | https://iptv-org.github.io/iptv/subdivisions/id-yo.m3u |
- | ๐ฎ๐ท Iran | 123 | https://iptv-org.github.io/iptv/countries/ir.m3u |
- | ๐ฎ๐ถ Iraq | 108 | https://iptv-org.github.io/iptv/countries/iq.m3u |
- | ๐ฎ๐ช Ireland | 57 | https://iptv-org.github.io/iptv/countries/ie.m3u |
+ | ๐ฎ๐ท Iran | 124 | https://iptv-org.github.io/iptv/countries/ir.m3u |
+ | ๐ฎ๐ถ Iraq | 109 | https://iptv-org.github.io/iptv/countries/iq.m3u |
+ | ๐ฎ๐ช Ireland | 56 | https://iptv-org.github.io/iptv/countries/ie.m3u |
| ๐ฎ๐ฑ Israel | 22 | https://iptv-org.github.io/iptv/countries/il.m3u |
| ๐ฎ๐น Italy | 325 | https://iptv-org.github.io/iptv/countries/it.m3u |
| Trentino-Alto Adige | 3 | https://iptv-org.github.io/iptv/subdivisions/it-32.m3u |
| ๐จ๐ฎ Ivory Coast | 52 | https://iptv-org.github.io/iptv/countries/ci.m3u |
| ๐ฏ๐ฒ Jamaica | 19 | https://iptv-org.github.io/iptv/countries/jm.m3u |
- | ๐ฏ๐ต Japan | 68 | https://iptv-org.github.io/iptv/countries/jp.m3u |
+ | ๐ฏ๐ต Japan | 67 | https://iptv-org.github.io/iptv/countries/jp.m3u |
| Chiba | 2 | https://iptv-org.github.io/iptv/subdivisions/jp-12.m3u |
| Gunma | 1 | https://iptv-org.github.io/iptv/subdivisions/jp-10.m3u |
| Ibaraki | 1 | https://iptv-org.github.io/iptv/subdivisions/jp-08.m3u |
@@ -572,34 +574,34 @@ Same thing, but split up into separate files:
| Tochigi | 1 | https://iptv-org.github.io/iptv/subdivisions/jp-09.m3u |
| Tokyo | 1 | https://iptv-org.github.io/iptv/subdivisions/jp-13.m3u |
| ๐ฏ๐ด Jordan | 68 | https://iptv-org.github.io/iptv/countries/jo.m3u |
- | ๐ฐ๐ฟ Kazakhstan | 70 | https://iptv-org.github.io/iptv/countries/kz.m3u |
+ | ๐ฐ๐ฟ Kazakhstan | 67 | https://iptv-org.github.io/iptv/countries/kz.m3u |
| ๐ฐ๐ช Kenya | 63 | https://iptv-org.github.io/iptv/countries/ke.m3u |
| ๐ฐ๐ฎ Kiribati | 5 | https://iptv-org.github.io/iptv/countries/ki.m3u |
- | ๐ฝ๐ฐ Kosovo | 10 | https://iptv-org.github.io/iptv/countries/xk.m3u |
+ | ๐ฝ๐ฐ Kosovo | 18 | https://iptv-org.github.io/iptv/countries/xk.m3u |
| ๐ฐ๐ผ Kuwait | 53 | https://iptv-org.github.io/iptv/countries/kw.m3u |
- | ๐ฐ๐ฌ Kyrgyzstan | 22 | https://iptv-org.github.io/iptv/countries/kg.m3u |
+ | ๐ฐ๐ฌ Kyrgyzstan | 20 | https://iptv-org.github.io/iptv/countries/kg.m3u |
| ๐ฑ๐ฆ Laos | 24 | https://iptv-org.github.io/iptv/countries/la.m3u |
- | ๐ฑ๐ป Latvia | 58 | https://iptv-org.github.io/iptv/countries/lv.m3u |
+ | ๐ฑ๐ป Latvia | 51 | https://iptv-org.github.io/iptv/countries/lv.m3u |
| ๐ฑ๐ง Lebanon | 69 | https://iptv-org.github.io/iptv/countries/lb.m3u |
| ๐ฑ๐ธ Lesotho | 23 | https://iptv-org.github.io/iptv/countries/ls.m3u |
| ๐ฑ๐ท Liberia | 24 | https://iptv-org.github.io/iptv/countries/lr.m3u |
| ๐ฑ๐พ Libya | 70 | https://iptv-org.github.io/iptv/countries/ly.m3u |
- | ๐ฑ๐ฎ Liechtenstein | 31 | https://iptv-org.github.io/iptv/countries/li.m3u |
- | ๐ฑ๐น Lithuania | 48 | https://iptv-org.github.io/iptv/countries/lt.m3u |
- | ๐ฑ๐บ Luxembourg | 57 | https://iptv-org.github.io/iptv/countries/lu.m3u |
+ | ๐ฑ๐ฎ Liechtenstein | 30 | https://iptv-org.github.io/iptv/countries/li.m3u |
+ | ๐ฑ๐น Lithuania | 47 | https://iptv-org.github.io/iptv/countries/lt.m3u |
+ | ๐ฑ๐บ Luxembourg | 56 | https://iptv-org.github.io/iptv/countries/lu.m3u |
| ๐ฒ๐ด Macao | 7 | https://iptv-org.github.io/iptv/countries/mo.m3u |
| ๐ฒ๐ฌ Madagascar | 23 | https://iptv-org.github.io/iptv/countries/mg.m3u |
| ๐ฒ๐ผ Malawi | 26 | https://iptv-org.github.io/iptv/countries/mw.m3u |
- | ๐ฒ๐พ Malaysia | 32 | https://iptv-org.github.io/iptv/countries/my.m3u |
+ | ๐ฒ๐พ Malaysia | 34 | https://iptv-org.github.io/iptv/countries/my.m3u |
| ๐ฒ๐ป Maldives | 15 | https://iptv-org.github.io/iptv/countries/mv.m3u |
- | ๐ฒ๐ฑ Mali | 29 | https://iptv-org.github.io/iptv/countries/ml.m3u |
- | ๐ฒ๐น Malta | 46 | https://iptv-org.github.io/iptv/countries/mt.m3u |
+ | ๐ฒ๐ฑ Mali | 28 | https://iptv-org.github.io/iptv/countries/ml.m3u |
+ | ๐ฒ๐น Malta | 45 | https://iptv-org.github.io/iptv/countries/mt.m3u |
| ๐ฒ๐ญ Marshall Islands | 5 | https://iptv-org.github.io/iptv/countries/mh.m3u |
- | ๐ฒ๐ถ Martinique | 24 | https://iptv-org.github.io/iptv/countries/mq.m3u |
+ | ๐ฒ๐ถ Martinique | 25 | https://iptv-org.github.io/iptv/countries/mq.m3u |
| ๐ฒ๐ท Mauritania | 62 | https://iptv-org.github.io/iptv/countries/mr.m3u |
| ๐ฒ๐บ Mauritius | 24 | https://iptv-org.github.io/iptv/countries/mu.m3u |
| ๐พ๐น Mayotte | 24 | https://iptv-org.github.io/iptv/countries/yt.m3u |
- | ๐ฒ๐ฝ Mexico | 253 | https://iptv-org.github.io/iptv/countries/mx.m3u |
+ | ๐ฒ๐ฝ Mexico | 254 | https://iptv-org.github.io/iptv/countries/mx.m3u |
| Chihuahua | 2 | https://iptv-org.github.io/iptv/subdivisions/mx-chh.m3u |
| Coahuila de Zaragoza | 1 | https://iptv-org.github.io/iptv/subdivisions/mx-coa.m3u |
| Durango | 1 | https://iptv-org.github.io/iptv/subdivisions/mx-dur.m3u |
@@ -611,10 +613,10 @@ Same thing, but split up into separate files:
| San Luis Potosi | 1 | https://iptv-org.github.io/iptv/subdivisions/mx-slp.m3u |
| Yucatan | 1 | https://iptv-org.github.io/iptv/subdivisions/mx-yuc.m3u |
| ๐ซ๐ฒ Micronesia | 5 | https://iptv-org.github.io/iptv/countries/fm.m3u |
- | ๐ฒ๐ฉ Moldova | 65 | https://iptv-org.github.io/iptv/countries/md.m3u |
- | ๐ฒ๐จ Monaco | 33 | https://iptv-org.github.io/iptv/countries/mc.m3u |
+ | ๐ฒ๐ฉ Moldova | 62 | https://iptv-org.github.io/iptv/countries/md.m3u |
+ | ๐ฒ๐จ Monaco | 32 | https://iptv-org.github.io/iptv/countries/mc.m3u |
| ๐ฒ๐ณ Mongolia | 24 | https://iptv-org.github.io/iptv/countries/mn.m3u |
- | ๐ฒ๐ช Montenegro | 36 | https://iptv-org.github.io/iptv/countries/me.m3u |
+ | ๐ฒ๐ช Montenegro | 35 | https://iptv-org.github.io/iptv/countries/me.m3u |
| Ulcinj | 1 | https://iptv-org.github.io/iptv/subdivisions/me-20.m3u |
| ๐ฒ๐ธ Montserrat | 12 | https://iptv-org.github.io/iptv/countries/ms.m3u |
| ๐ฒ๐ฆ Morocco | 75 | https://iptv-org.github.io/iptv/countries/ma.m3u |
@@ -623,32 +625,32 @@ Same thing, but split up into separate files:
| ๐ณ๐ฆ Namibia | 24 | https://iptv-org.github.io/iptv/countries/na.m3u |
| ๐ณ๐ท Nauru | 5 | https://iptv-org.github.io/iptv/countries/nr.m3u |
| ๐ณ๐ต Nepal | 17 | https://iptv-org.github.io/iptv/countries/np.m3u |
- | ๐ณ๐ฑ Netherlands | 196 | https://iptv-org.github.io/iptv/countries/nl.m3u |
+ | ๐ณ๐ฑ Netherlands | 195 | https://iptv-org.github.io/iptv/countries/nl.m3u |
| ๐ณ๐จ New Caledonia | 5 | https://iptv-org.github.io/iptv/countries/nc.m3u |
| ๐ณ๐ฟ New Zealand | 24 | https://iptv-org.github.io/iptv/countries/nz.m3u |
- | ๐ณ๐ฎ Nicaragua | 81 | https://iptv-org.github.io/iptv/countries/ni.m3u |
+ | ๐ณ๐ฎ Nicaragua | 82 | https://iptv-org.github.io/iptv/countries/ni.m3u |
| ๐ณ๐ช Niger | 25 | https://iptv-org.github.io/iptv/countries/ne.m3u |
| ๐ณ๐ฌ Nigeria | 82 | https://iptv-org.github.io/iptv/countries/ng.m3u |
| ๐ณ๐บ Niue | 5 | https://iptv-org.github.io/iptv/countries/nu.m3u |
| ๐ณ๐ซ Norfolk Island | 5 | https://iptv-org.github.io/iptv/countries/nf.m3u |
| ๐ฐ๐ต North Korea | 5 | https://iptv-org.github.io/iptv/countries/kp.m3u |
- | ๐ฒ๐ฐ North Macedonia | 65 | https://iptv-org.github.io/iptv/countries/mk.m3u |
+ | ๐ฒ๐ฐ North Macedonia | 64 | https://iptv-org.github.io/iptv/countries/mk.m3u |
| ๐ฒ๐ต Northern Mariana Islands | 5 | https://iptv-org.github.io/iptv/countries/mp.m3u |
- | ๐ณ๐ด Norway | 38 | https://iptv-org.github.io/iptv/countries/no.m3u |
+ | ๐ณ๐ด Norway | 37 | https://iptv-org.github.io/iptv/countries/no.m3u |
| ๐ด๐ฒ Oman | 47 | https://iptv-org.github.io/iptv/countries/om.m3u |
| ๐ต๐ฐ Pakistan | 39 | https://iptv-org.github.io/iptv/countries/pk.m3u |
| ๐ต๐ผ Palau | 5 | https://iptv-org.github.io/iptv/countries/pw.m3u |
| ๐ต๐ธ Palestine | 63 | https://iptv-org.github.io/iptv/countries/ps.m3u |
- | ๐ต๐ฆ Panama | 83 | https://iptv-org.github.io/iptv/countries/pa.m3u |
+ | ๐ต๐ฆ Panama | 84 | https://iptv-org.github.io/iptv/countries/pa.m3u |
| ๐ต๐ฌ Papua New Guinea | 6 | https://iptv-org.github.io/iptv/countries/pg.m3u |
- | ๐ต๐พ Paraguay | 123 | https://iptv-org.github.io/iptv/countries/py.m3u |
+ | ๐ต๐พ Paraguay | 124 | https://iptv-org.github.io/iptv/countries/py.m3u |
| Alto Parana | 2 | https://iptv-org.github.io/iptv/subdivisions/py-10.m3u |
| Boqueron | 1 | https://iptv-org.github.io/iptv/subdivisions/py-19.m3u |
| Caaguazu | 1 | https://iptv-org.github.io/iptv/subdivisions/py-5.m3u |
| Central | 1 | https://iptv-org.github.io/iptv/subdivisions/py-11.m3u |
| Itapua | 1 | https://iptv-org.github.io/iptv/subdivisions/py-7.m3u |
| Presidente Hayes | 1 | https://iptv-org.github.io/iptv/subdivisions/py-15.m3u |
- | ๐ต๐ช Peru | 207 | https://iptv-org.github.io/iptv/countries/pe.m3u |
+ | ๐ต๐ช Peru | 208 | https://iptv-org.github.io/iptv/countries/pe.m3u |
| Amazonas | 2 | https://iptv-org.github.io/iptv/subdivisions/pe-ama.m3u |
| Ancash | 1 | https://iptv-org.github.io/iptv/subdivisions/pe-anc.m3u |
| Apurimac | 1 | https://iptv-org.github.io/iptv/subdivisions/pe-apu.m3u |
@@ -665,36 +667,36 @@ Same thing, but split up into separate files:
| Ucayali | 2 | https://iptv-org.github.io/iptv/subdivisions/pe-uca.m3u |
| ๐ต๐ญ Philippines | 26 | https://iptv-org.github.io/iptv/countries/ph.m3u |
| ๐ต๐ณ Pitcairn Islands | 5 | https://iptv-org.github.io/iptv/countries/pn.m3u |
- | ๐ต๐ฑ Poland | 196 | https://iptv-org.github.io/iptv/countries/pl.m3u |
+ | ๐ต๐ฑ Poland | 181 | https://iptv-org.github.io/iptv/countries/pl.m3u |
| ๐ต๐น Portugal | 83 | https://iptv-org.github.io/iptv/countries/pt.m3u |
| ๐ต๐ท Puerto Rico | 99 | https://iptv-org.github.io/iptv/countries/pr.m3u |
| ๐ถ๐ฆ Qatar | 54 | https://iptv-org.github.io/iptv/countries/qa.m3u |
| ๐จ๐ฌ Republic of the Congo | 33 | https://iptv-org.github.io/iptv/countries/cg.m3u |
| Brazzaville | 1 | https://iptv-org.github.io/iptv/subdivisions/cg-bzv.m3u |
| ๐ท๐ช Reunion | 24 | https://iptv-org.github.io/iptv/countries/re.m3u |
- | ๐ท๐ด Romania | 143 | https://iptv-org.github.io/iptv/countries/ro.m3u |
+ | ๐ท๐ด Romania | 142 | https://iptv-org.github.io/iptv/countries/ro.m3u |
| Gorj | 1 | https://iptv-org.github.io/iptv/subdivisions/ro-gj.m3u |
- | ๐ท๐บ Russia | 228 | https://iptv-org.github.io/iptv/countries/ru.m3u |
+ | ๐ท๐บ Russia | 209 | https://iptv-org.github.io/iptv/countries/ru.m3u |
| ๐ท๐ผ Rwanda | 31 | https://iptv-org.github.io/iptv/countries/rw.m3u |
- | ๐ง๐ฑ Saint Barthรฉlemy | 20 | https://iptv-org.github.io/iptv/countries/bl.m3u |
+ | ๐ง๐ฑ Saint Barthรฉlemy | 21 | https://iptv-org.github.io/iptv/countries/bl.m3u |
| ๐ธ๐ญ Saint Helena | 23 | https://iptv-org.github.io/iptv/countries/sh.m3u |
| ๐ฐ๐ณ Saint Kitts and Nevis | 13 | https://iptv-org.github.io/iptv/countries/kn.m3u |
| ๐ฑ๐จ Saint Lucia | 13 | https://iptv-org.github.io/iptv/countries/lc.m3u |
- | ๐ฒ๐ซ Saint Martin | 20 | https://iptv-org.github.io/iptv/countries/mf.m3u |
+ | ๐ฒ๐ซ Saint Martin | 21 | https://iptv-org.github.io/iptv/countries/mf.m3u |
| ๐ต๐ฒ Saint Pierre and Miquelon | 7 | https://iptv-org.github.io/iptv/countries/pm.m3u |
| ๐ป๐จ Saint Vincent and the Grenadines | 12 | https://iptv-org.github.io/iptv/countries/vc.m3u |
| ๐ผ๐ธ Samoa | 7 | https://iptv-org.github.io/iptv/countries/ws.m3u |
- | ๐ธ๐ฒ San Marino | 30 | https://iptv-org.github.io/iptv/countries/sm.m3u |
+ | ๐ธ๐ฒ San Marino | 29 | https://iptv-org.github.io/iptv/countries/sm.m3u |
| ๐ธ๐น Sao Tome and Principe | 24 | https://iptv-org.github.io/iptv/countries/st.m3u |
| ๐ธ๐ฆ Saudi Arabia | 90 | https://iptv-org.github.io/iptv/countries/sa.m3u |
- | ๐ธ๐ณ Senegal | 54 | https://iptv-org.github.io/iptv/countries/sn.m3u |
+ | ๐ธ๐ณ Senegal | 49 | https://iptv-org.github.io/iptv/countries/sn.m3u |
| ๐ท๐ธ Serbia | 69 | https://iptv-org.github.io/iptv/countries/rs.m3u |
| ๐ธ๐จ Seychelles | 23 | https://iptv-org.github.io/iptv/countries/sc.m3u |
| ๐ธ๐ฑ Sierra Leone | 25 | https://iptv-org.github.io/iptv/countries/sl.m3u |
- | ๐ธ๐ฌ Singapore | 21 | https://iptv-org.github.io/iptv/countries/sg.m3u |
+ | ๐ธ๐ฌ Singapore | 22 | https://iptv-org.github.io/iptv/countries/sg.m3u |
| ๐ธ๐ฝ Sint Maarten | 18 | https://iptv-org.github.io/iptv/countries/sx.m3u |
- | ๐ธ๐ฐ Slovakia | 92 | https://iptv-org.github.io/iptv/countries/sk.m3u |
- | ๐ธ๐ฎ Slovenia | 56 | https://iptv-org.github.io/iptv/countries/si.m3u |
+ | ๐ธ๐ฐ Slovakia | 91 | https://iptv-org.github.io/iptv/countries/sk.m3u |
+ | ๐ธ๐ฎ Slovenia | 55 | https://iptv-org.github.io/iptv/countries/si.m3u |
| ๐ธ๐ง Solomon Islands | 5 | https://iptv-org.github.io/iptv/countries/sb.m3u |
| ๐ธ๐ด Somalia | 69 | https://iptv-org.github.io/iptv/countries/so.m3u |
| ๐ฟ๐ฆ South Africa | 61 | https://iptv-org.github.io/iptv/countries/za.m3u |
@@ -714,7 +716,7 @@ Same thing, but split up into separate files:
| Seoul-teukbyeolsi | 1 | https://iptv-org.github.io/iptv/subdivisions/kr-11.m3u |
| Ulsan-gwangyeoksi | 1 | https://iptv-org.github.io/iptv/subdivisions/kr-31.m3u |
| ๐ธ๐ธ South Sudan | 23 | https://iptv-org.github.io/iptv/countries/ss.m3u |
- | ๐ช๐ธ Spain | 341 | https://iptv-org.github.io/iptv/countries/es.m3u |
+ | ๐ช๐ธ Spain | 340 | https://iptv-org.github.io/iptv/countries/es.m3u |
| Andalucia | 38 | https://iptv-org.github.io/iptv/subdivisions/es-an.m3u |
| Aragon | 1 | https://iptv-org.github.io/iptv/subdivisions/es-ar.m3u |
| Asturias, Principado de | 1 | https://iptv-org.github.io/iptv/subdivisions/es-as.m3u |
@@ -736,28 +738,28 @@ Same thing, but split up into separate files:
| ๐ธ๐ฉ Sudan | 66 | https://iptv-org.github.io/iptv/countries/sd.m3u |
| ๐ธ๐ท Suriname | 10 | https://iptv-org.github.io/iptv/countries/sr.m3u |
| ๐ธ๐ฟ Swaziland | 24 | https://iptv-org.github.io/iptv/countries/sz.m3u |
- | ๐ธ๐ช Sweden | 58 | https://iptv-org.github.io/iptv/countries/se.m3u |
- | ๐จ๐ญ Switzerland | 76 | https://iptv-org.github.io/iptv/countries/ch.m3u |
+ | ๐ธ๐ช Sweden | 57 | https://iptv-org.github.io/iptv/countries/se.m3u |
+ | ๐จ๐ญ Switzerland | 75 | https://iptv-org.github.io/iptv/countries/ch.m3u |
| ๐ธ๐พ Syria | 46 | https://iptv-org.github.io/iptv/countries/sy.m3u |
| ๐น๐ผ Taiwan | 29 | https://iptv-org.github.io/iptv/countries/tw.m3u |
- | ๐น๐ฏ Tajikistan | 30 | https://iptv-org.github.io/iptv/countries/tj.m3u |
+ | ๐น๐ฏ Tajikistan | 28 | https://iptv-org.github.io/iptv/countries/tj.m3u |
| ๐น๐ฟ Tanzania | 31 | https://iptv-org.github.io/iptv/countries/tz.m3u |
| ๐น๐ญ Thailand | 75 | https://iptv-org.github.io/iptv/countries/th.m3u |
- | ๐น๐ฌ Togo | 36 | https://iptv-org.github.io/iptv/countries/tg.m3u |
+ | ๐น๐ฌ Togo | 35 | https://iptv-org.github.io/iptv/countries/tg.m3u |
| ๐น๐ฐ Tokelau | 5 | https://iptv-org.github.io/iptv/countries/tk.m3u |
| ๐น๐ด Tonga | 5 | https://iptv-org.github.io/iptv/countries/to.m3u |
| ๐น๐น Trinidad and Tobago | 18 | https://iptv-org.github.io/iptv/countries/tt.m3u |
| ๐น๐ณ Tunisia | 66 | https://iptv-org.github.io/iptv/countries/tn.m3u |
- | ๐น๐ท Turkey | 281 | https://iptv-org.github.io/iptv/countries/tr.m3u |
+ | ๐น๐ท Turkey | 280 | https://iptv-org.github.io/iptv/countries/tr.m3u |
| ๐น๐ฒ Turkmenistan | 16 | https://iptv-org.github.io/iptv/countries/tm.m3u |
| ๐น๐จ Turks and Caicos Islands | 12 | https://iptv-org.github.io/iptv/countries/tc.m3u |
| ๐น๐ป Tuvalu | 5 | https://iptv-org.github.io/iptv/countries/tv.m3u |
| ๐ป๐ฎ U.S. Virgin Islands | 12 | https://iptv-org.github.io/iptv/countries/vi.m3u |
| ๐บ๐ฌ Uganda | 51 | https://iptv-org.github.io/iptv/countries/ug.m3u |
- | ๐บ๐ฆ Ukraine | 92 | https://iptv-org.github.io/iptv/countries/ua.m3u |
+ | ๐บ๐ฆ Ukraine | 91 | https://iptv-org.github.io/iptv/countries/ua.m3u |
| ๐ฆ๐ช United Arab Emirates | 88 | https://iptv-org.github.io/iptv/countries/ae.m3u |
- | ๐ฌ๐ง United Kingdom | 175 | https://iptv-org.github.io/iptv/countries/uk.m3u |
- | ๐บ๐ธ United States | 1421 | https://iptv-org.github.io/iptv/countries/us.m3u |
+ | ๐ฌ๐ง United Kingdom | 174 | https://iptv-org.github.io/iptv/countries/uk.m3u |
+ | ๐บ๐ธ United States | 1422 | https://iptv-org.github.io/iptv/countries/us.m3u |
| Alabama | 3 | https://iptv-org.github.io/iptv/subdivisions/us-al.m3u |
| Alaska | 2 | https://iptv-org.github.io/iptv/subdivisions/us-ak.m3u |
| Arizona | 13 | https://iptv-org.github.io/iptv/subdivisions/us-az.m3u |
@@ -805,11 +807,11 @@ Same thing, but split up into separate files:
| Virginia | 3 | https://iptv-org.github.io/iptv/subdivisions/us-va.m3u |
| Washington | 5 | https://iptv-org.github.io/iptv/subdivisions/us-wa.m3u |
| Wisconsin | 4 | https://iptv-org.github.io/iptv/subdivisions/us-wi.m3u |
- | ๐บ๐พ Uruguay | 74 | https://iptv-org.github.io/iptv/countries/uy.m3u |
- | ๐บ๐ฟ Uzbekistan | 30 | https://iptv-org.github.io/iptv/countries/uz.m3u |
+ | ๐บ๐พ Uruguay | 75 | https://iptv-org.github.io/iptv/countries/uy.m3u |
+ | ๐บ๐ฟ Uzbekistan | 28 | https://iptv-org.github.io/iptv/countries/uz.m3u |
| ๐ป๐บ Vanuatu | 5 | https://iptv-org.github.io/iptv/countries/vu.m3u |
- | ๐ป๐ฆ Vatican City | 29 | https://iptv-org.github.io/iptv/countries/va.m3u |
- | ๐ป๐ช Venezuela | 115 | https://iptv-org.github.io/iptv/countries/ve.m3u |
+ | ๐ป๐ฆ Vatican City | 28 | https://iptv-org.github.io/iptv/countries/va.m3u |
+ | ๐ป๐ช Venezuela | 116 | https://iptv-org.github.io/iptv/countries/ve.m3u |
| Aragua | 2 | https://iptv-org.github.io/iptv/subdivisions/ve-d.m3u |
| Lara | 1 | https://iptv-org.github.io/iptv/subdivisions/ve-k.m3u |
| ๐ป๐ณ Vietnam | 71 | https://iptv-org.github.io/iptv/countries/vn.m3u |
@@ -818,7 +820,7 @@ Same thing, but split up into separate files:
| ๐พ๐ช Yemen | 46 | https://iptv-org.github.io/iptv/countries/ye.m3u |
| ๐ฟ๐ฒ Zambia | 24 | https://iptv-org.github.io/iptv/countries/zm.m3u |
| ๐ฟ๐ผ Zimbabwe | 24 | https://iptv-org.github.io/iptv/countries/zw.m3u |
- | Undefined | 2889 | https://iptv-org.github.io/iptv/countries/undefined.m3u |
+ | Undefined | 2880 | https://iptv-org.github.io/iptv/countries/undefined.m3u |
@@ -844,42 +846,42 @@ Same thing, but split up into separate files:
| Region | Channels | Playlist |
- | Africa | 546 | https://iptv-org.github.io/iptv/regions/afr.m3u |
- | Americas | 3598 | https://iptv-org.github.io/iptv/regions/amer.m3u |
- | Arab world | 402 | https://iptv-org.github.io/iptv/regions/arab.m3u |
- | Asia | 2162 | https://iptv-org.github.io/iptv/regions/asia.m3u |
- | Asia-Pacific | 1135 | https://iptv-org.github.io/iptv/regions/apac.m3u |
- | Association of Southeast Asian Nations | 344 | https://iptv-org.github.io/iptv/regions/asean.m3u |
- | Balkan | 681 | https://iptv-org.github.io/iptv/regions/balkan.m3u |
- | Benelux | 241 | https://iptv-org.github.io/iptv/regions/benelux.m3u |
- | Caribbean | 365 | https://iptv-org.github.io/iptv/regions/carib.m3u |
- | Central America | 372 | https://iptv-org.github.io/iptv/regions/cenamer.m3u |
- | Central and Eastern Europe | 1000 | https://iptv-org.github.io/iptv/regions/cee.m3u |
- | Central Asia | 112 | https://iptv-org.github.io/iptv/regions/cas.m3u |
- | Commonwealth of Independent States | 373 | https://iptv-org.github.io/iptv/regions/cis.m3u |
- | Europe | 2874 | https://iptv-org.github.io/iptv/regions/eur.m3u |
- | Europe, the Middle East and Africa | 3785 | https://iptv-org.github.io/iptv/regions/emea.m3u |
- | European Union | 1956 | https://iptv-org.github.io/iptv/regions/eu.m3u |
- | Hispanic America | 1680 | https://iptv-org.github.io/iptv/regions/hispam.m3u |
- | Latin America | 1995 | https://iptv-org.github.io/iptv/regions/latam.m3u |
- | Latin America and the Caribbean | 2039 | https://iptv-org.github.io/iptv/regions/lac.m3u |
+ | Africa | 542 | https://iptv-org.github.io/iptv/regions/afr.m3u |
+ | Americas | 3603 | https://iptv-org.github.io/iptv/regions/amer.m3u |
+ | Arab world | 403 | https://iptv-org.github.io/iptv/regions/arab.m3u |
+ | Asia | 2142 | https://iptv-org.github.io/iptv/regions/asia.m3u |
+ | Asia-Pacific | 1134 | https://iptv-org.github.io/iptv/regions/apac.m3u |
+ | Association of Southeast Asian Nations | 347 | https://iptv-org.github.io/iptv/regions/asean.m3u |
+ | Balkan | 689 | https://iptv-org.github.io/iptv/regions/balkan.m3u |
+ | Benelux | 240 | https://iptv-org.github.io/iptv/regions/benelux.m3u |
+ | Caribbean | 366 | https://iptv-org.github.io/iptv/regions/carib.m3u |
+ | Central America | 373 | https://iptv-org.github.io/iptv/regions/cenamer.m3u |
+ | Central and Eastern Europe | 976 | https://iptv-org.github.io/iptv/regions/cee.m3u |
+ | Central Asia | 109 | https://iptv-org.github.io/iptv/regions/cas.m3u |
+ | Commonwealth of Independent States | 354 | https://iptv-org.github.io/iptv/regions/cis.m3u |
+ | Europe | 2841 | https://iptv-org.github.io/iptv/regions/eur.m3u |
+ | Europe, the Middle East and Africa | 3750 | https://iptv-org.github.io/iptv/regions/emea.m3u |
+ | European Union | 1939 | https://iptv-org.github.io/iptv/regions/eu.m3u |
+ | Hispanic America | 1682 | https://iptv-org.github.io/iptv/regions/hispam.m3u |
+ | Latin America | 1999 | https://iptv-org.github.io/iptv/regions/latam.m3u |
+ | Latin America and the Caribbean | 2043 | https://iptv-org.github.io/iptv/regions/lac.m3u |
| Maghreb | 90 | https://iptv-org.github.io/iptv/regions/maghreb.m3u |
- | Middle East | 807 | https://iptv-org.github.io/iptv/regions/mideast.m3u |
- | Middle East and North Africa | 836 | https://iptv-org.github.io/iptv/regions/mena.m3u |
- | Nordics | 112 | https://iptv-org.github.io/iptv/regions/nord.m3u |
- | North America | 2419 | https://iptv-org.github.io/iptv/regions/noram.m3u |
- | Northern America | 1581 | https://iptv-org.github.io/iptv/regions/nam.m3u |
- | Northern Europe | 154 | https://iptv-org.github.io/iptv/regions/neur.m3u |
- | Oceania | 54 | https://iptv-org.github.io/iptv/regions/oce.m3u |
- | South America | 1258 | https://iptv-org.github.io/iptv/regions/southam.m3u |
+ | Middle East | 808 | https://iptv-org.github.io/iptv/regions/mideast.m3u |
+ | Middle East and North Africa | 837 | https://iptv-org.github.io/iptv/regions/mena.m3u |
+ | Nordics | 111 | https://iptv-org.github.io/iptv/regions/nord.m3u |
+ | North America | 2421 | https://iptv-org.github.io/iptv/regions/noram.m3u |
+ | Northern America | 1582 | https://iptv-org.github.io/iptv/regions/nam.m3u |
+ | Northern Europe | 147 | https://iptv-org.github.io/iptv/regions/neur.m3u |
+ | Oceania | 56 | https://iptv-org.github.io/iptv/regions/oce.m3u |
+ | South America | 1262 | https://iptv-org.github.io/iptv/regions/southam.m3u |
| South Asia | 408 | https://iptv-org.github.io/iptv/regions/sas.m3u |
- | Southeast Asia | 344 | https://iptv-org.github.io/iptv/regions/sea.m3u |
- | Southern Europe | 1057 | https://iptv-org.github.io/iptv/regions/ser.m3u |
- | Sub-Saharan Africa | 491 | https://iptv-org.github.io/iptv/regions/ssa.m3u |
- | West Africa | 253 | https://iptv-org.github.io/iptv/regions/wafr.m3u |
- | Western Europe | 782 | https://iptv-org.github.io/iptv/regions/wer.m3u |
+ | Southeast Asia | 347 | https://iptv-org.github.io/iptv/regions/sea.m3u |
+ | Southern Europe | 1058 | https://iptv-org.github.io/iptv/regions/ser.m3u |
+ | Sub-Saharan Africa | 487 | https://iptv-org.github.io/iptv/regions/ssa.m3u |
+ | West Africa | 249 | https://iptv-org.github.io/iptv/regions/wafr.m3u |
+ | Western Europe | 783 | https://iptv-org.github.io/iptv/regions/wer.m3u |
| Worldwide | 57 | https://iptv-org.github.io/iptv/regions/int.m3u |
- | Undefined | 2889 | https://iptv-org.github.io/iptv/regions/undefined.m3u |
+ | Undefined | 2880 | https://iptv-org.github.io/iptv/regions/undefined.m3u |
diff --git a/package-lock.json b/package-lock.json
index 4df46535d..e09fd3949 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,7 +10,7 @@
"dependencies": {
"@eslint/eslintrc": "^3.3.0",
"@eslint/js": "^9.21.0",
- "@freearhey/core": "^0.7.0",
+ "@freearhey/core": "^0.8.2",
"@freearhey/search-js": "^0.1.2",
"@inquirer/prompts": "^7.4.1",
"@octokit/core": "^6.1.4",
@@ -18,6 +18,7 @@
"@octokit/plugin-rest-endpoint-methods": "^7.1.3",
"@octokit/types": "^11.1.0",
"@types/cli-progress": "^3.11.3",
+ "@types/fs-extra": "^11.0.4",
"@types/jest": "^29.5.14",
"@types/lodash": "^4.14.198",
"@types/numeral": "^2.0.3",
@@ -31,6 +32,7 @@
"commander": "^8.3.0",
"console-table-printer": "^2.12.1",
"eslint": "^9.17.0",
+ "glob": "^11.0.2",
"globals": "^16.0.0",
"iptv-checker": "^0.29.1",
"iptv-playlist-parser": "^0.13.0",
@@ -1065,23 +1067,20 @@
}
},
"node_modules/@freearhey/core": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/@freearhey/core/-/core-0.7.0.tgz",
- "integrity": "sha512-HXkKPYGY7ife7JAc1q/Qxzy0WUdSnyt3rHThCShZHgnH3rz0tpkjHFW7LNegB3he0IKn/Zc95/YSOQ97Fq8ctA==",
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/@freearhey/core/-/core-0.8.2.tgz",
+ "integrity": "sha512-jlb1XUbhUf3lqD3B9Wmx3c8qYG4+s1I0cr2FFQfiMpJh4nMvfUNdJr2OhH31S/dbNP12ycT6RPVoZ2j2G3+mXA==",
"dependencies": {
- "@types/fs-extra": "^11.0.2",
- "@types/lodash": "^4.14.198",
- "@types/luxon": "^3.3.2",
- "fs-extra": "^11.1.1",
- "glob": "^10.3.4",
+ "consola": "^3.4.2",
+ "dayjs": "^1.11.13",
+ "fs-extra": "^11.3.0",
+ "glob": "^11.0.1",
"lodash": "^4.17.21",
- "luxon": "^3.4.3",
- "natural-orderby": "^3.0.2",
- "node-gzip": "^1.1.2",
+ "natural-orderby": "^5.0.0",
"normalize-url": "^6.1.0",
"object-treeify": "^2.1.1",
- "run-script-os": "^1.1.6",
- "signale": "^1.4.0"
+ "pako": "^2.1.0",
+ "timer-node": "^5.0.9"
}
},
"node_modules/@freearhey/core/node_modules/normalize-url": {
@@ -1493,9 +1492,9 @@
}
},
"node_modules/@isaacs/cliui/node_modules/ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
"engines": {
"node": ">=12"
},
@@ -2287,15 +2286,6 @@
"resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz",
"integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg=="
},
- "node_modules/@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "optional": true,
- "engines": {
- "node": ">=14"
- }
- },
"node_modules/@sinclair/typebox": {
"version": "0.27.8",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
@@ -2379,9 +2369,9 @@
"integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="
},
"node_modules/@types/fs-extra": {
- "version": "11.0.2",
- "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.2.tgz",
- "integrity": "sha512-c0hrgAOVYr21EX8J0jBMXGLMgJqVf/v6yxi0dLaJboW9aQPh16Id+z6w2Tx1hm+piJOLv8xPfVKZCLfjPw/IMQ==",
+ "version": "11.0.4",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz",
+ "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==",
"dependencies": {
"@types/jsonfile": "*",
"@types/node": "*"
@@ -2432,9 +2422,9 @@
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="
},
"node_modules/@types/jsonfile": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz",
- "integrity": "sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==",
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz",
+ "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==",
"dependencies": {
"@types/node": "*"
}
@@ -2444,11 +2434,6 @@
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz",
"integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg=="
},
- "node_modules/@types/luxon": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.3.2.tgz",
- "integrity": "sha512-l5cpE57br4BIjK+9BSkFBOsWtwv6J9bJpC7gdXIzZyI0vuKvNTk0wZZrkQxMGsUAuGW9+WMNWF2IJMD7br2yeQ=="
- },
"node_modules/@types/node": {
"version": "22.13.10",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz",
@@ -3221,6 +3206,14 @@
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
},
+ "node_modules/consola": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz",
+ "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==",
+ "engines": {
+ "node": "^14.18.0 || >=16.10.0"
+ }
+ },
"node_modules/console-table-printer": {
"version": "2.12.1",
"resolved": "https://registry.npmjs.org/console-table-printer/-/console-table-printer-2.12.1.tgz",
@@ -3285,6 +3278,11 @@
"node": ">=12.20"
}
},
+ "node_modules/dayjs": {
+ "version": "1.11.13",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
+ "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
+ },
"node_modules/debug": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
@@ -3400,6 +3398,7 @@
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "peer": true,
"dependencies": {
"is-arrayish": "^0.2.1"
}
@@ -3407,7 +3406,8 @@
"node_modules/error-ex/node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "peer": true
},
"node_modules/esbuild": {
"version": "0.25.1",
@@ -3790,25 +3790,6 @@
"bser": "2.1.1"
}
},
- "node_modules/figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
- "dependencies": {
- "escape-string-regexp": "^1.0.5"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/figures/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "engines": {
- "node": ">=0.8.0"
- }
- },
"node_modules/file-entry-cache": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
@@ -3949,9 +3930,9 @@
}
},
"node_modules/fs-extra": {
- "version": "11.1.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz",
- "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==",
+ "version": "11.3.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz",
+ "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
@@ -3962,9 +3943,9 @@
}
},
"node_modules/fs-extra/node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
"engines": {
"node": ">= 10.0.0"
}
@@ -4058,21 +4039,22 @@
}
},
"node_modules/glob": {
- "version": "10.3.4",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz",
- "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==",
+ "version": "11.0.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.2.tgz",
+ "integrity": "sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==",
"dependencies": {
"foreground-child": "^3.1.0",
- "jackspeak": "^2.0.3",
- "minimatch": "^9.0.1",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
- "path-scurry": "^1.10.1"
+ "jackspeak": "^4.0.1",
+ "minimatch": "^10.0.0",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^2.0.0"
},
"bin": {
- "glob": "dist/cjs/src/bin.js"
+ "glob": "dist/esm/bin.mjs"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": "20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -4117,14 +4099,14 @@
}
},
"node_modules/glob/node_modules/minimatch": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
- "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz",
+ "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==",
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": "20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -4529,20 +4511,17 @@
}
},
"node_modules/jackspeak": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz",
- "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz",
+ "integrity": "sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==",
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
"engines": {
- "node": ">=14"
+ "node": "20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
}
},
"node_modules/jake": {
@@ -5197,11 +5176,6 @@
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
},
- "node_modules/json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
- },
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
@@ -5241,9 +5215,9 @@
}
},
"node_modules/jsonfile/node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
"engines": {
"node": ">= 10.0.0"
}
@@ -5292,40 +5266,6 @@
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"peer": true
},
- "node_modules/load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/load-json-file/node_modules/parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
- "dependencies": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/load-json-file/node_modules/strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -5364,14 +5304,6 @@
"yallist": "^3.0.2"
}
},
- "node_modules/luxon": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz",
- "integrity": "sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==",
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/m3u-linter": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/m3u-linter/-/m3u-linter-0.4.2.tgz",
@@ -5389,14 +5321,6 @@
"node": ">=10.0.0"
}
},
- "node_modules/m3u-linter/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
"node_modules/m3u-linter/node_modules/commander": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
@@ -5405,79 +5329,6 @@
"node": ">= 10"
}
},
- "node_modules/m3u-linter/node_modules/glob": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz",
- "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==",
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^4.0.1",
- "minimatch": "^10.0.0",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^2.0.0"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "engines": {
- "node": "20 || >=22"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/m3u-linter/node_modules/jackspeak": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz",
- "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==",
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "engines": {
- "node": "20 || >=22"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/m3u-linter/node_modules/lru-cache": {
- "version": "11.0.2",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz",
- "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==",
- "engines": {
- "node": "20 || >=22"
- }
- },
- "node_modules/m3u-linter/node_modules/minimatch": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz",
- "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": "20 || >=22"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/m3u-linter/node_modules/path-scurry": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz",
- "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
- "dependencies": {
- "lru-cache": "^11.0.0",
- "minipass": "^7.1.2"
- },
- "engines": {
- "node": "20 || >=22"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/make-dir": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
@@ -5664,9 +5515,9 @@
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
},
"node_modules/natural-orderby": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-3.0.2.tgz",
- "integrity": "sha512-x7ZdOwBxZCEm9MM7+eQCjkrNLrW3rkBKNHVr78zbtqnMGVNlnDi6C/eUEYgxHNrcbu0ymvjzcwIL/6H1iHri9g==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-5.0.0.tgz",
+ "integrity": "sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==",
"engines": {
"node": ">=18"
}
@@ -5676,11 +5527,6 @@
"resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz",
"integrity": "sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw=="
},
- "node_modules/node-gzip": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/node-gzip/-/node-gzip-1.1.2.tgz",
- "integrity": "sha512-ZB6zWpfZHGtxZnPMrJSKHVPrRjURoUzaDbLFj3VO70mpLTW5np96vXyHwft4Id0o+PYIzgDkBUjIzaNHhQ8srw=="
- },
"node_modules/node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
@@ -5836,6 +5682,11 @@
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="
},
+ "node_modules/pako": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz",
+ "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug=="
+ },
"node_modules/parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -5897,26 +5748,26 @@
"peer": true
},
"node_modules/path-scurry": {
- "version": "1.10.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
- "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz",
+ "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
"dependencies": {
- "lru-cache": "^9.1.1 || ^10.0.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ "lru-cache": "^11.0.0",
+ "minipass": "^7.1.2"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": "20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/path-scurry/node_modules/lru-cache": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz",
- "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==",
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz",
+ "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==",
"engines": {
- "node": "14 || >=16.14"
+ "node": "20 || >=22"
}
},
"node_modules/path-to-regexp": {
@@ -5940,14 +5791,6 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/pirates": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
@@ -5957,79 +5800,6 @@
"node": ">= 6"
}
},
- "node_modules/pkg-conf": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz",
- "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=",
- "dependencies": {
- "find-up": "^2.0.0",
- "load-json-file": "^4.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-conf/node_modules/find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dependencies": {
- "locate-path": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-conf/node_modules/locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dependencies": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-conf/node_modules/p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dependencies": {
- "p-try": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-conf/node_modules/p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "dependencies": {
- "p-limit": "^1.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-conf/node_modules/p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-conf/node_modules/path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/pkg-dir": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
@@ -6335,15 +6105,6 @@
"queue-microtask": "^1.2.2"
}
},
- "node_modules/run-script-os": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/run-script-os/-/run-script-os-1.1.6.tgz",
- "integrity": "sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==",
- "bin": {
- "run-os": "index.js",
- "run-script-os": "index.js"
- }
- },
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -6385,83 +6146,6 @@
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"peer": true
},
- "node_modules/signale": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz",
- "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==",
- "dependencies": {
- "chalk": "^2.3.2",
- "figures": "^2.0.0",
- "pkg-conf": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/signale/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/signale/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/signale/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/signale/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "node_modules/signale/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/signale/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/signale/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/simple-wcswidth": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/simple-wcswidth/-/simple-wcswidth-1.0.1.tgz",
@@ -6723,6 +6407,11 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/timer-node": {
+ "version": "5.0.9",
+ "resolved": "https://registry.npmjs.org/timer-node/-/timer-node-5.0.9.tgz",
+ "integrity": "sha512-zXxCE/5/YDi0hY9pygqgRqjRbrFRzigYxOudG0I3syaqAAmX9/w9sxex1bNFCN6c1S66RwPtEIJv65dN+1psew=="
+ },
"node_modules/tmp": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
@@ -7741,23 +7430,20 @@
}
},
"@freearhey/core": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/@freearhey/core/-/core-0.7.0.tgz",
- "integrity": "sha512-HXkKPYGY7ife7JAc1q/Qxzy0WUdSnyt3rHThCShZHgnH3rz0tpkjHFW7LNegB3he0IKn/Zc95/YSOQ97Fq8ctA==",
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/@freearhey/core/-/core-0.8.2.tgz",
+ "integrity": "sha512-jlb1XUbhUf3lqD3B9Wmx3c8qYG4+s1I0cr2FFQfiMpJh4nMvfUNdJr2OhH31S/dbNP12ycT6RPVoZ2j2G3+mXA==",
"requires": {
- "@types/fs-extra": "^11.0.2",
- "@types/lodash": "^4.14.198",
- "@types/luxon": "^3.3.2",
- "fs-extra": "^11.1.1",
- "glob": "^10.3.4",
+ "consola": "^3.4.2",
+ "dayjs": "^1.11.13",
+ "fs-extra": "^11.3.0",
+ "glob": "^11.0.1",
"lodash": "^4.17.21",
- "luxon": "^3.4.3",
- "natural-orderby": "^3.0.2",
- "node-gzip": "^1.1.2",
+ "natural-orderby": "^5.0.0",
"normalize-url": "^6.1.0",
"object-treeify": "^2.1.1",
- "run-script-os": "^1.1.6",
- "signale": "^1.4.0"
+ "pako": "^2.1.0",
+ "timer-node": "^5.0.9"
},
"dependencies": {
"normalize-url": {
@@ -7982,9 +7668,9 @@
},
"dependencies": {
"ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="
},
"ansi-styles": {
"version": "6.2.1",
@@ -8623,12 +8309,6 @@
"resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz",
"integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg=="
},
- "@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "optional": true
- },
"@sinclair/typebox": {
"version": "0.27.8",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
@@ -8712,9 +8392,9 @@
"integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="
},
"@types/fs-extra": {
- "version": "11.0.2",
- "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.2.tgz",
- "integrity": "sha512-c0hrgAOVYr21EX8J0jBMXGLMgJqVf/v6yxi0dLaJboW9aQPh16Id+z6w2Tx1hm+piJOLv8xPfVKZCLfjPw/IMQ==",
+ "version": "11.0.4",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz",
+ "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==",
"requires": {
"@types/jsonfile": "*",
"@types/node": "*"
@@ -8765,9 +8445,9 @@
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="
},
"@types/jsonfile": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz",
- "integrity": "sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==",
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz",
+ "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==",
"requires": {
"@types/node": "*"
}
@@ -8777,11 +8457,6 @@
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz",
"integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg=="
},
- "@types/luxon": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.3.2.tgz",
- "integrity": "sha512-l5cpE57br4BIjK+9BSkFBOsWtwv6J9bJpC7gdXIzZyI0vuKvNTk0wZZrkQxMGsUAuGW9+WMNWF2IJMD7br2yeQ=="
- },
"@types/node": {
"version": "22.13.10",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz",
@@ -9318,6 +8993,11 @@
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
},
+ "consola": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz",
+ "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="
+ },
"console-table-printer": {
"version": "2.12.1",
"resolved": "https://registry.npmjs.org/console-table-printer/-/console-table-printer-2.12.1.tgz",
@@ -9367,6 +9047,11 @@
"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-5.0.3.tgz",
"integrity": "sha512-Kvr6HmPXUMerlLcLF+Pwq3K7apHpYmGDVqrxcDasBg86UcKeTSNWbEzU8bwdXnxnR44FtMhJAxI4Bov6Y/KUfA=="
},
+ "dayjs": {
+ "version": "1.11.13",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
+ "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
+ },
"debug": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
@@ -9443,6 +9128,7 @@
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "peer": true,
"requires": {
"is-arrayish": "^0.2.1"
},
@@ -9450,7 +9136,8 @@
"is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "peer": true
}
}
},
@@ -9726,21 +9413,6 @@
"bser": "2.1.1"
}
},
- "figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
- "requires": {
- "escape-string-regexp": "^1.0.5"
- },
- "dependencies": {
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
- }
- }
- },
"file-entry-cache": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
@@ -9838,9 +9510,9 @@
}
},
"fs-extra": {
- "version": "11.1.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz",
- "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==",
+ "version": "11.3.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz",
+ "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==",
"requires": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
@@ -9848,9 +9520,9 @@
},
"dependencies": {
"universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="
}
}
},
@@ -9909,15 +9581,16 @@
}
},
"glob": {
- "version": "10.3.4",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz",
- "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==",
+ "version": "11.0.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.2.tgz",
+ "integrity": "sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==",
"requires": {
"foreground-child": "^3.1.0",
- "jackspeak": "^2.0.3",
- "minimatch": "^9.0.1",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
- "path-scurry": "^1.10.1"
+ "jackspeak": "^4.0.1",
+ "minimatch": "^10.0.0",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^2.0.0"
},
"dependencies": {
"brace-expansion": {
@@ -9929,9 +9602,9 @@
}
},
"minimatch": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
- "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz",
+ "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==",
"requires": {
"brace-expansion": "^2.0.1"
}
@@ -10255,12 +9928,11 @@
}
},
"jackspeak": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz",
- "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz",
+ "integrity": "sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==",
"requires": {
- "@isaacs/cliui": "^8.0.2",
- "@pkgjs/parseargs": "^0.11.0"
+ "@isaacs/cliui": "^8.0.2"
}
},
"jake": {
@@ -10761,11 +10433,6 @@
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
},
- "json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
- },
"json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
@@ -10797,9 +10464,9 @@
},
"dependencies": {
"universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="
}
}
},
@@ -10838,33 +10505,6 @@
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"peer": true
},
- "load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- },
- "dependencies": {
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- },
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
- }
- }
- },
"locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -10897,11 +10537,6 @@
"yallist": "^3.0.2"
}
},
- "luxon": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz",
- "integrity": "sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg=="
- },
"m3u-linter": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/m3u-linter/-/m3u-linter-0.4.2.tgz",
@@ -10913,61 +10548,10 @@
"is-valid-path": "^0.1.1"
},
"dependencies": {
- "brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
"commander": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="
- },
- "glob": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz",
- "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==",
- "requires": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^4.0.1",
- "minimatch": "^10.0.0",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^2.0.0"
- }
- },
- "jackspeak": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz",
- "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==",
- "requires": {
- "@isaacs/cliui": "^8.0.2"
- }
- },
- "lru-cache": {
- "version": "11.0.2",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz",
- "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA=="
- },
- "minimatch": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz",
- "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==",
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- },
- "path-scurry": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz",
- "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
- "requires": {
- "lru-cache": "^11.0.0",
- "minipass": "^7.1.2"
- }
}
}
},
@@ -11102,20 +10686,15 @@
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
},
"natural-orderby": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-3.0.2.tgz",
- "integrity": "sha512-x7ZdOwBxZCEm9MM7+eQCjkrNLrW3rkBKNHVr78zbtqnMGVNlnDi6C/eUEYgxHNrcbu0ymvjzcwIL/6H1iHri9g=="
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-5.0.0.tgz",
+ "integrity": "sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg=="
},
"node-cleanup": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz",
"integrity": "sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw=="
},
- "node-gzip": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/node-gzip/-/node-gzip-1.1.2.tgz",
- "integrity": "sha512-ZB6zWpfZHGtxZnPMrJSKHVPrRjURoUzaDbLFj3VO70mpLTW5np96vXyHwft4Id0o+PYIzgDkBUjIzaNHhQ8srw=="
- },
"node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
@@ -11226,6 +10805,11 @@
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="
},
+ "pako": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz",
+ "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug=="
+ },
"parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -11269,18 +10853,18 @@
"peer": true
},
"path-scurry": {
- "version": "1.10.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
- "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz",
+ "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
"requires": {
- "lru-cache": "^9.1.1 || ^10.0.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ "lru-cache": "^11.0.0",
+ "minipass": "^7.1.2"
},
"dependencies": {
"lru-cache": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz",
- "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g=="
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz",
+ "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A=="
}
}
},
@@ -11299,71 +10883,12 @@
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
},
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
- },
"pirates": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
"integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
"peer": true
},
- "pkg-conf": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz",
- "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=",
- "requires": {
- "find-up": "^2.0.0",
- "load-json-file": "^4.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "requires": {
- "p-limit": "^1.1.0"
- }
- },
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
- }
- }
- },
"pkg-dir": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
@@ -11560,11 +11085,6 @@
"queue-microtask": "^1.2.2"
}
},
- "run-script-os": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/run-script-os/-/run-script-os-1.1.6.tgz",
- "integrity": "sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw=="
- },
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -11594,67 +11114,6 @@
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"peer": true
},
- "signale": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz",
- "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==",
- "requires": {
- "chalk": "^2.3.2",
- "figures": "^2.0.0",
- "pkg-conf": "^2.1.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
"simple-wcswidth": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/simple-wcswidth/-/simple-wcswidth-1.0.1.tgz",
@@ -11846,6 +11305,11 @@
}
}
},
+ "timer-node": {
+ "version": "5.0.9",
+ "resolved": "https://registry.npmjs.org/timer-node/-/timer-node-5.0.9.tgz",
+ "integrity": "sha512-zXxCE/5/YDi0hY9pygqgRqjRbrFRzigYxOudG0I3syaqAAmX9/w9sxex1bNFCN6c1S66RwPtEIJv65dN+1psew=="
+ },
"tmp": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
diff --git a/package.json b/package.json
index 6533852a2..8b957e01c 100644
--- a/package.json
+++ b/package.json
@@ -40,7 +40,7 @@
"dependencies": {
"@eslint/eslintrc": "^3.3.0",
"@eslint/js": "^9.21.0",
- "@freearhey/core": "^0.7.0",
+ "@freearhey/core": "^0.8.2",
"@freearhey/search-js": "^0.1.2",
"@inquirer/prompts": "^7.4.1",
"@octokit/core": "^6.1.4",
@@ -48,6 +48,7 @@
"@octokit/plugin-rest-endpoint-methods": "^7.1.3",
"@octokit/types": "^11.1.0",
"@types/cli-progress": "^3.11.3",
+ "@types/fs-extra": "^11.0.4",
"@types/jest": "^29.5.14",
"@types/lodash": "^4.14.198",
"@types/numeral": "^2.0.3",
@@ -61,6 +62,7 @@
"commander": "^8.3.0",
"console-table-printer": "^2.12.1",
"eslint": "^9.17.0",
+ "glob": "^11.0.2",
"globals": "^16.0.0",
"iptv-checker": "^0.29.1",
"iptv-playlist-parser": "^0.13.0",
diff --git a/scripts/commands/playlist/edit.ts b/scripts/commands/playlist/edit.ts
index c57a62d1e..d87590b1f 100644
--- a/scripts/commands/playlist/edit.ts
+++ b/scripts/commands/playlist/edit.ts
@@ -1,7 +1,7 @@
import { Storage, Collection, Logger, Dictionary } from '@freearhey/core'
import { DataLoader, DataProcessor, PlaylistParser } from '../../core'
-import { Channel, Feed, Playlist, Stream } from '../../models'
import type { ChannelSearchableData } from '../../types/channel'
+import { Channel, Feed, Playlist, Stream } from '../../models'
import { DataProcessorData } from '../../types/dataProcessor'
import { DataLoaderData } from '../../types/dataLoader'
import { select, input } from '@inquirer/prompts'
diff --git a/scripts/commands/playlist/generate.ts b/scripts/commands/playlist/generate.ts
index c323d5395..b903b5a43 100644
--- a/scripts/commands/playlist/generate.ts
+++ b/scripts/commands/playlist/generate.ts
@@ -1,27 +1,25 @@
-import { Logger, Storage } from '@freearhey/core'
import { PlaylistParser, DataProcessor, DataLoader } from '../../core'
+import type { DataProcessorData } from '../../types/dataProcessor'
+import { DATA_DIR, LOGS_DIR, STREAMS_DIR } from '../../constants'
+import type { DataLoaderData } from '../../types/dataLoader'
+import { Logger, Storage, File } from '@freearhey/core'
import { Stream } from '../../models'
import { uniqueId } from 'lodash'
import {
+ IndexCategoryGenerator,
+ IndexLanguageGenerator,
+ IndexCountryGenerator,
+ IndexRegionGenerator,
CategoriesGenerator,
CountriesGenerator,
LanguagesGenerator,
RegionsGenerator,
- IndexGenerator,
- IndexCategoryGenerator,
- IndexCountryGenerator,
- IndexLanguageGenerator,
- IndexRegionGenerator
+ IndexGenerator
} from '../../generators'
-import { DATA_DIR, LOGS_DIR, STREAMS_DIR } from '../../constants'
-import type { DataProcessorData } from '../../types/dataProcessor'
-import type { DataLoaderData } from '../../types/dataLoader'
async function main() {
const logger = new Logger()
- const generatorsLogger = new Logger({
- stream: await new Storage(LOGS_DIR).createStream(`generators.log`)
- })
+ const logFile = new File('generators.log')
logger.info('loading data from api...')
const processor = new DataProcessor()
@@ -29,19 +27,19 @@ async function main() {
const loader = new DataLoader({ storage: dataStorage })
const data: DataLoaderData = await loader.load()
const {
+ feedsGroupedByChannelId,
+ channelsKeyById,
categories,
countries,
- regions,
- channelsKeyById,
- feedsGroupedByChannelId
+ regions
}: DataProcessorData = processor.process(data)
logger.info('loading streams...')
const streamsStorage = new Storage(STREAMS_DIR)
const parser = new PlaylistParser({
storage: streamsStorage,
- channelsKeyById,
- feedsGroupedByChannelId
+ feedsGroupedByChannelId,
+ channelsKeyById
})
const files = await streamsStorage.list('**/*.m3u')
let streams = await parser.parse(files)
@@ -62,42 +60,46 @@ async function main() {
)
logger.info('generating categories/...')
- await new CategoriesGenerator({ categories, streams, logger: generatorsLogger }).generate()
+ await new CategoriesGenerator({ categories, streams, logFile }).generate()
logger.info('generating countries/...')
await new CountriesGenerator({
countries,
streams,
- logger: generatorsLogger
+ logFile
}).generate()
logger.info('generating languages/...')
- await new LanguagesGenerator({ streams, logger: generatorsLogger }).generate()
+ await new LanguagesGenerator({ streams, logFile }).generate()
logger.info('generating regions/...')
await new RegionsGenerator({
streams,
regions,
- logger: generatorsLogger
+ logFile
}).generate()
logger.info('generating index.m3u...')
- await new IndexGenerator({ streams, logger: generatorsLogger }).generate()
+ await new IndexGenerator({ streams, logFile }).generate()
logger.info('generating index.category.m3u...')
- await new IndexCategoryGenerator({ streams, logger: generatorsLogger }).generate()
+ await new IndexCategoryGenerator({ streams, logFile }).generate()
logger.info('generating index.country.m3u...')
await new IndexCountryGenerator({
streams,
- logger: generatorsLogger
+ logFile
}).generate()
logger.info('generating index.language.m3u...')
- await new IndexLanguageGenerator({ streams, logger: generatorsLogger }).generate()
+ await new IndexLanguageGenerator({ streams, logFile }).generate()
logger.info('generating index.region.m3u...')
- await new IndexRegionGenerator({ streams, regions, logger: generatorsLogger }).generate()
+ await new IndexRegionGenerator({ streams, regions, logFile }).generate()
+
+ logger.info('saving generators.log...')
+ const logStorage = new Storage(LOGS_DIR)
+ logStorage.saveFile(logFile)
}
main()
diff --git a/scripts/commands/playlist/test.ts b/scripts/commands/playlist/test.ts
index cc6f1dc14..777c19f8d 100644
--- a/scripts/commands/playlist/test.ts
+++ b/scripts/commands/playlist/test.ts
@@ -154,15 +154,24 @@ function drawTable() {
}
}
-function onFinish() {
+function onFinish(error) {
clearInterval(interval)
+ if (error) {
+ console.error(error)
+ process.exit(1)
+ }
+
drawTable()
- logger.error(`\n${errors + warnings} problems (${errors} errors, ${warnings} warnings)`)
+ if (errors > 0 || warnings > 0) {
+ console.log(
+ chalk.red(`\n${errors + warnings} problems (${errors} errors, ${warnings} warnings)`)
+ )
- if (errors > 0) {
- process.exit(1)
+ if (errors > 0) {
+ process.exit(1)
+ }
}
process.exit(0)
diff --git a/scripts/commands/playlist/validate.ts b/scripts/commands/playlist/validate.ts
index 57bca4f6f..f1f7742eb 100644
--- a/scripts/commands/playlist/validate.ts
+++ b/scripts/commands/playlist/validate.ts
@@ -94,14 +94,14 @@ async function main() {
})
if (log.notEmpty()) {
- logger.info(`\n${chalk.underline(filepath)}`)
+ console.log(`\n${chalk.underline(filepath)}`)
log.forEach((logItem: LogItem) => {
const position = logItem.line.toString().padEnd(6, ' ')
const type = logItem.type.padEnd(9, ' ')
const status = logItem.type === 'error' ? chalk.red(type) : chalk.yellow(type)
- logger.info(` ${chalk.gray(position)}${status}${logItem.message}`)
+ console.log(` ${chalk.gray(position)}${status}${logItem.message}`)
})
errors = errors.concat(log.filter((logItem: LogItem) => logItem.type === 'error'))
@@ -109,16 +109,18 @@ async function main() {
}
}
- logger.error(
- chalk.red(
- `\n${
- errors.count() + warnings.count()
- } problems (${errors.count()} errors, ${warnings.count()} warnings)`
+ if (errors.count() || warnings.count()) {
+ console.log(
+ chalk.red(
+ `\n${
+ errors.count() + warnings.count()
+ } problems (${errors.count()} errors, ${warnings.count()} warnings)`
+ )
)
- )
- if (errors.count()) {
- process.exit(1)
+ if (errors.count()) {
+ process.exit(1)
+ }
}
}
diff --git a/scripts/core/htmlTable.ts b/scripts/core/htmlTable.ts
index 1caa85fa0..b4f7b42ac 100644
--- a/scripts/core/htmlTable.ts
+++ b/scripts/core/htmlTable.ts
@@ -16,15 +16,15 @@ export class HTMLTable {
}
toString() {
- let output = '\n'
+ let output = '\r\n'
- output += ' \n '
+ output += ' \r\n '
for (const column of this.columns) {
output += `| ${column.name} | `
}
- output += '
\n \n'
+ output += '
\r\n \r\n'
- output += ' \n'
+ output += ' \r\n'
for (const item of this.data) {
output += ' '
let i = 0
@@ -35,9 +35,9 @@ export class HTMLTable {
output += `| ${item[prop]} | `
i++
}
- output += '
\n'
+ output += '\r\n'
}
- output += ' \n'
+ output += ' \r\n'
output += '
'
diff --git a/scripts/core/streamTester.ts b/scripts/core/streamTester.ts
index 89c44de74..860844b40 100644
--- a/scripts/core/streamTester.ts
+++ b/scripts/core/streamTester.ts
@@ -18,8 +18,8 @@ export class StreamTester {
return this.checker.checkStream({
url: stream.url,
http: {
- referrer: stream.getHttpReferrer(),
- 'user-agent': stream.getHttpUserAgent()
+ referrer: stream.getReferrer(),
+ 'user-agent': stream.getUserAgent()
}
})
}
diff --git a/scripts/generators/categoriesGenerator.ts b/scripts/generators/categoriesGenerator.ts
index cd20b6ea4..f6d455d4b 100644
--- a/scripts/generators/categoriesGenerator.ts
+++ b/scripts/generators/categoriesGenerator.ts
@@ -1,25 +1,26 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
+import { Collection, Storage, Logger, File } from '@freearhey/core'
import { Stream, Category, Playlist } from '../models'
import { PUBLIC_DIR } from '../constants'
+import { Generator } from './generator'
+import { EOL } from 'node:os'
type CategoriesGeneratorProps = {
streams: Collection
categories: Collection
- logger: Logger
+ logFile: File
}
export class CategoriesGenerator implements Generator {
streams: Collection
categories: Collection
storage: Storage
- logger: Logger
+ logFile: File
- constructor({ streams, categories, logger }: CategoriesGeneratorProps) {
+ constructor({ streams, categories, logFile }: CategoriesGeneratorProps) {
this.streams = streams
this.categories = categories
this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
+ this.logFile = logFile
}
async generate() {
@@ -37,8 +38,8 @@ export class CategoriesGenerator implements Generator {
const playlist = new Playlist(categoryStreams, { public: true })
const filepath = `categories/${category.id}.m3u`
await this.storage.save(filepath, playlist.toString())
- this.logger.info(
- JSON.stringify({ type: 'category', filepath, count: playlist.streams.count() })
+ this.logFile.append(
+ JSON.stringify({ type: 'category', filepath, count: playlist.streams.count() }) + EOL
)
})
@@ -46,8 +47,8 @@ export class CategoriesGenerator implements Generator {
const playlist = new Playlist(undefinedStreams, { public: true })
const filepath = 'categories/undefined.m3u'
await this.storage.save(filepath, playlist.toString())
- this.logger.info(
- JSON.stringify({ type: 'category', filepath, count: playlist.streams.count() })
+ this.logFile.append(
+ JSON.stringify({ type: 'category', filepath, count: playlist.streams.count() }) + EOL
)
}
}
diff --git a/scripts/generators/countriesGenerator.ts b/scripts/generators/countriesGenerator.ts
index c935da5a4..7dc707cf9 100644
--- a/scripts/generators/countriesGenerator.ts
+++ b/scripts/generators/countriesGenerator.ts
@@ -1,25 +1,26 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
import { Country, Subdivision, Stream, Playlist } from '../models'
+import { Collection, Storage, File } from '@freearhey/core'
import { PUBLIC_DIR } from '../constants'
+import { Generator } from './generator'
+import { EOL } from 'node:os'
type CountriesGeneratorProps = {
streams: Collection
countries: Collection
- logger: Logger
+ logFile: File
}
export class CountriesGenerator implements Generator {
streams: Collection
countries: Collection
storage: Storage
- logger: Logger
+ logFile: File
- constructor({ streams, countries, logger }: CountriesGeneratorProps) {
+ constructor({ streams, countries, logFile }: CountriesGeneratorProps) {
this.streams = streams
this.countries = countries
this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
+ this.logFile = logFile
}
async generate(): Promise {
@@ -36,8 +37,8 @@ export class CountriesGenerator implements Generator {
const playlist = new Playlist(countryStreams, { public: true })
const filepath = `countries/${country.code.toLowerCase()}.m3u`
await this.storage.save(filepath, playlist.toString())
- this.logger.info(
- JSON.stringify({ type: 'country', filepath, count: playlist.streams.count() })
+ this.logFile.append(
+ JSON.stringify({ type: 'country', filepath, count: playlist.streams.count() }) + EOL
)
country.getSubdivisions().forEach(async (subdivision: Subdivision) => {
@@ -50,8 +51,8 @@ export class CountriesGenerator implements Generator {
const playlist = new Playlist(subdivisionStreams, { public: true })
const filepath = `subdivisions/${subdivision.code.toLowerCase()}.m3u`
await this.storage.save(filepath, playlist.toString())
- this.logger.info(
- JSON.stringify({ type: 'subdivision', filepath, count: playlist.streams.count() })
+ this.logFile.append(
+ JSON.stringify({ type: 'subdivision', filepath, count: playlist.streams.count() }) + EOL
)
})
})
@@ -60,12 +61,12 @@ export class CountriesGenerator implements Generator {
const undefinedPlaylist = new Playlist(undefinedStreams, { public: true })
const undefinedFilepath = 'countries/undefined.m3u'
await this.storage.save(undefinedFilepath, undefinedPlaylist.toString())
- this.logger.info(
+ this.logFile.append(
JSON.stringify({
type: 'country',
filepath: undefinedFilepath,
count: undefinedPlaylist.streams.count()
- })
+ }) + EOL
)
}
}
diff --git a/scripts/generators/indexCategoryGenerator.ts b/scripts/generators/indexCategoryGenerator.ts
index 529ee8336..665f4cb0c 100644
--- a/scripts/generators/indexCategoryGenerator.ts
+++ b/scripts/generators/indexCategoryGenerator.ts
@@ -1,22 +1,23 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
+import { Collection, Storage, File } from '@freearhey/core'
import { Stream, Playlist, Category } from '../models'
import { PUBLIC_DIR } from '../constants'
+import { Generator } from './generator'
+import { EOL } from 'node:os'
type IndexCategoryGeneratorProps = {
streams: Collection
- logger: Logger
+ logFile: File
}
export class IndexCategoryGenerator implements Generator {
streams: Collection
storage: Storage
- logger: Logger
+ logFile: File
- constructor({ streams, logger }: IndexCategoryGeneratorProps) {
+ constructor({ streams, logFile }: IndexCategoryGeneratorProps) {
this.streams = streams
this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
+ this.logFile = logFile
}
async generate(): Promise {
@@ -48,6 +49,8 @@ export class IndexCategoryGenerator implements Generator {
const playlist = new Playlist(groupedStreams, { public: true })
const filepath = 'index.category.m3u'
await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ type: 'index', filepath, count: playlist.streams.count() }))
+ this.logFile.append(
+ JSON.stringify({ type: 'index', filepath, count: playlist.streams.count() }) + EOL
+ )
}
}
diff --git a/scripts/generators/indexCountryGenerator.ts b/scripts/generators/indexCountryGenerator.ts
index c65a43734..82eb335ef 100644
--- a/scripts/generators/indexCountryGenerator.ts
+++ b/scripts/generators/indexCountryGenerator.ts
@@ -1,22 +1,23 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
+import { Collection, Storage, File } from '@freearhey/core'
import { Stream, Playlist, Country } from '../models'
import { PUBLIC_DIR } from '../constants'
+import { Generator } from './generator'
+import { EOL } from 'node:os'
type IndexCountryGeneratorProps = {
streams: Collection
- logger: Logger
+ logFile: File
}
export class IndexCountryGenerator implements Generator {
streams: Collection
storage: Storage
- logger: Logger
+ logFile: File
- constructor({ streams, logger }: IndexCountryGeneratorProps) {
+ constructor({ streams, logFile }: IndexCountryGeneratorProps) {
this.streams = streams
this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
+ this.logFile = logFile
}
async generate(): Promise {
@@ -56,6 +57,8 @@ export class IndexCountryGenerator implements Generator {
const playlist = new Playlist(groupedStreams, { public: true })
const filepath = 'index.country.m3u'
await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ type: 'index', filepath, count: playlist.streams.count() }))
+ this.logFile.append(
+ JSON.stringify({ type: 'index', filepath, count: playlist.streams.count() }) + EOL
+ )
}
}
diff --git a/scripts/generators/indexGenerator.ts b/scripts/generators/indexGenerator.ts
index fafda061f..5cfa86c66 100644
--- a/scripts/generators/indexGenerator.ts
+++ b/scripts/generators/indexGenerator.ts
@@ -1,22 +1,23 @@
-import { Collection, Logger, Storage } from '@freearhey/core'
+import { Collection, File, Storage } from '@freearhey/core'
import { Stream, Playlist } from '../models'
-import { Generator } from './generator'
import { PUBLIC_DIR } from '../constants'
+import { Generator } from './generator'
+import { EOL } from 'node:os'
type IndexGeneratorProps = {
streams: Collection
- logger: Logger
+ logFile: File
}
export class IndexGenerator implements Generator {
streams: Collection
storage: Storage
- logger: Logger
+ logFile: File
- constructor({ streams, logger }: IndexGeneratorProps) {
+ constructor({ streams, logFile }: IndexGeneratorProps) {
this.streams = streams
this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
+ this.logFile = logFile
}
async generate(): Promise {
@@ -27,6 +28,8 @@ export class IndexGenerator implements Generator {
const playlist = new Playlist(sfwStreams, { public: true })
const filepath = 'index.m3u'
await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ type: 'index', filepath, count: playlist.streams.count() }))
+ this.logFile.append(
+ JSON.stringify({ type: 'index', filepath, count: playlist.streams.count() }) + EOL
+ )
}
}
diff --git a/scripts/generators/indexLanguageGenerator.ts b/scripts/generators/indexLanguageGenerator.ts
index 1116eb740..3df9f71f2 100644
--- a/scripts/generators/indexLanguageGenerator.ts
+++ b/scripts/generators/indexLanguageGenerator.ts
@@ -1,22 +1,23 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
+import { Collection, Storage, File } from '@freearhey/core'
import { Stream, Playlist, Language } from '../models'
import { PUBLIC_DIR } from '../constants'
+import { Generator } from './generator'
+import { EOL } from 'node:os'
type IndexLanguageGeneratorProps = {
streams: Collection
- logger: Logger
+ logFile: File
}
export class IndexLanguageGenerator implements Generator {
streams: Collection
storage: Storage
- logger: Logger
+ logFile: File
- constructor({ streams, logger }: IndexLanguageGeneratorProps) {
+ constructor({ streams, logFile }: IndexLanguageGeneratorProps) {
this.streams = streams
this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
+ this.logFile = logFile
}
async generate(): Promise {
@@ -47,6 +48,8 @@ export class IndexLanguageGenerator implements Generator {
const playlist = new Playlist(groupedStreams, { public: true })
const filepath = 'index.language.m3u'
await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ type: 'index', filepath, count: playlist.streams.count() }))
+ this.logFile.append(
+ JSON.stringify({ type: 'index', filepath, count: playlist.streams.count() }) + EOL
+ )
}
}
diff --git a/scripts/generators/indexNsfwGenerator.ts b/scripts/generators/indexNsfwGenerator.ts
index a89cf0a10..e1e98375b 100644
--- a/scripts/generators/indexNsfwGenerator.ts
+++ b/scripts/generators/indexNsfwGenerator.ts
@@ -1,22 +1,23 @@
-import { Collection, Logger, Storage } from '@freearhey/core'
+import { Collection, File, Storage } from '@freearhey/core'
import { Stream, Playlist } from '../models'
-import { Generator } from './generator'
import { PUBLIC_DIR } from '../constants'
+import { Generator } from './generator'
+import { EOL } from 'node:os'
type IndexNsfwGeneratorProps = {
streams: Collection
- logger: Logger
+ logFile: File
}
export class IndexNsfwGenerator implements Generator {
streams: Collection
storage: Storage
- logger: Logger
+ logFile: File
- constructor({ streams, logger }: IndexNsfwGeneratorProps) {
+ constructor({ streams, logFile }: IndexNsfwGeneratorProps) {
this.streams = streams
this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
+ this.logFile = logFile
}
async generate(): Promise {
@@ -25,6 +26,8 @@ export class IndexNsfwGenerator implements Generator {
const playlist = new Playlist(allStreams, { public: true })
const filepath = 'index.nsfw.m3u'
await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ type: 'index', filepath, count: playlist.streams.count() }))
+ this.logFile.append(
+ JSON.stringify({ type: 'index', filepath, count: playlist.streams.count() }) + EOL
+ )
}
}
diff --git a/scripts/generators/indexRegionGenerator.ts b/scripts/generators/indexRegionGenerator.ts
index 94537c9af..c462fcfce 100644
--- a/scripts/generators/indexRegionGenerator.ts
+++ b/scripts/generators/indexRegionGenerator.ts
@@ -1,25 +1,26 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
+import { Collection, Storage, File } from '@freearhey/core'
import { Stream, Playlist, Region } from '../models'
import { PUBLIC_DIR } from '../constants'
+import { Generator } from './generator'
+import { EOL } from 'node:os'
type IndexRegionGeneratorProps = {
streams: Collection
regions: Collection
- logger: Logger
+ logFile: File
}
export class IndexRegionGenerator implements Generator {
streams: Collection
regions: Collection
storage: Storage
- logger: Logger
+ logFile: File
- constructor({ streams, regions, logger }: IndexRegionGeneratorProps) {
+ constructor({ streams, regions, logFile }: IndexRegionGeneratorProps) {
this.streams = streams
this.regions = regions
this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
+ this.logFile = logFile
}
async generate(): Promise {
@@ -58,6 +59,8 @@ export class IndexRegionGenerator implements Generator {
const playlist = new Playlist(groupedStreams, { public: true })
const filepath = 'index.region.m3u'
await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ type: 'index', filepath, count: playlist.streams.count() }))
+ this.logFile.append(
+ JSON.stringify({ type: 'index', filepath, count: playlist.streams.count() }) + EOL
+ )
}
}
diff --git a/scripts/generators/languagesGenerator.ts b/scripts/generators/languagesGenerator.ts
index 114fcddb2..f7ae9976e 100644
--- a/scripts/generators/languagesGenerator.ts
+++ b/scripts/generators/languagesGenerator.ts
@@ -1,19 +1,20 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
+import { Collection, Storage, File } from '@freearhey/core'
import { Playlist, Language, Stream } from '../models'
import { PUBLIC_DIR } from '../constants'
+import { Generator } from './generator'
+import { EOL } from 'node:os'
-type LanguagesGeneratorProps = { streams: Collection; logger: Logger }
+type LanguagesGeneratorProps = { streams: Collection; logFile: File }
export class LanguagesGenerator implements Generator {
streams: Collection
storage: Storage
- logger: Logger
+ logFile: File
- constructor({ streams, logger }: LanguagesGeneratorProps) {
+ constructor({ streams, logFile }: LanguagesGeneratorProps) {
this.streams = streams
this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
+ this.logFile = logFile
}
async generate(): Promise {
@@ -38,8 +39,8 @@ export class LanguagesGenerator implements Generator {
const playlist = new Playlist(languageStreams, { public: true })
const filepath = `languages/${language.code}.m3u`
await this.storage.save(filepath, playlist.toString())
- this.logger.info(
- JSON.stringify({ type: 'language', filepath, count: playlist.streams.count() })
+ this.logFile.append(
+ JSON.stringify({ type: 'language', filepath, count: playlist.streams.count() }) + EOL
)
})
@@ -50,8 +51,8 @@ export class LanguagesGenerator implements Generator {
const playlist = new Playlist(undefinedStreams, { public: true })
const filepath = 'languages/undefined.m3u'
await this.storage.save(filepath, playlist.toString())
- this.logger.info(
- JSON.stringify({ type: 'language', filepath, count: playlist.streams.count() })
+ this.logFile.append(
+ JSON.stringify({ type: 'language', filepath, count: playlist.streams.count() }) + EOL
)
}
}
diff --git a/scripts/generators/regionsGenerator.ts b/scripts/generators/regionsGenerator.ts
index fb0a5d688..4d649a351 100644
--- a/scripts/generators/regionsGenerator.ts
+++ b/scripts/generators/regionsGenerator.ts
@@ -1,25 +1,26 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
+import { Collection, Storage, File } from '@freearhey/core'
import { Playlist, Region, Stream } from '../models'
import { PUBLIC_DIR } from '../constants'
+import { Generator } from './generator'
+import { EOL } from 'node:os'
type RegionsGeneratorProps = {
streams: Collection
regions: Collection
- logger: Logger
+ logFile: File
}
export class RegionsGenerator implements Generator {
streams: Collection
regions: Collection
storage: Storage
- logger: Logger
+ logFile: File
- constructor({ streams, regions, logger }: RegionsGeneratorProps) {
+ constructor({ streams, regions, logFile }: RegionsGeneratorProps) {
this.streams = streams
this.regions = regions
this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
+ this.logFile = logFile
}
async generate(): Promise {
@@ -35,8 +36,8 @@ export class RegionsGenerator implements Generator {
const playlist = new Playlist(regionStreams, { public: true })
const filepath = `regions/${region.code.toLowerCase()}.m3u`
await this.storage.save(filepath, playlist.toString())
- this.logger.info(
- JSON.stringify({ type: 'region', filepath, count: playlist.streams.count() })
+ this.logFile.append(
+ JSON.stringify({ type: 'region', filepath, count: playlist.streams.count() }) + EOL
)
})
@@ -44,18 +45,20 @@ export class RegionsGenerator implements Generator {
const internationalPlaylist = new Playlist(internationalStreams, { public: true })
const internationalFilepath = 'regions/int.m3u'
await this.storage.save(internationalFilepath, internationalPlaylist.toString())
- this.logger.info(
+ this.logFile.append(
JSON.stringify({
type: 'region',
filepath: internationalFilepath,
count: internationalPlaylist.streams.count()
- })
+ }) + EOL
)
const undefinedStreams = streams.filter((stream: Stream) => !stream.hasBroadcastArea())
const playlist = new Playlist(undefinedStreams, { public: true })
const filepath = 'regions/undefined.m3u'
await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ type: 'region', filepath, count: playlist.streams.count() }))
+ this.logFile.append(
+ JSON.stringify({ type: 'region', filepath, count: playlist.streams.count() }) + EOL
+ )
}
}
diff --git a/scripts/models/feed.ts b/scripts/models/feed.ts
index 03ae31184..2b1fa9d34 100644
--- a/scripts/models/feed.ts
+++ b/scripts/models/feed.ts
@@ -144,8 +144,8 @@ export class Feed {
this.broadcastRegions = regions.filter((region: Region) => {
if (region.code === 'INT') return false
-
- return region.countryCodes.intersects(countriesCodes)
+ const intersected = region.countryCodes.intersects(countriesCodes)
+ return intersected.notEmpty()
})
return this
diff --git a/scripts/models/playlist.ts b/scripts/models/playlist.ts
index ba0a25c5c..d3022a5af 100644
--- a/scripts/models/playlist.ts
+++ b/scripts/models/playlist.ts
@@ -17,10 +17,10 @@ export class Playlist {
}
toString() {
- let output = '#EXTM3U\n'
+ let output = '#EXTM3U\r\n'
this.streams.forEach((stream: Stream) => {
- output += stream.toString(this.options) + '\n'
+ output += stream.toString(this.options) + '\r\n'
})
return output
diff --git a/scripts/models/stream.ts b/scripts/models/stream.ts
index 2de399efc..443a249b9 100644
--- a/scripts/models/stream.ts
+++ b/scripts/models/stream.ts
@@ -352,14 +352,14 @@ export class Stream {
output += `,${this.getTitle()}`
if (this.referrer) {
- output += `\n#EXTVLCOPT:http-referrer=${this.referrer}`
+ output += `\r\n#EXTVLCOPT:http-referrer=${this.referrer}`
}
if (this.userAgent) {
- output += `\n#EXTVLCOPT:http-user-agent=${this.userAgent}`
+ output += `\r\n#EXTVLCOPT:http-user-agent=${this.userAgent}`
}
- output += `\n${this.url}`
+ output += `\r\n${this.url}`
return output
}
diff --git a/streams/al.m3u b/streams/al.m3u
index 8ee8a13f9..5bf3da0c8 100644
--- a/streams/al.m3u
+++ b/streams/al.m3u
@@ -29,3 +29,5 @@ https://live.prostream.al/al/smil:tropojatv.smil/playlist.m3u8
https://fe.tring.al/delta/105/out/u/rdghfhsfhfshs.m3u8
#EXTINF:-1 tvg-id="ZjarrTV.al",Zjarr TV (720p) [Not 24/7]
https://cdn.jwplayer.com/live/events/r2qgHu7W.m3u8
+#EXTINF:-1 tvg-id="EuronewsAlbania.al",Euronews Albania
+https://gjirafa-video-live.gjirafa.net/gjvideo-live/2dw-zuf-1c9-pxu/index.m3u8
diff --git a/streams/am_vnet.m3u b/streams/am_vnet.m3u
index c61bcbd39..9188290eb 100644
--- a/streams/am_vnet.m3u
+++ b/streams/am_vnet.m3u
@@ -5,32 +5,8 @@ http://stream01.vnet.am/AmediaPremium/mono.m3u8
http://stream02.vnet.am/Kinoman/mono.m3u8
#EXTINF:-1 tvg-id="FightBox.nl",FightBox
http://stream01.vnet.am/Fightbox/mono.m3u8
-#EXTINF:-1 tvg-id="Fox.ru",Fox
-https://stream01.vnet.am/Fox/mono.m3u8
-#EXTINF:-1 tvg-id="Hollywood.ru",Hollywood
-http://stream01.vnet.am/ParamountChannel/mono.m3u8
-#EXTINF:-1 tvg-id="NationalGeographicWild.ru",National Geographic Wild
-http://stream02.vnet.am/NatGeoWild/mono.m3u8
-#EXTINF:-1 tvg-id="NicktoonsCIS.ru",Nicktoons
-https://stream01.vnet.am/Boomerang/mono.m3u8
-#EXTINF:-1 tvg-id="BoksTV.ru",ะะพะบั ะขะ
-http://stream01.vnet.am/BoksTv/mono.m3u8
#EXTINF:-1 tvg-id="Detskimir.ru",ะะตััะบะธะน ะผะธั
http://stream01.vnet.am/CartoonNetwork/mono.m3u8
-#EXTINF:-1 tvg-id="Domkino.ru",ะะพะผ ะะธะฝะพ
-https://stream01.vnet.am/DomKino/mono.m3u8
-#EXTINF:-1 tvg-id="India.ru",ะะฝะดะธั
-https://stream01.vnet.am/ZeeTV/mono.m3u8
-#EXTINF:-1 tvg-id="CarouselInternational.ru",ะะฐัััะตะปั Int
-http://stream02.vnet.am/Karusel/mono.m3u8
-#EXTINF:-1 tvg-id="Kinopremyera.ru@HD",ะะธะฝะพะฟัะตะผัะตัะฐ HD
-http://stream02.vnet.am/Kinopremera/mono.m3u8
-#EXTINF:-1 tvg-id="KukhnyaTV.ru",ะัั
ะฝั ะขะ HD
-http://stream01.vnet.am/KukhnyaTv/mono.m3u8
-#EXTINF:-1 tvg-id="MuzTV.ru",ะัะท ะขะ
-http://stream01.vnet.am/MuzTv/mono.m3u8
-#EXTINF:-1 tvg-id="Mult.ru",ะัะปัั
-http://stream01.vnet.am/Mult/mono.m3u8
#EXTINF:-1 tvg-id="Nauka.ru",ะะฐัะบะฐ 2.0
http://stream01.vnet.am/Nauka/mono.m3u8
#EXTINF:-1 tvg-id="NTVMir.ru",ะะขะ ะะธั
@@ -41,7 +17,5 @@ http://stream01.vnet.am/Evrika/mono.m3u8
http://stream01.vnet.am/Perec/mono.m3u8
#EXTINF:-1 tvg-id="FridayInternational.ru",ะััะฝะธัะฐ International
https://stream01.vnet.am/Pyatnica/mono.m3u8
-#EXTINF:-1 tvg-id="STSkids.ru",ะกะขะก Kids
-http://stream02.vnet.am/DisneyChannel/mono.m3u8
#EXTINF:-1 tvg-id="Telecafe.ru",ะขะตะปะตะบะฐัะต
http://stream01.vnet.am/Telekafe/mono.m3u8
diff --git a/streams/ar.m3u b/streams/ar.m3u
index add4e13fd..dd2368076 100644
--- a/streams/ar.m3u
+++ b/streams/ar.m3u
@@ -368,3 +368,5 @@ https://stmv1.cnarlatam.com/xtremaseries/xtremaseries/playlist.m3u8
#EXTINF:-1 tvg-id="XtremaTerror.ar" http-referrer="https://xtrematv.com/?p=1456",Xtrema Terror
#EXTVLCOPT:http-referrer=https://xtrematv.com/?p=1456
https://stmv6.voxtvhd.com.br/cineterror/cineterror/playlist.m3u8
+#EXTINF:-1 tvg-id="RetroMagico.ar",Retro Magico (720p)
+https://stream.gia.tv/giatv/giatv-retromagico/retromagico/playlist.m3u8
diff --git a/streams/at.m3u b/streams/at.m3u
index cbacd60ff..f275b90c3 100644
--- a/streams/at.m3u
+++ b/streams/at.m3u
@@ -68,3 +68,7 @@ http://89.187.168.245:8080/live/sUPPERchannel2/index.m3u8
https://live1.markenfunk.com/t1/ngrp:live_all/playlist.m3u8
#EXTINF:-1 tvg-id="W24.at",W24 (720p) [Not 24/7]
https://ms01.w24.at/W24/smil:liveevent.smil/playlist.m3u8
+#EXTINF:-1 tvg-id="AntenneSteiermark.at",Antenne Steiermark (720p)
+https://60efd7a2b4d02.streamlock.net/a_steiermark/ngrp:livestream_all/playlist.m3u8
+#EXTINF:-1 tvg-id="AntenneKaernten.at",Antenne Kaernten (720p)
+https://60efd7a2b4d02.streamlock.net/a_kaernten/ngrp:livestream_all/playlist.m3u8
diff --git a/streams/au.m3u b/streams/au.m3u
index 5c041d0ef..625e71951 100644
--- a/streams/au.m3u
+++ b/streams/au.m3u
@@ -55,6 +55,12 @@ https://9now-livestreams-fhd-t.akamaized.net/u/prod/simulcast/per/ch9/hls/r1/ind
https://9now-livestreams-fhd-t.akamaized.net/u/prod/simulcast/syd/ch9/hls/r1/index.m3u8
#EXTINF:-1 tvg-id="Channel44.au",Channel 44 (480p)
https://d1k6kax80wecy5.cloudfront.net/WFqZJc/index.m3u8
+#EXTINF:-1 tvg-id="CTBPerth.au",CTB Perth (720p)
+https://live.ctbperth.net.au/hls/0/stream.m3u8
+#EXTINF:-1 tvg-id="CTBPerthMovies.au",CTB Perth Movies (720p)
+https://movies.ctbperth.net.au/hls/stream.m3u8
+#EXTINF:-1 tvg-id="",CTB Perth News (720p)
+https://news.ctbperth.net.au/hls/stream.m3u8
#EXTINF:-1 tvg-id="ExpoChannel.au",Expo Channel (360p)
https://tvsnhlslivetest.akamaized.net/hls/live/2034711/EXPO-MSL4/master.m3u8
#EXTINF:-1 tvg-id="HopeChannelAustralia.au",Hope Channel Australia (1080p)
diff --git a/streams/bf.m3u b/streams/bf.m3u
index 0f552635c..6ec5f0c18 100644
--- a/streams/bf.m3u
+++ b/streams/bf.m3u
@@ -3,5 +3,9 @@
https://547f72e6652371c3.mediapackage.us-east-1.amazonaws.com/out/v1/7e66f389bec3463dac81e8d55e680431/index.m3u8
#EXTINF:-1 tvg-id="BurkinaInfoTV.bf",Burkina Info TV (540p)
http://69.64.57.208/burkinainfo/index.m3u8
-#EXTINF:-1 tvg-id="RTB.bf",RTB [Not 24/7]
-https://edge20.vedge.infomaniak.com/livecast/ik:rtblive1_8/manifest.m3u8
+#EXTINF:-1 tvg-id="ImpactTV.bf",Impact TV (360p) [Not 24/7]
+https://edge12.vedge.infomaniak.com/livecast/ik:emcv/manifest.m3u8
+#EXTINF:-1 tvg-id="RTB.bf",RTB (360p) [Not 24/7]
+https://edge12.vedge.infomaniak.com/livecast/ik:rtblive1_8/manifest.m3u8
+#EXTINF:-1 tvg-id="RTBZenith.bf",RTB Zรฉnith (360p) [Geo-blocked]
+https://edge20.vedge.infomaniak.com/livecast/ik:la2/manifest.m3u8
diff --git a/streams/bo.m3u b/streams/bo.m3u
index 06a5384ad..914132edb 100644
--- a/streams/bo.m3u
+++ b/streams/bo.m3u
@@ -15,8 +15,6 @@ https://video2.getstreamhosting.com:19360/8038/8038.m3u8
https://stmvideo3.livecastv.com/aynitv/aynitv/playlist.m3u8
#EXTINF:-1 tvg-id="BoliviaRadioTV.bo",Bolivia Radio TV (720p) [Not 24/7]
https://glb.bozztv.com/glb/ssh101/boliviaradiotv/playlist.m3u8
-#EXTINF:-1 tvg-id="BoliviaTV.bo",Bolivia TV (720p)
-https://5fe2654d6127d.streamlock.net/boliviatv/videoboliviatv/playlist.m3u8
#EXTINF:-1 tvg-id="BoliviaTV.bo",Bolivia TV (720p) [Not 24/7]
http://boliviatv1.srfms.com:5735/live/livestream/playlist.m3u8
#EXTINF:-1 tvg-id="BoliviaTV72.bo",Bolivia TV 7.2 (720p)
@@ -57,7 +55,7 @@ https://glb.bozztv.com/glb/ssh101/fortalezacueto/index.m3u8
https://master.tucableip.com/ftv/index.m3u8
#EXTINF:-1 tvg-id="Gigavision.bo",Gigavisiรณn (1080p) [Not 24/7]
https://master.tucableip.com/gigavision/playlist.m3u8
-#EXTINF:-1 tvg-id="GoGoPlayTV.bo@SD",Gogo Play TV (720p)
+#EXTINF:-1 tvg-id="",Gogo Play TV (720p)
https://glb.bozztv.com/glb/ssh101/gogoplay/index.m3u8
#EXTINF:-1 tvg-id="GTV.bo",Guadalupe TV (720p) [Not 24/7]
https://solo.disfrutaenlared.com:1936/guadalupetv/guadalupetv/playlist.m3u8
@@ -155,3 +153,11 @@ https://fl1004.bozztv.com/ssh101/zoytvsports4/index.m3u8
https://fl1004.bozztv.com/ssh101/zoytvsports5/index.m3u8
#EXTINF:-1 tvg-id="ZoyTVTurcas.bo",Zoy TV Turcas
https://fl1004.bozztv.com/ssh101/zoytvturcas/index.m3u8
+#EXTINF:-1 tvg-id="BoliviaTV.bo",Bolivia TV (720p)
+https://5fe2654d6127d.streamlock.net:443/boliviatv/videoboliviatv/playlist.m3u8
+#EXTINF:-1 tvg-id="ZoyTVSports1.bo",Zoy TV Sports 1 (1080p)
+https://ssh101stream.ssh101.com/akamaissh101/ssh101/zoytvsports/playlist.m3u8
+#EXTINF:-1 tvg-id="ZoyTVTurcas.bo",Zoy TV Turcas (720p)
+https://ssh101stream.ssh101.com/akamaissh101/ssh101/zoytvturcas/playlist.m3u8
+#EXTINF:-1 tvg-id="ZoyTVPlus.bo",ZoyTV Plus (720p)
+https://ssh101stream.ssh101.com/akamaissh101/ssh101/zoytv/playlist.m3u8
diff --git a/streams/br.m3u b/streams/br.m3u
index 3292b5d8f..01eb343ae 100644
--- a/streams/br.m3u
+++ b/streams/br.m3u
@@ -599,3 +599,11 @@ https://video01.kshost.com.br/seap8272/seap8272/playlist.m3u8
http://painelvj.com.br/tvaguaboa2/tvaguaboa2.sdp/playlist.m3u8
#EXTINF:-1 tvg-id="WTVBrasil.br",WTV Brasil (720p)
https://stmv1.srvstm.com/wtvbrasil/wtvbrasil/playlist.m3u8
+#EXTINF:-1 tvg-id="TVCancaoNova.br",TV Cancao Nova (720p)
+https://5c65286fc6ace.streamlock.net/cancaonova/CancaoNova.stream_720p/playlist.m3u8
+#EXTINF:-1 tvg-id="TVMAX.br",TV MAX (720p)
+https://5cf4a2c2512a2.streamlock.net/tvmax/tvmax/playlist.m3u8
+#EXTINF:-1 tvg-id="TVBrasil.br",TV Brasil (720p)
+https://tvbrasil-stream.ebc.com.br/index.m3u8
+#EXTINF:-1 tvg-id="RedeTV.br",Rede TV! (720p)
+https://cdn.jmvstream.com/w/AVJ-15235/playlist/playlist.m3u8
diff --git a/streams/cl.m3u b/streams/cl.m3u
index 030ff8b40..bf50205e4 100644
--- a/streams/cl.m3u
+++ b/streams/cl.m3u
@@ -317,8 +317,6 @@ https://panel.miplay.cl:8082/spectrumchannel/index.m3u8
https://stv.janus.cl/playlist/stream.m3u8
#EXTINF:-1 tvg-id="Subela.cl",Sรบbela (720p)
https://mdstrm.com/live-stream-playlist/5fad9b1d978fe1080e3ac4a8.m3u8
-#EXTINF:-1 tvg-id="SURTV.cl",Sur TV (720p)
-https://paneltv.online:1936/8034/8034/playlist.m3u8
#EXTINF:-1 tvg-id="T13.cl",T13 (720p)
https://jireh-2-hls-video-us-isp.dps.live/hls-video/10b92cafdf3646cbc1e727f3dc76863621a327fd/t13/t13.smil/playlist.m3u8
#EXTINF:-1 tvg-id="TVinet.cl",T-Vinet (480p)
@@ -447,3 +445,16 @@ https://zmlive.zappingtv.com/zm-free/zm.smil/playlist.m3u8
http://190.2.212.209:8050/play/a0oj
#EXTINF:-1 tvg-id="ZonaPlayTV.cl",Zona Play TV (720p)
https://paneltv.online:1936/8100/8100/playlist.m3u8
+#EXTINF:-1 tvg-id="EnerGeekRadio.cl",EnerGeek Radio
+https://xui-backend.energeek.cl/live/11/playlist.m3u8?username=dEmoweBeneRGEek2025&password=FK8tJm5kBxetEDAXSLDF
+#EXTINF:-1 tvg-id="EnerGeekFAN.cl@SD",EnerGeek FAN (1080p)
+https://xui-backend.energeek.cl/live/10/playlist.m3u8?username=dEmoweBeneRGEek2025&password=FK8tJm5kBxetEDAXSLDF
+#EXTINF:-1 tvg-id="EnerGeek.cl",EnerGeek (1080p)
+https://xui-backend.energeek.cl/live/9/playlist.m3u8?username=dEmoweBeneRGEek2025&password=FK8tJm5kBxetEDAXSLDF
+#EXTINF:-1 tvg-id="Kanade.cl",Kanade (1080p)
+https://xui-backend.energeek.cl/live/deM0kanADeweB/Cerq7EpWHiWDuHTJ8ikz/13.m3u8
+#EXTINF:-1 tvg-id="VisionPlusTV.cl" http-referrer="https://visionplustv.cl/",Vision Plus TV (1080i)
+#EXTVLCOPT:http-referrer=https://visionplustv.cl/
+https://5ff3d9babae13.streamlock.net/jwagpqxehu/jwagpqxehu/playlist.m3u8
+#EXTINF:-1 tvg-id="Nublevision.cl",Nublevision (720p)
+https://tv.arkeo.cl:1936/nublevision/nublevision/playlist.m3u8
diff --git a/streams/cn_cctv.m3u b/streams/cn_cctv.m3u
index 3c5d148f8..fce9ccb8b 100644
--- a/streams/cn_cctv.m3u
+++ b/streams/cn_cctv.m3u
@@ -3,37 +3,19 @@
https://cd-live-stream.news.cctvplus.com/live/smil:CHANNEL1.smil/playlist.m3u8
#EXTINF:-1 tvg-id="CCTVPlus2.cn",CCTV+ 2 (600p) [Not 24/7]
https://cd-live-stream.news.cctvplus.com/live/smil:CHANNEL2.smil/playlist.m3u8
-#EXTINF:-1 tvg-id="CCTV1.cn",CCTV-1็ปผๅ (1080p)
-https://node1.olelive.com:6443/live/CCTV1HD/hls.m3u8
#EXTINF:-1 tvg-id="CCTV1.cn",CCTV-1็ปผๅ (576p)
http://42.176.185.28:9901/tsfile/live/1022_1.m3u8
-#EXTINF:-1 tvg-id="CCTV2.cn",CCTV-2่ดข็ป (1080p)
-https://node1.olelive.com:6443/live/CCTV2HD/hls.m3u8
#EXTINF:-1 tvg-id="CCTV4America.cn",CCTV-4 America (1080p)
https://global.cgtn.cicc.media.caton.cloud/master/cgtn-america.m3u8
#EXTINF:-1 tvg-id="CCTV4Asia.cn",CCTV-4 Asia (480p)
http://210.210.155.37/qwr9ew/s/s19/index.m3u8
-#EXTINF:-1 tvg-id="CCTV5Plus.cn",CCTV-5+ไฝ่ฒ่ตไบ (1080p)
-https://node1.olelive.com:6443/live/CCTV5PHD/hls.m3u8
#EXTINF:-1 tvg-id="CCTV5.cn",CCTV-5ไฝ่ฒ (1080p)
http://1.85.0.62:808/hls/503/index.m3u8
#EXTINF:-1 tvg-id="CCTV5.cn",CCTV-5ไฝ่ฒ (1080p)
http://220.178.228.153:1935/live/cctv5/playlist.m3u8
#EXTINF:-1 tvg-id="CCTV5.cn",CCTV-5ไฝ่ฒ (1080p)
http://223.95.111.98:5555/newlive/live/hls/5/live.m3u8
-#EXTINF:-1 tvg-id="CCTV5.cn",CCTV-5ไฝ่ฒ (1080p)
-https://node1.olelive.com:6443/live/CCTV5HD/hls.m3u8
#EXTINF:-1 tvg-id="CCTV6.cn",CCTV-6็ตๅฝฑ (1080p)
http://1.85.0.62:808/hls/6/index.m3u8
-#EXTINF:-1 tvg-id="CCTV7.cn",CCTV-7ๅฝ้ฒๅไบ (1080p)
-https://node1.olelive.com:6443/live/CCTV7HD/hls.m3u8
-#EXTINF:-1 tvg-id="CCTV8.cn",CCTV-8็ต่งๅง (1080p)
-https://node1.olelive.com:6443/live/CCTV8HD/hls.m3u8
-#EXTINF:-1 tvg-id="CCTV9.cn",CCTV-9็บชๅฝ (1080p)
-https://node1.olelive.com:6443/live/CCTV9HD/hls.m3u8
-#EXTINF:-1 tvg-id="CCTV10.cn",CCTV-10็งๆ (1080p)
-https://node1.olelive.com:6443/live/CCTV10HD/hls.m3u8
#EXTINF:-1 tvg-id="CCTV13.cn",CCTV-13ๆฐ้ป (1080p)
https://live-play.cctvnews.cctv.com/cctv/merge_cctv13.m3u8
-#EXTINF:-1 tvg-id="CCTV13.cn",CCTV-13ๆฐ้ป (1080p)
-https://node1.olelive.com:6443/live/CCTV13HD/hls.m3u8
diff --git a/streams/cn_yeslivetv.m3u b/streams/cn_yeslivetv.m3u
index 7d265c390..84c908f7a 100644
--- a/streams/cn_yeslivetv.m3u
+++ b/streams/cn_yeslivetv.m3u
@@ -1,27 +1,3 @@
#EXTM3U
-#EXTINF:-1 tvg-id="CCTV5Plus.cn",CCTV5+
-https://pull-f5-spe.ixigua.com/live/YesLiveTV-7d098b36-c7e5-4941-8eb0-6af0f5ad3f8d.flv
-#EXTINF:-1 tvg-id="HOYTV.hk",HOY TV้้ป่ฆ
-https://pull-f5-spe.ixigua.com/yeslivetv.com/934973832-202925490/index.m3u8
-#EXTINF:-1 tvg-id="",HOY่ณ่จๅฐ
-https://pull-f5-spe.ixigua.com/live/YesLiveTV-3e9f20e4-e6fd-4292-ac7a-3180610b1edd/index.m3u8
-#EXTINF:-1 tvg-id="J2.hk",J2
-https://pull-f5-spe.ixigua.com/yeslivetv.com/6027316-581799927/index.m3u8
-#EXTINF:-1 tvg-id="ViuTV.hk",ViuTV
-https://pull-f5-spe.ixigua.com/yeslivetv.com/711923214-581799927/index.m3u8
-#EXTINF:-1 tvg-id="ViuTVsix.hk",ViuTV Six
-https://pull-f5-spe.ixigua.com/yeslivetv.com/154548299-581799927/index.m3u8
#EXTINF:-1 tvg-id="",ๅๆฏ้ซ็ๅฐ
https://yeslivetv.com/twiptv/litv-longturn05/index.m3u8
-#EXTINF:-1 tvg-id="",็ก็ถซๆฐ่ๅฐ
-https://pull-f5-spe.ixigua.com/yeslivetv.com/446133069-816601364/index.m3u8
-#EXTINF:-1 tvg-id="",็ก็ถซ่ฒก็ถยท้ซ่ฒยท่ณ่จๅฐ
-https://pull-f5-spe.ixigua.com/yeslivetv.com/944048695-106799677/index.m3u8
-#EXTINF:-1 tvg-id="",็ฟก็ฟ ๅฐ
-https://pull-f5-spe.ixigua.com/yeslivetv.com/291403ea-fabd-4dc1-bdfa-f14ebe74411e/index.m3u8
-#EXTINF:-1 tvg-id="",้ฆๆธฏๅ้่ฒก็ถๅฐ
-https://pull-f5-spe.ixigua.com/live/YesLiveTV-312f21aa-d8cf-4d55-bd8f-87069342457d/index.m3u8
-#EXTINF:-1 tvg-id="",้ณณๅฐไธญๆ
-https://pull-f5-spe.ixigua.com/yeslivetv.com/592947253-711982631/index.m3u8
-#EXTINF:-1 tvg-id="",้ณณๅฐ่ณ่จ
-https://pull-f5-spe.ixigua.com/yeslivetv.com/303328069-581799927/index.m3u8
diff --git a/streams/co.m3u b/streams/co.m3u
index f34282d33..52f9c14f9 100644
--- a/streams/co.m3u
+++ b/streams/co.m3u
@@ -320,3 +320,15 @@ http://190.2.212.209:8050/play/a0n2
#EXTINF:-1 tvg-id="Zoom.co" http-referrer="https://canalzoom.org/senal-en-vivo",Zoom (1080p)
#EXTVLCOPT:http-referrer=https://canalzoom.org/senal-en-vivo
https://canalzoom.smoothcloud.co:3027/live/canalzoombr1live.m3u8
+#EXTINF:-1 tvg-id="TDIColombia.co",TDI Colombia (720p)
+https://streaming.amelbasoluciones.co:19360/tdicolombia/tdicolombia.m3u8
+#EXTINF:-1 tvg-id="CanalCapital.co",Canal Capital (720p)
+https://cdns.livewave.co:19360/canalcapital/canalcapital.m3u8
+#EXTINF:-1 tvg-id="MulticanalTelevision.co",Multicanal Television (720p)
+https://ssh101stream.ssh101.com/akamaissh101/ssh101/multicanal/playlist.m3u8
+#EXTINF:-1 tvg-id="Telepacifico.co",Telepacifico (1080p)
+https://play.cdn.enetres.net/6E5C615AA5FF4123ACAF0DAB57B7B8DC021/022/playlist.m3u8
+#EXTINF:-1 tvg-id="NSTV.co",NSTV (720p)
+https://cp.panelchs.com:1936/8038/8038/playlist.m3u8
+#EXTINF:-1 tvg-id="NSTV.co",NSTV (720p)
+http://138.186.23.7:22281/nstv/nstv/playlist.m3u8
diff --git a/streams/cr.m3u b/streams/cr.m3u
index d4b406e01..c04632b40 100644
--- a/streams/cr.m3u
+++ b/streams/cr.m3u
@@ -160,3 +160,5 @@ https://stmv.streamingvip.click/xpressojovenradiotv/xpressojovenradiotv/playlist
https://acceso.radiosportstv.online:3022/stream/play.m3u8
#EXTINF:-1 tvg-id="ZurquiTV.cr",Zurquรญ TV (720p)
https://videoserver.tmcreativos.com:19360/gesfnvpamn/gesfnvpamn.m3u8
+#EXTINF:-1 tvg-id="RetroxTV.cr",Retrox TV (720p)
+https://ssh101stream.ssh101.com/akamaissh101/ssh101/tvtvtv/playlist.m3u8
diff --git a/streams/de.m3u b/streams/de.m3u
index 1ce2ef96e..82a1da476 100644
--- a/streams/de.m3u
+++ b/streams/de.m3u
@@ -73,7 +73,7 @@ https://sdn-global-live-streaming-packager-cache.3qsdn.com/13456/13456_264_live.
https://sdn-global-live-streaming-packager-cache.3qsdn.com/65183/65183_264_live.m3u8
#EXTINF:-1 tvg-id="",Deluxe Rock (1080p)
https://sdn-global-live-streaming-packager-cache.3qsdn.com/65181/65181_264_live.m3u8
-#EXTINF:-1 tvg-id="DeutschesMusikFernsehen.de",Deutsches Musik Fernsehen (1080p) [Not 24/7]
+#EXTINF:-1 tvg-id="DMF.de@SD",DMF (1080p) [Not 24/7]
https://d-m-f.iptv-playoutcenter.de/dmf/dmf1/playlist.m3u8
#EXTINF:-1 tvg-id="DF1.de",DF1 (720p)
https://dbjwcot8t7nyd.cloudfront.net/out/v1/9d068a9428444b458324ad77b5a0a4b8/index.m3u8
@@ -371,17 +371,12 @@ https://live.creacast.com/rockland-radio/smil:rockland-radio.smil/playlist.m3u8
https://rt-ger.rttv.com/dvr/rtdeutsch/playlist.m3u8
#EXTINF:-1 tvg-id="RTDE.de",RT DE (1080p) [Not 24/7]
https://rt-ger.rttv.com/live/rtdeutsch/playlist.m3u8
-#EXTINF:-1 tvg-id="RTL.de",RTL (576p)
-https://s6.hopslan.com/rtlc1/tracks-v1a1/mono.m3u8
#EXTINF:-1 tvg-id="RTL.de",RTL (Germany) (576p)
http://178.219.128.68:64888/RTL
#EXTINF:-1 tvg-id="RTLSuper.de",RTL Super (576p)
http://178.219.128.68:64888/SUPERTL
#EXTINF:-1 tvg-id="RTLZwei.de",RTL Zwei (1080p)
http://178.219.128.68:64888/RTL2
-#EXTINF:-1 tvg-id="RTLZwei.de" http-referrer="https://www.2ix2.com/rtl2-live/",RTL Zwei (576p)
-#EXTVLCOPT:http-referrer=https://www.2ix2.com/rtl2-live/
-https://s6.hopslan.com/rtl2x1/index.m3u8
#EXTINF:-1 tvg-id="SaarlandFernsehen1.de",Saarland Fernsehen 1 (1080p)
https://saarland1.iptv-playoutcenter.de/saarland1/saarland1.stream_1/playlist.m3u8
#EXTINF:-1 tvg-id="SaarlandFernsehen2.de",Saarland Fernsehen 2 (720p) [Not 24/7]
diff --git a/streams/do.m3u b/streams/do.m3u
index c501704ec..1c1b79230 100644
--- a/streams/do.m3u
+++ b/streams/do.m3u
@@ -519,3 +519,5 @@ https://ss3.domint.net:3108/zol_str/vzol/playlist.m3u8
https://5790d294af2dc.streamlock.net/Zonavisiontv/Zonavisiontv/playlist.m3u8
#EXTINF:-1 tvg-id="ZTV.do",ZTV (720p) [Not 24/7]
https://lb00zdigital.streamprolive.com/mnt/hls/live.m3u8
+#EXTINF:-1 tvg-id="AvivamientoTV.do",Avivamiento TV (480p)
+https://ssh101.bozztv.com/ssh101/avivamientotv/playlist.m3u8
diff --git a/streams/es_samsung.m3u b/streams/es_samsung.m3u
index d31665e36..ea2bd6911 100644
--- a/streams/es_samsung.m3u
+++ b/streams/es_samsung.m3u
@@ -3,8 +3,6 @@
https://dhx-caillou-1-es.samsung.wurl.tv/playlist.m3u8
#EXTINF:-1 tvg-id="EuronewsSpanish.fr",Euronews en Espaรฑol (720p)
https://rakuten-euronews-4-es.samsung.wurl.tv/manifest/playlist.m3u8
-#EXTINF:-1 tvg-id="FashionTVEurope.fr",Fashion TV (Spain) (1080p)
-https://fashiontv-fashiontv-2-es.samsung.wurl.tv/manifest/playlist.m3u8
#EXTINF:-1 tvg-id="",iHola Play
https://rakuten-hola-2-es.samsung.wurl.tv/playlist.m3u8
#EXTINF:-1 tvg-id="PeopleAreAwesome.us",People are Awesome
diff --git a/streams/gr.m3u b/streams/gr.m3u
index 9d5c900c3..da7ee1987 100644
--- a/streams/gr.m3u
+++ b/streams/gr.m3u
@@ -67,8 +67,6 @@ http://live.streams.ovh:1935/tvcreta/tvcreta/playlist.m3u8
http://81.171.10.42:554/liveD/DStream.sdp/playlist.m3u8
#EXTINF:-1 tvg-id="DiavataTV.gr",Diavata TV (720p)
https://ssh101.bozztv.com/ssh101/diavatatvweb/playlist.m3u8
-#EXTINF:-1 tvg-id="DiavataTV.gr",Diavata TV (720p)
-https://video.streams.ovh:1936/DiavataTV/DiavataTV/playlist.m3u8
#EXTINF:-1 tvg-id="DiktyoTV.gr",Diktyo TV (576p)
https://5d00db0e0fcd5.streamlock.net/7322/7322/playlist.m3u8
#EXTINF:-1 tvg-id="DipsoTV.gr",Dipso TV (720p) [Not 24/7]
diff --git a/streams/hu.m3u b/streams/hu.m3u
index 4711e943b..f7582ade5 100644
--- a/streams/hu.m3u
+++ b/streams/hu.m3u
@@ -261,3 +261,5 @@ https://cloudfront44.lexanetwork.com:1344/relay01/HDE051.sdp/playlist.m3u8
https://cloudfront44.lexanetwork.com:1344/freerelay/zegtv.sdp/playlist.m3u8
#EXTINF:-1 tvg-id="ZugloTV.hu",Zuglo TV (360p)
https://cloudfront44.lexanetwork.com:1344/freerelay/zuglotv.sdp/playlist.m3u8
+#EXTINF:-1 tvg-id="AXNSpin.hu@Poland",AXN Spin Poland (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/0577b50c-92ca-49bc-a769-48203eb96bfd.ts
diff --git a/streams/iq.m3u b/streams/iq.m3u
index d67bac805..846617e9e 100644
--- a/streams/iq.m3u
+++ b/streams/iq.m3u
@@ -150,3 +150,5 @@ https://ca-rt.onetv.app/Waar/index-0.m3u8
https://5a3ed7a72ed4b.streamlock.net/zagrostv/SMIL:myStream.smil/playlist.m3u8
#EXTINF:-1 tvg-id="",Zarok TV Sorani (720p)
https://zindisorani.zaroktv.com.tr/hls/stream.m3u8
+#EXTINF:-1 tvg-id="AvarTV.iq",Avar TV (1080p)
+https://avr.host247.net/live/AvarTv/playlist.m3u8
diff --git a/streams/ir.m3u b/streams/ir.m3u
index 9dc324649..905b75f2c 100644
--- a/streams/ir.m3u
+++ b/streams/ir.m3u
@@ -71,3 +71,5 @@ https://hls.nejat.live/hls/stream.m3u8
https://hls.vox1.live/hls/stream.m3u8
#EXTINF:-1 tvg-id="YourTimeTV.ir",YourTime TV (720p) [Not 24/7]
https://hls.yourtime.live/hls/stream.m3u8
+#EXTINF:-1 tvg-id="VarzeshTV.ir",Varzesh TV (480p)
+https://stream.sainaertebat.com/hls2/varzeshtest.m3u8
diff --git a/streams/it.m3u b/streams/it.m3u
index 356d77e6b..03e6e6ed0 100644
--- a/streams/it.m3u
+++ b/streams/it.m3u
@@ -1,6 +1,4 @@
#EXTM3U
-#EXTINF:-1 tvg-id="7RadioVisione.it",7 RadioVisione (720p)
-https://stream10.xdevel.com/video1s976543-1932/stream/playlist.m3u8
#EXTINF:-1 tvg-id="12TVParma.it",12 TV Parma (540p) [Not 24/7]
https://5929b138b139d.streamlock.net/12TVParma/livestream/playlist.m3u8
#EXTINF:-1 tvg-id="20.it",20 Mediaset [Geo-blocked]
@@ -139,16 +137,16 @@ https://tsw.streamingwebtv24.it:1936/insuranceconnect/insuranceconnect/playlist.
https://live3-mediaset-it.akamaized.net/Content/hls_h0_clr_vos/live/channel(ki)/index.m3u8
#EXTINF:-1 tvg-id="Italia1.it",Italia 1 [Geo-blocked]
https://live3-mediaset-it.akamaized.net/Content/hls_h0_clr_vos/live/channel(i1)/index.m3u8
-#EXTINF:-1 tvg-id="Italia2.it",Italia 2 (480p) [Geo-blocked]
-https://59d7d6f47d7fc.streamlock.net/italia2/italia2/playlist.m3u8
#EXTINF:-1 tvg-id="Italia2.it",Italia 2 [Geo-blocked]
https://live3-mediaset-it.akamaized.net/Content/hls_h0_clr_vos/live/channel(i2)/index.m3u8
+#EXTINF:-1 tvg-id="Italia2.it",Italia 2 (480p) [Geo-blocked]
+https://59d7d6f47d7fc.streamlock.net/italia2/italia2/playlist.m3u8
#EXTINF:-1 tvg-id="Italia2TV.it",Italia 2 TV (480p) [Geo-blocked]
http://wms.shared.streamshow.it/italia2/mp4:italia2/playlist.m3u8
-#EXTINF:-1 tvg-id="Italia7.it",Italia 7 (576p)
-http://151.0.207.99:1935/italia7/italia7/playlist.m3u8
#EXTINF:-1 tvg-id="Italia7.it",Italia 7
https://streaming.softwarecreation.it/Italia7/Italia7/playlist.m3u8
+#EXTINF:-1 tvg-id="Italia7.it",Italia 7 (576p)
+http://151.0.207.99:1935/italia7/italia7/playlist.m3u8
#EXTINF:-1 tvg-id="ItaliaChannel.it",Italia Channel (1080p)
https://stream1.aswifi.it/italiachannel/stream/index.m3u8
#EXTINF:-1 tvg-id="",Iunior TV (720p) [Not 24/7]
@@ -251,7 +249,7 @@ https://iptv.peer.biz/live/peertv-it.m3u8
https://iptv.peer.biz/live/peertv-en.m3u8
#EXTINF:-1 tvg-id="PeerTVSudtirol.it",Peer TV Sรผdtirol (1080p)
https://iptv.peer.biz/live/peertv.m3u8
-#EXTINF:-1 tvg-id="PlutoTVTopGear.us@Italy" http-referrer="https://pluto.tv/it/live-tv/64c109a4798def0008a6e03e",Pluto TV Top Gear
+#EXTINF:-1 tvg-id="PlutoTVTopGear.it" http-referrer="https://pluto.tv/it/live-tv/64c109a4798def0008a6e03e",Pluto TV Top Gear
#EXTVLCOPT:http-referrer=https://pluto.tv/it/live-tv/64c109a4798def0008a6e03e
https://stitcher-ipv4.pluto.tv/v1/stitch/embed/hls/channel/64c109a4798def0008a6e03e/master.m3u8?advertisingId={PSID}&appVersion=unknown&deviceDNT={TARGETOPT}&deviceId={PSID}&deviceLat=0&deviceLon=0&deviceMake=samsung&deviceModel=samsung&deviceType=samsung-tvplus&deviceVersion=unknown&embedPartner=samsung-tvplus&profileFloor=&profileLimit=&samsung_app_domain={APP_DOMAIN}&samsung_app_name={APP_NAME}&us_privacy=1YNY
#EXTINF:-1 tvg-id="",POP Television (720p)
@@ -318,7 +316,7 @@ https://mediapolisevent.rai.it/relinker/relinkerServlet.htm?cont=2606803
https://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=308718
#EXTINF:-1 tvg-id="Rai2.it",Rai 2 (302p) [Geo-blocked]
http://stream.tvtap.net:8081/live/it-rai2.stream/playlist.m3u8
-#EXTINF:-1 tvg-id="Rai2.it@HD" http-referrer="https://babaktv.com/",Rai 2 HD
+#EXTINF:-1 tvg-id="Rai2HD.it" http-referrer="https://babaktv.com/",Rai 2 HD
#EXTVLCOPT:http-referrer=https://babaktv.com/
https://m3u.iranvids.com/rai02/output.m3u8
#EXTINF:-1 tvg-id="Rai3.it",Rai 3 (720p)
@@ -347,7 +345,7 @@ http://stream.tvtap.net:8081/live/it-rai5.stream/playlist.m3u8
http://188.60.179.180:8000/play/xxRaiGulpxx
#EXTINF:-1 tvg-id="RaiGulp.it",Rai Gulp (576p)
https://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=746953
-#EXTINF:-1 tvg-id="RaiItalia.it@Asia",RAI Italia Asia (576p)
+#EXTINF:-1 tvg-id="RaiItaliaAsia.it",RAI Italia Asia (576p)
http://210.210.155.37/x6bnqe/s/s63/index2.m3u8
#EXTINF:-1 tvg-id="RaiMovie.it",Rai Movie (1080p)
http://188.60.179.180:8000/play/xxRaiMOviexx
@@ -425,8 +423,6 @@ https://5f22d76e220e1.streamlock.net/rtm/rtm/playlist.m3u8
https://flash2.xdevel.com/rtptv/rtptv/playlist.m3u8
#EXTINF:-1 tvg-id="RTTRTrento.it",RTTR Trento (720p)
https://5f204aff97bee.streamlock.net/RTTRlive/livestream/playlist.m3u8
-#EXTINF:-1 tvg-id="RTV38.it",RTV38 (576p)
-https://streamcdne1-845d8509d2cb4f249dd0b2ae5755b6c2.msvdn.net/rtv38/rtv38_live_main/mainabr/rtv38_live_main/main_576/chunks_dvr.m3u8
#EXTINF:-1 tvg-id="SardegnaUno.it",Sardegna Uno
https://raw.githubusercontent.com/azgaresncf/strm2hls/main/streams/Sardegna1.m3u8
#EXTINF:-1 tvg-id="SienaTV.it",Siena TV (1080p)
@@ -443,10 +439,10 @@ https://di-yx2saj20.vo.lswcdn.net/sportitalia/smil:silive24.smil/playlist.m3u8
https://di-g7ij0rwh.vo.lswcdn.net/sportitalia/silive24.smil/playlist.m3u8
#EXTINF:-1 tvg-id="SportitaliaMotori.it",Sportitalia Motori (720p) [Geo-blocked]
https://di-yx2saj20.vo.lswcdn.net/sportitalia/smil:simotori.smil/playlist.m3u8
-#EXTINF:-1 tvg-id="SportitaliaSolocalcio.it",Sportitalia Solocalcio (720p) [Geo-blocked]
-https://di-yx2saj20.vo.lswcdn.net/sportitalia/smil:sisolocalcio.smil/playlist.m3u8
#EXTINF:-1 tvg-id="SportitaliaSolocalcio.it",Sportitalia SoloCalcio
https://di-g7ij0rwh.vo.lswcdn.net/sportitalia/sisolocalcio.smil/playlist.m3u8
+#EXTINF:-1 tvg-id="SportitaliaSolocalcio.it",Sportitalia Solocalcio (720p) [Geo-blocked]
+https://di-yx2saj20.vo.lswcdn.net/sportitalia/smil:sisolocalcio.smil/playlist.m3u8
#EXTINF:-1 tvg-id="Sportitalia.it",Sportitalia TV/Sportitalia/SI
https://di-g7ij0rwh.vo.lswcdn.net/sportitalia/sihd/playlist.m3u8
#EXTINF:-1 tvg-id="STEuropeChannel.it",ST Europe Channel (720p)
@@ -465,11 +461,9 @@ https://59d7d6f47d7fc.streamlock.net/supertv/supertv/playlist.m3u8
http://wms.shared.streamshow.it:1935/supertv/supertv/live.m3u8
#EXTINF:-1 tvg-id="SuperTVOristano.it",Super TV Oristano (720p) [Not 24/7]
http://193.70.81.40:1935/supertvoristano/supertvoristano/playlist.m3u8
-#EXTINF:-1 tvg-id="Super.it",Super! (480p)
-https://vimnitaly.akamaized.net/hls/live/2094034/super/master-2500.m3u8
#EXTINF:-1 tvg-id="SuperSix.it",SuperSix Lombardia (720p)
https://5db313b643fd8.streamlock.net/SUPERSIXLombardia/SUPERSIXLombardia/playlist.m3u8
-#EXTINF:-1 tvg-id="SuperTennis.it@HD",SuperTennis HD
+#EXTINF:-1 tvg-id="SuperTennisHD.it",SuperTennis HD
https://live-embed.supertennix.hiway.media/restreamer/supertennix_client/gpu-a-c0-16/restreamer/outgest/h24_supertennix/manifest.m3u8
#EXTINF:-1 tvg-id="T9.it",T9 (288p)
https://streaming.softwarecreation.it/tnove/tnove/playlist.m3u8
@@ -489,8 +483,6 @@ https://ssh101-fl.bozztv.com/ssh101/telemessina/index.m3u8
http://wms.shared.streamshow.it/telepavia/telepavia/playlist.m3u8
#EXTINF:-1 tvg-id="TelePegasoCatania.it",Tele Pegaso Catania (404p) [Not 24/7]
https://flash2.xdevel.com/telepegasocanale812/telepegasocanale812/playlist.m3u8
-#EXTINF:-1 tvg-id="TeleQuattro.it",Tele Quattro (720p)
-https://59d7d6f47d7fc.streamlock.net/telequattro/telequattro/playlist.m3u8
#EXTINF:-1 tvg-id="TeleQuattro.it",Tele Quattro (480p) [Not 24/7]
http://wms.shared.streamshow.it/telequattro/telequattro/playlist.m3u8
#EXTINF:-1 tvg-id="TeleRadioSciacca.it",Tele Radio Sciacca (240p) [Not 24/7]
@@ -519,7 +511,7 @@ https://1aadf145546f475282c5b4e658c0ac4b.msvdn.net/live/324149/hlbAWtl/playlist.
http://wms.shared.streamshow.it/telefoggia/mp4:telefoggia/playlist.m3u8
#EXTINF:-1 tvg-id="Telefoggia.it",Telefoggia (480p) [Not 24/7]
https://59d7d6f47d7fc.streamlock.net/telefoggia/telefoggia/playlist.m3u8
-#EXTINF:-1 tvg-id="TeleFormula.mx@SD",TeleFormula (720p) [Not 24/7]
+#EXTINF:-1 tvg-id="",TeleFormula (720p) [Not 24/7]
https://wms60.tecnoxia.com/radiof/abr_radioftele/playlist.m3u8
#EXTINF:-1 tvg-id="Telefriuli.it",Telefriuli (1080p)
https://5757bf2aa08e42248fb9b9d620f5d900.msvdn.net/live/S11646715/pE3ax0lT0rBd/playlist.m3u8
@@ -551,8 +543,6 @@ http://wms.shared.streamshow.it:1935/telemonteneve/telemonteneve/live.m3u8
http://stream2.xdevel.com/video2s976570-2303/stream/playlist_dvr.m3u8
#EXTINF:-1 tvg-id="Telenord.it",Telenord (576p) [Not 24/7]
https://5db313b643fd8.streamlock.net/Telenord/Telenord/playlist.m3u8
-#EXTINF:-1 tvg-id="Telenova.it",Telenova (720p)
-https://64b16f23efbee.streamlock.net/telenova/telenova/playlist.m3u8
#EXTINF:-1 tvg-id="Telepace1.it",Telepace 1 (1080p)
https://live.mariatvcdn.com/teleradiopace1/efcc8fc46cab26315ce3f5845d76008f.sdp/index.m3u8
#EXTINF:-1 tvg-id="Telepace2.it",Telepace 2 (1080p)
@@ -675,3 +665,15 @@ https://stream.cp.ets-sistemi.it:1936/profservtv/profservtv/playlist.m3u8
https://5f22d76e220e1.streamlock.net/canale5/canale5/playlist.m3u8
#EXTINF:-1 tvg-id="ZerounoTVNews.it",Zerouno TV News (720p)
https://5db313b643fd8.streamlock.net/ZerounoTVEventi/ZerounoTVEventi/playlist.m3u8
+#EXTINF:-1 tvg-id="Telenova.it",Telenova (720p)
+https://64b16f23efbee.streamlock.net/telenova/telenova/playlist.m3u8
+#EXTINF:-1 tvg-id="TeleQuattro.it",Tele Quattro (720p)
+https://59d7d6f47d7fc.streamlock.net/telequattro/telequattro/playlist.m3u8
+#EXTINF:-1 tvg-id="7RadioVisione.it",7 RadioVisione (720p)
+https://stream10.xdevel.com/video1s976543-1932/stream/playlist.m3u8
+#EXTINF:-1 tvg-id="RTV38.it",RTV38 (576p)
+https://streamcdne1-845d8509d2cb4f249dd0b2ae5755b6c2.msvdn.net/rtv38/rtv38_live_main/mainabr/rtv38_live_main/main_576/chunks_dvr.m3u8
+#EXTINF:-1 tvg-id="Super.it",Super!
+https://495c5a85d9074f29acffeaea9e0215eb.msvdn.net/super/super_main/super_main_hbbtv/playlist.m3u8
+#EXTINF:-1 tvg-id="tv9Telemaremma.it",tv9 Telemaremma (576p)
+https://rtmp-live-ingest-us-east-1-universe-dacast-com.akamaized.net/transmuxv1/streams/2095a288-1384-ed2e-5da0-278ccbb72295.m3u8
diff --git a/streams/jp.m3u b/streams/jp.m3u
index 33e9a1736..d698488a8 100644
--- a/streams/jp.m3u
+++ b/streams/jp.m3u
@@ -32,10 +32,6 @@ https://cdn.skygo.mn/live/disk1/NHK_World_Premium/HLSv3-FTA/NHK_World_Premium.m3
https://master.nhkworld.jp/nhkworld-tv/playlist/live.m3u8
#EXTINF:-1 tvg-id="JOAXDTV.jp",Nippon TV (540p) [Not 24/7]
https://ntv4.mov3.co/hls/ntv.m3u8
-#EXTINF:-1 tvg-id="NTVNEWS24.jp",NTV News24 (480p)
-https://n24-cdn-live.ntv.co.jp/ch01/index.m3u8
-#EXTINF:-1 tvg-id="NTVNEWS24.jp",NTV News24 (480p)
-https://n24-cdn-live.ntv.co.jp/ch02/index.m3u8
#EXTINF:-1 tvg-id="QVC.jp",QVC Japan (720p)
https://cdn-live1.qvc.jp/iPhone/1501/1501.m3u8
#EXTINF:-1 tvg-id="ShopChannel.jp",Shop Channel (1080p) [Not 24/7]
diff --git a/streams/kr.m3u b/streams/kr.m3u
index f422ec9bf..b24287bc6 100644
--- a/streams/kr.m3u
+++ b/streams/kr.m3u
@@ -105,8 +105,6 @@ http://kbs-dokdo.gscdn.com/dokdo_300/dokdo_300.stream/playlist.m3u8
http://mytv.dothome.co.kr/ch/catv/4.php
#EXTINF:-1 tvg-id="KBSWorld.kr",KBS World
http://mytv.dothome.co.kr/ch/catv/7.php
-#EXTINF:-1 tvg-id="KBSWorld.kr",KBS World (Vietnamese Subtitles) (720p)
-https://livecdn.fptplay.net/sdb/kbs_hls.smil/playlist.m3u8
#EXTINF:-1 tvg-id="KCTV.kr",KCTV ๊ด์ฃผ CH05 (720p) [Not 24/7]
http://119.77.96.184:1935/chn05/chn05/playlist.m3u8
#EXTINF:-1 tvg-id="KTV.kr",Korea TV (1080p)
diff --git a/streams/lu.m3u b/streams/lu.m3u
index b384d987f..c1afc1387 100644
--- a/streams/lu.m3u
+++ b/streams/lu.m3u
@@ -6,7 +6,7 @@ https://media02.webtvlive.eu/chd-edge/smil:chamber_tv_hd.smil/playlist.m3u8
#EXTINF:-1 tvg-id="DudelangeTV.lu",Dudelange TV (720p)
https://streamer20.multimedia.blue/Eltrona/DudelangeTV/playlist.m3u8
#EXTINF:-1 tvg-id="eldoTV.lu",eldo.TV (1080p)
-https://eldo-streaming.eldo.lu/eldotv/smil:eldotv.smil/playlist.m3u8
+https://stream.eldo.lu/data/live/tele/eldotv/1080p.m3u8
#EXTINF:-1 tvg-id="HesperTV.lu",Hesper TV (1080p)
https://streamer20.multimedia.blue/Eltrona/HesperangeTV/playlist.m3u8
#EXTINF:-1 tvg-id="LuxeTV.lu",Luxe TV (1080p)
diff --git a/streams/lv.m3u b/streams/lv.m3u
index 7a3d2d8e5..1b67e65d9 100644
--- a/streams/lv.m3u
+++ b/streams/lv.m3u
@@ -1,26 +1,13 @@
#EXTM3U
-#EXTINF:-1 tvg-id="1Plus2.lv",1+2
-http://89.254.128.5:22280/1_2/mono.m3u8
-#EXTINF:-1 tvg-id="8TV.lv",8TV (1080p)
-http://89.254.128.5:22280/8tv_hd/index.m3u8
-#EXTINF:-1 tvg-id="Kanal7Baltics.lv",Kanal 7 Baltics (Latvia) (1080p)
-http://89.254.128.5:22280/duo7_hd/index.m3u8
#EXTINF:-1 tvg-id="",Latvijas Radio 2 (240p)
https://5a44e5b800a41.streamlock.net/liveVLR2/mp4:LR2/playlist.m3u8
#EXTINF:-1 tvg-id="",Latvijas Radio 3 Klasika (240p)
https://5a44e5b800a41.streamlock.net/liveVLR3/mp4:Klasika/playlist.m3u8
-#EXTINF:-1 tvg-id="LatvijasSlagerkanals.lv",Latvijas ล lฤgerkanฤls (720p)
-https://stream.onlive-media.com/live/streams/smk.m3u8
-#EXTINF:-1 tvg-id="LTV1.lv" http-referrer="http://89.254.128.5:22280/",LTV1 (1080p)
-#EXTVLCOPT:http-referrer=http://89.254.128.5:22280/
-http://89.254.128.5:22280/ltv1_hd/index.m3u8
#EXTINF:-1 tvg-id="MovifyKino.lv" http-referrer="https://void.greenhosting.ru/",Movify Kino (576p)
#EXTVLCOPT:http-referrer=https://void.greenhosting.ru/
https://void.greenhosting.ru/MovifyKino_Mpeg4/index.m3u8
#EXTINF:-1 tvg-id="Multimania.lv",Multimania (Latvia) (576p)
https://void.greenhosting.ru/Multimania_Mpeg4/index.m3u8
-#EXTINF:-1 tvg-id="MuzikasVideoKanals.lv",Mลซzikas Video Kanฤls (720p)
-https://stream.onlive-media.com/live/streams/mvk.m3u8
#EXTINF:-1 tvg-id="Pingviins.lv" http-referrer="https://void.greenhosting.ru/",Pingvฤซns (576p) [Geo-blocked]
#EXTVLCOPT:http-referrer=https://void.greenhosting.ru/
https://void.greenhosting.ru/PingvinsLV_Mpeg4/video.m3u8
diff --git a/streams/my.m3u b/streams/my.m3u
index 3980fed75..fc1d4451c 100644
--- a/streams/my.m3u
+++ b/streams/my.m3u
@@ -50,3 +50,13 @@ https://d25tgymtnqzu8s.cloudfront.net/smil:tv6/playlist.m3u8?id=6
https://tonton-live-switch-ssar.akamaized.net/stream-tv9/master.m3u8?bpkio_serviceid=6c0958d82a830a02ca0936d9cfab8311
#EXTINF:-1 tvg-id="TVIKIM.my",TVIKIM
https://edge-sg1.vediostream.com/abr/tvikim/playlist.m3u8
+#EXTINF:-1 tvg-id="TVIKIM.my",TVIKIM (1080p)
+https://live.mana2.my/TvIkim/index.m3u8?auth_key=1745177920-648b7df03f404bc4ac20e90e96f817eb-0-35d3be6e85a129ce175b39a9819ca942&token=1745177920-648b7df03f404bc4ac20e90e96f817eb-0-35d3be6e85a129ce175b39a9819ca942
+#EXTINF:-1 tvg-id="SukeTV.my",Suke TV (720p)
+https://live.mana2.my/SukeTv/index.m3u8?auth_key=1745177878-c9b78020e8d64aac92e7d5db06493530-0-951f497899c978ee5fbc2f1375671272&token=1745177878-c9b78020e8d64aac92e7d5db06493530-0-951f497899c978ee5fbc2f1375671272
+#EXTINF:-1 tvg-id="TV2.my",TV2 (1080p)
+https://live.mana2.my/Tv2/index.m3u8?auth_key=1745177833-e4f0090e3d3b4ed1b2b4f5df87a24d34-0-d43f8be1101f9bb00363d62de6514e4d&token=1745177833-e4f0090e3d3b4ed1b2b4f5df87a24d34-0-d43f8be1101f9bb00363d62de6514e4d
+#EXTINF:-1 tvg-id="SelangorTV.my",SelangorTV (1080p)
+https://live.mana2.my/SelangorTv/index.m3u8?auth_key=1745177902-0210d7bbc24749879b1c370bfbd2b512-0-1a02652c616fd55ef43edbcf07d9c7dd&token=1745177902-0210d7bbc24749879b1c370bfbd2b512-0-1a02652c616fd55ef43edbcf07d9c7dd
+#EXTINF:-1 tvg-id="TV1.my",TV1 (1080p)
+https://live.mana2.my/Tv1/index.m3u8?auth_key=1745177809-03fbff3dfc194161829ff0dbf94a205a-0-c6dcdd3499b8b5488b7de0f6613b8047&token=1745177809-03fbff3dfc194161829ff0dbf94a205a-0-c6dcdd3499b8b5488b7de0f6613b8047
diff --git a/streams/pl.m3u b/streams/pl.m3u
index cf594bdb6..353049fef 100644
--- a/streams/pl.m3u
+++ b/streams/pl.m3u
@@ -1,135 +1,59 @@
#EXTM3U
#EXTINF:-1 tvg-id="4FunDance.pl",4 Fun Dance (576p)
-http://178.219.128.68:64888/4FUNDANC
-#EXTINF:-1 tvg-id="4FunDance.pl",4 Fun Dance (576p)
-http://178.219.128.68:64889/4FUNDANC
-#EXTINF:-1 tvg-id="4FunDance.pl",4 Fun Dance (576p)
http://185.236.229.62:9981/play/a020
-#EXTINF:-1 tvg-id="4FunKids.pl",4 Fun Kids (576p)
-http://178.219.128.68:64888/4FUNKIDS
-#EXTINF:-1 tvg-id="4FunTV.pl",4 Fun TV (576p)
-http://178.219.128.68:64888/4FUNTV
#EXTINF:-1 tvg-id="4FunTV.pl",4FUN TV (576p) [Not 24/7]
https://stream.4fun.tv:8888/hls/4f.m3u8
#EXTINF:-1 tvg-id="13Ulica.pl",13 Ulica (1080p)
-http://109.233.89.166/13_Ulica_HD/index.m3u8
-#EXTINF:-1 tvg-id="13Ulica.pl",13 Ulica (1080p)
-http://109.233.89.170/13_Ulica_HD/index.m3u8
-#EXTINF:-1 tvg-id="13Ulica.pl",13 Ulica (1080p)
-http://178.219.128.68:64888/13ULICHD
-#EXTINF:-1 tvg-id="13Ulica.pl",13 Ulica (1080p)
http://185.236.229.62:9981/play/a03o
#EXTINF:-1 tvg-id="ActiveFamily.pl",Active Family (1080p)
-http://109.233.89.166/Active_Family_HD/index.m3u8
-#EXTINF:-1 tvg-id="ActiveFamily.pl",Active Family (1080p)
-http://178.219.128.68:64888/ACTIFAMIHD
-#EXTINF:-1 tvg-id="ActiveFamily.pl",Active Family (1080p)
-http://178.219.128.68:64889/ACTIFAMIHD
-#EXTINF:-1 tvg-id="ActiveFamily.pl",Active Family (1080p)
http://185.236.229.62:9981/play/a04a
-#EXTINF:-1 tvg-id="AdventureTV.pl",Adventure TV (1080p)
-http://109.233.89.170/Adventure_HD/index.m3u8
-#EXTINF:-1 tvg-id="AFVFamily.us@Poland",AFV Family (720p)
+#EXTINF:-1 tvg-id="AFVFamily.pl",AFV Family (720p)
https://ec4a5bcc9d664b48985de6095931aaa7.mediatailor.us-east-1.amazonaws.com/v1/master/44f73ba4d03e9607dcd9bebdcb8494d86964f1d8/RakutenTV-eu_AmericasFunniestHomeVideos/playlist.m3u8
-#EXTINF:-1 tvg-id="AlfaTVP.pl",Alfa TVP (1080p)
-http://109.233.89.166/Alfa_TVP_HD/index.m3u8
-#EXTINF:-1 tvg-id="AlfaTVP.pl",Alfa TVP (1080p)
-http://109.233.89.170/Alfa_TVP_HD/index.m3u8
-#EXTINF:-1 tvg-id="AMC.us",AMC (1080p)
-http://109.233.89.166/AMC_HD/index.m3u8
-#EXTINF:-1 tvg-id="AMCEurope.uk@Polnad",AMC (1080p)
-http://109.233.89.170/AMC_HD/index.m3u8
-#EXTINF:-1 tvg-id="AMCEurope.uk@Polnad",AMC (1080p)
-http://178.219.128.68:64889/AMCHD
-#EXTINF:-1 tvg-id="AMCEurope.uk@Polnad",AMC (1080p)
+#EXTINF:-1 tvg-id="AMC.pl",AMC (1080p)
http://185.236.229.62:9981/play/a05g
-#EXTINF:-1 tvg-id="AntenaHD.pl",Antena HD (1080p)
-http://109.233.89.170/Antena_TV_HD/index.m3u8
-#EXTINF:-1 tvg-id="AXNCEE.es@Poland",AXN (1080p)
-http://178.219.128.68:64888/AXN
-#EXTINF:-1 tvg-id="AXNCEE.es@Poland",AXN (1080p)
+#EXTINF:-1 tvg-id="AXN.pl",AXN (1080p)
http://185.236.229.62:9981/play/a07s
-#EXTINF:-1 tvg-id="AXNBlack.us@Poland",AXN Black (576p)
+#EXTINF:-1 tvg-id="AXNBlack.pl",AXN Black (576p)
http://185.236.229.62:9981/play/a075
-#EXTINF:-1 tvg-id="AXNSpin.hu@Poland",AXN Spin (1080p)
+#EXTINF:-1 tvg-id="AXNSpin.pl",AXN Spin (1080p)
http://185.236.229.62:9981/play/a044
-#EXTINF:-1 tvg-id="AXNWhite.us@Poland",AXN White (576p)
+#EXTINF:-1 tvg-id="AXNWhite.pl",AXN White (576p)
http://185.236.229.62:9981/play/a074
-#EXTINF:-1 tvg-id="BBCBrit.uk@Poland",BBC Brit (1080p)
-http://109.233.89.170/BBC_Brit_HD/index.m3u8
-#EXTINF:-1 tvg-id="BBCBrit.uk@Poland",BBC Brit (1080p)
-http://178.219.128.68:64889/BBCBRITHD
-#EXTINF:-1 tvg-id="BBCBrit.uk@Poland",BBC Brit (1080p)
+#EXTINF:-1 tvg-id="BBCBrit.pl",BBC Brit (1080p)
http://185.236.229.62:9981/play/a06r
-#EXTINF:-1 tvg-id="BBCEarth.uk@Poland",BBC Earth (1080p)
-http://109.233.89.170/BBC_Earth_HD/index.m3u8
-#EXTINF:-1 tvg-id="BBCEarth.uk@Poland",BBC Earth (1080p)
-http://178.219.128.68:64888/BBCEARTHD
-#EXTINF:-1 tvg-id="BBCEarth.uk@Poland",BBC Earth (1080p)
-http://178.219.128.68:64889/BBCEARTHD
-#EXTINF:-1 tvg-id="BBCEarth.uk@Poland",BBC Earth (1080p)
+#EXTINF:-1 tvg-id="BBCEarth.pl",BBC Earth (1080p)
http://185.236.229.62:9981/play/a02o
-#EXTINF:-1 tvg-id="BBCFirst.uk@Poland",BBC First (1080p)
+#EXTINF:-1 tvg-id="BBCFirst.pl",BBC First (1080p)
http://185.236.229.62:9981/play/a02n
-#EXTINF:-1 tvg-id="BBCLifestyle.uk@Poland",BBC Lifestyle (1080p)
-http://178.219.128.68:64888/BBCLIFEHD
-#EXTINF:-1 tvg-id="BBCLifestyle.uk@Poland",BBC Lifestyle (1080p)
+#EXTINF:-1 tvg-id="BBCLifestyle.pl",BBC Lifestyle (1080p)
http://185.236.229.62:9981/play/a06t
#EXTINF:-1 tvg-id="Bigtime.pl",Bigtime (720p)
https://103f01c3ff79408e83c9212f8a374ecc.mediatailor.us-east-1.amazonaws.com/v1/master/0fb304b2320b25f067414d481a779b77db81760d/RakutenTV-eu_BjgtjmeDarmoweFilmy/playlist.m3u8
#EXTINF:-1 tvg-id="CarCityAdventures.pl",Car City Adventures (720p)
https://d39g1vxj2ef6in.cloudfront.net/v1/manifest/3fec3e5cac39a52b2132f9c66c83dae043dc17d4/prod-rakuten-stitched/b6397b24-18b0-49c2-80bf-0333ae568e37/5.m3u8
-#EXTINF:-1 tvg-id="CBeebies.pl",CBeebies (1080p)
-http://185.236.229.62:9981/play/a06s
#EXTINF:-1 tvg-id="CBSEuropa.pl",CBS Europa (1080p)
http://185.236.229.62:9981/play/a06i
#EXTINF:-1 tvg-id="CBSReality.pl",CBS Reality (1080p)
-http://109.233.89.170/CBS_Reality_HD/index.m3u8
-#EXTINF:-1 tvg-id="CBSReality.pl",CBS Reality (1080p)
http://185.236.229.62:9981/play/a02v
#EXTINF:-1 tvg-id="ComedyCentral.pl",Comedy Central (1080p)
-http://109.233.89.170/Comedy_Central_HD/index.m3u8
-#EXTINF:-1 tvg-id="ComedyCentral.pl",Comedy Central (1080p)
-http://178.219.128.68:64889/COMECENTHD
-#EXTINF:-1 tvg-id="ComedyCentral.pl",Comedy Central (1080p)
http://185.236.229.62:9981/play/a068
#EXTINF:-1 tvg-id="CrimePlusInvestigationPolsat.pl",Crime + Investigation Polsat (1080p)
http://185.236.229.62:9981/play/a07w
-#EXTINF:-1 tvg-id="DaVinci.pl",Da Vinci (1080p)
-http://109.233.89.170/Da_Vinci_HD/index.m3u8
#EXTINF:-1 tvg-id="DaVinci.pl",Da Vinci (576p)
http://185.236.229.62:9981/play/a024
-#EXTINF:-1 tvg-id="DAZNCombat.uk@Poland",DAZN Combat (1080p)
+#EXTINF:-1 tvg-id="DAZNCombat.pl",DAZN Combat (1080p)
https://dazn-combat-rakuten.amagi.tv/hls/amagi_hls_data_rakutenAA-dazn-combat-rakuten/CDN/master.m3u8
-#EXTINF:-1 tvg-id="DAZNWomensFootball.uk@Poland",DAZN Women's Football (1080p)
+#EXTINF:-1 tvg-id="DAZNWomensFootball.pl",DAZN Women's Football (1080p)
https://dazn-daznwomensfootball-rakuten.amagi.tv/hls/amagi_hls_data_rakutenAA-dazn-daznwomensfootball-rakuten/CDN/master.m3u8
#EXTINF:-1 tvg-id="DiscoPoloMusic.pl",Disco Polo Music (1080p)
http://185.236.229.62:9981/play/a078
-#EXTINF:-1 tvg-id="DisneyChannel.pl",Disney Channel (1080p)
-http://109.233.89.166/Disney_Channel/index.m3u8
-#EXTINF:-1 tvg-id="DisneyChannel.pl",Disney Channel (1080p)
-http://109.233.89.170/Disney_Channel/index.m3u8
-#EXTINF:-1 tvg-id="DisneyChannel.pl",Disney Channel (1080p)
-http://109.233.89.170/Disney_Channel/mono.m3u8
-#EXTINF:-1 tvg-id="DisneyChannel.pl",Disney Channel (1080p)
-http://178.219.128.68:64888/DISNCHAN
#EXTINF:-1 tvg-id="DisneyChannel.pl",Disney Channel PL (1080p)
http://185.236.229.62:9981/play/a07d
-#EXTINF:-1 tvg-id="DisneyJunior.pl",Disney Junior (1080p)
-http://178.219.128.68:64888/DISNJUNI
-#EXTINF:-1 tvg-id="DisneyJunior.pl",Disney Junior (576p)
-http://109.233.89.166/Disney_Junior/index.m3u8
-#EXTINF:-1 tvg-id="DisneyJunior.pl",Disney Junior (576p)
-http://109.233.89.170/Disney_Junior/index.m3u8
#EXTINF:-1 tvg-id="DisneyJunior.pl",Disney Junior (576p)
http://185.236.229.62:9981/play/a06n
#EXTINF:-1 tvg-id="DisneyXD.pl",Disney XD (576p)
-http://178.219.128.68:64888/DISNXD
-#EXTINF:-1 tvg-id="DisneyXD.pl",Disney XD (576p)
http://185.236.229.62:9981/play/a07c
#EXTINF:-1 tvg-id="dlaCiebietv.pl",dlaCiebie.tv (1080p)
-http://178.219.128.68:64889/DLAC
-#EXTINF:-1 tvg-id="dlaCiebietv.pl",dlaCiebie.tv (1080p)
http://185.236.229.62:9981/play/a04u
#EXTINF:-1 tvg-id="dlaCiebietv.pl",dlaCiebie.tv (1080p) [Not 24/7]
http://94.246.128.53:1935/tv/dlaCiebieTv/playlist.m3u8
@@ -144,202 +68,86 @@ http://9b129915.akadatel.com/iptv/83GA6FAV4DPTPQ/20068/index.m3u8
#EXTINF:-1 tvg-id="ElevenSports1.pl",Eleven Sports 1 (2160p)
http://185.236.229.62:9981/play/a03t
#EXTINF:-1 tvg-id="ElevenSports1.pl",Eleven Sports 1 (1080p)
-http://109.233.89.166/Eleven_Sports_1_HD/index.m3u8
-#EXTINF:-1 tvg-id="ElevenSports1.pl",Eleven Sports 1 (1080p)
-http://109.233.89.170/Eleven_Sports_1_HD/index.m3u8
-#EXTINF:-1 tvg-id="ElevenSports1.pl",Eleven Sports 1 (1080p)
http://185.236.229.62:9981/play/a05w
#EXTINF:-1 tvg-id="ElevenSports1.pl" http-referrer="https://newembedplay.xyz/",Eleven Sports 1 (1080p)
#EXTVLCOPT:http-referrer=https://newembedplay.xyz/
https://windnew.iosplayer.ru/wind/premium71/mono.m3u8
#EXTINF:-1 tvg-id="ElevenSports2.pl",Eleven Sports 2 (1080p)
-http://109.233.89.166/Eleven_Sports_2_HD/index.m3u8
-#EXTINF:-1 tvg-id="ElevenSports2.pl",Eleven Sports 2 (1080p)
-http://109.233.89.170/Eleven_Sports_2_HD/index.m3u8
-#EXTINF:-1 tvg-id="ElevenSports2.pl",Eleven Sports 2 (1080p)
http://185.236.229.62:9981/play/a05y
#EXTINF:-1 tvg-id="ElevenSports2.pl" http-referrer="https://newembedplay.xyz/",Eleven Sports 2 (1080p)
#EXTVLCOPT:http-referrer=https://newembedplay.xyz/
https://windnew.iosplayer.ru/wind/premium72/mono.m3u8
#EXTINF:-1 tvg-id="ElevenSports3.pl",Eleven Sports 3 (1080p)
-http://109.233.89.166/Eleven_Sports_3_HD/index.m3u8
-#EXTINF:-1 tvg-id="ElevenSports3.pl",Eleven Sports 3 (1080p)
-http://109.233.89.170/Eleven_Sports_3_HD/index.m3u8
-#EXTINF:-1 tvg-id="ElevenSports3.pl",Eleven Sports 3 (1080p)
http://185.236.229.62:9981/play/a061
#EXTINF:-1 tvg-id="ElevenSports3.pl" http-referrer="https://newembedplay.xyz/",Eleven Sports 3 (1080p)
#EXTVLCOPT:http-referrer=https://newembedplay.xyz/
https://ddy6new.iosplayer.ru/ddy6/premium428/mono.m3u8
-#EXTINF:-1 tvg-id="ElevenSports4.pl",Eleven Sports 4 (1080p)
-http://109.233.89.166/ELEVEN_SPORTS_4_HD/index.m3u8
-#EXTINF:-1 tvg-id="ElevenSports4.pl",Eleven Sports 4 (1080p)
-http://109.233.89.170/ELEVEN_SPORTS_4_HD/index.m3u8
-#EXTINF:-1 tvg-id="EpicDrama.uk@Poland",Epic Drama (1080p)
+#EXTINF:-1 tvg-id="EpicDrama.pl",Epic Drama (1080p)
http://185.236.229.62:9981/play/a029
-#EXTINF:-1 tvg-id="EpicDrama.uk@Poland",Epic Drama (1080p)
-http://195.189.60.33:9010/play/a00e
-#EXTINF:-1 tvg-id="EskaHitynaCzasie.pl",Eska Hity na Czasie (1080i)
-https://s-pl-01.mediatool.tv/playout/espl-abr/index.m3u8
-#EXTINF:-1 tvg-id="EskaRockDobrzeRockuje.pl",Eska Rock Dobrze Rockuje (1080i)
-https://s-pl-01.mediatool.tv/playout/erpl-abr/index.m3u8
-#EXTINF:-1 tvg-id="EskaRockTV.pl",Eska Rock TV (1080p)
-http://178.219.128.68:64889/ESKAROCKTV
-#EXTINF:-1 tvg-id="EskaTV.pl",Eska TV (1080p)
-http://109.233.89.166/ESKA_TV_HD/index.m3u8
-#EXTINF:-1 tvg-id="EskaTV.pl",Eska TV (1080p)
-http://109.233.89.170/ESKA_TV_HD/index.m3u8
-#EXTINF:-1 tvg-id="EskaTV.pl",Eska TV (1080p)
-http://178.219.128.68:64888/ESKATVHD
#EXTINF:-1 tvg-id="EskaTV.pl",Eska TV (1080p)
http://185.236.229.62:9981/play/a02f
-#EXTINF:-1 tvg-id="EskaTVExtra.pl",Eska TV Extra (1080p)
-http://178.219.128.68:64888/ESKATVEXTRHD
-#EXTINF:-1 tvg-id="Euronews.pl",Euronews (720p)
-https://euronews-live-pol-pl.fast.rakuten.tv/v1/master/0547f18649bd788bec7b67b746e47670f558b6b2/production-LiveChannel-6769/bitok/eyJzdGlkIjoiNDgyYjMzYzEtYmYwYi00NTIzLThlMGMtZGZmY2ZkNjYyMGU1IiwibWt0IjoicGwiLCJjaCI6Njc2OSwicHRmIjo1fQ==/26235/euronews-pl.m3u8
#EXTINF:-1 tvg-id="EWTNPoland.pl",EWTN Poland (1080p)
https://cdn3.wowza.com/1/ZHdrMWt1NjlDSzFu/bzdDVG10/hls/live/playlist.m3u8
-#EXTINF:-1 tvg-id="EzoTV.pl",Ezo TV (576p) [Not 24/7]
-http://live.ezotv.pl:1935/live/EZOTV/playlist.m3u8
-#EXTINF:-1 tvg-id="FailArmy.us@Poland",Fail Army (720p)
+#EXTINF:-1 tvg-id="FailArmy.pl",Fail Army (720p)
https://bd93cfed.wurl.com/master/f36d25e7e52f1ba8d7e56eb859c636563214f541/UmFrdXRlblRWLWV1X0ZhaWxBcm15X0hMUw/playlist.m3u8
#EXTINF:-1 tvg-id="FIFAPlus.pl",FIFA+ (720p)
https://a62dad94.wurl.com/master/f36d25e7e52f1ba8d7e56eb859c636563214f541/UmFrdXRlblRWLWV1X0ZJRkFQbHVzRW5nbGlzaF9ITFM/playlist.m3u8
-#EXTINF:-1 tvg-id="FightKlub.pl",Fight Klub (1080p)
-http://185.236.229.62:9981/play/a02l
-#EXTINF:-1 tvg-id="FightBox.nl@Poland",FightBox (1080p)
+#EXTINF:-1 tvg-id="FightBox.pl",FightBox (1080p)
http://185.236.229.62:9981/play/a03n
-#EXTINF:-1 tvg-id="FightBox.nl@Poland",FightBox (1080p)
-http://195.189.60.33:9002/play/a007
-#EXTINF:-1 tvg-id="FilmBoxAction.nl@Poland",FilmBox Action (576p)
+#EXTINF:-1 tvg-id="FilmBoxAction.pl",FilmBox Action (576p)
http://185.236.229.62:9981/play/a033
-#EXTINF:-1 tvg-id="FilmBoxAction.nl@Poland",FilmBox Action (576p)
-http://195.189.60.33:9004/play/a00g
-#EXTINF:-1 tvg-id="FilmBoxArthouse.nl@Poland",FilmBox Arthouse (576p)
-http://195.189.60.33:9010/play/a00a
-#EXTINF:-1 tvg-id="FilmBoxExtra.nl@Poland",FilmBox Extra (1080p)
-http://178.219.128.68:64888/FILMEXTRHD
-#EXTINF:-1 tvg-id="FilmBoxExtra.nl@Poland",FilmBox Extra (1080p)
+#EXTINF:-1 tvg-id="FilmBoxExtra.pl",FilmBox Extra (1080p)
http://185.236.229.62:9981/play/a036
-#EXTINF:-1 tvg-id="FilmBoxFamily.nl@Poland",FilmBox Family (1080p)
-http://178.219.128.68:64888/FILMFAMI
-#EXTINF:-1 tvg-id="FilmBoxFamily.nl@Poland",FilmBox Family (576p)
+#EXTINF:-1 tvg-id="FilmBoxFamily.pl",FilmBox Family (576p)
http://185.236.229.62:9981/play/a032
-#EXTINF:-1 tvg-id="FilmBoxFamily.nl@Poland",FilmBox Family (576p)
+#EXTINF:-1 tvg-id="FilmBoxFamily.pl",FilmBox Family (576p)
http://185.236.229.62:9981/play/a037
-#EXTINF:-1 tvg-id="FilmBoxPremium.nl@PolandHD",FilmBox Premium HD (1080p)
-http://178.219.128.68:64888/FILMPREMHD
-#EXTINF:-1 tvg-id="FilmBoxPremium.nl@PolandHD",FilmBox Premium HD (1080p)
+#EXTINF:-1 tvg-id="FilmBoxPremiumHD.pl",FilmBox Premium HD (1080p)
http://185.236.229.62:9981/play/a02x
#EXTINF:-1 tvg-id="FokusTV.pl",Fokus TV (1080p)
-http://178.219.128.68:64889/FOKUTV
-#EXTINF:-1 tvg-id="FokusTV.pl",Fokus TV (1080p)
http://185.236.229.62:9981/play/a02g
#EXTINF:-1 tvg-id="Fox.pl",Fox (1080p)
-http://109.233.89.166/FOX_HD/index.m3u8
-#EXTINF:-1 tvg-id="Fox.pl",Fox (1080p)
-http://109.233.89.170/FOX_HD/index.m3u8
-#EXTINF:-1 tvg-id="Fox.pl",Fox (1080p)
-http://178.219.128.68:64889/FOXHD
-#EXTINF:-1 tvg-id="Fox.pl",Fox (1080p)
http://185.236.229.62:9981/play/a07u
#EXTINF:-1 tvg-id="FoxComedy.pl",Fox Comedy (1080p)
-http://178.219.128.68:64889/FOXCOMEHD
-#EXTINF:-1 tvg-id="FoxComedy.pl",Fox Comedy (1080p)
http://185.236.229.62:9981/play/a07t
#EXTINF:-1 tvg-id="GolfChannel.pl",Golf Channel (1080p)
http://185.236.229.62:9981/play/a03m
-#EXTINF:-1 tvg-id="GolfZone.pl",Golf Zone (1080p)
-http://195.189.60.33:9002/play/a006
#EXTINF:-1 tvg-id="Grjngo.pl",Grjngo (720p)
https://b6c7c7d1020a4588982ca7c2625f85d1.mediatailor.us-east-1.amazonaws.com/v1/master/0fb304b2320b25f067414d481a779b77db81760d/RakutenTV-eu_GrjngoWesterny/playlist.m3u8
#EXTINF:-1 tvg-id="HardKnocksFightingChampionship.pl",Hard Knocks Fighting Championship (720p)
https://d39g1vxj2ef6in.cloudfront.net/v1/manifest/3fec3e5cac39a52b2132f9c66c83dae043dc17d4/prod-rakuten-stitched/2ee2b8d4-acc4-4296-9dc8-66f1ffd0fff8/5.m3u8
-#EXTINF:-1 tvg-id="HiDance.pl",HiDance (1080i)
-https://s-pl-01.mediatool.tv/playout/hdpl-abr/index.m3u8
-#EXTINF:-1 tvg-id="HiMusic.pl",HiMusic (1080i)
-https://s-pl-01.mediatool.tv/playout/hmpl-abr/index.m3u8
-#EXTINF:-1 tvg-id="History.pl",History (1080p)
-http://109.233.89.166/History_HD/index.m3u8
-#EXTINF:-1 tvg-id="History.pl",History (1080p)
-http://109.233.89.170/History_HD/index.m3u8
#EXTINF:-1 tvg-id="History.pl",History (1080p)
http://185.236.229.62:9981/play/a07v
#EXTINF:-1 tvg-id="History2.pl",History 2 (1080p)
-http://109.233.89.166/History_2_HD/index.m3u8
-#EXTINF:-1 tvg-id="History2.pl",History 2 (1080p)
-http://109.233.89.170/History_2_HD/index.m3u8
-#EXTINF:-1 tvg-id="History2.pl",History 2 (1080p)
http://185.236.229.62:9981/play/a03l
-#EXTINF:-1 tvg-id="HomeTV.pl",Home TV (1080p)
-http://109.233.89.166/TVR_HD/index.m3u8
-#EXTINF:-1 tvg-id="HomeTV.pl",Home TV (1080p)
-http://178.219.128.68:64889/HOMETV
-#EXTINF:-1 tvg-id="KinoPolska.pl",Kino Polska (1080p)
-http://109.233.89.166/Kino_Polska_HD/index.m3u8
-#EXTINF:-1 tvg-id="KinoPolska.pl",Kino Polska (1080p)
-http://178.219.128.68:64888/KINOPOLSHD
#EXTINF:-1 tvg-id="KinoPolska.pl",Kino Polska (1080p)
http://185.236.229.62:9981/play/a05v
#EXTINF:-1 tvg-id="KinoPolskaMuzyka.pl",Kino Polska Muzyka (576p)
http://185.236.229.62:9981/play/a030
#EXTINF:-1 tvg-id="KinoTV.pl",Kino TV (1080p)
-http://178.219.128.68:64888/KINOTV
-#EXTINF:-1 tvg-id="KinoTV.pl",Kino TV (1080p)
http://185.236.229.62:9981/play/a031
-#EXTINF:-1 tvg-id="LoneStar.us@Poland",Lone Star (720p)
+#EXTINF:-1 tvg-id="LoneStar.pl",Lone Star (720p)
https://6b88cde9.wurl.com/master/f36d25e7e52f1ba8d7e56eb859c636563214f541/UmFrdXRlblRWLWV1X0xvbmVTdGFyX0hMUw/playlist.m3u8
#EXTINF:-1 tvg-id="Moconomy.pl",Moconomy (1080p)
https://3ee905090d464be5a51478fd9c642e93.mediatailor.us-east-1.amazonaws.com/v1/master/44f73ba4d03e9607dcd9bebdcb8494d86964f1d8/RakutenTV-pl_Moconomy/playlist.m3u8
#EXTINF:-1 tvg-id="MonsterJam.pl",Monster Jam (720p)
https://4b9627c7.wurl.com/master/f36d25e7e52f1ba8d7e56eb859c636563214f541/UmFrdXRlblRWLWV1X01vbnN0ZXJKYW1fSExT/playlist.m3u8
#EXTINF:-1 tvg-id="Motowizja.pl",Motowizja (1080p)
-http://109.233.89.170/Motowizja_HD/index.m3u8
-#EXTINF:-1 tvg-id="Motowizja.pl",Motowizja (1080p)
http://185.236.229.62:9981/play/a02r
-#EXTINF:-1 tvg-id="MTV.pl",MTV (1080p)
-http://109.233.89.166/MTV_Polska_HD/index.m3u8
-#EXTINF:-1 tvg-id="MTV.pl",MTV (1080p)
-http://178.219.128.68:64888/MTVHD
-#EXTINF:-1 tvg-id="MuratorTV.pl",Murator TV (1080i)
-https://s-pl-01.mediatool.tv/playout/mupl-abr/index.m3u8
#EXTINF:-1 tvg-id="NatGeoPeople.pl",Nat Geo People
http://185.236.229.62:9981/play/a06f
#EXTINF:-1 tvg-id="NationalGeographic.pl",National Geographic (1080p)
-http://178.219.128.68:64889/NATIGEOGHD
-#EXTINF:-1 tvg-id="NationalGeographic.pl",National Geographic (1080p)
http://185.236.229.62:9981/play/a04d
#EXTINF:-1 tvg-id="NationalGeographicWild.pl",National Geographic Wild (1080p)
-http://109.233.89.166/National_Geographic_Wild_HD/index.m3u8
-#EXTINF:-1 tvg-id="NationalGeographicWild.pl",National Geographic Wild (1080p)
-http://109.233.89.170/National_Geographic_Wild_HD/index.m3u8
-#EXTINF:-1 tvg-id="NationalGeographicWild.pl",National Geographic Wild (1080p)
http://185.236.229.62:9981/play/a05z
#EXTINF:-1 tvg-id="NickJr.pl",Nick Jr. (576p)
http://185.236.229.62:9981/play/a065
-#EXTINF:-1 tvg-id="NickJr.pl",Nick Jr. Poland (576i)
-http://178.219.128.68:64888/NICKJR
-#EXTINF:-1 tvg-id="Nickelodeon.pl",Nickelodeon (576p)
-http://109.233.89.166/Nickelodeon/index.m3u8
-#EXTINF:-1 tvg-id="Nickelodeon.pl",Nickelodeon (576p)
-http://109.233.89.170/Nickelodeon/index.m3u8
-#EXTINF:-1 tvg-id="Nickelodeon.pl",Nickelodeon (576p)
-http://178.219.128.68:64889/NICK
#EXTINF:-1 tvg-id="Nickelodeon.pl",Nickelodeon (576p)
http://185.236.229.62:9981/play/a067
#EXTINF:-1 tvg-id="Nicktoons.pl",Nicktoons (1080p)
http://185.236.229.62:9981/play/a06a
#EXTINF:-1 tvg-id="NowaTV.pl",Nowa TV (1080p)
-http://109.233.89.170/NOWA_TV_HD/index.m3u8
-#EXTINF:-1 tvg-id="NowaTV.pl",Nowa TV (1080p)
-http://178.219.128.68:64889/NOWATVHD
-#EXTINF:-1 tvg-id="NowaTV.pl",Nowa TV (1080p)
http://185.236.229.62:9981/play/a02h
-#EXTINF:-1 tvg-id="NutaTV.pl",Nuta TV (576p)
-http://178.219.128.68:64888/NUTA
-#EXTINF:-1 tvg-id="ParamountNetwork.pl",Paramount Network (1080p)
-http://109.233.89.166/Paramount_Channel_HD/index.m3u8
-#EXTINF:-1 tvg-id="ParamountNetwork.pl",Paramount Network (1080p)
-http://109.233.89.170/Paramount_Channel_HD/index.m3u8
#EXTINF:-1 tvg-id="ParamountNetwork.pl",Paramount Network (1080p)
http://185.236.229.62:9981/play/a069
#EXTINF:-1 tvg-id="PeopleAreAwesome.pl",People Are Awesome (720p)
@@ -347,166 +155,54 @@ https://3ab76e42.wurl.com/master/f36d25e7e52f1ba8d7e56eb859c636563214f541/UmFrdX
#EXTINF:-1 tvg-id="PFLMMA.pl",PFL MMA (720p)
https://a883593c.wurl.com/master/f36d25e7e52f1ba8d7e56eb859c636563214f541/UmFrdXRlblRWLWV1X1BGTE1NQV9ITFM/playlist.m3u8
#EXTINF:-1 tvg-id="PoloTV.pl",Polo TV (1080p)
-http://109.233.89.166/Polo_TV/index.m3u8
-#EXTINF:-1 tvg-id="PoloTV.pl",Polo TV (1080p)
-http://178.219.128.68:64888/POLOTV
-#EXTINF:-1 tvg-id="PoloTV.pl",Polo TV (1080p)
http://185.236.229.62:9981/play/a02e
-#EXTINF:-1 tvg-id="Polonia1.pl",Polonia 1 (1080p)
-http://178.219.128.68:64889/POLO1
-#EXTINF:-1 tvg-id="Polonia1.pl",Polonia 1 (576p)
-http://109.233.89.166/Polonia_1/index.m3u8
-#EXTINF:-1 tvg-id="Polonia1.pl",Polonia 1 (576p)
-http://109.233.89.170/Polonia_1/index.m3u8
-#EXTINF:-1 tvg-id="Polsat.pl",Polsat (1080p)
-http://109.233.89.166/Polsat_HD/index.m3u8
-#EXTINF:-1 tvg-id="Polsat.pl",Polsat (1080p)
-http://109.233.89.170/Polsat_HD/index.m3u8
-#EXTINF:-1 tvg-id="Polsat.pl",Polsat (1080p)
-http://178.219.128.68:64889/POLSHD
#EXTINF:-1 tvg-id="Polsat.pl",Polsat (1080p)
http://185.236.229.62:9981/play/a03v
#EXTINF:-1 tvg-id="Polsat.pl",Polsat (1080p) [Geo-blocked]
https://lb2-e2-19.pluscdn.pl/ch/1502600/308/dash/20a18c30/live.mpd
#EXTINF:-1 tvg-id="Polsat2.pl",Polsat 2 (1080p)
-http://109.233.89.166/Polsat_2_HD/index.m3u8
-#EXTINF:-1 tvg-id="Polsat2.pl",Polsat 2 (1080p)
-http://109.233.89.170/Polsat_2_HD/index.m3u8
-#EXTINF:-1 tvg-id="Polsat2.pl",Polsat 2 (1080p)
-http://178.219.128.68:64888/POLS2HD
-#EXTINF:-1 tvg-id="Polsat2.pl",Polsat 2 (1080p)
http://185.236.229.62:9981/play/a042
#EXTINF:-1 tvg-id="PolsatCafe.pl",Polsat Cafe (1080p)
-http://109.233.89.170/Polsat_Cafe_HD/index.m3u8
-#EXTINF:-1 tvg-id="PolsatCafe.pl",Polsat Cafe (1080p)
-http://178.219.128.68:64889/POLSCAFEHD
-#EXTINF:-1 tvg-id="PolsatCafe.pl",Polsat Cafe (1080p)
http://185.236.229.62:9981/play/a03z
#EXTINF:-1 tvg-id="PolsatDoku.pl",Polsat Doku (1080p)
-http://109.233.89.166/Polsat_Doku_HD/index.m3u8
-#EXTINF:-1 tvg-id="PolsatDoku.pl",Polsat Doku (1080p)
-http://109.233.89.170/Polsat_Doku_HD/index.m3u8
-#EXTINF:-1 tvg-id="PolsatDoku.pl",Polsat Doku (1080p)
-http://178.219.128.68:64888/POLSDOKUHD
-#EXTINF:-1 tvg-id="PolsatDoku.pl",Polsat Doku (1080p)
http://185.236.229.62:9981/play/a07z
#EXTINF:-1 tvg-id="PolsatFilm.pl",Polsat Film (1080p)
-http://109.233.89.166/Polsat_Film_HD/index.m3u8
-#EXTINF:-1 tvg-id="PolsatFilm.pl",Polsat Film (1080p)
-http://109.233.89.170/Polsat_Film_HD/index.m3u8
-#EXTINF:-1 tvg-id="PolsatFilm.pl",Polsat Film (1080p)
-http://178.219.128.68:64889/POLSFILMHD
-#EXTINF:-1 tvg-id="PolsatFilm.pl",Polsat Film (1080p)
http://185.236.229.62:9981/play/a040
#EXTINF:-1 tvg-id="PolsatGames.pl",Polsat Games (1080p)
-http://109.233.89.166/Polsat_Games/index.m3u8
-#EXTINF:-1 tvg-id="PolsatGames.pl",Polsat Games (1080p)
-http://178.219.128.68:64889/POLSGAME
-#EXTINF:-1 tvg-id="PolsatGames.pl",Polsat Games (1080p)
http://185.236.229.62:9981/play/a025
#EXTINF:-1 tvg-id="PolsatJimJam.pl",Polsat JimJam (576p)
-http://109.233.89.166/Polsat_JimJam/index.m3u8
-#EXTINF:-1 tvg-id="PolsatJimJam.pl",Polsat JimJam (576p)
http://185.236.229.62:9981/play/a07e
#EXTINF:-1 tvg-id="PolsatMusic.pl",Polsat Music (1080p)
-http://109.233.89.170/Polsat_Music_HD/index.m3u8
-#EXTINF:-1 tvg-id="PolsatMusic.pl",Polsat Music (1080p)
http://185.236.229.62:9981/play/a02b
-#EXTINF:-1 tvg-id="PolsatNews.pl",Polsat News (1080p)
-http://109.233.89.166/Polsat_News_HD/index.m3u8
-#EXTINF:-1 tvg-id="PolsatNews.pl",Polsat News (1080p)
-http://109.233.89.170/Polsat_News_HD/index.m3u8
-#EXTINF:-1 tvg-id="PolsatNews.pl",Polsat News (1080p)
-http://178.219.128.68:64888/POLSNEWSHD
#EXTINF:-1 tvg-id="PolsatNews.pl",Polsat News (720p) [Geo-blocked]
http://cdn-s-lb2.pluscdn.pl/lv/1517830/349/dash/81ec4c32/live.mpd
#EXTINF:-1 tvg-id="PolsatNews2.pl",Polsat News 2 (1080p)
-http://109.233.89.166/Polsat_News_2/index.m3u8
-#EXTINF:-1 tvg-id="PolsatNews2.pl",Polsat News 2 (1080p)
-http://178.219.128.68:64889/POLSNEWS2
-#EXTINF:-1 tvg-id="PolsatNews2.pl",Polsat News 2 (1080p)
http://185.236.229.62:9981/play/a03u
#EXTINF:-1 tvg-id="PolsatNewsPolityka.pl",Polsat News Polityka (1080p)
-http://109.233.89.166/Polsat_News_Polityka/index.m3u8
-#EXTINF:-1 tvg-id="PolsatNewsPolityka.pl",Polsat News Polityka (1080p)
-http://109.233.89.170/Polsat_News_Polityka/index.m3u8
-#EXTINF:-1 tvg-id="PolsatNewsPolityka.pl",Polsat News Polityka (1080p)
-http://178.219.128.68:64888/SUPEHD
-#EXTINF:-1 tvg-id="PolsatNewsPolityka.pl",Polsat News Polityka (1080p)
http://185.236.229.62:9981/play/a07h
-#EXTINF:-1 tvg-id="PolsatNewsPolityka.pl",Polsat News Polityka (1080p) [Geo-blocked]
-https://lb2-e3-20.pluscdn.pl/lv/1511888/322/dash/52a9b70b/live.mpd
-#EXTINF:-1 tvg-id="PolsatPlay.pl",Polsat Play (1080p)
-http://109.233.89.166/Polsat_Play_HD/index.m3u8
-#EXTINF:-1 tvg-id="PolsatPlay.pl",Polsat Play (1080p)
-http://109.233.89.170/Polsat_Play_HD/index.m3u8
-#EXTINF:-1 tvg-id="PolsatPlay.pl",Polsat Play (1080p)
-http://178.219.128.68:64888/POLSPLAYHD
#EXTINF:-1 tvg-id="PolsatPlay.pl",Polsat Play (1080p)
http://185.236.229.62:9981/play/a03w
#EXTINF:-1 tvg-id="PolsatRodzina.pl",Polsat Rodzina (1080p)
-http://109.233.89.170/Polsat_Rodzina_HD/index.m3u8
-#EXTINF:-1 tvg-id="PolsatRodzina.pl",Polsat Rodzina (1080p)
-http://178.219.128.68:64889/POLSRODZHD
-#EXTINF:-1 tvg-id="PolsatRodzina.pl",Polsat Rodzina (1080p)
http://185.236.229.62:9981/play/a079
#EXTINF:-1 tvg-id="PolsatSeriale.pl",Polsat Seriale (1080p)
-http://109.233.89.166/Polsat_Seriale_HD/index.m3u8
-#EXTINF:-1 tvg-id="PolsatSeriale.pl",Polsat Seriale (1080p)
-http://109.233.89.170/Polsat_Seriale_HD/index.m3u8
-#EXTINF:-1 tvg-id="PolsatSeriale.pl",Polsat Seriale (1080p)
-http://178.219.128.68:64888/POLSROMA
-#EXTINF:-1 tvg-id="PolsatSeriale.pl",Polsat Seriale (1080p)
http://185.236.229.62:9981/play/a07b
#EXTINF:-1 tvg-id="PolsatSport.pl",Polsat Sport (1080p)
-http://109.233.89.170/Polsat_Sport_HD/index.m3u8
-#EXTINF:-1 tvg-id="PolsatSport.pl",Polsat Sport (1080p)
-http://178.219.128.68:64889/POLSSPORHD
-#EXTINF:-1 tvg-id="PolsatSport.pl",Polsat Sport (1080p)
http://185.236.229.62:9981/play/a07n
#EXTINF:-1 tvg-id="PolsatSportExtra.pl",Polsat Sport Extra (1080p)
-http://109.233.89.170/Polsat_Sport_Extra_HD/index.m3u8
-#EXTINF:-1 tvg-id="PolsatSportExtra.pl",Polsat Sport Extra (1080p)
-http://178.219.128.68:64889/POLSSPOREXTRHD
-#EXTINF:-1 tvg-id="PolsatSportExtra.pl",Polsat Sport Extra (1080p)
http://185.236.229.62:9981/play/a07q
#EXTINF:-1 tvg-id="PolsatSportFight.pl",Polsat Sport Fight (1080p)
-http://109.233.89.170/Polsat_Sport_Fight_HD/index.m3u8
-#EXTINF:-1 tvg-id="PolsatSportFight.pl",Polsat Sport Fight (1080p)
-http://178.219.128.68:64888/POLSSPORFIGHHD
-#EXTINF:-1 tvg-id="PolsatSportFight.pl",Polsat Sport Fight (1080p)
-http://178.219.128.68:64889/POLSSPORFIGHHD
-#EXTINF:-1 tvg-id="PolsatSportFight.pl",Polsat Sport Fight (1080p)
http://185.236.229.62:9981/play/a06l
#EXTINF:-1 tvg-id="PolsatSportNews.pl",Polsat Sport News (1080p)
-http://109.233.89.170/Polsat_Sport_News_HD/index.m3u8
-#EXTINF:-1 tvg-id="PolsatSportNews.pl",Polsat Sport News (1080p)
-http://178.219.128.68:64889/POLSSPORNEWSHD
-#EXTINF:-1 tvg-id="PolsatSportNews.pl",Polsat Sport News (1080p)
http://185.236.229.62:9981/play/a06m
-#EXTINF:-1 tvg-id="PolsatViasatExplore.pl",Polsat Viasat Explore (1080p)
-http://178.219.128.68:64888/POLSVIASEXPLHD
-#EXTINF:-1 tvg-id="PolsatViasatExplore.pl",Polsat Viasat Explore (1080p)
-http://178.219.128.68:64889/POLSVIASEXPLHD
-#EXTINF:-1 tvg-id="PolsatViasatHistory.pl",Polsat Viasat History (1080p)
-http://178.219.128.68:64888/POLSVIASHISTHD
-#EXTINF:-1 tvg-id="PolsatViasatHistory.pl",Polsat Viasat History (1080p)
-http://178.219.128.68:64889/POLSVIASHISTHD
#EXTINF:-1 tvg-id="PolsatViasatHistory.pl",Polsat Viasat History (1080p)
http://185.236.229.62:9981/play/a07o
#EXTINF:-1 tvg-id="PolsatViasatNature.pl",Polsat Viasat Nature (1080p)
-http://178.219.128.68:64888/POLSVIASNATUHD
-#EXTINF:-1 tvg-id="PolsatViasatNature.pl",Polsat Viasat Nature (1080p)
http://185.236.229.62:9981/play/a06g
-#EXTINF:-1 tvg-id="PoradnikZdrowieTV.pl",Poradnik Zdrowie TV (1080i)
-https://s-pl-01.mediatool.tv/playout/pzpl-abr/index.m3u8
-#EXTINF:-1 tvg-id="Puls2.pl",Puls 2 (1080p)
-http://178.219.128.68:64889/PULS2HD
#EXTINF:-1 tvg-id="Puls2.pl",Puls 2 (1080p)
http://185.236.229.62:9981/play/a02y
#EXTINF:-1 tvg-id="RadiowaCzworka.pl",Radio Czwรณrka (1080p)
https://stream14.polskieradio.pl/pr4_video/video_pr4.stream/playlist.m3u8
-#EXTINF:-1 tvg-id="RakutenViki.es@Poland",Rakuten VIKI (720p)
+#EXTINF:-1 tvg-id="RakutenVIKI.pl",Rakuten VIKI (720p)
https://fd18f1cadd404894a31a3362c5f319bd.mediatailor.us-east-1.amazonaws.com/v1/master/04fd913bb278d8775298c26fdca9d9841f37601f/RakutenTV-eu_RakutenViki-1/playlist.m3u8
#EXTINF:-1 tvg-id="RedCarpetTV.pl",Red Carpet TV (1080p)
http://185.236.229.62:9981/play/a02q
@@ -515,19 +211,7 @@ https://fast-rakuten.okast.tv/fa2e8c4385712f9a9076eaf728c751de/channels/1a6ecfaa
#EXTINF:-1 tvg-id="Revry.pl",Revry (720p)
https://99d8b4b6.wurl.com/master/f36d25e7e52f1ba8d7e56eb859c636563214f541/UmFrdXRlblRWLWV1X1JldnJ5X0hMUw/playlist.m3u8
#EXTINF:-1 tvg-id="RomanceTV.pl",Romance TV (1080p)
-http://109.233.89.166/Romance_TV_HD/index.m3u8
-#EXTINF:-1 tvg-id="RomanceTV.pl",Romance TV (1080p)
-http://109.233.89.170/Romance_TV_HD/index.m3u8
-#EXTINF:-1 tvg-id="RomanceTV.pl",Romance TV (1080p)
http://185.236.229.62:9981/play/a05j
-#EXTINF:-1 tvg-id="Royalworld.pl",Royalworld (720p)
-https://ac76260b1102416c93f3d20958bfeb4b.mediatailor.us-east-1.amazonaws.com/v1/master/44f73ba4d03e9607dcd9bebdcb8494d86964f1d8/RakutenTV-pl_Royalworld/playlist.m3u8
-#EXTINF:-1 tvg-id="SAYHi.pl",SAYHi (1080i)
-https://s-pl-01.mediatool.tv/playout/shpl-abr/index.m3u8
-#EXTINF:-1 tvg-id="SciFi.pl",Sci Fi (1080p)
-http://109.233.89.166/SciFi_HD/index.m3u8
-#EXTINF:-1 tvg-id="SciFi.pl",Sci Fi (1080p)
-http://109.233.89.170/SciFi_HD/index.m3u8
#EXTINF:-1 tvg-id="SciFi.pl",Sci Fi (1080p)
http://185.236.229.62:9981/play/a03k
#EXTINF:-1 tvg-id="SferaTV.pl",Sfera TV (480p) [Not 24/7]
@@ -536,46 +220,14 @@ http://stream.sferatv.pl:1935/sferalive/smil:sferalive.smil/playlist.m3u8
https://rakutenaa-fusemedia-shadesofblack-rakutena-giu24.amagi.tv/playlist/rakutenAA-fusemedia-shadesofblack-rakutenA/playlist.m3u8
#EXTINF:-1 tvg-id="SportKlub.pl",Sport Klub (1080p)
http://185.236.229.62:9981/play/a02k
-#EXTINF:-1 tvg-id="StarsTV.pl",Stars TV (1080p)
-http://178.219.128.68:64888/STARTVHD
-#EXTINF:-1 tvg-id="StopklatkaTV.pl",Stopklatka TV (1080p)
-http://109.233.89.166/Stopklatka_HD/index.m3u8
-#EXTINF:-1 tvg-id="StopklatkaTV.pl",Stopklatka TV (1080p)
-http://109.233.89.170/Stopklatka_HD/index.m3u8
-#EXTINF:-1 tvg-id="StopklatkaTV.pl",Stopklatka TV (1080p)
-http://178.219.128.68:64889/STOPTV
#EXTINF:-1 tvg-id="StopklatkaTV.pl",Stopklatka TV (576p)
http://185.236.229.62:9981/play/a023
#EXTINF:-1 tvg-id="SundanceTV.pl",Sundance TV (1080p)
http://185.236.229.62:9981/play/a03i
-#EXTINF:-1 tvg-id="SuperExpressTV.pl",Super Express TV (1080i)
-https://s-pl-01.mediatool.tv/playout/sepl-abr/index.m3u8
-#EXTINF:-1 tvg-id="SuperPolsat.pl",Super Polsat (1080p)
-http://109.233.89.166/Super_Polsat_HD/index.m3u8
-#EXTINF:-1 tvg-id="SuperPolsat.pl",Super Polsat (1080p)
-http://109.233.89.170/Super_Polsat_HD/index.m3u8
-#EXTINF:-1 tvg-id="SuperPolsat.pl",Super Polsat (1080p)
-http://178.219.128.68:64889/SUPEPOLSHD
#EXTINF:-1 tvg-id="SuperPolsat.pl",Super Polsat (1080p)
http://185.236.229.62:9981/play/a043
#EXTINF:-1 tvg-id="Superstacja.pl",Superstacja (1080p)
-http://109.233.89.166/Wydarzenia_24_HD/index.m3u8
-#EXTINF:-1 tvg-id="Superstacja.pl",Superstacja (1080p)
-http://109.233.89.170/Wydarzenia_24_HD/index.m3u8
-#EXTINF:-1 tvg-id="Superstacja.pl",Superstacja (1080p)
http://185.236.229.62:9981/play/a06j
-#EXTINF:-1 tvg-id="TeenNick.pl",TeenNick (1080p)
-http://109.233.89.166/TeenNick/index.m3u8
-#EXTINF:-1 tvg-id="TeenNick.pl",TeenNick (1080p)
-http://109.233.89.170/TeenNick/index.m3u8
-#EXTINF:-1 tvg-id="TeenNick.pl",TeenNick (1080p)
-http://109.233.89.173/TeenNick/index.m3u8
-#EXTINF:-1 tvg-id="Tele5.pl",Tele5 (1080p)
-http://109.233.89.166/Tele_5_HD/index.m3u8
-#EXTINF:-1 tvg-id="Tele5.pl",Tele5 (1080p)
-http://109.233.89.170/Tele_5_HD/index.m3u8
-#EXTINF:-1 tvg-id="Tele5.pl",Tele5 (1080p)
-http://178.219.128.68:64888/TELE5HD
#EXTINF:-1 tvg-id="TelewizjaBiznesowa.pl",Telewizja Biznesowa (1080p)
https://s-pl-01.mediatool.tv/playout/tbpl-abr/index.m3u8
#EXTINF:-1 tvg-id="TelewizjaJaslo.pl",Telewizja Jaslo (720p)
@@ -584,35 +236,19 @@ https://cdn01.sesja.pl/live_tvjaslo/live_tvjaslo.stream/playlist.m3u8
http://stream.herissons.cloud/hls/tvluban.m3u8
#EXTINF:-1 tvg-id="TelewizjaTorun.pl",Telewizja Toruล (1080p) [Not 24/7]
http://217.173.176.107:1935/live/ngrp:tvk.stream_mobile/chunks.m3u8
-#EXTINF:-1 tvg-id="ThePetCollective.us@Poland",The Pet Collective (720p)
+#EXTINF:-1 tvg-id="ThePetCollective.pl",The Pet Collective (720p)
https://6ec8627d.wurl.com/master/f36d25e7e52f1ba8d7e56eb859c636563214f541/UmFrdXRlblRWLWV1X1RoZVBldENvbGxlY3RpdmVfSExT/playlist.m3u8
#EXTINF:-1 tvg-id="TNAWrestlingChannel.pl",TNA Wrestling Channel (720p)
https://d39g1vxj2ef6in.cloudfront.net/v1/master/3fec3e5cac39a52b2132f9c66c83dae043dc17d4/prod-rakuten-stitched/master.m3u8?ads.xumo_channelId=88883039
#EXTINF:-1 tvg-id="TOPBarca.pl",TOP Barca (1080p)
https://amg17560-fcb-amg17560c1-rakuten-uk-4891.playouts.now.amagi.tv/playlist/amg17560-fcbarcelona-topbarcaenglish-rakutenuk/playlist.m3u8
-#EXTINF:-1 tvg-id="TopMoviesPolska.pl",Top Movies Polska (720p)
-https://d14678b7277b4f21964f367309c8f3e2.mediatailor.us-east-1.amazonaws.com/v1/master/44f73ba4d03e9607dcd9bebdcb8494d86964f1d8/RakutenTV-pl_TopMoviesPolska/playlist.m3u8
-#EXTINF:-1 tvg-id="TopMoviesPolska.pl",Top Movies Polska (1080i)
-https://top-movies-rakuten-tv-pl.fast.rakuten.tv/v1/master/0547f18649bd788bec7b67b746e47670f558b6b2/production-LiveChannel-6059/master.m3u8
#EXTINF:-1 tvg-id="TrusoTV.pl",Truso TV (576p) [Not 24/7]
https://stream.truso.tv/elblag/myStream_aac/playlist.m3u8
#EXTINF:-1 tvg-id="TV4.pl",TV4 (1080p)
-http://109.233.89.166/TV4_HD/index.m3u8
-#EXTINF:-1 tvg-id="TV4.pl",TV4 (1080p)
-http://109.233.89.170/TV4_HD/index.m3u8
-#EXTINF:-1 tvg-id="TV4.pl",TV4 (1080p)
-http://178.219.128.68:64889/TV4HD
-#EXTINF:-1 tvg-id="TV4.pl",TV4 (1080p)
http://185.236.229.62:9981/play/a03x
#EXTINF:-1 tvg-id="TV4.pl",TV4 (1080p) [Geo-blocked]
https://lb2-e2-32.pluscdn.pl/ch/1502601/309/dash/e25c2c93/live.mpd
#EXTINF:-1 tvg-id="TV6.pl",TV6 (1080p)
-http://109.233.89.166/TV6_HD/index.m3u8
-#EXTINF:-1 tvg-id="TV6.pl",TV6 (1080p)
-http://109.233.89.170/TV6_HD/index.m3u8
-#EXTINF:-1 tvg-id="TV6.pl",TV6 (1080p)
-http://178.219.128.68:64889/TV6HD
-#EXTINF:-1 tvg-id="TV6.pl",TV6 (1080p)
http://185.236.229.62:9981/play/a03y
#EXTINF:-1 tvg-id="TVASTA.pl",TV ASTA (720p)
https://5cce8c6f0e84c.streamlock.net/LiveCast/smil:PlayStream9.smil/playlist.m3u8
@@ -627,45 +263,17 @@ http://185.236.229.62:9981/play/a07l
#EXTINF:-1 tvg-id="TVOkazje.pl",TV Okazje (576p)
http://185.236.229.62:9981/play/a07m
#EXTINF:-1 tvg-id="TVPuls.pl",TV Puls (1080p)
-http://109.233.89.166/TV_Puls_HD/index.m3u8
-#EXTINF:-1 tvg-id="TVPuls.pl",TV Puls (1080p)
-http://178.219.128.68:64889/TVPULSHD
-#EXTINF:-1 tvg-id="TVPuls.pl",TV Puls (1080p)
http://185.236.229.62:9981/play/a034
#EXTINF:-1 tvg-id="TVRegionalnaLubin.pl",TV Regionalna Lubin (576p) [Not 24/7]
https://tvreg.klemit.net/regionalna/stream/index.m3u8
#EXTINF:-1 tvg-id="TVRepublika.pl",TV Republika (1080p)
-http://109.233.89.166/TV_Republika_HD/index.m3u8
-#EXTINF:-1 tvg-id="TVRepublika.pl",TV Republika (1080p)
-http://109.233.89.170/TV_Republika_HD/index.m3u8
-#EXTINF:-1 tvg-id="TVRepublika.pl",TV Republika (1080p)
-http://178.219.128.68:64888/TVREPU
-#EXTINF:-1 tvg-id="TVRepublika.pl",TV Republika (1080p)
http://185.236.229.62:9981/play/a027
#EXTINF:-1 tvg-id="TVTorun.pl",TV Toruล (1080p) [Not 24/7]
http://217.173.176.107:1935/live/tvk.stream/playlist.m3u8
#EXTINF:-1 tvg-id="TVTrwam.pl",TV Trwam (1080p) [Geo-blocked]
https://live-ch1.trwam.cf.insyscd.net/out/v1/b99041a282774d4a8fe84a54243af5de/trwamtv-live-ch1.mpd
-#EXTINF:-1 tvg-id="TVTrwam.pl",TV Trwam (576p)
-http://109.233.89.170/TV_TRWAM/index.m3u8
-#EXTINF:-1 tvg-id="TVWielkopolska.pl",TV Wielkopolska (614p)
-https://stream6.nadaje.com:35308/live/stream-1/playlist.m3u8
-#EXTINF:-1 tvg-id="TVP1.pl",TVP1 (1080p)
-http://109.233.89.166/TVP1_HD/index.m3u8
-#EXTINF:-1 tvg-id="TVP1.pl",TVP1 (1080p)
-http://109.233.89.170/TVP1_HD/index.m3u8
-#EXTINF:-1 tvg-id="TVP1.pl",TVP1 (1080p)
-http://178.219.128.68:64889/TVP1HD
#EXTINF:-1 tvg-id="TVP1.pl",TVP1 (1080p)
https://ec06-krk3.cache.orange.pl/dai4/org1/vb/104/tvp1hd/index.m3u8
-#EXTINF:-1 tvg-id="TVP1.pl",TVP1 (1080i)
-http://nowatv.stream2.link:8080/live/64:1c:b0:a1:48:c1/tfAjswfz6H/172c116f-0e21-4c80-9146-327a2ee05918.ts
-#EXTINF:-1 tvg-id="TVP2.pl",TVP2 (1080p)
-http://109.233.89.166/TVP2_HD/index.m3u8
-#EXTINF:-1 tvg-id="TVP2.pl",TVP2 (1080p)
-http://109.233.89.170/TVP2_HD/index.m3u8
-#EXTINF:-1 tvg-id="TVP2.pl",TVP2 (1080p)
-http://178.219.128.68:64889/TVP2HD
#EXTINF:-1 tvg-id="TVP2.pl",TVP2 (1080p)
http://185.236.229.62:9981/play/a07p
#EXTINF:-1 tvg-id="TVP2.pl",TVP2 (1080p)
@@ -698,90 +306,28 @@ https://cdndai.pl/tvp3poznansd/index.m3u8
https://cdndai.pl/tvp3rzeszowsd/index.m3u8
#EXTINF:-1 tvg-id="TVP3Szczecin.pl",TVP 3 Szczecin (576p)
https://cdndai.pl/tvp3szczecinsd/index.m3u8
-#EXTINF:-1 tvg-id="TVP3Warszawa.pl",TVP 3 Warszawa (1080p)
-http://185.236.229.62:9981/play/a060
#EXTINF:-1 tvg-id="TVP3Warszawa.pl",TVP 3 Warszawa (576p)
https://cdndai.pl/tvp3warszawasd/index.m3u8
#EXTINF:-1 tvg-id="TVP3Wroclaw.pl",TVP 3 Wrocลaw (576p)
https://cdndai.pl/tvp3wroclawsd/index.m3u8
-#EXTINF:-1 tvg-id="TVPABC.pl",TVP ABC (1080p)
-http://109.233.89.170/TVP_ABC/index.m3u8
-#EXTINF:-1 tvg-id="TVPABC.pl",TVP ABC (1080p)
-http://178.219.128.68:64888/TVPABC
#EXTINF:-1 tvg-id="TVPABC.pl",TVP ABC (576p)
http://185.236.229.62:9981/play/a02z
#EXTINF:-1 tvg-id="TVPDokument.pl",TVP Dokument (1080p)
-http://109.233.89.166/TVP_Dokument_HD/index.m3u8
-#EXTINF:-1 tvg-id="TVPDokument.pl",TVP Dokument (1080p)
-http://109.233.89.170/TVP_Dokument_HD/index.m3u8
-#EXTINF:-1 tvg-id="TVPDokument.pl",TVP Dokument (1080p)
-http://178.219.128.68:64889/TVPDOKUHD
-#EXTINF:-1 tvg-id="TVPDokument.pl",TVP Dokument (1080p)
http://185.236.229.62:9981/play/a05b
#EXTINF:-1 tvg-id="TVPHD.pl",TVP HD (1080p)
-http://109.233.89.166/TVP_HD/index.m3u8
-#EXTINF:-1 tvg-id="TVPHD.pl",TVP HD (1080p)
-http://109.233.89.170/TVP_HD/index.m3u8
-#EXTINF:-1 tvg-id="TVPHD.pl",TVP HD (1080p)
http://185.236.229.62:9981/play/a02i
-#EXTINF:-1 tvg-id="TVPHistoria.pl",TVP Historia (1080p)
-http://109.233.89.170/TVP_Historia/index.m3u8
-#EXTINF:-1 tvg-id="TVPHistoria.pl",TVP Historia (1080p)
-http://178.219.128.68:64889/TVPHIST
#EXTINF:-1 tvg-id="TVPHistoria.pl",TVP Historia (576p)
http://185.236.229.62:9981/play/a035
#EXTINF:-1 tvg-id="TVPInfo.pl",TVP Info (1080p)
-http://109.233.89.166/TVP_INFO_HD/index.m3u8
-#EXTINF:-1 tvg-id="TVPInfo.pl",TVP Info (1080p)
-http://109.233.89.170/TVP_INFO_HD/index.m3u8
-#EXTINF:-1 tvg-id="TVPInfo.pl",TVP Info (1080p)
-http://178.219.128.68:64889/TVPINFOHD
-#EXTINF:-1 tvg-id="TVPInfo.pl",TVP Info (1080p)
http://185.236.229.62:9981/play/a02j
-#EXTINF:-1 tvg-id="TVPKobieta.pl",TVP Kobieta (1080p)
-http://109.233.89.170/TVP_Kobieta_HD/index.m3u8
-#EXTINF:-1 tvg-id="TVPKobieta.pl",TVP Kobieta (1080p)
-http://178.219.128.68:64889/TVPKOBIHD
-#EXTINF:-1 tvg-id="TVPKultura.pl",TVP Kultura (1080p)
-http://178.219.128.68:64889/TVPKULT
#EXTINF:-1 tvg-id="TVPKultura.pl",TVP Kultura (1080p)
http://185.236.229.62:9981/play/a02t
-#EXTINF:-1 tvg-id="TVPNauka.pl",TVP Nauka (1080p)
-http://109.233.89.166/TVP_Nauka/index.m3u8
-#EXTINF:-1 tvg-id="TVPNauka.pl",TVP Nauka (1080p)
-http://109.233.89.170/TVP_Nauka/index.m3u8
-#EXTINF:-1 tvg-id="TVPPolonia.pl",TVP Polonia (1080p)
-http://109.233.89.166/TVP_Polonia_HD/index.m3u8
-#EXTINF:-1 tvg-id="TVPPolonia.pl",TVP Polonia (1080p)
-http://109.233.89.170/TVP_Polonia_HD/index.m3u8
-#EXTINF:-1 tvg-id="TVPPolonia.pl",TVP Polonia (1080p)
-http://178.219.128.68:64889/TVPPOLOHD
#EXTINF:-1 tvg-id="TVPPolonia.pl",TVP Polonia (1080p)
http://185.236.229.62:9981/play/a08m
-#EXTINF:-1 tvg-id="TVPRozrywka.pl",TVP Rozrywka (1080p)
-http://109.233.89.166/TVP_Rozrywka/index.m3u8
-#EXTINF:-1 tvg-id="TVPRozrywka.pl",TVP Rozrywka (1080p)
-http://109.233.89.170/TVP_Rozrywka/index.m3u8
-#EXTINF:-1 tvg-id="TVPRozrywka.pl",TVP Rozrywka (1080p)
-http://178.219.128.68:64889/TVPROZR
#EXTINF:-1 tvg-id="TVPRozrywka.pl",TVP Rozrywka (576p)
http://185.236.229.62:9981/play/a026
#EXTINF:-1 tvg-id="TVPSeriale.pl",TVP Seriale (1080p)
-http://109.233.89.166/TVP_Seriale/index.m3u8
-#EXTINF:-1 tvg-id="TVPSeriale.pl",TVP Seriale (1080p)
-http://178.219.128.68:64889/TVPSERI
-#EXTINF:-1 tvg-id="TVPSeriale.pl",TVP Seriale (1080p)
http://185.236.229.62:9981/play/a02w
-#EXTINF:-1 tvg-id="TVPSport.pl",TVP Sport (1080p)
-http://109.233.89.166/TVP_Sport_HD/index.m3u8
-#EXTINF:-1 tvg-id="TVPSport.pl",TVP Sport (1080p)
-http://109.233.89.170/TVP_Sport_HD/index.m3u8
-#EXTINF:-1 tvg-id="TVPSport.pl",TVP Sport (1080p)
-http://178.219.128.68:64889/TVPSPORHD
-#EXTINF:-1 tvg-id="TVPWorld.pl",TVP World (1080p)
-http://178.219.128.68:64888/TVPWORLHD
-#EXTINF:-1 tvg-id="TVS.pl",TVS (1080p)
-http://178.219.128.68:64888/TVS
#EXTINF:-1 tvg-id="TVS.pl",TVS (576p)
http://185.236.229.62:9981/play/a02p
#EXTINF:-1 tvg-id="TVT.pl",TVT (720p)
@@ -790,41 +336,189 @@ https://live.streamtvt.pl/LiveAppStreamTVT/streams/853271271313930867905724.m3u8
http://gargoyle.tomkow.pl/hls/tvt.m3u8
#EXTINF:-1 tvg-id="ViasatExploreClassic.pl",Viasat Explore Classic (720p)
https://da9c49fa.wurl.com/master/f36d25e7e52f1ba8d7e56eb859c636563214f541/UmFrdXRlblRWLXBsX1ZpYXNhdEV4cGxvcmVfSExT/playlist.m3u8
-#EXTINF:-1 tvg-id="ViDocTV.pl",ViDoc TV (1080p)
-http://185.236.229.62:9981/play/a051
-#EXTINF:-1 tvg-id="VOXMusicTV.pl",VOX Music TV (576p)
-http://109.233.89.166/VOX/index.m3u8
-#EXTINF:-1 tvg-id="VoxwRytmieHitow.pl",Vox w Rytmie Hitow (1080i)
-https://s-pl-01.mediatool.tv/playout/vxpl-abr/index.m3u8
-#EXTINF:-1 tvg-id="WPolscePL.pl",W Polsce PL (1080p)
-http://109.233.89.170/wPolsce.PL/index.m3u8
-#EXTINF:-1 tvg-id="WPolscePL.pl",W Polsce PL (576p)
-http://109.233.89.166/wPolsce.PL/index.m3u8
#EXTINF:-1 tvg-id="WPolscePL.pl",W Polsce PL (576p)
http://185.236.229.62:9981/play/a022
#EXTINF:-1 tvg-id="WorldBilliards.pl",World Billiards (720p)
https://9a81dd4ee3884d0dbcacafaf0d81327a.mediatailor.us-east-1.amazonaws.com/v1/master/04fd913bb278d8775298c26fdca9d9841f37601f/RakutenTV-eu_BilliardsTV/playlist.m3u8
#EXTINF:-1 tvg-id="WorldofFreesports.pl",World of Freesports (1080p)
https://rakutenaa-mainstreammediafreesportsintl-rakuten-t7dc0.amagi.tv/playlist/rakutenAA-mainstreammediafreesportsintl-rakuten/playlist.m3u8
-#EXTINF:-1 tvg-id="WorldPokerTour.us@Poland",World Poker Tour (1080p)
+#EXTINF:-1 tvg-id="WorldPokerTour.pl",World Poker Tour (1080p)
https://d39g1vxj2ef6in.cloudfront.net/v1/manifest/3fec3e5cac39a52b2132f9c66c83dae043dc17d4/prod-rakuten-stitched/15d59f2f-80da-4448-9bce-775cc9f470f7/1.m3u8
-#EXTINF:-1 tvg-id="WPTV.pl",WP TV (1080p)
-http://109.233.89.166/WP_HD/index.m3u8
-#EXTINF:-1 tvg-id="WPTV.pl",WP TV (1080p)
-http://109.233.89.170/WP_HD/index.m3u8
-#EXTINF:-1 tvg-id="WPTV.pl",WP TV (1080p)
-http://178.219.128.68:64889/WPHD
#EXTINF:-1 tvg-id="WPTV.pl",WP TV (576p)
http://185.236.229.62:9981/play/a02u
#EXTINF:-1 tvg-id="ZNation.pl",Z Nation (720p)
https://d39g1vxj2ef6in.cloudfront.net/v1/master/3fec3e5cac39a52b2132f9c66c83dae043dc17d4/prod-rakuten-stitched/master.m3u8?ads.xumo_channelId=88883098
#EXTINF:-1 tvg-id="ZeeOne.pl",Zee One (720p)
https://89ec2d15e090480bb419d940b8793b9c.mediatailor.us-east-1.amazonaws.com/v1/master/44f73ba4d03e9607dcd9bebdcb8494d86964f1d8/RakutenTV-eu_ZeeWorld-1/playlist.m3u8
-#EXTINF:-1 tvg-id="ZoomTV.pl",Zoom TV (1080p)
-http://109.233.89.166/Zoom_TV_HD/index.m3u8
-#EXTINF:-1 tvg-id="ZoomTV.pl",Zoom TV (1080p)
-http://109.233.89.170/Zoom_TV_HD/index.m3u8
-#EXTINF:-1 tvg-id="ZoomTV.pl",Zoom TV (1080p)
-http://178.219.128.68:64889/ZOOMTVHD
#EXTINF:-1 tvg-id="ZoomTV.pl",Zoom TV (576p)
http://185.236.229.62:9981/play/a02a
+#EXTINF:-1 tvg-id="PolsatNewsPolityka.pl",Polsat News Polityka (1080p) [Geo-blocked]
+https://lb2-e3-20.pluscdn.pl/lv/1511888/322/dash/52a9b70b/live.mpd
+#EXTINF:-1 tvg-id="Royalworld.pl",Royalworld (720p)
+https://ac76260b1102416c93f3d20958bfeb4b.mediatailor.us-east-1.amazonaws.com/v1/master/44f73ba4d03e9607dcd9bebdcb8494d86964f1d8/RakutenTV-pl_Royalworld/playlist.m3u8
+#EXTINF:-1 tvg-id="Euronews.pl",Euronews (720p)
+https://euronews-live-pol-pl.fast.rakuten.tv/v1/master/0547f18649bd788bec7b67b746e47670f558b6b2/production-LiveChannel-6769/bitok/eyJzdGlkIjoiNDgyYjMzYzEtYmYwYi00NTIzLThlMGMtZGZmY2ZkNjYyMGU1IiwibWt0IjoicGwiLCJjaCI6Njc2OSwicHRmIjo1fQ%3D%3D/26235/euronews-pl.m3u8
+#EXTINF:-1 tvg-id="TopMoviesPolska.pl",Top Movies Polska (1080i)
+https://top-movies-rakuten-tv-pl.fast.rakuten.tv/v1/master/0547f18649bd788bec7b67b746e47670f558b6b2/production-LiveChannel-6059/master.m3u8
+#EXTINF:-1 tvg-id="HiDance.pl",HiDance (1080i)
+https://s-pl-01.mediatool.tv/playout/hdpl-abr/index.m3u8
+#EXTINF:-1 tvg-id="HiMusic.pl",HiMusic (1080i)
+https://s-pl-01.mediatool.tv/playout/hmpl-abr/index.m3u8
+#EXTINF:-1 tvg-id="SAYHi.pl",SAYHi (1080i)
+https://s-pl-01.mediatool.tv/playout/shpl-abr/index.m3u8
+#EXTINF:-1 tvg-id="VoxwRytmieHitow.pl",Vox w Rytmie Hitow (1080i)
+https://s-pl-01.mediatool.tv/playout/vxpl-abr/index.m3u8
+#EXTINF:-1 tvg-id="EskaRockDobrzeRockuje.pl",Eska Rock Dobrze Rockuje (1080i)
+https://s-pl-01.mediatool.tv/playout/erpl-abr/index.m3u8
+#EXTINF:-1 tvg-id="EskaHitynaCzasie.pl",Eska Hity na Czasie (1080i)
+https://s-pl-01.mediatool.tv/playout/espl-abr/index.m3u8
+#EXTINF:-1 tvg-id="PoradnikZdrowieTV.pl",Poradnik Zdrowie TV (1080i)
+https://s-pl-01.mediatool.tv/playout/pzpl-abr/index.m3u8
+#EXTINF:-1 tvg-id="MuratorTV.pl",Murator TV (1080i)
+https://s-pl-01.mediatool.tv/playout/mupl-abr/index.m3u8
+#EXTINF:-1 tvg-id="SuperExpressTV.pl",Super Express TV (1080i)
+https://s-pl-01.mediatool.tv/playout/sepl-abr/index.m3u8
+#EXTINF:-1 tvg-id="TVP1.pl",TVP1 (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/172c116f-0e21-4c80-9146-327a2ee05918.ts
+#EXTINF:-1 tvg-id="ComedyCentral.pl",Comedy Central (540i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/ecf03eb6-acc5-4c9e-9339-9e6a4fe31d98.ts
+#EXTINF:-1 tvg-id="VOD205.pl",VOD 205 (576i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/9dac17c7-98be-4b05-8ef2-038aa3a37cc4.ts
+#EXTINF:-1 tvg-id="VOD206.pl",VOD 206 (576i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/4a4bb8f0-c5bc-4001-94ed-1b8d628e097d.ts
+#EXTINF:-1 tvg-id="VOD207.pl",VOD 207 (576i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/1e51c6c3-a5a2-4f0e-8482-d1bc9f94d2e5.ts
+#EXTINF:-1 tvg-id="VOD208.pl",VOD 208 (720p)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/ffb9bcf6-96e8-4a7a-9bcd-a32a8b399f5a.ts
+#EXTINF:-1 tvg-id="13Ulica.pl",13 Ulica (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/ced900ec-18e3-4500-be3d-5642227688f7.ts
+#EXTINF:-1 tvg-id="NowaTV.pl",Nowa TV (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/62d1cae5-4864-4c79-9224-96e4a1dfe9f3.ts
+#EXTINF:-1 tvg-id="PoloTV.pl",Polo TV (720p)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/6e627418-a319-4d09-a627-4b612193147d.ts
+#EXTINF:-1 tvg-id="PowerTV.pl",Power TV (576i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/ca44c966-c2d9-48a4-aa6c-c22f1c95fd17.ts
+#EXTINF:-1 tvg-id="RedCarpetTV.pl",Red Carpet TV (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/6109dcb5-ebdd-41a0-b7f0-0c1ab0c1ddd2.ts
+#EXTINF:-1 tvg-id="StarsTV.pl",Stars TV (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/f78056d5-c76b-4ed5-9186-f02217dcfb48.ts
+#EXTINF:-1 tvg-id="TV6.pl",TV6 (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/693f29bf-70ac-432d-bed6-458b1ed144e7.ts
+#EXTINF:-1 tvg-id="TV6.pl",TV6 (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/9f075b25-a8e2-4801-9ed5-e599c6e281c4.ts
+#EXTINF:-1 tvg-id="RomanceTV.pl",Romance TV (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/a58cea4f-b711-4935-ab88-5848b99d76e2.ts
+#EXTINF:-1 tvg-id="SundanceTV.pl",Sundance TV (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/e02f357c-de0f-461f-9928-949889a786fb.ts
+#EXTINF:-1 tvg-id="WPTV.pl",WP TV (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/0a234f82-e4ff-470e-864c-bfc560b00f6a.ts
+#EXTINF:-1 tvg-id="WPTV.pl",WP TV (576i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/afd2ddbf-a0f9-481a-8dcd-fcfa8f97939b.ts
+#EXTINF:-1 tvg-id="E.pl",E! (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/1edbd119-5fef-4b2f-b3ef-7bb9e27a49aa.ts
+#EXTINF:-1 tvg-id="TVS.pl",TVS (576i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/a8ddbe08-496f-4aba-9f18-6bef849a01fa.ts
+#EXTINF:-1 tvg-id="TVS.pl",TVS (576i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/38e7bf79-ed62-4242-968d-df18f04181de.ts
+#EXTINF:-1 tvg-id="ZoomTV.pl",Zoom TV (720p)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/f9057d34-8caf-4cf6-894d-9e4ca197095e.ts
+#EXTINF:-1 tvg-id="ZoomTV.pl",Zoom TV (576i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/95b37a9f-4e7f-4c72-9595-5c1b27324cab.ts
+#EXTINF:-1 tvg-id="ComedyCentral.pl",Comedy Central (540i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/3499eccd-fe22-444a-9129-2975ae097d42.ts
+#EXTINF:-1 tvg-id="ComedyCentral.pl",Comedy Central (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/b78c60f0-b186-485a-822c-2ee6822b006f.ts
+#EXTINF:-1 tvg-id="Puls2.pl",Puls 2 (720p)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/aef35b7b-ac74-4207-9db9-b1bfae15be28.ts
+#EXTINF:-1 tvg-id="Puls2.pl",Puls 2 (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/e0286f10-a4c8-45fb-983c-f6ebec907fd8.ts
+#EXTINF:-1 tvg-id="TVOkazje.pl",TV Okazje (576i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/26e34e37-6cf4-49d8-bcf3-f1a2eac28c57.ts
+#EXTINF:-1 tvg-id="TVPuls.pl",TV Puls (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/aeb45398-d540-43df-814d-b9eab064cb13.ts
+#EXTINF:-1 tvg-id="TVPuls.pl",TV Puls (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/53c57b24-742a-42d0-ae2b-998408f4c19c.ts
+#EXTINF:-1 tvg-id="TV4.pl",TV4 (720p)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/85edd39f-d0c7-42ca-b3b4-43c25b427c3a.ts
+#EXTINF:-1 tvg-id="TV4.pl",TV4 (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/2b98fc49-f914-4b76-83dc-50a16d039e8f.ts
+#EXTINF:-1 tvg-id="SuperPolsat.pl",Super Polsat (720p)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/ddd92d16-e9fc-405a-9cde-3b39297dc7db.ts
+#EXTINF:-1 tvg-id="SuperPolsat.pl",Super Polsat (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/1e84efe5-b400-470a-847d-2ff4e511fdf6.ts
+#EXTINF:-1 tvg-id="PolsatPlay.pl",Polsat Play (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/6fbc38af-7ef3-4997-a9cd-d95f3adffa10.ts
+#EXTINF:-1 tvg-id="PolsatPlay.pl",Polsat Play (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/580e1210-a4e7-4538-a335-ba0778c2a88c.ts
+#EXTINF:-1 tvg-id="PolsatRodzina.pl",Polsat Rodzina (720p)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/426e3874-1088-452b-86b9-d5ffd907645c.ts
+#EXTINF:-1 tvg-id="PolsatRodzina.pl",Polsat Rodzina (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/f342f17c-f85c-4940-8192-e12f20065006.ts
+#EXTINF:-1 tvg-id="PolsatComedyCentralExtra.pl",Polsat Comedy Central Extra (720p)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/dcd9bfb6-3cf1-4ed3-8071-8bb7c5584dd9.ts
+#EXTINF:-1 tvg-id="PolsatComedyCentralExtra.pl",Polsat Comedy Central Extra (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/47026565-02f2-49ec-aa83-f0e12630be0d.ts
+#EXTINF:-1 tvg-id="PolsatSeriale.pl",Polsat Seriale (720p)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/4b49481c-3ec7-4a54-91e1-4406aec5074e.ts
+#EXTINF:-1 tvg-id="PolsatSeriale.pl",Polsat Seriale (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/ab79c293-a2d0-4352-addf-3abd775c056a.ts
+#EXTINF:-1 tvg-id="PolsatFilm.pl",Polsat Film (720p)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/6be8bf64-18d0-49a0-8da9-a2e93359597f.ts
+#EXTINF:-1 tvg-id="PolsatFilm.pl",Polsat Film (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/d23ca912-3c76-4384-8609-b3efb74d6860.ts
+#EXTINF:-1 tvg-id="PolsatCafe.pl",Polsat Cafe (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/873595c1-87e1-4acb-a856-021ef40de90d.ts
+#EXTINF:-1 tvg-id="PolsatCafe.pl",Polsat Cafe (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/842750a0-b7fc-4261-bd56-2a68b03c5a27.ts
+#EXTINF:-1 tvg-id="Polsat2.pl",Polsat 2 (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/3313df7a-4f5a-49d4-b75a-d3ed161915ca.ts
+#EXTINF:-1 tvg-id="Polsat2.pl",Polsat 2 (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/185dd46e-4702-42ac-84f3-a4ddcfdd9704.ts
+#EXTINF:-1 tvg-id="Polsat.pl",Polsat (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/3623e2ea-d0eb-450e-bdbd-8ba4806553a1.ts
+#EXTINF:-1 tvg-id="Polsat.pl",Polsat (1080p)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/0affc19c-ec65-4558-a9a7-07f0445f341a.ts
+#EXTINF:-1 tvg-id="ActiveFamily.pl",Active Family (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/f13879f3-bcd4-4321-9d62-313670edbd64.ts
+#EXTINF:-1 tvg-id="StudioMedTV.pl",StudioMed TV (576i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/729629f0-1c3f-4504-a229-17cab8264f6d.ts
+#EXTINF:-1 tvg-id="TVTrwam.pl",TV Trwam (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/a221dbe9-fe9c-448b-ac03-c888235c32f9.ts
+#EXTINF:-1 tvg-id="HomeTV.pl",Home TV (576i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/cd50060a-0ab8-42c4-a245-473fab0e27a1.ts
+#EXTINF:-1 tvg-id="TVC.pl",TVC (576i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/23d51aa6-9daa-45d5-857f-a73f741f0655.ts
+#EXTINF:-1 tvg-id="AntenaHD.pl",Antena HD (576p)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/648835f7-46e6-4b32-bfae-2536848f708d.ts
+#EXTINF:-1 tvg-id="TVPPolonia.pl",TVP Polonia (720p)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/c7eebc71-bd18-4042-886c-e9aaefb7477f.ts
+#EXTINF:-1 tvg-id="TVPPolonia.pl",TVP Polonia (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/3ab29e79-8cf7-4f7b-9f7d-56ac82451e77.ts
+#EXTINF:-1 tvg-id="TVPHistoria.pl",TVP Historia (576i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/1126cb0c-d437-4f64-bd74-e66b085a72ef.ts
+#EXTINF:-1 tvg-id="TVPHistoria.pl",TVP Historia (576i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/d19b3e42-40ab-4a06-bfa1-d659d0d0c926.ts
+#EXTINF:-1 tvg-id="TVPKultura.pl",TVP Kultura (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/77234e51-d22e-4941-9644-e4537a9f0691.ts
+#EXTINF:-1 tvg-id="TVPDokument.pl",TVP Dokument (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/d91afe3f-da34-4537-96b1-02dd5e1dc6eb.ts
+#EXTINF:-1 tvg-id="TVPRozrywka.pl",TVP Rozrywka (540i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/6ac08ec1-579b-4033-ab8e-85cdc83b62fe.ts
+#EXTINF:-1 tvg-id="TVPRozrywka.pl",TVP Rozrywka (576i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/d4cd00a3-60f5-40dc-bfcf-0c5e228d4dc5.ts
+#EXTINF:-1 tvg-id="TVPSeriale.pl",TVP Seriale (360p)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/470aea40-e244-4d07-9d03-1305cc51c5eb.ts
+#EXTINF:-1 tvg-id="TVPSeriale.pl",TVP Seriale (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/47400c2a-f645-47a3-860a-ee745a2ee678.ts
+#EXTINF:-1 tvg-id="TVPHD.pl",TVP HD (720p)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/5445b6cd-c1ed-4d3b-be39-55ac3dc85ba8.ts
+#EXTINF:-1 tvg-id="TVPHD.pl",TVP HD (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/a8ef46c5-142a-4c2a-bb0d-27fdb7ba3a36.ts
+#EXTINF:-1 tvg-id="TVRepublika.pl",TV Republika (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/610afe23-79a2-4d0d-b607-dbbe08297b50.ts
+#EXTINF:-1 tvg-id="TVP2.pl",TVP2 (720p)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/896c4efd-0a92-4b7a-9152-bfba2ecd12ec.ts
+#EXTINF:-1 tvg-id="TVP2.pl",TVP2 (1080p)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/5242aace-e131-4449-af51-46207be50da5.ts
+#EXTINF:-1 tvg-id="TVP1.pl",TVP1 (1080i)
+http://nowatv.stream2.link:8080/live/64%3A1c%3Ab0%3Aa1%3A48%3Ac1/tfAjswfz6H/00eb3d6b-3ce1-4016-aa67-944190ae0103.ts
diff --git a/streams/ps.m3u b/streams/ps.m3u
index 5011cd8fb..92093d8e0 100644
--- a/streams/ps.m3u
+++ b/streams/ps.m3u
@@ -48,3 +48,5 @@ https://streaming.zaytonatube.com:8081/ShababFM/shabab/index.m3u8
http://htvint.mada.ps:8889/orient/index.m3u8
#EXTINF:-1 tvg-id="WatarTV.ps",Watar TV (720p) [Not 24/7]
https://htvint.mada.ps/orient/index.m3u8
+#EXTINF:-1 tvg-id="NablusTV.ps",Nablus TV (1080p)
+https://htvint.mada.ps/nabluslive/index.m3u8
diff --git a/streams/pt.m3u b/streams/pt.m3u
index b34a62b3c..904aa678d 100644
--- a/streams/pt.m3u
+++ b/streams/pt.m3u
@@ -99,3 +99,9 @@ https://video-auth4.iol.pt/live_tvi_reality/live_tvi_reality/edge_servers/tvirea
https://video-auth2.iol.pt/live_vmais/live_vmais/edge_servers/vmais-720p/playlist.m3u8
#EXTINF:-1 tvg-id="WayTV.pt",Way TV (1080p)
http://213.13.26.11:1935/live/sobrenaturaltv/livestream.m3u8
+#EXTINF:-1 tvg-id="ADBTV.pt",ADB TV (1080p)
+https://customer-dxeagripmkqbhyeq.cloudflarestream.com/580c36d77be200bf5c7d3efc06487bd4/manifest/video.m3u8
+#EXTINF:-1 tvg-id="NPCRadioeTV.pt",NPC Radio e TV (720p)
+https://stmv1.srvif.com/npc/npc/playlist.m3u8
+#EXTINF:-1 tvg-id="TVI.pt",TVI (720p)
+https://raw.githubusercontent.com/ipstreet312/freeiptv/master/ressources/tvipt/sh/tvi.m3u8
diff --git a/streams/ro.m3u b/streams/ro.m3u
index 852bd705c..518230122 100644
--- a/streams/ro.m3u
+++ b/streams/ro.m3u
@@ -249,3 +249,6 @@ https://mn-nl.mncdn.com/tvrtgmures_new/smil:tvrtgmures_new.smil/index.m3u8
https://tvr-tvrtimisoara.cdn.zitec.com/live/tvrtimisoara/main.m3u8
#EXTINF:-1 tvg-id="TVSat.ro",TVSat (576p) [Not 24/7]
http://89.38.8.130:39443
+#EXTINF:-1 tvg-id="SuperTV.ro" http-referrer="https://supertv.ro",Super TV (1080i) [Not 24/7]
+#EXTVLCOPT:http-referrer=https://supertv.ro
+https://live.supertv.ro/live/supertv/playlist.m3u8
diff --git a/streams/ru.m3u b/streams/ru.m3u
index 92592c5ad..65124dbb0 100644
--- a/streams/ru.m3u
+++ b/streams/ru.m3u
@@ -1,8 +1,4 @@
#EXTM3U
-#EXTINF:-1 tvg-id="7tv.ru",7 TV
-http://v4.proofix.ru/7tv-live/tracks-v1a1/index.m3u8
-#EXTINF:-1 tvg-id="Channel43.ru",43 ะบะฐะฝะฐะป (ะขัะฐะฟัะต) (720p)
-http://sochinskayatrk.ru/hdtv/hls/43Channel_hd/playlist.m3u8
#EXTINF:-1 tvg-id="360.ru",360ยฐ (1080p) [Not 24/7]
https://edge2-tv-ll.facecast.io/evacoder_hls_hi/CkxfR1xNUAJwTgtXTBZTAJli/index.m3u8
#EXTINF:-1 tvg-id="360.ru",360ยฐ (720p)
@@ -21,8 +17,6 @@ http://retj.educom.ru/mosobrtv/tv1/index.m3u8
http://retc.educom.ru/mosobrtv/tv1/index.m3u8
#EXTINF:-1 tvg-id="Pro100TV.ru",Pro100TV
https://sirius.greenhosting.ru/Pro100tvRu/video.m3u8
-#EXTINF:-1 tvg-id="",Relax
-http://185.57.68.33:8091/232/tracks-v1a1/index.m3u8
#EXTINF:-1 tvg-id="RUTV.ru",RU TV
https://hls-03-video.webcaramba.com/rutv/live.m3u8
#EXTINF:-1 tvg-id="RussianMusicBox.ru",Russian MusicBox (1080p)
@@ -77,8 +71,6 @@ http://serv24.vintera.tv:8081/vetta/vetta_office/playlist.m3u8
http://tele2dvrnat01-02.cdnvideo.ru/stream/NAT_Volga/hls/1920x1080@4504/playlist.m3u8
#EXTINF:-1 tvg-id="Volgograd24.ru",ะะพะปะณะพะณัะฐะด 24
https://vgtrkregion-reg.cdnvideo.ru/vgtrk/volgograd/russia1-hd/index.m3u8
-#EXTINF:-1 tvg-id="Gorodskoytelekanal.ru",ะะพัะพะดัะบะพะน ัะตะปะตะบะฐะฝะฐะป (ะฏัะพัะปะฐะฒะปั) (576p)
-https://www.gtk.tv/hls/gtyar.m3u8
#EXTINF:-1 tvg-id="GuberniaSamara.ru",ะัะฑะตัะฝะธั (ะกะฐะผะฐัะฐ) (576p)
http://live.guberniatv.cdnvideo.ru/guberniatv/guberniatv.sdp/playlist.m3u8
#EXTINF:-1 tvg-id="TVRain.ru",ะะพะถะดั (1080p) [Geo-blocked]
@@ -99,7 +91,7 @@ http://igi-hls.cdnvideo.ru/igi/igi_tcode/playlist.m3u8
http://serv25.vintera.tv:8081/test/k16/playlist.m3u8
#EXTINF:-1 tvg-id="KabbalaTV.ru",ะะฐะฑะฑะฐะปะฐ ะขะ (360p) [Not 24/7]
https://edge2.uk.kab.tv/live/tvrus-rus-medium/playlist.m3u8
-#EXTINF:-1 tvg-id="Kinopremyera.ru@HD",ะะธะฝะพะฟัะตะผัะตัะฐ HD
+#EXTINF:-1 tvg-id="KinopremyeraHD.ru",ะะธะฝะพะฟัะตะผัะตัะฐ HD
http://45.159.74.13/Kinopremera/index.m3u8
#EXTINF:-1 tvg-id="RedLine.ru",ะัะฐัะฝะฐั ะปะธะฝะธั
http://s55766.cdn.ngenix.net/s55766-media-origin/rline_high/index.m3u8
@@ -123,11 +115,11 @@ https://live.trkmillet.ru/millet/index.m3u8
http://hls.mirtv.cdnvideo.ru/mirtv-parampublish/mirtv_2500/playlist.m3u8
#EXTINF:-1 tvg-id="Mir24.ru",ะะธั 24 (1080p)
http://hls.mirtv.cdnvideo.ru/mirtv-parampublish/mir24_2500/playlist.m3u8
-#EXTINF:-1 tvg-id="Mir.ru@Plus2",ะะธั +2 (540p) [Not 24/7]
+#EXTINF:-1 tvg-id="MirPlus2.ru",ะะธั +2 (540p) [Not 24/7]
http://hls.mirtv.cdnvideo.ru/mirtv-parampublish/mirtv2_2500/playlist.m3u8
-#EXTINF:-1 tvg-id="Mir.ru@Plus4",ะะธั +4 (540p) [Not 24/7]
+#EXTINF:-1 tvg-id="MirPlus4.ru",ะะธั +4 (540p) [Not 24/7]
http://hls.mirtv.cdnvideo.ru/mirtv-parampublish/mirtv3_2500/playlist.m3u8
-#EXTINF:-1 tvg-id="Mir.ru@Plus7",ะะธั +7 (540p)
+#EXTINF:-1 tvg-id="MirPlus7.ru",ะะธั +7 (540p)
http://hls.mirtv.cdnvideo.ru/mirtv-parampublish/mirtv7_2500/playlist.m3u8
#EXTINF:-1 tvg-id="MirBelogorya.ru",ะะธั ะะตะปะฐะณะพััั (720p) [Geo-blocked]
http://mirbelogorya.ru:8080/mirbelogorya/index.m3u8
@@ -145,7 +137,7 @@ http://sirius.greenhosting.ru/MultimaniaRu/video.m3u8
https://live-tvhope.cdnvideo.ru/tvhope-pull/tvhope_1/playlist.m3u8
#EXTINF:-1 tvg-id="HopeChannelRussia.ru",ะะฐะดะตะถะดะฐ (720p)
https://tvhope.cdnvideo.ru/tvhope-pull/tvhope_1/playlist.m3u8
-#EXTINF:-1 tvg-id="Nano.ru@HD",ะะฐะฝะพ ะขะ HD
+#EXTINF:-1 tvg-id="NanoHD.ru",ะะฐะฝะพ ะขะ HD
http://s1.tv-nano.com/Nano_rec/index.m3u8
#EXTINF:-1 tvg-id="NVKSakha.ru",ะะะ ะกะฐั
ะฐ (1080p) [Not 24/7]
https://live-saha.cdnvideo.ru/saha/saha/playlist.m3u8
@@ -159,15 +151,8 @@ https://live-ntm13.cdnvideo.ru/ntm13/smil:ntm13.smil/playlist.m3u8
https://peqk71plnjy.a.trbcdn.net/livemaster/w4kz7pki62_nts_tv/playlist.m3u8
#EXTINF:-1 tvg-id="OSN.ru",ะะกะ
http://osnmedia.servicecdn.ru/streams/17603_88089/playlist.m3u8
-#EXTINF:-1 tvg-id="Ostrosyuzhetnoye.ru@HD",ะัััะพััะถะตัะฝะพะต HD
-http://213.172.73.133:8081/nimble_live/9009_ะัััะพััะถะตัะฝะพะต_HD/playlist.m3u8
#EXTINF:-1 tvg-id="ChannelOne.ru",ะะตัะฒัะน ะบะฐะฝะฐะป
https://edge1.1internet.tv/dash-live2/streams/1tv-dvr/1tvdash.mpd
-#EXTINF:-1 tvg-id="Pobeda.ru" http-referrer="https://pobeda.tv/",ะะพะฑะตะดะฐ (720p)
-#EXTVLCOPT:http-referrer=https://pobeda.tv/
-https://pkvc-hls3.cdnvideo.ru/Pobeda/smil:Pobeda.smil/chunklist_b5128000_slru.m3u8
-#EXTINF:-1 tvg-id="Premialnoe.ru@HD",ะัะตะผะธะฐะปัะฝะพะต HD
-http://213.172.73.133:8081/nimble_live/9008_ะัะตะผะธะฐะปัะฝะพะต_HD/playlist.m3u8
#EXTINF:-1 tvg-id="Prima.ru",ะัะธะผะฐ (1080p)
https://tele2dvrnat01-02.cdnvideo.ru/stream/NAT_Prima/hls/index.m3u8
#EXTINF:-1 tvg-id="GovoritMoskva.ru",ะ ะฐะดะธะพ ะะพะฒะพัะธั ะะพัะบะฒะฐ (404p) [Not 24/7]
@@ -202,14 +187,10 @@ https://sitv.ru/hls/stv.m3u8
http://45.67.57.9:8080/new/new/playlist.m3u8
#EXTINF:-1 tvg-id="SvoyoTV.ru",ะกะฒะพั HD
http://live.stv24.tv:8080/svoetv/HQ_video.m3u8
-#EXTINF:-1 tvg-id="Solnce.ru",ะกะพะปะฝัะต
-http://tv.mediacdn.ru/live/disney/playlist.m3u8
#EXTINF:-1 tvg-id="Soyuz.ru",ะกะพัะท (576p)
https://hls-tvsoyuz.cdnvideo.ru/tvsoyuz/soyuz/playlist.m3u8
#EXTINF:-1 tvg-id="StranaFM.ru",ะกััะฐะฝะฐ FM (720p) [Not 24/7]
http://live.stranafm.cdnvideo.ru/stranafm/stranafm_hd.sdp/playlist.m3u8
-#EXTINF:-1 tvg-id="STRK.ru",ะกะขะ ะ (720p) [Not 24/7]
-http://sochinskayatrk.ru/hdtv/hls/strc_hd/playlist.m3u8
#EXTINF:-1 tvg-id="Surgut24.ru",ะกััะณัั 24 (720p) [Not 24/7]
https://video1.in-news.ru/c24/index.m3u8
#EXTINF:-1 tvg-id="TVK.ru",ะขะะ 24 (576p)
diff --git a/streams/ru_bonustv.m3u b/streams/ru_bonustv.m3u
index d8c2da3fc..9791e65a8 100644
--- a/streams/ru_bonustv.m3u
+++ b/streams/ru_bonustv.m3u
@@ -1,19 +1,17 @@
#EXTM3U
-#EXTINF:-1 tvg-id="9Volna.ru",9 ะะพะปะฝะฐ (ะงะตัะบะตััะบ)
-http://cdn-01.bonus-tv.ru/9volna/playlist.m3u8
-#EXTINF:-1 tvg-id="Channel12.ru",12 ะบะฐะฝะฐะป (1080p)
-https://12channel.bonus-tv.ru/cdn/12channel/playlist.m3u8
#EXTINF:-1 tvg-id="Channel12.ru",12 ะบะฐะฝะฐะป
https://12channel.bonus-tv.ru/cdn/12channel_blackout/playlist.m3u8
+#EXTINF:-1 tvg-id="Channel12.ru",12 ะบะฐะฝะฐะป (1080p)
+https://12channel.bonus-tv.ru/cdn/12channel/playlist.m3u8
#EXTINF:-1 tvg-id="",49 ะบะฐะฝะฐะป (ะะพะฒะพัะธะฑะธััะบ)
https://49channel.mediacdn.ru/live/cdn/49channel/playlist.m3u8
#EXTINF:-1 tvg-id="ArirangTV.kr",Arirang
https://cdn-01.bonus-tv.ru/arirang_edge/playlist.m3u8
-#EXTINF:-1 tvg-id="",E
+#EXTINF:-1 tvg-id="",E!
https://cdn-01.bonus-tv.ru/gsl/playlist.m3u8
#EXTINF:-1 tvg-id="Leomax24.ru",Leomax 24 (1080p)
https://tvshops.bonus-tv.ru/cdn/shop24/playlist.m3u8
-#EXTINF:-1 tvg-id="RTDocumentary.ru@Russian",RTะ
+#EXTINF:-1 tvg-id="RTDocumentaryRussian.ru",RTะ
https://cdn-01.bonus-tv.ru/rtdoc/playlist.m3u8
#EXTINF:-1 tvg-id="RT.ru",Russia Today
https://cdn-01.bonus-tv.ru/RussiaToday/playlist.m3u8
@@ -65,8 +63,6 @@ https://cdn-01.bonus-tv.ru/prosveschenie_edge/playlist.m3u8
https://radm.mediacdn.ru/cdn/radost/playlist.m3u8
#EXTINF:-1 tvg-id="Salyam.ru",ะกะฐะปัะผ (ะฃัะฐ) (576p)
https://bsttv.bonus-tv.ru/cdn/salyam/playlist.m3u8
-#EXTINF:-1 tvg-id="SanktPeterburg.ru",ะกะฐะฝะบั-ะะตัะตัะฑััะณ
-https://streamsrv2.tvspb.ru/OTT/playlist.m3u8
#EXTINF:-1 tvg-id="SvoyoTV.ru",ะกะฒะพั ะขะ (ะกัะฐะฒัะพะฟะพะปั)
https://svoetv.mediacdn.ru/cdn/svoetv/playlist.m3u8
#EXTINF:-1 tvg-id="Sever.ru",ะกะตะฒะตั (ะะฐัััะฝ-ะะฐั) (1080p)
diff --git a/streams/ru_smotrim.m3u b/streams/ru_smotrim.m3u
index 932284295..1761da3dd 100644
--- a/streams/ru_smotrim.m3u
+++ b/streams/ru_smotrim.m3u
@@ -3,14 +3,10 @@
https://live-vgtrksmotrim.cdnvideo.ru/vgtrksmotrim/smotrim-live-04-srt.smil/playlist.m3u8
#EXTINF:-1 tvg-id="360News.ru",360ยฐ ะะพะฒะพััะธ
https://live-vgtrksmotrim.cdnvideo.ru/vgtrksmotrim/smotrim-live-03-srt.smil/playlist.m3u8
-#EXTINF:-1 tvg-id="",Thematical Stream 1
-https://vgtrksmotrim.cdnvideo.ru/hls2/givc11_hd/playlist.m3u8
#EXTINF:-1 tvg-id="",ะัะบัะธะบะฐ 24
https://vgtrkregion-reg.cdnvideo.ru/vgtrk/arhangelsk/arktika24-hd/index.m3u8
#EXTINF:-1 tvg-id="",ะะฐัะบะพััะพััะฐะฝ 24
https://vgtrkregion-reg.cdnvideo.ru/vgtrk/ufa/bashkortostan24-hd/index.m3u8
-#EXTINF:-1 tvg-id="Bashkortostan24.ru",ะะฐัะบะพััะพััะฐะฝ 24 (ะฃัะฐ)
-https://vgtrkregion-reg.cdnvideo.ru/vgtrk/ufa/russia1-hd/index.m3u8
#EXTINF:-1 tvg-id="BigAsia.ru",ะะพะปััะฐั ะะทะธั
https://live-bigasia.cdnvideo.ru/bigasia/bigasia.smil/playlist.m3u8
#EXTINF:-1 tvg-id="",ะะตััะธ ะคะ
diff --git a/streams/sg.m3u b/streams/sg.m3u
index 40f1edbcd..f9a33527d 100644
--- a/streams/sg.m3u
+++ b/streams/sg.m3u
@@ -31,3 +31,5 @@ https://cdn-telkomsel-01.akamaized.net/Content/HLS/Live/channel(abe4ead2-1a88-43
https://d39v9xz8f7n8tk.cloudfront.net/hls/clr4ctv_vsnthm/master.m3u8
#EXTINF:-1 tvg-id="ZooMoo.sg",ZooMoo Asia (1080p)
https://cdn4.skygo.mn/live/disk1/Zoomoo/HLSv3-FTA/Zoomoo.m3u8
+#EXTINF:-1 tvg-id="AXNAsia.sg",AXN Asia (576p)
+http://125hvt.ddns.net:21585/axn/index.m3u8
diff --git a/streams/sn.m3u b/streams/sn.m3u
index 72d16e88b..f6d18d22f 100644
--- a/streams/sn.m3u
+++ b/streams/sn.m3u
@@ -5,26 +5,14 @@ https://stream.sen-gt.com/A2iMusic/myStream/playlist.m3u8
https://stream.sen-gt.com/A2iNaija/myStream/playlist.m3u8
#EXTINF:-1 tvg-id="A2iReligion.sn",A2i Religion (720p) [Not 24/7]
https://stream.sen-gt.com/A2iReligion/myStream/playlist.m3u8
-#EXTINF:-1 tvg-id="AlFaydaTV.sn",Al Fayda TV (720p)
-https://helga.iptv2022.com/sh/AL_AYDA_TV_DAKAR/index.m3u8
#EXTINF:-1 tvg-id="AmaniTV.sn",Amani TV (1080p) [Not 24/7]
https://goccn.cloud/hls/amanitv/index.m3u8
-#EXTINF:-1 tvg-id="",Chabiba TV (360p) [Not 24/7]
+#EXTINF:-1 tvg-id="ChabibaTV.sn",Chabiba TV (360p) [Not 24/7]
https://endour.net/hls/RUgLAPCbPdF5oPSTX2Hvl/index.m3u8
#EXTINF:-1 tvg-id="CNMTV.sn",CNM TV (720p) [Not 24/7]
https://stream.sen-gt.com/cnmtv/myStream/playlist.m3u8
-#EXTINF:-1 tvg-id="DiamaTV.sn",Diama TV (1080p)
-https://helga.iptv2022.com/Diama_TV/index.m3u8
-#EXTINF:-1 tvg-id="DiamagueneTV.sn",Diamaguene TV (480p) [Not 24/7]
-https://helga.iptv2022.com/sh/DIAMAGUENE_TV/index.m3u8
-#EXTINF:-1 tvg-id="GrandYoffTV.sn",Grand Yoff TV (720p)
-https://helga.iptv2022.com/sh/Grand_Yoff_TV/index.m3u8
#EXTINF:-1 tvg-id="IMTV.sn",Islam TV Sรฉnรฉgal (720p)
https://tv.imediasn.com/hls/live.m3u8
-#EXTINF:-1 tvg-id="KeurNdananeTV.sn",Keur Ndanane TV (720p)
-https://helga.iptv2022.com/sh/KN_TV/index.m3u8
-#EXTINF:-1 tvg-id="LeralTV.sn",Leral TV (480p)
-https://helga.iptv2022.com/sh/Leral/index.m3u8
#EXTINF:-1 tvg-id="LougaTV.sn",Louga TV (480p)
https://stream.sen-gt.com/Mbacke/myStream/playlist.m3u8
#EXTINF:-1 tvg-id="MADERTV.sn",Mader TV (720p)
@@ -59,9 +47,9 @@ https://streamspace.live/hls/tempoafrictv/livestream.m3u8
http://69.64.57.208/tfm/playlist.m3u8
#EXTINF:-1 tvg-id="TFM.sn",TFM (720p)
https://raw.githubusercontent.com/azgaresncf/strm2hls/main/streams/TFM.m3u8
-#EXTINF:-1 tvg-id="TMtv.sn",TM.tv (360p)
-https://helga.iptv2022.com/sh/Tamasheq_TV/index.m3u8
#EXTINF:-1 tvg-id="WalfTV.sn",Walf TV (360p)
http://69.64.57.208/walftv/playlist.m3u8
#EXTINF:-1 tvg-id="YakaarTV.sn",Yakaar TV (1080p)
https://strhls.streamakaci.tv/yakaartv/yakaartv-multi/playlist.m3u8
+#EXTINF:-1 tvg-id="YegleTV.sn",Yeglรฉ TV (1080p)
+https://endour.net/hls/Yegle-tv/index.m3u8
diff --git a/streams/tg.m3u b/streams/tg.m3u
index c364d07df..275ffca4a 100644
--- a/streams/tg.m3u
+++ b/streams/tg.m3u
@@ -1,12 +1,10 @@
#EXTM3U
#EXTINF:-1 tvg-id="ACTV.tg",AC TV (480p) [Not 24/7]
-https://ssh101.bozztv.com/ssh101/actvstream/playlist.m3u8
-#EXTINF:-1 tvg-id="Direct7TV.tg",Direct 7 TV (720p)
-https://helga.iptv2022.com/DIRECT__7/index.m3u8
+https://ssh101stream.ssh101.com/akamaissh101/ssh101/actvstream/playlist.m3u8
+#EXTINF:-1 tvg-id="ChandelTV.tg",Chandel TV (720p)
+https://kali.vdopanel.com:3660/live/vj6jlam1rlive.m3u8
#EXTINF:-1 tvg-id="DynamicGospelTV.tg",Dynamic Gospel TV (480p) [Not 24/7]
-https://ssh101.bozztv.com/ssh101/tvdynamicstream/playlist.m3u8
-#EXTINF:-1 tvg-id="LNTV.tg",LNTV (720p)
-https://helga.iptv2022.com/sh/LNTV/index.m3u8
+https://ssh101stream.ssh101.com/akamaissh101/ssh101/tvdynamicstream/playlist.m3u8
#EXTINF:-1 tvg-id="NWEconomie.tg",NW Economie (576p)
https://hls.newworldtv.com/nw-economie/video/live.m3u8
#EXTINF:-1 tvg-id="NWInfo2.tg",NW Info 2 EN (576p)
@@ -21,7 +19,7 @@ https://cdn140m.panaccess.com/HLS/RTVJA/index.m3u8
https://smatogo.tv:89/smatogo/smatogo.m3u8
#EXTINF:-1 tvg-id="SOSDocteurTV.tg",SOS Docteur TV (480p) [Not 24/7]
https://wmoy82n4y2a7-hls-live.5centscdn.com/sostv/live.stream/playlist.m3u8
-#EXTINF:-1 tvg-id="TV2.tg",TV 2 (720p) [Not 24/7]
-https://helga.iptv2022.com/sh/TV2/index.m3u8
+#EXTINF:-1 tvg-id="TelevisionEspoir47.tg",Television Espoir 47 (720p)
+https://cdn140m.panaccess.com/HLS/Espoir47/index.m3u8
#EXTINF:-1 tvg-id="TVT.tg",TVT (720p) [Not 24/7]
http://69.64.57.208/tvt/playlist.m3u8
diff --git a/streams/tr.m3u b/streams/tr.m3u
index ed4d407c2..1e6058533 100644
--- a/streams/tr.m3u
+++ b/streams/tr.m3u
@@ -1,6 +1,8 @@
#EXTM3U
#EXTINF:-1 tvg-id="4UTV.tr",4U TV (720p)
https://hls.4utv.live/hls/stream.m3u8
+#EXTINF:-1 tvg-id="24TV.tr",24 TV
+https://kanal24.blutv.com/blutv_kanal24_live/live.m3u8
#EXTINF:-1 tvg-id="24TV.tr",24 TV (1080p)
http://185.234.111.229:8000/play/a059
#EXTINF:-1 tvg-id="24TV.tr" http-user-agent="Mozilla/5.0 Macintosh; Intel Mac OS X 10_14_5 AppleWebKit/537.36 KHTML, like Gecko Chrome/76.0.3809.25 Safari/537.36",24 TV (1080p)
@@ -8,48 +10,44 @@ http://185.234.111.229:8000/play/a059
https://mn-nl.mncdn.com/kanal24/smil:kanal24.smil/playlist.m3u8
#EXTINF:-1 tvg-id="24TV.tr",24 TV (576p)
http://185.234.111.229:8000/play/a056
-#EXTINF:-1 tvg-id="24TV.tr",24 TV
-https://kanal24.blutv.com/blutv_kanal24_live/live.m3u8
#EXTINF:-1 tvg-id="360.tr",360 (1080p)
http://185.234.111.229:8000/play/a05a
#EXTINF:-1 tvg-id="360.tr",360 (576p)
http://185.234.111.229:8000/play/a057
#EXTINF:-1 tvg-id="360.tr",360 TV (720p) [Not 24/7]
https://turkmedya-live.ercdn.net/tv360/tv360.m3u8
-#EXTINF:-1 tvg-id="A2TV.tr",A2TV (1080p)
-http://185.234.111.229:8000/play/a01m
#EXTINF:-1 tvg-id="A2TV.tr",A2TV
https://c.fulltvizle.com/a2/index.m3u8
#EXTINF:-1 tvg-id="A2TV.tr",A2TV
https://canlitvulusal.xyz/live/a2tv/index.m3u8
#EXTINF:-1 tvg-id="A2TV.tr",A2TV
https://trkvz-live.daioncdn.net/a2tv/a2tv.m3u8
-#EXTINF:-1 tvg-id="AHaber.tr",A Haber (576p)
-http://185.234.111.229:8000/play/a019
+#EXTINF:-1 tvg-id="A2TV.tr",A2TV (1080p)
+http://185.234.111.229:8000/play/a01m
#EXTINF:-1 tvg-id="AHaber.tr",A Haber
https://c.fulltvizle.com/ahaber/index.m3u8
#EXTINF:-1 tvg-id="AHaber.tr",A Haber
https://canlitvulusal.xyz/live/ahaber/index.m3u8
+#EXTINF:-1 tvg-id="AHaber.tr",A Haber (576p)
+http://185.234.111.229:8000/play/a019
#EXTINF:-1 tvg-id="ANews.tr",A News (1080p)
http://185.234.111.229:8000/play/a01k
#EXTINF:-1 tvg-id="APara.tr",A Para (1080p)
http://185.234.111.229:8000/play/a01l
#EXTINF:-1 tvg-id="APara.tr",A Para (720p)
https://canlitvulusal.xyz/live/apara/index.m3u8
+#EXTINF:-1 tvg-id="ASpor.tr",A Spor
+https://trkvz-live.daioncdn.net/aspor/aspor.m3u8
#EXTINF:-1 tvg-id="ASpor.tr",A Spor (720p)
https://tgn.bozztv.com/dvrfl05/gin-aspor/index.m3u8
#EXTINF:-1 tvg-id="ASpor.tr",A Spor (360p) [Not 24/7]
https://c.fulltvizle.com/aspor/index.m3u8
-#EXTINF:-1 tvg-id="ASpor.tr",A Spor
-https://trkvz-live.daioncdn.net/aspor/aspor.m3u8
#EXTINF:-1 tvg-id="ATurk.tr",A Tรผrk Izmir (360p)
https://vdo.digitalbox.xyz:3807/stream/play.m3u8
#EXTINF:-1 tvg-id="AnadoluAgency.tr",AA Live (720p) [Not 24/7]
https://mtulqxgomrllive.mediatriple.net/mtulqxgomrllive/broadcast_59f9c0c785b88.smil/playlist.m3u8
#EXTINF:-1 tvg-id="AdaTV.cy",ADA TV (720p)
https://yayin1.canlitv.day/live/kibrisadatv.stream/playlist.m3u8
-#EXTINF:-1 tvg-id="AfroturkTV.tr",Afroturk TV (1080p)
-https://edge.socialsmart.tv/naturaltv/bant1/playlist.m3u8
#EXTINF:-1 tvg-id="AfyonTurkTV.tr",Afyon Tรผrk TV (720p)
https://tv.digitalbox.xyz:19360/afyonturktv/afyonturktv.m3u8
#EXTINF:-1 tvg-id="AgroTV.tr",Agro TV (1080p)
@@ -74,16 +72,12 @@ https://live.al-zahratv.com/live/playlist.m3u8
https://api-tv3.yayin.com.tr/postatv/postatv/playlist.m3u8
#EXTINF:-1 tvg-id="AlmahriahTV.tr",Almahriah TV (576p)
https://starmenajo.com/hls/almahriah/index.m3u8
-#EXTINF:-1 tvg-id="AltasTV.tr",Altas TV (1080p)
-https://edge1.socialsmart.tv/altastv/bant1/playlist.m3u8
#EXTINF:-1 tvg-id="AnadoluDernekTV.tr",Anadolu Dernek TV (576p)
http://185.234.111.229:8000/play/a020
#EXTINF:-1 tvg-id="AnadoluNetTV.tr",Anadolu Net TV (1080p)
https://live.artidijitalmedya.com/artidijital_anadolunet/anadolunet/playlist.m3u8
#EXTINF:-1 tvg-id="ArasTV.tr",ARAS TV (576p) [Not 24/7]
http://1.rtmp.org/tv217/yayin.stream/playlist.m3u8
-#EXTINF:-1 tvg-id="ATV.tr",ATV (720p)
-https://rnttwmjcin.turknet.ercdn.net/lcpmvefbyo/atv/atv.m3u8
#EXTINF:-1 tvg-id="ATV.tr",ATV
http://116.202.238.88/ATV_TR/tracks-v1a1/index.m3u8
#EXTINF:-1 tvg-id="ATV.tr",ATV
@@ -92,6 +86,8 @@ https://c.fulltvizle.com/aytv/index.m3u8
https://trkvz-live.daioncdn.net/atv/atv.m3u8
#EXTINF:-1 tvg-id="ATV.tr",ATV
https://yayin2.canlitv.fun/livetv/atv.stream/playlist.m3u8
+#EXTINF:-1 tvg-id="ATV.tr",ATV (720p)
+https://rnttwmjcin.turknet.ercdn.net/lcpmvefbyo/atv/atv.m3u8
#EXTINF:-1 tvg-id="ATVAlanya.tr",ATV Alanya (720p) [Not 24/7]
http://stream2.taksimbilisim.com:1935/alanyatv/alanyatv.smil/playlist.m3u8
#EXTINF:-1 tvg-id="ATVAvrupa.tr",ATV Avrupa (576p)
@@ -122,12 +118,12 @@ https://yayin30.haber100.com/live/beykenttv/playlist.m3u8
https://live.artidijitalmedya.com/artidijital_birtv/birtv/playlist.m3u8
#EXTINF:-1 tvg-id="BizimevTV.tr",Bizimev TV (720p)
https://mn-nl.mncdn.com/blutv_bizimev/bizimev_sd.smil/playlist.m3u8
+#EXTINF:-1 tvg-id="BloombergHT.tr",Bloomberg HT
+https://bloomberght2dvr.blutv.com/blutv_bloomberght_dvr/live.m3u8
#EXTINF:-1 tvg-id="BloombergHT.tr",Bloomberg HT (720p)
https://ciner.daioncdn.net/bloomberght/bloomberght.m3u8
#EXTINF:-1 tvg-id="BloombergHT.tr",Bloomberg HT (720p) [Not 24/7]
https://tv.ensonhaber.com/bloomberght/bloomberght.m3u8
-#EXTINF:-1 tvg-id="BloombergHT.tr",Bloomberg HT
-https://bloomberght2dvr.blutv.com/blutv_bloomberght_dvr/live.m3u8
#EXTINF:-1 tvg-id="BloombergHT.tr",BloombergHT (720p)
https://ciner-live.daioncdn.net/bloomberght/bloomberght.m3u8
#EXTINF:-1 tvg-id="BRTV.tr",BRTV (720p) [Geo-blocked]
@@ -144,8 +140,6 @@ https://cdn-bursatv.yayin.com.tr/bursatv/bursatv/playlist.m3u8
https://win1.yayin.com.tr/bursatv/bursatv/playlist.m3u8
#EXTINF:-1 tvg-id="CanTV.tr",Can TV (720p)
http://canbroadcast.com:7000/canlican/tv.m3u8
-#EXTINF:-1 tvg-id="CanTV.tr",Can TV (720p)
-https://livetv.canbroadcast.com:7443/canlican/tv.m3u8
#EXTINF:-1 tvg-id="CayTV.tr",Cay TV (720p) [Not 24/7]
http://stream2.taksimbilisim.com:1935/caytv/bant1/CAYTV.m3u8
#EXTINF:-1 tvg-id="CekmekoyTV.tr",Cekmekรถy TV (1080p)
@@ -178,8 +172,6 @@ http://live.arkumedia.com:1935/dersim62tv/dersim62tv/playlist.m3u8
https://603c568fccdf5.streamlock.net/live/dhaweb1_C5efC/playlist.m3u8
#EXTINF:-1 tvg-id="DimTV.tr",DฤฐM TV (720p) [Geo-blocked]
https://live.artidijitalmedya.com/artidijital_dimtv/dimtv/playlist.m3u8
-#EXTINF:-1 tvg-id="DisneyJr.tr",Disney Jr. (1080p) [Geo-blocked]
-https://saran-live.ercdn.net/disneyjunior/index.m3u8
#EXTINF:-1 tvg-id="DiyanetTV.tr",Diyanet TV (1080p)
http://185.234.111.229:8000/play/a05j
#EXTINF:-1 tvg-id="DiyanetTV.tr",Diyanet TV (1080p)
@@ -204,15 +196,15 @@ http://185.234.111.229:8000/play/a06a
https://tv.digitalbox.xyz:19360/edessatv/edessatv.m3u8
#EXTINF:-1 tvg-id="EkinTurk.tr",Ekin Turk (576p)
http://185.234.111.229:8000/play/a025
-#EXTINF:-1 tvg-id="Ekoturk.tr",Ekoturk (1080p)
-http://185.234.111.229:8000/play/a00w
#EXTINF:-1 tvg-id="Ekoturk.tr",Ekoturk
https://ekoturk.blutv.com/blutv_ekoturk2/live.m3u8
+#EXTINF:-1 tvg-id="Ekoturk.tr",Ekoturk (1080p)
+http://185.234.111.229:8000/play/a00w
#EXTINF:-1 tvg-id="Ekoturk.tr",Ekotรผrk (720p)
https://mn-nl.mncdn.com/blutv_ekoturk2/live.m3u8
#EXTINF:-1 tvg-id="ElmasTV.tr",Elmas TV (720p) [Not 24/7]
https://5be5d840359c6.streamlock.net/elmas67tv/elmas67tv/chunklist.m3u8
-#EXTINF:-1 tvg-id="TvEM.tr@SD",Em TV (486p)
+#EXTINF:-1 tvg-id="",Em TV (486p)
https://cdn.yayin.com.tr/TVEM/TVEM/playlist.m3u8
#EXTINF:-1 tvg-id="ERTV.tr",Er TV (1080p) [Geo-blocked]
https://live.artidijitalmedya.com/artidijital_ertv_new/ertv/playlist.m3u8
@@ -234,14 +226,10 @@ https://live.duhnet.tv/S2/HLS_LIVE/eurodnp/playlist.m3u8
http://185.234.111.229:8000/play/a01h
#EXTINF:-1 tvg-id="EuroStar.tr",EuroStar TV (1080p)
https://canlitvulusal.xyz/live/eurostar/index.m3u8
-#EXTINF:-1 tvg-id="FinansTurkTV.tr",Finans Turk TV (720p)
-https://yayin30.haber100.com/live/finansturk/playlist.m3u8
#EXTINF:-1 tvg-id="FlashTV.tr",Flash TV (720p)
https://mn-nl.mncdn.com/blutv_flashtv/live.m3u8
#EXTINF:-1 tvg-id="FortunaTV.tr",Fortuna TV
https://edge1.socialsmart.tv/ftvturk/bant1/playlist.m3u8
-#EXTINF:-1 tvg-id="FX.tr",FX (1080p) [Geo-blocked]
-https://saran-live.ercdn.net/fx/index.m3u8
#EXTINF:-1 tvg-id="GoncaTV.tr",Gonca TV (720p)
https://edge1.socialsmart.tv/goncatv/bant1/playlist.m3u8
#EXTINF:-1 tvg-id="GrandCinema.tr",Grand Cinema
@@ -262,14 +250,14 @@ https://mn-nl.mncdn.com/gzttv/gzttv/playlist.m3u8
https://cdn-haber61tv.yayin.com.tr/haber61tv/smil:haber61tv.smil/index.m3u8
#EXTINF:-1 tvg-id="Haber61TV.tr",Haber61 TV (720p) [Not 24/7]
https://win8.yayin.com.tr/haber61tv/smil:haber61tv.smil/playlist.m3u8
+#EXTINF:-1 tvg-id="HaberGlobal.tr",Haber Global
+https://haberglobaldvr.blutv.com/blutv_haberglobal_dvr/live.m3u8
#EXTINF:-1 tvg-id="HaberGlobal.tr",Haber Global (1080p)
http://185.234.111.229:8000/play/a05x
#EXTINF:-1 tvg-id="HaberGlobal.tr",Haber Global (720p) [Not 24/7]
https://tv.ensonhaber.com/haberglobal/haberglobal.m3u8
#EXTINF:-1 tvg-id="HaberGlobal.tr",Haber Global (576p)
http://185.234.111.229:8000/play/a05k
-#EXTINF:-1 tvg-id="HaberGlobal.tr",Haber Global
-https://haberglobaldvr.blutv.com/blutv_haberglobal_dvr/live.m3u8
#EXTINF:-1 tvg-id="HaberturkTV.tr",Habertรผrk TV (1080p)
https://ciner-live.daioncdn.net/haberturktv/haberturktv.m3u8
#EXTINF:-1 tvg-id="HaberturkTV.tr",Habertรผrk TV (1080p)
@@ -352,9 +340,9 @@ https://5be5d840359c6.streamlock.net/kanal34tv/kanal34tv/playlist.m3u8
https://vdo.digitalbox.xyz:3266/live/kanal34tvlive.m3u8
#EXTINF:-1 tvg-id="Kanal38.tr",Kanal 38 (540p) [Not 24/7]
http://yayin3.canlitv.com:1935/live/kanal38/playlist.m3u8
-#EXTINF:-1 tvg-id="Kanal58.tr@SD",KANAL 58 (1080p) [Not 24/7]
+#EXTINF:-1 tvg-id="",KANAL 58 (1080p) [Not 24/7]
https://edge1.socialsmart.tv/kanal58/bant1/playlist.m3u8
-#EXTINF:-1 tvg-id="Kanal58.tr@SD",KANAL 58 (720p) [Not 24/7]
+#EXTINF:-1 tvg-id="",KANAL 58 (720p) [Not 24/7]
https://live.artidijitalmedya.com/artidijital_kanal58/kanal58/playlist.m3u8
#EXTINF:-1 tvg-id="Kanal58.tr",Kanal 58 (576p)
http://185.234.111.229:8000/play/a053
@@ -422,8 +410,6 @@ https://krt.blutv.com/blutv_krt_live/live.m3u8
http://185.234.111.229:8000/play/a065
#EXTINF:-1 tvg-id="KudusTV.tr",Kudรผs TV (480p) [Geo-blocked]
https://yayin.kudustv.com/981680400/kudustv/playlist.m3u8
-#EXTINF:-1 tvg-id="LalegulTV.tr",Lalegul TV (1080p)
-https://lbl.netmedya.net/hls/lalegultv.m3u8
#EXTINF:-1 tvg-id="LalegulTV.tr",Lalegรผl TV (720p) [Not 24/7]
http://lalegultv.netmedya.net/hls/lalegultv.m3u8
#EXTINF:-1 tvg-id="LalegulTV.tr",Lalegรผl TV (720p) [Not 24/7]
@@ -440,8 +426,6 @@ http://185.234.111.229:8000/play/a04x
https://live.artidijitalmedya.com/artidijital_mavikaradeniz/mavikaradeniz/playlist.m3u8
#EXTINF:-1 tvg-id="MaviKaradenizTV.tr",MaviKaradeniz TV (576p)
http://185.234.111.229:8000/play/a04p
-#EXTINF:-1 tvg-id="MedMuzik.tr",Med Muzik (1080p)
-http://54.36.110.140/live3/live3.m3u8
#EXTINF:-1 tvg-id="MedMuzik.tr",Med Muzik (720p)
https://med-musik.icdndhcp.com/live3/live3.m3u8
#EXTINF:-1 tvg-id="MekameleenTV.tr",Mekameleen TV (1080p)
@@ -454,22 +438,16 @@ http://185.234.111.229:8000/play/a04k
https://live.artidijitalmedya.com/artidijital_mercantv/mercantv/playlist.m3u8
#EXTINF:-1 tvg-id="MilyonTV.tr",Milyon TV (720p)
https://sosyoapp-live.cdnnew.com/sosyo/buraya-bir-isim-verin.m3u8
-#EXTINF:-1 tvg-id="MinikaCocuk.tr",Minika Cocuk (480p)
-https://tgn.bozztv.com/dvrfl05/gin-minikacocuk/index.m3u8
#EXTINF:-1 tvg-id="MinikaCocuk.tr",Minika Cocuk
https://trkvz-live.daioncdn.net/minikago_cocuk/minikago_cocuk.m3u8
-#EXTINF:-1 tvg-id="MinikaGo.tr",Minika Go (480p)
-https://tgn.bozztv.com/dvrfl05/gin-minikago/index.m3u8
+#EXTINF:-1 tvg-id="MinikaCocuk.tr",Minika Cocuk (480p)
+https://tgn.bozztv.com/dvrfl05/gin-minikacocuk/index.m3u8
#EXTINF:-1 tvg-id="MinikaGo.tr",Minika Go
https://trkvz-live.daioncdn.net/minikago/minikago.m3u8
+#EXTINF:-1 tvg-id="MinikaGo.tr",Minika Go (480p)
+https://tgn.bozztv.com/dvrfl05/gin-minikago/index.m3u8
#EXTINF:-1 tvg-id="MTurkTV.tr",MTรผrk TV (1080p)
https://edge1.socialsmart.tv/muglaturk/bant1/playlist.m3u8
-#EXTINF:-1 tvg-id="NationalGeographic.tr",National Geographic (1080p) [Geo-blocked]
-https://saran-live.ercdn.net/natgeohd/index.m3u8
-#EXTINF:-1 tvg-id="NationalGeographicWild.tr",National Geographic Wild (1080p) [Geo-blocked]
-https://saran-live.ercdn.net/natgeowild/index.m3u8
-#EXTINF:-1 tvg-id="NationalGeographicWild.tr",National Geographic Wild (720p)
-https://tv.arectv29.sbs/live/natgeowild.m3u8
#EXTINF:-1 tvg-id="NationalGeographicWild.tr",National Geographic Wild
https://tv.arectv13.sbs/live/natgeowild.m3u8
#EXTINF:-1 tvg-id="NaturalTV.tr",Natural TV (720p) [Not 24/7]
@@ -575,14 +553,14 @@ https://canlitvulusal.xyz/live/showturk/index.m3u8
https://showturk.blutv.com/blutv_showturk2/live.m3u8
#EXTINF:-1 tvg-id="ShowTurk.tr",Show Tรผrk (720p) [Not 24/7]
https://mn-nl.mncdn.com/blutv_showturk2/live.m3u8
-#EXTINF:-1 tvg-id="ShowTV.tr",Show TV (1080p)
-https://ciner-live.daioncdn.net/showtv/showtv.m3u8
-#EXTINF:-1 tvg-id="ShowTV.tr",Show TV (720p) [Not 24/7]
-https://tv.ensonhaber.com/tv/tr/showtv/index.m3u8
#EXTINF:-1 tvg-id="ShowTV.tr",Show TV
http://nimplus3.bozztv.com/showtvturk/showtvturk/playlist.m3u8
#EXTINF:-1 tvg-id="ShowTV.tr",Show TV
https://showtv.blutv.com/blutv_showtv_live/live.m3u8
+#EXTINF:-1 tvg-id="ShowTV.tr",Show TV (1080p)
+https://ciner-live.daioncdn.net/showtv/showtv.m3u8
+#EXTINF:-1 tvg-id="ShowTV.tr",Show TV (720p) [Not 24/7]
+https://tv.ensonhaber.com/tv/tr/showtv/index.m3u8
#EXTINF:-1 tvg-id="SinopYildizTV.tr",Sinop Yildiz TV (360p)
https://s01.vpis.io/sinopyildiz/sinopyildiz.m3u8
#EXTINF:-1 tvg-id="SozcuTV.tr",Sozcu TV (1080p)
@@ -611,10 +589,10 @@ https://live.artidijitalmedya.com/artidijital_tatlisestv/tatlisestv/playlist.m3u
https://duhnet.hipodrom.com/S2/HLS_LIVE/mislitaynp/playlist.m3u8
#EXTINF:-1 tvg-id="TBMMTV.tr",TBMM TV (720p)
https://meclistv-live.ercdn.net/meclistv/meclistv.m3u8
-#EXTINF:-1 tvg-id="TekRumeliTV.tr",Tek Rumeli TV (576p)
-https://edge1.socialsmart.tv/tekrumelitv/bant1/playlist.m3u8
#EXTINF:-1 tvg-id="TekRumeliTV.tr",Tek Rumeli TV
http://185.234.111.229:8000/play/a014
+#EXTINF:-1 tvg-id="TekRumeliTV.tr",Tek Rumeli TV (576p)
+https://edge1.socialsmart.tv/tekrumelitv/bant1/playlist.m3u8
#EXTINF:-1 tvg-id="Tele1.tr",Tele 1 (1080p)
http://185.234.111.229:8000/play/a01y
#EXTINF:-1 tvg-id="Tele1.tr",Tele 1 (1080p)
@@ -661,10 +639,10 @@ http://185.234.111.229:8000/play/a00c
https://trt.daioncdn.net/trt-1/master.m3u8?app=web
#EXTINF:-1 tvg-id="TRT1.tr",TRT 1 (1080p)
https://tv-trt1.medya.trt.com.tr/master.m3u8
-#EXTINF:-1 tvg-id="TRT2.tr",TRT 2 (720p)
-https://tv-trt2.medya.trt.com.tr/master.m3u8
#EXTINF:-1 tvg-id="TRT2.tr",TRT 2
https://trt2.blutv.com/blutv_trt2/live.m3u8
+#EXTINF:-1 tvg-id="TRT2.tr",TRT 2 (720p)
+https://tv-trt2.medya.trt.com.tr/master.m3u8
#EXTINF:-1 tvg-id="TRT3.tr",TRT 3
https://tv-trt3.live.trt.com.tr/master.m3u8
#EXTINF:-1 tvg-id="TRTArabi.tr",TRT Arabi (1080p)
@@ -687,7 +665,7 @@ https://tv-trtdiyanetcocuk.medya.trt.com.tr/master.m3u8
https://tv-e-okul00.medya.trt.com.tr/master.m3u8
#EXTINF:-1 tvg-id="TRTEBALise.tr",TRT EBA Lise (720p)
https://tv-e-okul02.medya.trt.com.tr/master.m3u8
-#EXTINF:-1 tvg-id="TRTEBA.tr@SD",TRT EBA Ortaokul (720p)
+#EXTINF:-1 tvg-id="",TRT EBA Ortaokul (720p)
https://tv-e-okul01.medya.trt.com.tr/master.m3u8
#EXTINF:-1 tvg-id="TRTHaber.tr",TRT Haber (1080p)
http://185.234.111.229:8000/play/a00d
@@ -707,10 +685,10 @@ http://185.234.111.229:8000/play/a00e
https://tv-trtspor1.medya.trt.com.tr/master.m3u8
#EXTINF:-1 tvg-id="TRTSporYildiz.tr",TRT Spor Yildiz (1080p) [Geo-blocked]
https://tv-trtspor2.medya.trt.com.tr/master.m3u8
-#EXTINF:-1 tvg-id="TRTTurk.tr",TRT Turk (1080p)
-http://185.234.111.229:8000/play/a00h
#EXTINF:-1 tvg-id="TRTTurk.tr",TRT Turk
https://trtturk.blutv.com/blutv_trtturk2/live.m3u8
+#EXTINF:-1 tvg-id="TRTTurk.tr",TRT Turk (1080p)
+http://185.234.111.229:8000/play/a00h
#EXTINF:-1 tvg-id="TRTTurk.tr",TRT Tรผrk (720p)
https://tv-trtturk.medya.trt.com.tr/master.m3u8
#EXTINF:-1 tvg-id="TRTWorld.tr",TRT World (1080p)
@@ -741,7 +719,7 @@ https://tv8.daioncdn.net/tv8/tv8.m3u8?app=7ddc255a-ef47-4e81-ab14-c0e5f2949788&c
https://tv8-live.daioncdn.net/tv8/tv8.m3u8
#EXTINF:-1 tvg-id="TV85.tr",TV 8.5 (720p)
http://bozztv.com/gin-dvrfl05/gin-tv8_5/index.m3u8
-#EXTINF:-1 tvg-id="TV8int.tr@SD",TV8 International (1080p)
+#EXTINF:-1 tvg-id="",TV8 International (1080p)
http://185.234.111.229:8000/play/a01x
#EXTINF:-1 tvg-id="24TV.tr",TV 24 (720p)
https://turkmedya-live.ercdn.net/tv24/tv24.m3u8
@@ -769,16 +747,14 @@ https://b01c02nl.mediatriple.net/videoonlylive/mtdxkkitgbrckilive/broadcast_5ee2
https://live.artidijitalmedya.com/artidijital_tva/tva/playlist.m3u8
#EXTINF:-1 tvg-id="TVDen.tr",TV Den (576p) [Not 24/7]
http://canli.tvden.com.tr/hls/live.m3u8
-#EXTINF:-1 tvg-id="TvEM.tr@SD",TV Em (486p)
+#EXTINF:-1 tvg-id="",TV Em (486p)
https://cdn-tvem.yayin.com.tr/TVEM/TVEM/playlist.m3u8
-#EXTINF:-1 tvg-id="TvEM.tr@SD",TV Em (486p)
+#EXTINF:-1 tvg-id="",TV Em (486p)
https://cdn.yayin.com.tr/TVEM/TVEM/chunklist.m3u8
#EXTINF:-1 tvg-id="TVNET.tr",TVnet (720p)
https://mn-nl.mncdn.com/tvnet/tvnet/playlist.m3u8
#EXTINF:-1 tvg-id="TYTTurk.tr",TYT Turk (720p)
https://cdn4.yayin.com.tr/tytturk/index.m3u8
-#EXTINF:-1 tvg-id="TYTTurk.tr",TYT Turk
-https://cdn-tytturk.yayin.com.tr/tytturk/index.m3u8
#EXTINF:-1 tvg-id="UcanKusTV.tr",UรงanKuล TV (720p)
https://ucankus-live.cdnnew.com/ucankus/ucankus.m3u8
#EXTINF:-1 tvg-id="UlkeTV.tr",รlke TV (720p)
@@ -820,3 +796,31 @@ https://cdn-yildiz.yayin.com.tr/yildiz/yildiz/playlist.m3u8
https://stream.yol.tv:9443/medialive/yol.m3u8
#EXTINF:-1 tvg-id="ZarokTV.tr",Zarok TV (720p)
https://zindikurmanci.zaroktv.com.tr/hls/stream.m3u8
+#EXTINF:-1 tvg-id="TYTTurk.tr",TYT Turk
+https://cdn-tytturk.yayin.com.tr/tytturk/index.m3u8
+#EXTINF:-1 tvg-id="MedMuzik.tr",Med Muzik (1080p)
+http://54.36.110.140/live3/live3.m3u8
+#EXTINF:-1 tvg-id="DisneyJr.tr",Disney Jr. (1080p) [Geo-blocked]
+https://saran-live.ercdn.net/disneyjunior/index.m3u8
+#EXTINF:-1 tvg-id="NationalGeographic.tr",National Geographic (1080p) [Geo-blocked]
+https://saran-live.ercdn.net/natgeohd/index.m3u8
+#EXTINF:-1 tvg-id="LalegulTV.tr",Lalegul TV (1080p)
+https://lbl.netmedya.net/hls/lalegultv.m3u8
+#EXTINF:-1 tvg-id="FX.tr",FX (1080p) [Geo-blocked]
+https://saran-live.ercdn.net/fx/index.m3u8
+#EXTINF:-1 tvg-id="CanTV.tr",Can TV (720p)
+https://livetv.canbroadcast.com:7443/canlican/tv.m3u8
+#EXTINF:-1 tvg-id="AltasTV.tr",Altas TV (1080p)
+https://edge1.socialsmart.tv/altastv/bant1/playlist.m3u8
+#EXTINF:-1 tvg-id="FinansTurkTV.tr",Finans Turk TV (720p)
+https://yayin30.haber100.com/live/finansturk/playlist.m3u8
+#EXTINF:-1 tvg-id="AfroturkTV.tr",Afroturk TV (1080p)
+https://edge.socialsmart.tv/naturaltv/bant1/playlist.m3u8
+#EXTINF:-1 tvg-id="NationalGeographicWild.tr",National Geographic Wild (1080p) [Geo-blocked]
+https://saran-live.ercdn.net/natgeowild/index.m3u8
+#EXTINF:-1 tvg-id="NationalGeographicWild.tr",National Geographic Wild (720p)
+https://tv.arectv29.sbs/live/natgeowild.m3u8
+#EXTINF:-1 tvg-id="NOWTV.tr",NOW TV (720p)
+https://uycyyuuzyh.turknet.ercdn.net/nphindgytw/nowtv/nowtv.m3u8
+#EXTINF:-1 tvg-id="Nickelodeon.tr@SD",Nickelodeon
+http://fl1.moveonjoy.com/NICKELODEON/index.m3u8
diff --git a/streams/us.m3u b/streams/us.m3u
index fdb648a82..e751dfb3e 100644
--- a/streams/us.m3u
+++ b/streams/us.m3u
@@ -43,10 +43,10 @@ https://castus-vod-dev.s3.amazonaws.com/vod_clients/akaku/live/ch1/video.m3u8
https://castus-vod-dev.s3.amazonaws.com/vod_clients/akaku/live/ch2/video.m3u8
#EXTINF:-1 tvg-id="Akaku55.us",Akaku 55 (Hawaii) (1080p)
https://castus-vod-dev.s3.amazonaws.com/vod_clients/akaku/live/ch3/video.m3u8
-#EXTINF:-1 tvg-id="AKCTV.us",AKC TV (1080p)
-https://broadcast.blivenyc.com/speed/broadcast/22/desktop-playlist.m3u8
#EXTINF:-1 tvg-id="AKCTV.us",AKC TV
https://install.akctvcontrol.com/speed/broadcast/138/desktop-playlist.m3u8
+#EXTINF:-1 tvg-id="AKCTV.us",AKC TV (1080p)
+https://broadcast.blivenyc.com/speed/broadcast/22/desktop-playlist.m3u8
#EXTINF:-1 tvg-id="AKCTVMeettheBreeds.us",AKC TV Meet The Breeds
https://install.akctvcontrol.com/speed/broadcast/139/desktop-playlist.m3u8
#EXTINF:-1 tvg-id="AKCTVPuppies.us",AKC TV Puppies 24/7
@@ -105,10 +105,10 @@ https://streamer1.connectto.com/AMGA_WEB_1202/playlist.m3u8
https://hls.avang.live/hls/stream.m3u8
#EXTINF:-1 tvg-id="AWEEncore.us",AWE Encore (720p) [Geo-blocked]
https://a-cdn.herringnetwork.com/affiliate/awee/playlist.m3u8
-#EXTINF:-1 tvg-id="AXSTVNOW.us",AXS TV NOW (1080p)
-https://dikcfc9915kp8.cloudfront.net/hls/main.m3u8
#EXTINF:-1 tvg-id="AXSTVNOW.us",AXS TV NOW
https://dikcfc9915kp8.cloudfront.net/hls/1080p/playlist.m3u8
+#EXTINF:-1 tvg-id="AXSTVNOW.us",AXS TV NOW (1080p)
+https://dikcfc9915kp8.cloudfront.net/hls/main.m3u8
#EXTINF:-1 tvg-id="BabySharkTV.us",Baby Shark TV (720p)
https://c0c65b821b3542c3a4dca92702f59944.mediatailor.us-east-1.amazonaws.com/v1/master/04fd913bb278d8775298c26fdca9d9841f37601f/RakutenTV-eu_BabySharkTV/playlist.m3u8
#EXTINF:-1 tvg-id="BanningCityTV.us",Banning CityTV (Banning CA) (1080p)
@@ -131,7 +131,7 @@ http://media4.tripsmarter.com:1935/LiveTV/BTVHD/playlist.m3u8
https://5ed325193d4e1.streamlock.net:444/LiveTV/BTVHD/playlist.m3u8
#EXTINF:-1 tvg-id="BEKNews.us",BEK TV News (720p)
https://cdn3.wowza.com/5/ZWQ1K2NYTmpFbGsr/BEK-WOWZA-1/smil:BEKPRIMEeast.smil/playlist.m3u8
-#EXTINF:-1 tvg-id="",BEK TV Sports West (720p)
+#EXTINF:-1 tvg-id="BEKSportsWest.us",BEK TV Sports West (720p)
https://cdn3.wowza.com/5/ZWQ1K2NYTmpFbGsr/BEK-WOWZA-1/smil:BEKPRIMEW.smil/playlist.m3u8
#EXTINF:-1 tvg-id="BetterHealthTV.us",Better Health TV (480p)
https://tgn.bozztv.com/betterlife/betterhealth/betterhealth/index.m3u8
@@ -151,11 +151,11 @@ https://d7ec4f6950ed4c6d946e497bd44db7ef.mediatailor.us-east-1.amazonaws.com/v1/
https://bloomberg.com/media-manifest/streams/qt.m3u8
#EXTINF:-1 tvg-id="BloombergTV.us",Bloomberg TV US (720p)
https://bloomberg.com/media-manifest/streams/us.m3u8
-#EXTINF:-1 tvg-id="BloombergTV.us@LiveEvent",Bloomberg TV US Live Event (720p)
+#EXTINF:-1 tvg-id="BloombergTVLiveEvent.us",Bloomberg TV US Live Event (720p)
https://bloomberg.com/media-manifest/streams/us-event.m3u8
-#EXTINF:-1 tvg-id="BloombergTV.us@PoliticsLiveEvent",Bloomberg TV US Politics Live Event (720p)
+#EXTINF:-1 tvg-id="BloombergTVPoliticsLiveEvent.us",Bloomberg TV US Politics Live Event (720p)
https://bloomberg.com/media-manifest/streams/politics.m3u8
-#EXTINF:-1 tvg-id="BloombergTV.us@Plus",Bloomberg TV+ (1080p)
+#EXTINF:-1 tvg-id="BloombergTVPlus.us",Bloomberg TV+ (1080p)
https://bloomberg.com/media-manifest/streams/phoenix-us.m3u8
#EXTINF:-1 tvg-id="BATVGovernmentTV.us",Bloomfield Access Government TV (480p)
https://reflect-batv.cablecast.tv/live-3/live/live.m3u8
@@ -303,15 +303,15 @@ https://livecdn.live247stream.com/eternallife/tv/playlist.m3u8
https://qvc-amd-live.akamaized.net/hls/live/2034113/lsqvc6us/master.m3u8
#EXTINF:-1 tvg-id="EVTVMiami.us",EVTV Miami (720p) [Not 24/7]
https://streannliveevtv.cachefly.net/Protected/sp=1;dirmatch=true/3be25dc13406bf70ff0208230e6fa803b88b95013fad257c025e481e2be3e214/evtv1/evtv1/playlist.m3u8
-#EXTINF:-1 tvg-id="EWTN.us@AfricaAsia",EWTN Africa Asia (720p)
+#EXTINF:-1 tvg-id="EWTNAfricaAsia.us",EWTN Africa Asia (720p)
https://cdn3.wowza.com/1/ZVBYYXFLLzE0c3NC/Qk1FMURC/hls/live/playlist.m3u8
-#EXTINF:-1 tvg-id="EWTN.us@AsiaPacific",EWTN Asia-Pacific (720p) [Not 24/7]
+#EXTINF:-1 tvg-id="EWTNAsiaPacific.us",EWTN Asia-Pacific (720p) [Not 24/7]
https://cdn3.wowza.com/1/QmVNUVhTNTZSS3Uz/YWQ0aHpi/hls/live/playlist.m3u8
-#EXTINF:-1 tvg-id="",EWTN el Canal Catรณlico (720p) [Not 24/7]
+#EXTINF:-1 tvg-id="EWTNEspanaLatinAmerica.us",EWTN el Canal Catรณlico (720p) [Not 24/7]
https://cdn3.wowza.com/1/SmVrQmZCUXZhVDgz/b3J3MFJv/hls/live/playlist.m3u8
-#EXTINF:-1 tvg-id="EWTN.us@UnitedStates",EWTN Estados Unidos (Spanish) (720p)
+#EXTINF:-1 tvg-id="EWTNEstadosUnidos.us",EWTN Estados Unidos (Spanish) (720p)
https://cdn3.wowza.com/1/TUI5dU5ucnUxdGFD/ZFlVeGRl/hls/live/playlist.m3u8
-#EXTINF:-1 tvg-id="EWTN.us@Europe",EWTN Europe (720p) [Not 24/7]
+#EXTINF:-1 tvg-id="EWTNEurope.us",EWTN Europe (720p) [Not 24/7]
https://cdn3.wowza.com/1/T2NXeHF6UGlGbHY3/WFluRldQ/hls/live/playlist.m3u8
#EXTINF:-1 tvg-id="EWTN.us",EWTN United States (720p)
https://cdn3.wowza.com/1/QjRzVXJtVml5SUVx/WGJRSWxz/hls/live/playlist.m3u8
@@ -365,7 +365,7 @@ https://6f972d29.wurl.com/master/f36d25e7e52f1ba8d7e56eb859c636563214f541/UmFrdX
https://go2thls.wns.live/hls/stream.m3u8
#EXTINF:-1 tvg-id="",Golden Boy
https://goldenboy.duckhunting.playout.vju.tv/DuckhuntingTV_GoldenBoy/main.m3u8
-#EXTINF:-1 tvg-id="",Golden TV (240p) [Not 24/7]
+#EXTINF:-1 tvg-id="GoldenPanregional.mx",Golden TV (240p) [Not 24/7]
https://bozztv.com/gusa/gusa-goldentv/index.m3u8
#EXTINF:-1 tvg-id="GoodLife45.us",GoodLife 45 (720p) [Not 24/7]
https://2-fss-2.streamhoster.com/pl_118/201450-1248872-1/playlist.m3u8
@@ -401,7 +401,7 @@ https://jstre.am/live/jsl:0sUSK6VA7GT.m3u8
https://qvc-amd-live.akamaized.net/hls/live/2034113/lshsn1us/master.m3u8
#EXTINF:-1 tvg-id="HSN2.us",HSN2
https://qvc-amd-live.akamaized.net/hls/live/2034113/lshsn2us/master.m3u8
-#EXTINF:-1 tvg-id="HSN.us@West",HSN West
+#EXTINF:-1 tvg-id="HSNWest.us",HSN West
https://qvc-amd-live.akamaized.net/hls/live/2034113/lshsn1uswest/master.m3u8
#EXTINF:-1 tvg-id="HumraazTV.us",Humraaz TV [Not 24/7]
https://cdn61.liveonlineservices.com/hls/humraaz.m3u8
@@ -417,7 +417,7 @@ https://freespeech.akamaized.net/hls/live/2024573/live2/playlist.m3u8
https://freespeech.akamaized.net/hls/live/2016873/live3/playlist.m3u8
#EXTINF:-1 tvg-id="",InfoWars War Room With Owen Shroyer (1080p)
https://freespeech.akamaized.net/hls/live/2024574/live4/playlist.m3u8
-#EXTINF:-1 tvg-id="IraneFardaTV.uk@SD",IraneFarda TV (576p)
+#EXTINF:-1 tvg-id="",IraneFarda TV (576p)
https://hls.iranfarda.live/hls/stream.m3u8
#EXTINF:-1 tvg-id="ItsSupernaturalNetwork.us",It's Supernatural! Network (ISN Network) (1080p)
https://content.uplynk.com/channel/fbc0f835332e476397b12216f9042f78.m3u8
@@ -431,7 +431,7 @@ https://uni8rtmp.tulix.tv/shalomtv-pc/smil:shalomtv.smil/master.m3u8
https://app.viloud.tv/hls/channel/07c8b76fa3a98409d527cede85852d55.m3u8
#EXTINF:-1 tvg-id="JewelryTV.us",Jewelry Television (720p)
https://content.jwplatform.com/live/broadcast/oe7UD7Ag.m3u8
-#EXTINF:-1 tvg-id="JewelryTV.us@Spanish",Jewelry Television Espanol (720p)
+#EXTINF:-1 tvg-id="",Jewelry Television Espanol (720p)
https://82934cf9c8696bd2.mediapackage.us-east-1.amazonaws.com/out/v1/72b5a55e4c35445f9e742871aa0aefa2/index.m3u8
#EXTINF:-1 tvg-id="JewelryTV2.us",Jewelry TV 2 (720p)
https://content.jwplatform.com/live/broadcast/RW3cCwlw.m3u8
@@ -489,8 +489,6 @@ https://streamyes.alsolnet.com/quebuenaatlanta/live/index.m3u8
https://linear-344.frequency.stream/dist/vix/344/hls/master/playlist.m3u8
#EXTINF:-1 tvg-id="LacrosseTV.us",Lacrosse TV (720p)
https://1840769862.rsc.cdn77.org/FTF/LSN_SCTE.m3u8
-#EXTINF:-1 tvg-id="Laff.us",Laff (480p)
-http://72.46.118.193/Laff/index.m3u8
#EXTINF:-1 tvg-id="LaoThaiTV.us",Lao-Thai TV (720p)
https://livefta.malimarcdn.com/ftaedge00/laothaius.sdp/playlist.m3u8
#EXTINF:-1 tvg-id="LatinZone.us",Latin Zone TV (720p)
@@ -529,17 +527,17 @@ https://5a8308add0b31.streamlock.net/logoschannel.com/logostv.smil/playlist.m3u8
https://597f64b67707a.streamlock.net/logoschannel.com/logostv.smil/playlist.m3u8
#EXTINF:-1 tvg-id="LogosTVEnglish.us",Logos TV English (1080p) [Not 24/7]
https://5aafcc5de91f1.streamlock.net/logoschannel.com/logoseng/playlist.m3u8
-#EXTINF:-1 tvg-id="",Lone Star Network (720p)
+#EXTINF:-1 tvg-id="LoneStarNetwork.us",Lone Star Network (720p)
https://6b88cde9.wurl.com/manifest/f36d25e7e52f1ba8d7e56eb859c636563214f541/UmFrdXRlblRWLWV1X0xvbmVTdGFyX0hMUw/ec788187-7d6a-4887-aeb7-cbe7214a3dc7/2.m3u8
#EXTINF:-1 tvg-id="Loupe4K.us",Loupe 4K (2160p)
https://d2dw21aq0j0l5c.cloudfront.net/playlist.m3u8
-#EXTINF:-1 tvg-id="LoveWorldUSA.ng@SD",LoveWorld USA (720p)
+#EXTINF:-1 tvg-id="",LoveWorld USA (720p)
https://cdn3.wowza.com/5/RGtVZkFxL3FOQkxX/LWU/ngrp:lwu.stream_all/playlist.m3u8
#EXTINF:-1 tvg-id="MadDogandMerrill.us",Mad Dog and Merrill (540p) [Not 24/7]
https://bozztv.com/gusa/gusa-mwg/index.m3u8
#EXTINF:-1 tvg-id="MajestadTV.us",Majestad Televisiรณn (480p) [Not 24/7]
https://livetv.305streamhd.com:3667/live/majestadtvlive.m3u8
-#EXTINF:-1 tvg-id="MAVTVSelect.us@Canada",MAV Select CANADA
+#EXTINF:-1 tvg-id="",MAV Select CANADA
https://d70mb4nkspm3g.cloudfront.net/v1/master/3722c60a815c199d9c0ef36c5b73da68a62b09d1/cc-vvwqo3j029lz0/playlist.m3u8
#EXTINF:-1 tvg-id="MAVTVSelect.us",MAV Select USA
https://d3h07n6l1exhds.cloudfront.net/v1/master/3722c60a815c199d9c0ef36c5b73da68a62b09d1/cc-0z2yyo4dxctc7/playlist.m3u8
@@ -611,21 +609,21 @@ https://content.uplynk.com/channel/1f93c13275024afb9e0ead299624073d.m3u8
https://content.uplynk.com/channel/4bb4901b934c4e029fd4c1abfc766c37.m3u8
#EXTINF:-1 tvg-id="NickPlutoTV.us",Nick Pluto TV (720p)
https://jmp2.uk/plu-62bdb6a83c6e37000726823b.m3u8
-#EXTINF:-1 tvg-id="Nicktoons.us@East",NickToons (720p)
+#EXTINF:-1 tvg-id="NicktoonsEast.us",NickToons (720p)
http://143.244.60.30/NICKTOONS/index.m3u8
-#EXTINF:-1 tvg-id="PlutoTVNovelas.us@SD",Novelas
+#EXTINF:-1 tvg-id="",Novelas
https://dai.google.com/linear/hls/event/4VaHBXfJSYihkeo7w_T0Qw/master.m3u8
#EXTINF:-1 tvg-id="Novelisima.us",Novelisima
https://dai.google.com/linear/hls/event/sFuxwI37R9KMTs-KywMcBg/master.m3u8
#EXTINF:-1 tvg-id="NRBTV.us",NRB TV (480p)
https://uni6rtmp.tulix.tv/nrbnetwork/myStream.sdp/playlist.m3u8
-#EXTINF:-1 tvg-id="NTDTV.us@East",NTD TV (New Tang Dynasty Television)
+#EXTINF:-1 tvg-id="NTDTVEast.us",NTD TV (New Tang Dynasty Television)
http://cnhls.ntdtv.com/cn/live400/playlist.m3u8
-#EXTINF:-1 tvg-id="NTDTV.us@East",NTD TV East (New Tang Dynasty Television)
+#EXTINF:-1 tvg-id="NTDTVEast.us",NTD TV East (New Tang Dynasty Television)
https://ntd02.akamaized.net/NTDA/index.m3u8
-#EXTINF:-1 tvg-id="NTDTV.us@UK",NTD TV UK (New Tang Dynasty Television)
+#EXTINF:-1 tvg-id="",NTD TV UK (New Tang Dynasty Television)
https://ntd02.akamaized.net/NTD-UK/index.m3u8
-#EXTINF:-1 tvg-id="NTDTV.us@West",NTD TV West (New Tang Dynasty Television)
+#EXTINF:-1 tvg-id="NTDTVWest.us",NTD TV West (New Tang Dynasty Television)
https://ntd02.akamaized.net/NTD-West/index.m3u8
#EXTINF:-1 tvg-id="KBPXLD3.us",Nudu
https://d1p0bzoad08w6e.cloudfront.net/encode/nudu.m3u8
@@ -665,7 +663,7 @@ https://qvc-amd-live.akamaized.net/hls/live/2034113/lsqvc1us/master.m3u8
https://qvc-amd-live.akamaized.net/hls/live/2034113/lsqvc2us/master.m3u8
#EXTINF:-1 tvg-id="QVC3.us",QVC 3 (1080p)
https://qvc-amd-live.akamaized.net/hls/live/2034113/lsqvc3us/master.m3u8
-#EXTINF:-1 tvg-id="QVC.us@West",QVC West
+#EXTINF:-1 tvg-id="",QVC West
https://qvc-amd-live.akamaized.net/hls/live/2034113/lsqvc1uswest/master.m3u8
#EXTINF:-1 tvg-id="RJTV.us",Radio Javan TV (1080p)
http://74.115.215.41/live/smil:rjtv.smil/playlist.m3u8
@@ -731,7 +729,7 @@ https://rakutenaa-tm-intl-aus-rakuten-eu-n1gtg.amagi.tv/playlist/rakutenAA-tm-in
https://tastemadessai.akamaized.net/amagi_hls_data_tastemade-tastemade/CDN/playlist.m3u8
#EXTINF:-1 tvg-id="TBD.us",TBD (1080p)
https://fast-channels.sinclairstoryline.com/TBD/index.m3u8
-#EXTINF:-1 tvg-id="TBN.us@East",TBN East (720p)
+#EXTINF:-1 tvg-id="TBNEast.us",TBN East (720p)
https://d7ge95bb03xsu.cloudfront.net/out/v1/0c95a89614194912834019fc37d741ef/tbn-freecast.m3u8
#EXTINF:-1 tvg-id="TBNPacific.us",TBN Pacific
https://broadcast.tbnpacific.org.au:4430/stream/TBNPacificTV/playlist.m3u8
@@ -745,7 +743,7 @@ https://tv2.fastcast4u.com:3238/live/radiotelebostonlive.m3u8
https://content.uplynk.com/channel/b6a96ed39d694ae1b738faa98cf7dd3f.m3u8
#EXTINF:-1 tvg-id="TelemundoInternacional.us",Telemundo Internacional (480p)
http://190.2.212.209:8050/play/a0oa
-#EXTINF:-1 tvg-id="Telemundo.us@West",Telemundo West (720p)
+#EXTINF:-1 tvg-id="TelemundoWest.us",Telemundo West (720p)
https://content.uplynk.com/channel/b6a96ed39d694ae1b738faa98cf7dd3f.m3u8?delay=10800
#EXTINF:-1 tvg-id="TennisChannel.us",Tennis Channel (1080p)
https://cdn-uw2-prod.tsv2.amagi.tv/linear/amg01444-tennischannelth-tennischnlintl-lggb/playlist.m3u8
@@ -759,7 +757,7 @@ https://stream-us-east-1.getpublica.com/playlist.m3u8?network_id=74
https://cf-live29e5f8c.lwcdn.com/live/fallback/014dc067-4922-4168-bdcd-5278589269ed/playlist.m3u8
#EXTINF:-1 tvg-id="TheCountryNetwork.us",The Country Network (1080p)
https://amg00600-amg00600c1-thecountrynetwork-us-5497.playouts.now.amagi.tv/playlist.m3u8
-#EXTINF:-1 tvg-id="TheCyclingChannel.at@SD",The Cycling Channel
+#EXTINF:-1 tvg-id="",The Cycling Channel
https://cyclingtv.playout.vju.tv/cyclingtv/main.m3u8
#EXTINF:-1 tvg-id="TheDesignNetwork.us",The Design Network (1080p)
https://amg00441-amg00441c1-rakuten-us-6050.playouts.now.amagi.tv/playlist/amg00441-thedesignnetworkllcfast-thedesignnetwork-rakutenus/playlist.m3u8
@@ -799,7 +797,7 @@ https://d3mwqwqfak7y2q.cloudfront.net/v1/master/3722c60a815c199d9c0ef36c5b73da68
https://todayhls.wns.live/hls/stream.m3u8
#EXTINF:-1 tvg-id="ToonGoggles.us",Toon Goggles (720p)
https://stream-us-east-1.getpublica.com/playlist.m3u8?network_id=37
-#EXTINF:-1 tvg-id="ToonamiAftermath.us@East",Toonami Aftermath East (480p)
+#EXTINF:-1 tvg-id="ToonamiAftermathEast.us",Toonami Aftermath East (480p)
http://api.toonamiaftermath.com:3000/est/playlist.m3u8
#EXTINF:-1 tvg-id="",Toonami Aftermath Movies (540p)
http://api.toonamiaftermath.com:3000/movies/playlist.m3u8
@@ -815,10 +813,10 @@ https://app.viloud.tv/hls/channel/0d984388834adac967a4ec4e69bc8271.m3u8
https://server80.servistreaming.com:3074/hybrid/play.m3u8
#EXTINF:-1 tvg-id="TSTV.us",TSTV (720p)
https://tstv-stream.tsm.utexas.edu/hls/livestream_hi/index.m3u8
-#EXTINF:-1 tvg-id="TUDN.us",TUDN (1080p)
-https://tkx.mp.lura.live/rest/v2/mcp/video/adstkZj0NvKqzB6e?anvack=NVQrq6a3oZfdBzkefWT1rvdRCoj9XOyx&token=eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJOVlFycTZhM29aZmRCemtlZldUMXJ2ZFJDb2o5WE95eCIsImV4cCI6MTY1NjE5ODE4NSwiYWRfcGFycyI6eyJkZnAiOnsiaXVfdmFsdWVfZnJvbV9wYWdlIjoiL3VuZGVmaW5lZC9yZC51bml2aXNpb25fdmlkZW9fZGVwb3J0ZXMvZGFpIiwidXJsIjoiaHR0cHM6Ly93d3cudHVkbi5jb20vdHVkbi1saXZlc3RyZWFtLTI0LTciLCJwbGF5ZXJfd2lkdGgiOiI3NTMiLCJwbGF5ZXJfaGVpZ2h0IjoiNDI0IiwicHAiOiJEZXNrdG9wQml0UmF0ZXMiLCJtdnBkIjoidGVtcF9wYXNzIn19LCJ2aWQiOiJhZHN0a1pqME52S3F6QjZlIiwidXNlcl9wYXJzIjp7InByZWZlcnJlZF9jZG4iOnsibmFtZSI6ImFrYW1haSIsImZvcmNlIjp0cnVlfX19.Y9JMF-b_SUsCZ3WMkjU1cmNkiHvT7lmvYLsVbCx-Dhg
#EXTINF:-1 tvg-id="TUDN.us",TUDN
https://dai.google.com/linear/hls/event/LKaz-eTgQvawHshATl-Qdw/master.m3u8
+#EXTINF:-1 tvg-id="TUDN.us",TUDN (1080p)
+https://tkx.mp.lura.live/rest/v2/mcp/video/adstkZj0NvKqzB6e?anvack=NVQrq6a3oZfdBzkefWT1rvdRCoj9XOyx&token=eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJOVlFycTZhM29aZmRCemtlZldUMXJ2ZFJDb2o5WE95eCIsImV4cCI6MTY1NjE5ODE4NSwiYWRfcGFycyI6eyJkZnAiOnsiaXVfdmFsdWVfZnJvbV9wYWdlIjoiL3VuZGVmaW5lZC9yZC51bml2aXNpb25fdmlkZW9fZGVwb3J0ZXMvZGFpIiwidXJsIjoiaHR0cHM6Ly93d3cudHVkbi5jb20vdHVkbi1saXZlc3RyZWFtLTI0LTciLCJwbGF5ZXJfd2lkdGgiOiI3NTMiLCJwbGF5ZXJfaGVpZ2h0IjoiNDI0IiwicHAiOiJEZXNrdG9wQml0UmF0ZXMiLCJtdnBkIjoidGVtcF9wYXNzIn19LCJ2aWQiOiJhZHN0a1pqME52S3F6QjZlIiwidXNlcl9wYXJzIjp7InByZWZlcnJlZF9jZG4iOnsibmFtZSI6ImFrYW1haSIsImZvcmNlIjp0cnVlfX19.Y9JMF-b_SUsCZ3WMkjU1cmNkiHvT7lmvYLsVbCx-Dhg
#EXTINF:-1 tvg-id="TUTV.us",TUTV
https://livestream.telvue.com/templeuni1/f7b44cfafd5c52223d5498196c8a2e7b.sdp/playlist.m3u8
#EXTINF:-1 tvg-id="TVSBowlingNetwork.us",TVS Bowling Network (720p)
@@ -1010,3 +1008,15 @@ https://fastmedia-yu-gi-oh-1-gb.xiaomi.wurl.tv/playlist.m3u8
#EXTINF:-1 tvg-id="ZoomNews.us" http-referrer="https://zoomnews.info/",Zoom TV Kurdish (720p)
#EXTVLCOPT:http-referrer=https://zoomnews.info/
https://live.zoomnews.info/live/Zoom_playlist.m3u8
+#EXTINF:-1 tvg-id="Laff.us",Laff (480p)
+http://72.46.118.193/Laff/index.m3u8
+#EXTINF:-1 tvg-id="History2LatinAmerica.us",History 2 Latin America
+https://cors-proxy.cooks.fyi/https://streamer1.nexgen.bz/HISTORY2/index.m3u8
+#EXTINF:-1 tvg-id="DidgahTV.us",Didgah TV (576p)
+https://media.streambrothers.com:1936/8276/8276/playlist.m3u8
+#EXTINF:-1 tvg-id="TinTV.us",Tin TV (720p)
+https://tulixcdn.akamaized.net/tintv6/tintv/tintv/playlist.m3u8
+#EXTINF:-1 tvg-id="RJTV.us",RJTV (720p)
+https://rjtvhls.wns.live/hls/stream.m3u8
+#EXTINF:-1 tvg-id="PBCTapeshTV.us",PBC Tapesh TV (480p)
+https://iptv.tapesh.tv/tapesh/playlist_mid/index.m3u8
diff --git a/streams/us_moveonjoy.m3u b/streams/us_moveonjoy.m3u
index 6b5d8d7c3..832a4a8e3 100644
--- a/streams/us_moveonjoy.m3u
+++ b/streams/us_moveonjoy.m3u
@@ -3,19 +3,19 @@
http://fl1.moveonjoy.com/ABC_EAST/index.m3u8
#EXTINF:-1 tvg-id="ACCNetwork.us",ACCN (720p)
http://fl2.moveonjoy.com/ACC_NETWORK/index.m3u8
-#EXTINF:-1 tvg-id="AMC.us@East",AMC East (1080p)
+#EXTINF:-1 tvg-id="AMCEast.us",AMC East (1080p)
http://fl5.moveonjoy.com/AMC_NETWORK/index.m3u8
#EXTINF:-1 tvg-id="Aspire.us",Aspire
http://fl3.moveonjoy.com/Aspire/index.m3u8
-#EXTINF:-1 tvg-id="BBCAmerica.us@East",BBC America East
+#EXTINF:-1 tvg-id="BBCAmericaEast.us",BBC America East
http://fl2.moveonjoy.com/BBC_AMERICA/index.m3u8
-#EXTINF:-1 tvg-id="BBCNews.uk@NorthAmerica",BBC News North America
+#EXTINF:-1 tvg-id="BBCNewsNorthAmerica.uk",BBC News North America
http://fl2.moveonjoy.com/BBC_WORLD_NEWS/index.m3u8
-#EXTINF:-1 tvg-id="BET.us@East",BET East
+#EXTINF:-1 tvg-id="BETEast.us",BET East
http://fl2.moveonjoy.com/BET_EAST/index.m3u8
#EXTINF:-1 tvg-id="BETGospel.us",BET Gospel
http://fl2.moveonjoy.com/BET_GOSPEL/index.m3u8
-#EXTINF:-1 tvg-id="BETHer.us@East",BET Her East
+#EXTINF:-1 tvg-id="BETHerEast.us",BET Her East
http://fl2.moveonjoy.com/BET_HER/index.m3u8
#EXTINF:-1 tvg-id="BETJams.us",BET Jams
http://fl3.moveonjoy.com/BET_Jams/index.m3u8
@@ -27,25 +27,25 @@ http://fl3.moveonjoy.com/BIG_TEN_NETWORK/index.m3u8
http://fl2.moveonjoy.com/BLOOMBERG/index.m3u8
#EXTINF:-1 tvg-id="Bounce.us",Bounce
http://fl3.moveonjoy.com/BOUNCE_TV/index.m3u8
-#EXTINF:-1 tvg-id="Bravo.us@East",Bravo East
+#EXTINF:-1 tvg-id="BravoEast.us",Bravo East
http://fl2.moveonjoy.com/BRAVO/index.m3u8
#EXTINF:-1 tvg-id="Buzzr.us",Buzzr
http://fl3.moveonjoy.com/Buzzr/index.m3u8
#EXTINF:-1 tvg-id="CSPAN.us",C-SPAN
http://fl2.moveonjoy.com/C-SPAN/index.m3u8
-#EXTINF:-1 tvg-id="CBS.us@East",CBS East (720p)
+#EXTINF:-1 tvg-id="CBSEast.us",CBS East (720p)
http://fl3.moveonjoy.com/CBS_News/index.m3u8
#EXTINF:-1 tvg-id="CBSSportsNetworkUSA.us",CBS Sports Network USA
http://fl2.moveonjoy.com/CBS_SPORTS_NETWORK/index.m3u8
#EXTINF:-1 tvg-id="CleoTV.us",Cleo TV (720p)
http://fl3.moveonjoy.com/Cleo_TV/index.m3u8
-#EXTINF:-1 tvg-id="CMT.us@East",CMT East
+#EXTINF:-1 tvg-id="CMTEast.us",CMT East
http://fl3.moveonjoy.com/CMT/index.m3u8
#EXTINF:-1 tvg-id="CNBC.us",CNBC
http://fl2.moveonjoy.com/CNBC/index.m3u8
#EXTINF:-1 tvg-id="CNBC.us",CNBC
http://fl5.moveonjoy.com/CNBC/index.m3u8
-#EXTINF:-1 tvg-id="ComedyCentral.us@East",Comedy Central East (720p)
+#EXTINF:-1 tvg-id="ComedyCentralEast.us",Comedy Central East (720p)
http://fl3.moveonjoy.com/Comedy_Central/index.m3u8
#EXTINF:-1 tvg-id="Comet.us",Comet (720p)
http://fl3.moveonjoy.com/COMET/index.m3u8
@@ -63,11 +63,11 @@ http://fl3.moveonjoy.com/CRAVE_3/index.m3u8
http://fl2.moveonjoy.com/CRAVE_4/index.m3u8
#EXTINF:-1 tvg-id="CuriosityStream.us",CuriosityStream (720p)
http://fl3.moveonjoy.com/Curiosity_Stream/index.m3u8
-#EXTINF:-1 tvg-id="DisneyJunior.us@East",Disney Junior East
+#EXTINF:-1 tvg-id="DisneyJuniorEast.us",Disney Junior East
http://fl2.moveonjoy.com/DISNEY_JR/index.m3u8
-#EXTINF:-1 tvg-id="DisneyXD.us@West",Disney XD West (720p)
+#EXTINF:-1 tvg-id="DisneyXDWest.us",Disney XD West (720p)
http://fl2.moveonjoy.com/DISNEY_XD/index.m3u8
-#EXTINF:-1 tvg-id="E.us@East",E! East
+#EXTINF:-1 tvg-id="EEast.us",E! East
http://fl2.moveonjoy.com/E_ENTERTAINMENT_TELEVISION/index.m3u8
#EXTINF:-1 tvg-id="ESPNU.us",ESPN U (720p)
http://fl2.moveonjoy.com/ESPN_U/index.m3u8
@@ -77,19 +77,19 @@ http://fl2.moveonjoy.com/ESPN_NEWS/index.m3u8
http://fl2.moveonjoy.com/FOX_Business_Network/index.m3u8
#EXTINF:-1 tvg-id="FoxSoul.us",Fox Soul
http://fl1.moveonjoy.com/FOX_SOUL/index.m3u8
-#EXTINF:-1 tvg-id="FoxSports1.cl@SD",Fox Sports 1
+#EXTINF:-1 tvg-id="FoxSports1.us",Fox Sports 1
http://fl2.moveonjoy.com/FOX_Sports_1/index.m3u8
-#EXTINF:-1 tvg-id="Freeform.us@East",Free form East
+#EXTINF:-1 tvg-id="FreeformEast.us",Free form East
http://fl2.moveonjoy.com/FREE_FORM/index.m3u8
-#EXTINF:-1 tvg-id="Fuse.us@East",Fuse East (720p)
+#EXTINF:-1 tvg-id="FuseEast.us",Fuse East (720p)
http://fl2.moveonjoy.com/FUSE/index.m3u8
-#EXTINF:-1 tvg-id="FX.us@East",FX East
+#EXTINF:-1 tvg-id="FXEast.us",FX East
http://fl2.moveonjoy.com/FX/index.m3u8
-#EXTINF:-1 tvg-id="FXM.us@East",FXM East
+#EXTINF:-1 tvg-id="FXMEast.us",FXM East
http://fl2.moveonjoy.com/FX_MOVIE/index.m3u8
-#EXTINF:-1 tvg-id="FXX.us@East",FXX East
+#EXTINF:-1 tvg-id="FXXEast.us",FXX East
http://fl2.moveonjoy.com/FXX/index.m3u8
-#EXTINF:-1 tvg-id="FYI.us@East",FYI East
+#EXTINF:-1 tvg-id="FYIEast.us",FYI East
http://fl2.moveonjoy.com/FYI/index.m3u8
#EXTINF:-1 tvg-id="GetTV.us",GetTV (480p)
http://fl2.moveonjoy.com/GET_TV/index.m3u8
@@ -97,31 +97,31 @@ http://fl2.moveonjoy.com/GET_TV/index.m3u8
http://fl2.moveonjoy.com/GOLF_CHANNEL/index.m3u8
#EXTINF:-1 tvg-id="Grit.us",Grit
http://fl2.moveonjoy.com/GRIT_TV/index.m3u8
-#EXTINF:-1 tvg-id="HallmarkChannel.us@East",Hallmark Channel East
+#EXTINF:-1 tvg-id="HallmarkChannelEast.us",Hallmark Channel East
http://fl2.moveonjoy.com/HALLMARK_CHANNEL/index.m3u8
#EXTINF:-1 tvg-id="HallmarkDrama.us",Hallmark Drama (720p)
http://fl2.moveonjoy.com/HALLMARK_DRAMA/index.m3u8
-#EXTINF:-1 tvg-id="HallmarkMoviesMysteries.us@East",Hallmark Movies Mysteries East
+#EXTINF:-1 tvg-id="HallmarkMoviesMysteriesEast.us",Hallmark Movies Mysteries East
http://fl2.moveonjoy.com/HALLMARK_MOVIES_MYSTERIES/index.m3u8
#EXTINF:-1 tvg-id="HSN.us",HSN
http://fl2.moveonjoy.com/HSN/index.m3u8
#EXTINF:-1 tvg-id="INSP.us",INSP
http://fl2.moveonjoy.com/INSP/index.m3u8
-#EXTINF:-1 tvg-id="IONPlus.us@East",ION Plus East (720p)
+#EXTINF:-1 tvg-id="IONPlusEast.us",ION Plus East (720p)
http://fl3.moveonjoy.com/ION_Plus/index.m3u8
-#EXTINF:-1 tvg-id="IONTV.us@East",ION TV East
+#EXTINF:-1 tvg-id="IONTVEast.us",ION TV East
http://fl2.moveonjoy.com/ION_TV/index.m3u8
#EXTINF:-1 tvg-id="KSATDT2.us",KSAT-DT2 (720p)
http://fl2.moveonjoy.com/ME_TV/index.m3u8
-#EXTINF:-1 tvg-id="Lifetime.us@East",Lifetime East
+#EXTINF:-1 tvg-id="LifetimeEast.us",Lifetime East
http://fl2.moveonjoy.com/LIFETIME/index.m3u8
-#EXTINF:-1 tvg-id="LifetimeMovies.us@East",Lifetime Movies East
+#EXTINF:-1 tvg-id="LifetimeMoviesEast.us",Lifetime Movies East
http://fl2.moveonjoy.com/LIFETIME_MOVIE_NETWORK/index.m3u8
#EXTINF:-1 tvg-id="LoveNature.ca",Love Nature
http://fl1.moveonjoy.com/LOVE_NATURE/index.m3u8
#EXTINF:-1 tvg-id="MAVTV.us",MAV TV (720p)
http://fl2.moveonjoy.com/MAV_TV/index.m3u8
-#EXTINF:-1 tvg-id="MGMPlus.us@East",MGM+ East
+#EXTINF:-1 tvg-id="MGMPlusEast.us",MGM+ East
http://fl2.moveonjoy.com/EPIX/index.m3u8
#EXTINF:-1 tvg-id="MGMPlusMarquee.us",MGM+ Marquee
http://fl2.moveonjoy.com/EPIX_DRIVE_IN/index.m3u8
@@ -129,29 +129,29 @@ http://fl2.moveonjoy.com/EPIX_DRIVE_IN/index.m3u8
http://fl2.moveonjoy.com/MLB_NETWORK/index.m3u8
#EXTINF:-1 tvg-id="MSG.us",MSG
http://fl3.moveonjoy.com/MSG/index.m3u8
-#EXTINF:-1 tvg-id="MTV2.us@East",MTV2 (720p)
+#EXTINF:-1 tvg-id="MTV2East.us",MTV2 (720p)
https://fl5.moveonjoy.com/MTV_2/index.m3u8
-#EXTINF:-1 tvg-id="MTV2.us@East",MTV2 East
+#EXTINF:-1 tvg-id="MTV2East.us",MTV2 East
http://fl2.moveonjoy.com/MTV_2/index.m3u8
-#EXTINF:-1 tvg-id="MTVClassic.us@East",MTV Classic (360p)
+#EXTINF:-1 tvg-id="MTVClassicEast.us",MTV Classic (360p)
https://fl5.moveonjoy.com/MTV_CLASSIC/index.m3u8
-#EXTINF:-1 tvg-id="MTVClassic.us@East",MTV Classic East (720p)
+#EXTINF:-1 tvg-id="MTVClassicEast.us",MTV Classic East (720p)
https://fl2.moveonjoy.com/MTV_CLASSIC/index.m3u8
-#EXTINF:-1 tvg-id="MTV.us@East",MTV East
+#EXTINF:-1 tvg-id="MTVEast.us",MTV East
http://fl2.moveonjoy.com/MTV/index.m3u8
-#EXTINF:-1 tvg-id="MTVLive.us",MTV Live (720p)
-https://fl5.moveonjoy.com/MTV_LIVE/index.m3u8
#EXTINF:-1 tvg-id="MTVLive.us",MTV Live
http://fl2.moveonjoy.com/MTV_LIVE/index.m3u8
-#EXTINF:-1 tvg-id="MTVU.us",mtvU (480p)
-https://fl5.moveonjoy.com/MTV_U/index.m3u8
+#EXTINF:-1 tvg-id="MTVLive.us",MTV Live (720p)
+https://fl5.moveonjoy.com/MTV_LIVE/index.m3u8
#EXTINF:-1 tvg-id="MTVU.us",MTVU
http://fl2.moveonjoy.com/MTV_U/index.m3u8
+#EXTINF:-1 tvg-id="MTVU.us",mtvU (480p)
+https://fl5.moveonjoy.com/MTV_U/index.m3u8
#EXTINF:-1 tvg-id="Much.ca",Much (720p)
http://fl1.moveonjoy.com/MUCH/index.m3u8
-#EXTINF:-1 tvg-id="NationalGeographic.us@East",National Geographic East
+#EXTINF:-1 tvg-id="NationalGeographicEast.us",National Geographic East
http://fl2.moveonjoy.com/National_Geographic/index.m3u8
-#EXTINF:-1 tvg-id="NationalGeographicWild.us@East",National Geographic Wild East
+#EXTINF:-1 tvg-id="NationalGeographicWildEast.us",National Geographic Wild East
http://fl2.moveonjoy.com/Nat_Geo_Wild/index.m3u8
#EXTINF:-1 tvg-id="NBATV.us",NBA TV
http://fl2.moveonjoy.com/NBA_TV/index.m3u8
@@ -163,29 +163,27 @@ http://fl2.moveonjoy.com/NFL_NETWORK/index.m3u8
http://fl1.moveonjoy.com/NFL_RedZone/index.m3u8
#EXTINF:-1 tvg-id="NHLNetwork.us",NHL Network (720p)
http://fl2.moveonjoy.com/NHL_NETWORK/index.m3u8
-#EXTINF:-1 tvg-id="NickJr.us@East",Nick Jr East
+#EXTINF:-1 tvg-id="NickJrEast.us",Nick Jr East
http://fl2.moveonjoy.com/NICK_JR/index.m3u8
-#EXTINF:-1 tvg-id="NickJr.us@East",Nick Jr. East (720p)
+#EXTINF:-1 tvg-id="NickJrEast.us",Nick Jr. East (720p)
https://fl5.moveonjoy.com/NICK_JR/index.m3u8
#EXTINF:-1 tvg-id="NickMusic.us",Nick Music (720p)
http://fl2.moveonjoy.com/NICK_MUSIC/index.m3u8
#EXTINF:-1 tvg-id="NickMusic.us",Nick Music (480p)
http://fl5.moveonjoy.com/NICK_MUSIC/index.m3u8
-#EXTINF:-1 tvg-id="Nickelodeon.us@East",Nickelodeon East
-http://fl1.moveonjoy.com/NICKELODEON/index.m3u8
-#EXTINF:-1 tvg-id="Nicktoons.us@East",Nicktoons East
+#EXTINF:-1 tvg-id="NicktoonsEast.us",Nicktoons East
http://fl1.moveonjoy.com/NICKTOONS/index.m3u8
#EXTINF:-1 tvg-id="OutdoorChannel.us",Outdoor Channel
http://fl2.moveonjoy.com/OUTDOOR_CHANNEL/index.m3u8
-#EXTINF:-1 tvg-id="OuterMax.us@East",OuterMax East (720p)
+#EXTINF:-1 tvg-id="OuterMaxEast.us",OuterMax East (720p)
http://fl2.moveonjoy.com/OUTER_MAX/index.m3u8
#EXTINF:-1 tvg-id="OutsideTV.us",Outside TV
http://fl2.moveonjoy.com/OUTSIDE_TV/index.m3u8
#EXTINF:-1 tvg-id="Ovation.us",Ovation (1080p)
http://fl3.moveonjoy.com/Ovation/index.m3u8
-#EXTINF:-1 tvg-id="Oxygen.us@East",Oxygen East
+#EXTINF:-1 tvg-id="OxygenEast.us",Oxygen East
http://fl2.moveonjoy.com/OXYGEN/index.m3u8
-#EXTINF:-1 tvg-id="ParamountNetwork.us@East",Paramount Network East
+#EXTINF:-1 tvg-id="ParamountNetworkEast.us",Paramount Network East
http://fl2.moveonjoy.com/PARAMOUNT_NETWORK/index.m3u8
#EXTINF:-1 tvg-id="PursuitChannel.us",Pursuit Channel (720p)
http://fl3.moveonjoy.com/Pursuit_Channel/index.m3u8
@@ -195,17 +193,17 @@ http://fl2.moveonjoy.com/QVC/index.m3u8
http://fl2.moveonjoy.com/REELZ/index.m3u8
#EXTINF:-1 tvg-id="Revolt.us",Revolt
http://fl2.moveonjoy.com/REVOLT/index.m3u8
-#EXTINF:-1 tvg-id="Showtime2.us@East",Showtime 2 East
+#EXTINF:-1 tvg-id="Showtime2East.us",Showtime 2 East
http://fl2.moveonjoy.com/SHOWTIME_2/index.m3u8
-#EXTINF:-1 tvg-id="Showtime.us@East",Showtime East
+#EXTINF:-1 tvg-id="ShowtimeEast.us",Showtime East
http://fl2.moveonjoy.com/SHOWTIME/index.m3u8
-#EXTINF:-1 tvg-id="ShowtimeNext.us@East",Showtime Next East
+#EXTINF:-1 tvg-id="ShowtimeNextEast.us",Showtime Next East
http://fl2.moveonjoy.com/SHOWTIME_NEXT/index.m3u8
-#EXTINF:-1 tvg-id="Showtime.us@West",Showtime West (1080p)
+#EXTINF:-1 tvg-id="ShowtimeWest.us",Showtime West (1080p)
http://fl2.moveonjoy.com/SHOWTIME_WEST/index.m3u8
-#EXTINF:-1 tvg-id="ShowtimeWomen.us@East",Showtime Women East
+#EXTINF:-1 tvg-id="ShowtimeWomenEast.us",Showtime Women East
http://fl2.moveonjoy.com/SHOWTIME_WOMEN/index.m3u8
-#EXTINF:-1 tvg-id="SmithsonianChannel.us@East",Smithsonian Channel East
+#EXTINF:-1 tvg-id="SmithsonianChannelEast.us",Smithsonian Channel East
http://fl2.moveonjoy.com/SMITHSONIAN_CHANNEL/index.m3u8
#EXTINF:-1 tvg-id="SportsmanChannel.us",Sportsman Channel
http://fl2.moveonjoy.com/SPORTSMAN_CHANNEL/index.m3u8
@@ -213,15 +211,15 @@ http://fl2.moveonjoy.com/SPORTSMAN_CHANNEL/index.m3u8
http://fl2.moveonjoy.com/SNY/index.m3u8
#EXTINF:-1 tvg-id="StartTV.us",Start TV
http://fl3.moveonjoy.com/Start_Tv/index.m3u8
-#EXTINF:-1 tvg-id="Starz.us@East",Starz East
+#EXTINF:-1 tvg-id="StarzEast.us",Starz East
http://fl2.moveonjoy.com/STARZ/index.m3u8
-#EXTINF:-1 tvg-id="StarzEncoreClassic.us@East",Starz Encore Classic East
+#EXTINF:-1 tvg-id="StarzEncoreClassicEast.us",Starz Encore Classic East
http://fl5.moveonjoy.com/STARZ_ENCORE_CLASSIC/index.m3u8
-#EXTINF:-1 tvg-id="Starz.us@West",Starz West
+#EXTINF:-1 tvg-id="StarzWest.us",Starz West
http://fl2.moveonjoy.com/STARZ_WEST/index.m3u8
-#EXTINF:-1 tvg-id="SundanceTV.us@East",Sundance TV East
+#EXTINF:-1 tvg-id="SundanceTVEast.us",Sundance TV East
http://fl2.moveonjoy.com/SUNDANCE/index.m3u8
-#EXTINF:-1 tvg-id="Syfy.us@East",Syfy East
+#EXTINF:-1 tvg-id="SyfyEast.us",Syfy East
http://fl2.moveonjoy.com/SYFY/index.m3u8
#EXTINF:-1 tvg-id="TennisChannel.us",Tennis Channel
http://fl2.moveonjoy.com/TENNIS_CHANNEL/index.m3u8
@@ -235,21 +233,21 @@ http://fl5.moveonjoy.com/TSN_3/index.m3u8
http://fl5.moveonjoy.com/TSN_4/index.m3u8
#EXTINF:-1 tvg-id="TSN5.ca",TSN5
http://fl5.moveonjoy.com/TSN_5/index.m3u8
-#EXTINF:-1 tvg-id="TVLand.us@East",TV Land East
+#EXTINF:-1 tvg-id="TVLandEast.us",TV Land East
http://fl2.moveonjoy.com/TV_Land/index.m3u8
#EXTINF:-1 tvg-id="TVOne.us",TV One
http://fl2.moveonjoy.com/TV_ONE/index.m3u8
#EXTINF:-1 tvg-id="UpTV.us",Up TV (1080p)
http://fl3.moveonjoy.com/Up_Tv/index.m3u8
-#EXTINF:-1 tvg-id="USANetwork.us@East",USA Network East (720p)
+#EXTINF:-1 tvg-id="USANetworkEast.us",USA Network East (720p)
http://fl2.moveonjoy.com/USA_Network/index.m3u8
-#EXTINF:-1 tvg-id="VH1.us@East",VH1 East
+#EXTINF:-1 tvg-id="VH1East.us",VH1 East
http://fl2.moveonjoy.com/VH1/index.m3u8
#EXTINF:-1 tvg-id="VICETV.us",VICE TV (720p)
http://fl2.moveonjoy.com/VICELAND/index.m3u8
-#EXTINF:-1 tvg-id="WNetwork.ca@East",W Network (720p)
+#EXTINF:-1 tvg-id="WNetworkEast.ca",W Network (720p)
http://fl2.moveonjoy.com/W_NETWORK/index.m3u8
-#EXTINF:-1 tvg-id="WeTV.us@East",We TV East
+#EXTINF:-1 tvg-id="WeTVEast.us",We TV East
http://fl1.moveonjoy.com/WE_TV/index.m3u8
#EXTINF:-1 tvg-id="WGNDT1.us",WGN-DT1 (720p)
http://fl2.moveonjoy.com/WGN/index.m3u8
diff --git a/streams/us_samsung.m3u b/streams/us_samsung.m3u
index f3492761b..b8945afd8 100644
--- a/streams/us_samsung.m3u
+++ b/streams/us_samsung.m3u
@@ -11,10 +11,6 @@ https://bonappetit-samsung.amagi.tv/playlist.m3u8
https://d37v4ie0vq884e.cloudfront.net/v1/master/3722c60a815c199d9c0ef36c5b73da68a62b09d1/cc-ujoygpbfraxho/bounce_xl.m3u8
#EXTINF:-1 tvg-id="BratTV.us",Brat TV (1080p)
https://brat-samsung-us.amagi.tv/playlist.m3u8
-#EXTINF:-1 tvg-id="Buzzr.us",Buzzr (1080p)
-https://buzzr-samsungus.amagi.tv/playlist.m3u8
-#EXTINF:-1 tvg-id="Buzzr.us",Buzzr (1080p)
-https://cdn-ue1-prod.tsv2.amagi.tv/linear/samsungus-buzzr-samsungtv-us/playlist.m3u8
#EXTINF:-1 tvg-id="Circle.us",Circle (1080p)
https://circle-samsung.amagi.tv/playlist.m3u8
#EXTINF:-1 tvg-id="Crime360.us",Crime 360 (720p)
diff --git a/streams/xk.m3u b/streams/xk.m3u
index 588f42ebb..189872f85 100644
--- a/streams/xk.m3u
+++ b/streams/xk.m3u
@@ -19,3 +19,19 @@ http://stream.tvdielli.com:8081/dielli/index.m3u8
http://ip.opoja.tv:1935/tvopoja/tvopoja/playlist.m3u8
#EXTINF:-1 tvg-id="TVSyri.xk",TV Syri (720p)
https://gjirafa-video-live.gjirafa.net/gjvideo-live/xej-xnb-ba0-kup/index.m3u8
+#EXTINF:-1 tvg-id="T7.xk",T7
+https://gjirafa-video-live.gjirafa.net/gjvideo-livestream-specific/1z8-byc-4ee-lc9/index.m3u8
+#EXTINF:-1 tvg-id="TVArta.xk",TV Arta
+https://gjirafa-video-live.gjirafa.net/gjvideo-live/mps-vgx-u9p-qv1/index.m3u8
+#EXTINF:-1 tvg-id="RTK3.xk",RTK 3
+https://gjirafa-video-live.gjirafa.net/gjvideo-livestream/rtk3/index.m3u8
+#EXTINF:-1 tvg-id="RTK2.xk",RTK 2
+https://gjirafa-video-live.gjirafa.net/gjvideo-livestream/rtk2/index.m3u8
+#EXTINF:-1 tvg-id="RTK1.xk",RTK 1
+https://gjirafa-video-live.gjirafa.net/gjvideo-livestream/98r-d35-487-v6m/tracks-v4a1/mono.m3u8
+#EXTINF:-1 tvg-id="Kohavision.xk",Kohavision
+https://gjirafa-video-live.gjirafa.net/gjvideo-livestream/lj9-pxm-o53-rp0/tracks-v4a1/mono.m3u8
+#EXTINF:-1 tvg-id="TVPrizreni.xk",TV Prizreni
+https://gjirafa-video-live.gjirafa.net/gjvideo-live/5m0-cok-g5z-1xi/index.m3u8
+#EXTINF:-1 tvg-id="RTV21.xk",RTV21
+https://gjirafa-video-live.gjirafa.net/gjvideo-live/2cz-npl-jfn-9he/tracks-v2a1/mono.m3u8
diff --git a/tests/__data__/expected/api_generate/.api/streams.json b/tests/__data__/expected/api_generate/.api/streams.json
new file mode 100644
index 000000000..55128bca3
--- /dev/null
+++ b/tests/__data__/expected/api_generate/.api/streams.json
@@ -0,0 +1,57 @@
+[
+ {
+ "channel": null,
+ "feed": null,
+ "url": "http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8",
+ "referrer": null,
+ "user_agent": null
+ },
+ {
+ "channel": null,
+ "feed": null,
+ "url": "http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8",
+ "referrer": "http://imn.iq",
+ "user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"
+ },
+ {
+ "channel": "AndorraTV.ad",
+ "feed": "SD",
+ "url": "https://iptv-all.lanesh4d0w.repl.co/andorra/atv",
+ "referrer": null,
+ "user_agent": null
+ },
+ {
+ "channel": "BBCNews.uk",
+ "url": "http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8",
+ "referrer": null,
+ "user_agent": null
+ },
+ {
+ "channel": "LDPRTV.ru",
+ "feed": null,
+ "url": "http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8",
+ "referrer": null,
+ "user_agent": null
+ },
+ {
+ "channel": "MeteoMedia.ca",
+ "feed": null,
+ "url": "http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8",
+ "referrer": null,
+ "user_agent": null
+ },
+ {
+ "channel": "VisitXTV.nl",
+ "feed": null,
+ "url": "https://stream.visit-x.tv/vxtv/ngrp:live_all/30fps.m3u8",
+ "referrer": null,
+ "user_agent": null
+ },
+ {
+ "channel": "Zoo.ad",
+ "feed": null,
+ "url": "https://iptv-all.lanesh4d0w.repl.co/andorra/zoo",
+ "referrer": null,
+ "user_agent": null
+ }
+]
\ No newline at end of file
diff --git a/tests/__data__/expected/playlist_format/in.m3u b/tests/__data__/expected/playlist_format/in.m3u
index 44a00ace1..2615da4e4 100644
--- a/tests/__data__/expected/playlist_format/in.m3u
+++ b/tests/__data__/expected/playlist_format/in.m3u
@@ -1,3 +1,3 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="",Manorama News -2 [U3] (480p) [Geo-blocked] [Not 24/7]
-https://ythls.onrender.com/channel/UCP0uG-mcMImgKnJz-VjJZmQ.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="",Manorama News -2 [U3] (480p) [Geo-blocked] [Not 24/7]
+https://ythls.onrender.com/channel/UCP0uG-mcMImgKnJz-VjJZmQ.m3u8
diff --git a/tests/__data__/expected/playlist_format/nl.m3u b/tests/__data__/expected/playlist_format/nl.m3u
index 8f1e0ba2a..d08a2ac80 100644
--- a/tests/__data__/expected/playlist_format/nl.m3u
+++ b/tests/__data__/expected/playlist_format/nl.m3u
@@ -1,11 +1,11 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="NPO1.nl@SD",NPO 1 (342p) [Geo-blocked]
-http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo1/npo1.isml/.m3u8
-#EXTINF:-1 tvg-id="NPO2.nl",NPO 2 (342p)
-http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo2/npo2.isml/.m3u8
-#EXTINF:-1 tvg-id="NPO2.nl" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",NPO 2 (302p) [Geo-blocked]
-#EXTVLCOPT:http-referrer=http://imn.iq
-#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
-http://stream.tvtap.net:8081/live/nl-npo2.stream/playlist.m3u8
-#EXTINF:-1 tvg-id="NPO2.nl",NPO 2 [Geo-blocked]
-http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo2/npo22.isml/.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="NPO1.nl@SD",NPO 1 (342p) [Geo-blocked]
+http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo1/npo1.isml/.m3u8
+#EXTINF:-1 tvg-id="NPO2.nl",NPO 2 (342p)
+http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo2/npo2.isml/.m3u8
+#EXTINF:-1 tvg-id="NPO2.nl" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",NPO 2 (302p) [Geo-blocked]
+#EXTVLCOPT:http-referrer=http://imn.iq
+#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
+http://stream.tvtap.net:8081/live/nl-npo2.stream/playlist.m3u8
+#EXTINF:-1 tvg-id="NPO2.nl",NPO 2 [Geo-blocked]
+http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo2/npo22.isml/.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/categories/general.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/categories/general.m3u
new file mode 100644
index 000000000..d43fa35f6
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/categories/general.m3u
@@ -0,0 +1,7 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="BBCNews.uk" tvg-logo="https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png" group-title="General;News",BBC News HD
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
+#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="General",ะะะะ ะขะ (1080p)
+http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
+#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="General",ะญะปะขะ (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/categories/legislative.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/categories/legislative.m3u
new file mode 100644
index 000000000..7452e53aa
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/categories/legislative.m3u
@@ -0,0 +1 @@
+#EXTM3U
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/categories/news.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/categories/news.m3u
new file mode 100644
index 000000000..85c75b78b
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/categories/news.m3u
@@ -0,0 +1,3 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="BBCNews.uk" tvg-logo="https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png" group-title="General;News",BBC News HD
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/categories/undefined.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/categories/undefined.m3u
new file mode 100644
index 000000000..cfdce7d0b
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/categories/undefined.m3u
@@ -0,0 +1,15 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
+#EXTVLCOPT:http-referrer=http://imn.iq
+#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="" group-title="Undefined",ATV
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv
+#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="" group-title="Undefined",ATV HD
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
+#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined",Daawah TV
+http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
+#EXTINF:-1 tvg-id="DunaWorld.hu" tvg-logo="https://i.imgur.com/uOBQJZS.png" group-title="Undefined",Duna World (576i)
+http://146.59.85.40:89/dunaworld/index.m3u8
+#EXTINF:-1 tvg-id="Zoo.ad@HD" tvg-logo="" group-title="Undefined",Zoo (720p)
+https://iptv-all.lanesh4d0w.repl.co/andorra/zoo
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/categories/weather.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/categories/weather.m3u
new file mode 100644
index 000000000..03a6963a3
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/categories/weather.m3u
@@ -0,0 +1,3 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="MeteoMedia.ca" tvg-logo="https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png" group-title="Weather",Meteomedia
+http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/categories/xxx.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/categories/xxx.m3u
new file mode 100644
index 000000000..a6791d64b
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/categories/xxx.m3u
@@ -0,0 +1,3 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="VisitXTV.nl" tvg-logo="https://i.imgur.com/RJ9wbNF.jpg" group-title="XXX",Visit-X TV
+https://stream.visit-x.tv/vxtv/ngrp:live_all/30fps.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/countries/ad.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/countries/ad.m3u
new file mode 100644
index 000000000..9bc95be27
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/countries/ad.m3u
@@ -0,0 +1,3 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="" group-title="Undefined",ATV
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/countries/ca.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/countries/ca.m3u
new file mode 100644
index 000000000..03a6963a3
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/countries/ca.m3u
@@ -0,0 +1,3 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="MeteoMedia.ca" tvg-logo="https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png" group-title="Weather",Meteomedia
+http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/countries/ru.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/countries/ru.m3u
new file mode 100644
index 000000000..b701890a3
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/countries/ru.m3u
@@ -0,0 +1,3 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="General",ะะะะ ะขะ (1080p)
+http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/countries/undefined.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/countries/undefined.m3u
new file mode 100644
index 000000000..eb0364cd5
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/countries/undefined.m3u
@@ -0,0 +1,11 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
+#EXTVLCOPT:http-referrer=http://imn.iq
+#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
+#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="" group-title="Undefined",ATV HD
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
+#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined",Daawah TV
+http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
+#EXTINF:-1 tvg-id="Zoo.ad@HD" tvg-logo="" group-title="Undefined",Zoo (720p)
+https://iptv-all.lanesh4d0w.repl.co/andorra/zoo
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/index.category.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/index.category.m3u
new file mode 100644
index 000000000..b3235a876
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/index.category.m3u
@@ -0,0 +1,25 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="BBCNews.uk" tvg-logo="https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png" group-title="General",BBC News HD
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
+#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="General",ะะะะ ะขะ (1080p)
+http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
+#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="General",ะญะปะขะ (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
+#EXTINF:-1 tvg-id="BBCNews.uk" tvg-logo="https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png" group-title="News",BBC News HD
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
+#EXTINF:-1 tvg-id="MeteoMedia.ca" tvg-logo="https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png" group-title="Weather",Meteomedia
+http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
+#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
+#EXTVLCOPT:http-referrer=http://imn.iq
+#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="" group-title="Undefined",ATV
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv
+#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="" group-title="Undefined",ATV HD
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
+#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined",Daawah TV
+http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
+#EXTINF:-1 tvg-id="DunaWorld.hu" tvg-logo="https://i.imgur.com/uOBQJZS.png" group-title="Undefined",Duna World (576i)
+http://146.59.85.40:89/dunaworld/index.m3u8
+#EXTINF:-1 tvg-id="Zoo.ad@HD" tvg-logo="" group-title="Undefined",Zoo (720p)
+https://iptv-all.lanesh4d0w.repl.co/andorra/zoo
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/index.country.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/index.country.m3u
new file mode 100644
index 000000000..332df0029
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/index.country.m3u
@@ -0,0 +1,31 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="" group-title="Andorra",ATV
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv
+#EXTINF:-1 tvg-id="MeteoMedia.ca" tvg-logo="https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png" group-title="Canada",Meteomedia
+http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
+#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Kazakhstan",ะญะปะขะ (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
+#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Kyrgyzstan",ะญะปะขะ (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
+#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="Russia",ะะะะ ะขะ (1080p)
+http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
+#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Tajikistan",ะญะปะขะ (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
+#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Turkmenistan",ะญะปะขะ (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
+#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Uzbekistan",ะญะปะขะ (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
+#EXTINF:-1 tvg-id="BBCNews.uk" tvg-logo="https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png" group-title="International",BBC News HD
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
+#EXTINF:-1 tvg-id="DunaWorld.hu" tvg-logo="https://i.imgur.com/uOBQJZS.png" group-title="International",Duna World (576i)
+http://146.59.85.40:89/dunaworld/index.m3u8
+#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
+#EXTVLCOPT:http-referrer=http://imn.iq
+#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
+#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="" group-title="Undefined",ATV HD
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
+#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined",Daawah TV
+http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
+#EXTINF:-1 tvg-id="Zoo.ad@HD" tvg-logo="" group-title="Undefined",Zoo (720p)
+https://iptv-all.lanesh4d0w.repl.co/andorra/zoo
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/index.language.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/index.language.m3u
new file mode 100644
index 000000000..e9f88f8ac
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/index.language.m3u
@@ -0,0 +1,23 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="" group-title="Catalan",ATV
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv
+#EXTINF:-1 tvg-id="BBCNews.uk" tvg-logo="https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png" group-title="English",BBC News HD
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
+#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="Russian",ะะะะ ะขะ (1080p)
+http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
+#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
+#EXTVLCOPT:http-referrer=http://imn.iq
+#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
+#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="" group-title="Undefined",ATV HD
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
+#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined",Daawah TV
+http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
+#EXTINF:-1 tvg-id="DunaWorld.hu" tvg-logo="https://i.imgur.com/uOBQJZS.png" group-title="Undefined",Duna World (576i)
+http://146.59.85.40:89/dunaworld/index.m3u8
+#EXTINF:-1 tvg-id="MeteoMedia.ca" tvg-logo="https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png" group-title="Undefined",Meteomedia
+http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
+#EXTINF:-1 tvg-id="Zoo.ad@HD" tvg-logo="" group-title="Undefined",Zoo (720p)
+https://iptv-all.lanesh4d0w.repl.co/andorra/zoo
+#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Undefined",ะญะปะขะ (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/index.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/index.m3u
new file mode 100644
index 000000000..fbf8cd755
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/index.m3u
@@ -0,0 +1,23 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
+#EXTVLCOPT:http-referrer=http://imn.iq
+#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="" group-title="Undefined",ATV
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv
+#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="" group-title="Undefined",ATV HD
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
+#EXTINF:-1 tvg-id="BBCNews.uk" tvg-logo="https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png" group-title="General;News",BBC News HD
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
+#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined",Daawah TV
+http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
+#EXTINF:-1 tvg-id="DunaWorld.hu" tvg-logo="https://i.imgur.com/uOBQJZS.png" group-title="Undefined",Duna World (576i)
+http://146.59.85.40:89/dunaworld/index.m3u8
+#EXTINF:-1 tvg-id="MeteoMedia.ca" tvg-logo="https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png" group-title="Weather",Meteomedia
+http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
+#EXTINF:-1 tvg-id="Zoo.ad@HD" tvg-logo="" group-title="Undefined",Zoo (720p)
+https://iptv-all.lanesh4d0w.repl.co/andorra/zoo
+#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="General",ะะะะ ะขะ (1080p)
+http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
+#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="General",ะญะปะขะ (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/index.region.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/index.region.m3u
new file mode 100644
index 000000000..aa3534ff7
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/index.region.m3u
@@ -0,0 +1,43 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="MeteoMedia.ca" tvg-logo="https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png" group-title="Americas",Meteomedia
+http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
+#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="Asia",ะะะะ ะขะ (1080p)
+http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
+#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Asia",ะญะปะขะ (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
+#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Central Asia",ะญะปะขะ (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
+#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="Commonwealth of Independent States",ะะะะ ะขะ (1080p)
+http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
+#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Commonwealth of Independent States",ะญะปะขะ (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="" group-title="Europe",ATV
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv
+#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="Europe",ะะะะ ะขะ (1080p)
+http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
+#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Europe",ะญะปะขะ (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="" group-title="Europe, the Middle East and Africa",ATV
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv
+#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="Europe, the Middle East and Africa",ะะะะ ะขะ (1080p)
+http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
+#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Europe, the Middle East and Africa",ะญะปะขะ (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
+#EXTINF:-1 tvg-id="MeteoMedia.ca" tvg-logo="https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png" group-title="North America",Meteomedia
+http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
+#EXTINF:-1 tvg-id="MeteoMedia.ca" tvg-logo="https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png" group-title="Northern America",Meteomedia
+http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
+#EXTINF:-1 tvg-id="BBCNews.uk" tvg-logo="https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png" group-title="International",BBC News HD
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
+#EXTINF:-1 tvg-id="DunaWorld.hu" tvg-logo="https://i.imgur.com/uOBQJZS.png" group-title="International",Duna World (576i)
+http://146.59.85.40:89/dunaworld/index.m3u8
+#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
+#EXTVLCOPT:http-referrer=http://imn.iq
+#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
+#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="" group-title="Undefined",ATV HD
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
+#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined",Daawah TV
+http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
+#EXTINF:-1 tvg-id="Zoo.ad@HD" tvg-logo="" group-title="Undefined",Zoo (720p)
+https://iptv-all.lanesh4d0w.repl.co/andorra/zoo
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/languages/eng.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/languages/eng.m3u
new file mode 100644
index 000000000..85c75b78b
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/languages/eng.m3u
@@ -0,0 +1,3 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="BBCNews.uk" tvg-logo="https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png" group-title="General;News",BBC News HD
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/languages/rus.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/languages/rus.m3u
new file mode 100644
index 000000000..b701890a3
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/languages/rus.m3u
@@ -0,0 +1,3 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="General",ะะะะ ะขะ (1080p)
+http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/languages/undefined.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/languages/undefined.m3u
new file mode 100644
index 000000000..0eeed846f
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/languages/undefined.m3u
@@ -0,0 +1,17 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
+#EXTVLCOPT:http-referrer=http://imn.iq
+#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
+#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="" group-title="Undefined",ATV HD
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
+#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined",Daawah TV
+http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
+#EXTINF:-1 tvg-id="DunaWorld.hu" tvg-logo="https://i.imgur.com/uOBQJZS.png" group-title="Undefined",Duna World (576i)
+http://146.59.85.40:89/dunaworld/index.m3u8
+#EXTINF:-1 tvg-id="MeteoMedia.ca" tvg-logo="https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png" group-title="Weather",Meteomedia
+http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
+#EXTINF:-1 tvg-id="Zoo.ad@HD" tvg-logo="" group-title="Undefined",Zoo (720p)
+https://iptv-all.lanesh4d0w.repl.co/andorra/zoo
+#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="General",ะญะปะขะ (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/afr.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/afr.m3u
new file mode 100644
index 000000000..7452e53aa
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/afr.m3u
@@ -0,0 +1 @@
+#EXTM3U
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/amer.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/amer.m3u
new file mode 100644
index 000000000..03a6963a3
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/amer.m3u
@@ -0,0 +1,3 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="MeteoMedia.ca" tvg-logo="https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png" group-title="Weather",Meteomedia
+http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/apac.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/apac.m3u
new file mode 100644
index 000000000..7452e53aa
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/apac.m3u
@@ -0,0 +1 @@
+#EXTM3U
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/arab.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/arab.m3u
new file mode 100644
index 000000000..7452e53aa
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/arab.m3u
@@ -0,0 +1 @@
+#EXTM3U
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/asia.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/asia.m3u
new file mode 100644
index 000000000..1a2c778e0
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/asia.m3u
@@ -0,0 +1,5 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="General",ะะะะ ะขะ (1080p)
+http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
+#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="General",ะญะปะขะ (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/carib.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/carib.m3u
new file mode 100644
index 000000000..7452e53aa
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/carib.m3u
@@ -0,0 +1 @@
+#EXTM3U
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/cas.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/cas.m3u
new file mode 100644
index 000000000..847591ab0
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/cas.m3u
@@ -0,0 +1,3 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="General",ะญะปะขะ (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/cis.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/cis.m3u
new file mode 100644
index 000000000..1a2c778e0
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/cis.m3u
@@ -0,0 +1,5 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="General",ะะะะ ะขะ (1080p)
+http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
+#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="General",ะญะปะขะ (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/emea.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/emea.m3u
new file mode 100644
index 000000000..10fbb43f9
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/emea.m3u
@@ -0,0 +1,7 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="" group-title="Undefined",ATV
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv
+#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="General",ะะะะ ะขะ (1080p)
+http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
+#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="General",ะญะปะขะ (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/eur.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/eur.m3u
new file mode 100644
index 000000000..10fbb43f9
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/eur.m3u
@@ -0,0 +1,7 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="" group-title="Undefined",ATV
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv
+#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="General",ะะะะ ะขะ (1080p)
+http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
+#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="General",ะญะปะขะ (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/hispam.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/hispam.m3u
new file mode 100644
index 000000000..7452e53aa
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/hispam.m3u
@@ -0,0 +1 @@
+#EXTM3U
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/int.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/int.m3u
new file mode 100644
index 000000000..15240af7d
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/int.m3u
@@ -0,0 +1,5 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="BBCNews.uk" tvg-logo="https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png" group-title="General;News",BBC News HD
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
+#EXTINF:-1 tvg-id="DunaWorld.hu" tvg-logo="https://i.imgur.com/uOBQJZS.png" group-title="Undefined",Duna World (576i)
+http://146.59.85.40:89/dunaworld/index.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/lac.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/lac.m3u
new file mode 100644
index 000000000..7452e53aa
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/lac.m3u
@@ -0,0 +1 @@
+#EXTM3U
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/latam.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/latam.m3u
new file mode 100644
index 000000000..7452e53aa
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/latam.m3u
@@ -0,0 +1 @@
+#EXTM3U
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/maghreb.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/maghreb.m3u
new file mode 100644
index 000000000..7452e53aa
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/maghreb.m3u
@@ -0,0 +1 @@
+#EXTM3U
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/mena.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/mena.m3u
new file mode 100644
index 000000000..7452e53aa
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/mena.m3u
@@ -0,0 +1 @@
+#EXTM3U
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/mideast.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/mideast.m3u
new file mode 100644
index 000000000..7452e53aa
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/mideast.m3u
@@ -0,0 +1 @@
+#EXTM3U
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/nam.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/nam.m3u
new file mode 100644
index 000000000..03a6963a3
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/nam.m3u
@@ -0,0 +1,3 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="MeteoMedia.ca" tvg-logo="https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png" group-title="Weather",Meteomedia
+http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/noram.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/noram.m3u
new file mode 100644
index 000000000..03a6963a3
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/noram.m3u
@@ -0,0 +1,3 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="MeteoMedia.ca" tvg-logo="https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png" group-title="Weather",Meteomedia
+http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/nord.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/nord.m3u
new file mode 100644
index 000000000..7452e53aa
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/nord.m3u
@@ -0,0 +1 @@
+#EXTM3U
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/oce.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/oce.m3u
new file mode 100644
index 000000000..7452e53aa
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/oce.m3u
@@ -0,0 +1 @@
+#EXTM3U
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/sas.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/sas.m3u
new file mode 100644
index 000000000..7452e53aa
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/sas.m3u
@@ -0,0 +1 @@
+#EXTM3U
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/ssa.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/ssa.m3u
new file mode 100644
index 000000000..7452e53aa
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/ssa.m3u
@@ -0,0 +1 @@
+#EXTM3U
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/undefined.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/undefined.m3u
new file mode 100644
index 000000000..eb0364cd5
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/undefined.m3u
@@ -0,0 +1,11 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
+#EXTVLCOPT:http-referrer=http://imn.iq
+#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
+#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="" group-title="Undefined",ATV HD
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
+#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined",Daawah TV
+http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
+#EXTINF:-1 tvg-id="Zoo.ad@HD" tvg-logo="" group-title="Undefined",Zoo (720p)
+https://iptv-all.lanesh4d0w.repl.co/andorra/zoo
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/wafr.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/wafr.m3u
new file mode 100644
index 000000000..7452e53aa
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/wafr.m3u
@@ -0,0 +1 @@
+#EXTM3U
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/subdivisions/ca-on.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/subdivisions/ca-on.m3u
new file mode 100644
index 000000000..03a6963a3
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/subdivisions/ca-on.m3u
@@ -0,0 +1,3 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="MeteoMedia.ca" tvg-logo="https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png" group-title="Weather",Meteomedia
+http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
diff --git a/tests/__data__/expected/playlist_update/cy.m3u b/tests/__data__/expected/playlist_update/cy.m3u
index 987825ca1..13482713e 100644
--- a/tests/__data__/expected/playlist_update/cy.m3u
+++ b/tests/__data__/expected/playlist_update/cy.m3u
@@ -1,3 +1,3 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="AdaTV.cy",AdaTV
-https://ythls.onrender.com/channel/UC40TUSUx490U5uR1lZt3Ajg.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="AdaTV.cy",AdaTV
+https://ythls.onrender.com/channel/UC40TUSUx490U5uR1lZt3Ajg.m3u8
diff --git a/tests/__data__/expected/playlist_update/fr.m3u b/tests/__data__/expected/playlist_update/fr.m3u
index 82856b338..f4f93afdc 100644
--- a/tests/__data__/expected/playlist_update/fr.m3u
+++ b/tests/__data__/expected/playlist_update/fr.m3u
@@ -1,5 +1,5 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="TFX.fr" http-referrer="https://pkpakiplay.xyz/" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1",TFX
-#EXTVLCOPT:http-referrer=https://pkpakiplay.xyz/
-#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1
-https://stitcher-ipv4.pluto.tv/v1/stitch/embed/hls/channel/64c109a4798def0008a6e03e/master.m3u8?advertisingId={PSID}&appVersion=unknown&deviceDNT={TARGETOPT}&deviceId={PSID}&deviceLat=0&deviceLon=0&deviceMake=samsung&deviceModel=samsung&deviceType=samsung-tvplus&deviceVersion=unknown&embedPartner=samsung-tvplus&profileFloor=&profileLimit=&samsung_app_domain={APP_DOMAIN}&samsung_app_name={APP_NAME}&us_privacy=1YNY
+#EXTM3U
+#EXTINF:-1 tvg-id="TFX.fr" http-referrer="https://pkpakiplay.xyz/" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1",TFX
+#EXTVLCOPT:http-referrer=https://pkpakiplay.xyz/
+#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1
+https://stitcher-ipv4.pluto.tv/v1/stitch/embed/hls/channel/64c109a4798def0008a6e03e/master.m3u8?advertisingId={PSID}&appVersion=unknown&deviceDNT={TARGETOPT}&deviceId={PSID}&deviceLat=0&deviceLon=0&deviceMake=samsung&deviceModel=samsung&deviceType=samsung-tvplus&deviceVersion=unknown&embedPartner=samsung-tvplus&profileFloor=&profileLimit=&samsung_app_domain={APP_DOMAIN}&samsung_app_name={APP_NAME}&us_privacy=1YNY
diff --git a/tests/__data__/expected/playlist_update/uk.m3u b/tests/__data__/expected/playlist_update/uk.m3u
index 6ebfc71cd..a60ea6210 100644
--- a/tests/__data__/expected/playlist_update/uk.m3u
+++ b/tests/__data__/expected/playlist_update/uk.m3u
@@ -1,7 +1,7 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD (720p) [Not 24/7]
-http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
-#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD (480p) [Geo-blocked]
-http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/playlist.m3u8
-#EXTINF:-1 tvg-id="BeanoTV.uk",Beano TV
-https://a5b4bacecd47433dad06d3189fc7422e.mediatailor.us-east-1.amazonaws.com/v1/manifest/04fd913bb278d8775298c26fdca9d9841f37601f/RakutenTV-eu_BeanoTV/b1f233d5-847c-437d-aa4f-f73e67a85323/2.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD (720p) [Not 24/7]
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
+#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD (480p) [Geo-blocked]
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/playlist.m3u8
+#EXTINF:-1 tvg-id="BeanoTV.uk",Beano TV
+https://a5b4bacecd47433dad06d3189fc7422e.mediatailor.us-east-1.amazonaws.com/v1/manifest/04fd913bb278d8775298c26fdca9d9841f37601f/RakutenTV-eu_BeanoTV/b1f233d5-847c-437d-aa4f-f73e67a85323/2.m3u8
diff --git a/tests/__data__/expected/playlist_update/us.m3u b/tests/__data__/expected/playlist_update/us.m3u
index 5271483e5..80ce51958 100644
--- a/tests/__data__/expected/playlist_update/us.m3u
+++ b/tests/__data__/expected/playlist_update/us.m3u
@@ -1,6 +1,6 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="BBCAmerica.us@East" http-user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246",BBC America East (720p)
-#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246
-https://servilive.com:3126/live/tele2000live.m3u8
-#EXTINF:-1 tvg-id="FastTV.us",Fast TV
-https://3fa797d5.wurl.com/manifest/f36d25e7e52f1ba8d7e56eb859c636563214f541/T05PX01vdG9yVHJlbmRGYXN0VFZfSExT/b5e5e0e2-12b3-4312-93c9-c0a7c50b41ca/4.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="BBCAmerica.us@East" http-user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246",BBC America East (720p)
+#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246
+https://servilive.com:3126/live/tele2000live.m3u8
+#EXTINF:-1 tvg-id="FastTV.us",Fast TV
+https://3fa797d5.wurl.com/manifest/f36d25e7e52f1ba8d7e56eb859c636563214f541/T05PX01vdG9yVHJlbmRGYXN0VFZfSExT/b5e5e0e2-12b3-4312-93c9-c0a7c50b41ca/4.m3u8
diff --git a/tests/__data__/expected/readme_update/_readme.md b/tests/__data__/expected/readme_update/_readme.md
index 9fc78acc2..67b094c3d 100644
--- a/tests/__data__/expected/readme_update/_readme.md
+++ b/tests/__data__/expected/readme_update/_readme.md
@@ -1,257 +1,257 @@
-# IPTV [](https://github.com/iptv-org/iptv/actions/workflows/update.yml)
-
-Collection of publicly available IPTV (Internet Protocol television) channels from all over the world.
-
-## Table of contents
-
-- ๐ [How to use?](#how-to-use)
-- ๐บ [Playlists](#playlists)
-- ๐ [Database](#database)
-- ๐จโ๐ป [API](#api)
-- ๐ [Resources](#resources)
-- ๐ฌ [Discussions](#discussions)
-- โ [FAQ](#faq)
-- ๐ [Contribution](#contribution)
-- โ [Legal](#legal)
-- ยฉ [License](#license)
-
-## How to use?
-
-Simply insert one of the links below into [any video player](https://github.com/iptv-org/awesome-iptv#apps) that supports live streaming and press _Open_.
-
-
-
-## Playlists
-
-There are several versions of playlists that differ in the way they are grouped.
-
-### Main playlist
-
-Playlist includes all known channels except adult channels.
-
-```
-https://iptv-org.github.io/iptv/index.m3u
-```
-
-And here is the full version:
-
-```
-https://iptv-org.github.io/iptv/index.nsfw.m3u
-```
-
-### Grouped by category
-
-
-Expand
-
-
-Playlist in which each channel has its _category_ as a group title:
-
-```
-https://iptv-org.github.io/iptv/index.category.m3u
-```
-
-Same thing, but split up into separate files:
-
-
-
-
- | Category | Channels | Playlist |
-
-
- | Animation | 0 | https://iptv-org.github.io/iptv/categories/animation.m3u |
- | Auto | 0 | https://iptv-org.github.io/iptv/categories/auto.m3u |
- | Business | 0 | https://iptv-org.github.io/iptv/categories/business.m3u |
- | Classic | 0 | https://iptv-org.github.io/iptv/categories/classic.m3u |
- | Comedy | 0 | https://iptv-org.github.io/iptv/categories/comedy.m3u |
- | Cooking | 0 | https://iptv-org.github.io/iptv/categories/cooking.m3u |
- | Culture | 0 | https://iptv-org.github.io/iptv/categories/culture.m3u |
- | Documentary | 0 | https://iptv-org.github.io/iptv/categories/documentary.m3u |
- | Education | 0 | https://iptv-org.github.io/iptv/categories/education.m3u |
- | Entertainment | 0 | https://iptv-org.github.io/iptv/categories/entertainment.m3u |
- | Family | 0 | https://iptv-org.github.io/iptv/categories/family.m3u |
- | General | 2 | https://iptv-org.github.io/iptv/categories/general.m3u |
- | Kids | 0 | https://iptv-org.github.io/iptv/categories/kids.m3u |
- | Legislative | 0 | https://iptv-org.github.io/iptv/categories/legislative.m3u |
- | Lifestyle | 0 | https://iptv-org.github.io/iptv/categories/lifestyle.m3u |
- | Movies | 0 | https://iptv-org.github.io/iptv/categories/movies.m3u |
- | Music | 0 | https://iptv-org.github.io/iptv/categories/music.m3u |
- | News | 1 | https://iptv-org.github.io/iptv/categories/news.m3u |
- | Outdoor | 0 | https://iptv-org.github.io/iptv/categories/outdoor.m3u |
- | Relax | 0 | https://iptv-org.github.io/iptv/categories/relax.m3u |
- | Religious | 0 | https://iptv-org.github.io/iptv/categories/religious.m3u |
- | Science | 0 | https://iptv-org.github.io/iptv/categories/science.m3u |
- | Series | 0 | https://iptv-org.github.io/iptv/categories/series.m3u |
- | Shop | 0 | https://iptv-org.github.io/iptv/categories/shop.m3u |
- | Sports | 0 | https://iptv-org.github.io/iptv/categories/sports.m3u |
- | Travel | 0 | https://iptv-org.github.io/iptv/categories/travel.m3u |
- | Weather | 1 | https://iptv-org.github.io/iptv/categories/weather.m3u |
- | XXX | 1 | https://iptv-org.github.io/iptv/categories/xxx.m3u |
- | Undefined | 3 | https://iptv-org.github.io/iptv/categories/undefined.m3u |
-
-
-
-
-
-### Grouped by language
-
-
-Expand
-
-
-Playlist in which each channel has its _language_ as a group title:
-
-```
-https://iptv-org.github.io/iptv/index.language.m3u
-```
-
-Same thing, but split up into separate files:
-
-
-
-
- | Language | Channels | Playlist |
-
-
- | Catalan | 1 | https://iptv-org.github.io/iptv/languages/cat.m3u |
- | English | 1 | https://iptv-org.github.io/iptv/languages/eng.m3u |
- | French | 1 | https://iptv-org.github.io/iptv/languages/fra.m3u |
- | Russian | 1 | https://iptv-org.github.io/iptv/languages/rus.m3u |
- | Undefined | 2 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
-
-
-
-
-
-### Grouped by country
-
-
-Expand
-
-
-Playlist in which each channel has its _country_ as a group title:
-
-```
-https://iptv-org.github.io/iptv/index.country.m3u
-```
-
-Same thing, but split up into separate files:
-
-
-
-
- | Country | Channels | Playlist |
-
-
- | ๐จ๐ฒ Cameroon | 1 | https://iptv-org.github.io/iptv/countries/cm.m3u |
- | ๐จ๐ฆ Canada | 2 | https://iptv-org.github.io/iptv/countries/ca.m3u |
- | Ontario | 1 | https://iptv-org.github.io/iptv/subdivisions/ca-on.m3u |
- | ๐จ๐ป Cape Verde | 1 | https://iptv-org.github.io/iptv/countries/cv.m3u |
- | ๐จ๐ฌ Republic of the Congo | 1 | https://iptv-org.github.io/iptv/countries/cg.m3u |
- | ๐ท๐ช Rรฉunion | 1 | https://iptv-org.github.io/iptv/countries/re.m3u |
- | ๐ท๐ด Romania | 1 | https://iptv-org.github.io/iptv/countries/ro.m3u |
- | ๐ท๐บ Russia | 2 | https://iptv-org.github.io/iptv/countries/ru.m3u |
- | ๐ท๐ผ Rwanda | 1 | https://iptv-org.github.io/iptv/countries/rw.m3u |
- | ๐ง๐ฑ Saint Barthรฉlemy | 1 | https://iptv-org.github.io/iptv/countries/bl.m3u |
- | ๐ธ๐ญ Saint Helena | 1 | https://iptv-org.github.io/iptv/countries/sh.m3u |
- | ๐ฐ๐ณ Saint Kitts and Nevis | 1 | https://iptv-org.github.io/iptv/countries/kn.m3u |
- | Undefined | 2 | https://iptv-org.github.io/iptv/countries/undefined.m3u |
-
-
-
-
-
-### Grouped by region
-
-
-Expand
-
-
-Playlist in which each channel has its _region_ as a group title:
-
-```
-https://iptv-org.github.io/iptv/index.region.m3u
-```
-
-Same thing, but split up into separate files:
-
-
-
-
- | Region | Channels | Playlist |
-
-
- | Africa | 0 | https://iptv-org.github.io/iptv/regions/afr.m3u |
- | Americas | 1 | https://iptv-org.github.io/iptv/regions/amer.m3u |
- | Arab world | 0 | https://iptv-org.github.io/iptv/regions/arab.m3u |
- | Asia | 2 | https://iptv-org.github.io/iptv/regions/asia.m3u |
- | Asia-Pacific | 1 | https://iptv-org.github.io/iptv/regions/apac.m3u |
- | Association of Southeast Asian Nations | 0 | https://iptv-org.github.io/iptv/regions/asean.m3u |
- | Caribbean | 0 | https://iptv-org.github.io/iptv/regions/carib.m3u |
- | Central America | 0 | https://iptv-org.github.io/iptv/regions/cenamer.m3u |
- | Central Asia | 0 | https://iptv-org.github.io/iptv/regions/cas.m3u |
- | Commonwealth of Independent States | 1 | https://iptv-org.github.io/iptv/regions/cis.m3u |
- | Europe | 3 | https://iptv-org.github.io/iptv/regions/eur.m3u |
- | Europe, the Middle East and Africa | 3 | https://iptv-org.github.io/iptv/regions/emea.m3u |
- | Hispanic America | 0 | https://iptv-org.github.io/iptv/regions/hispam.m3u |
- | Latin America | 0 | https://iptv-org.github.io/iptv/regions/latam.m3u |
- | Latin America and the Caribbean | 0 | https://iptv-org.github.io/iptv/regions/lac.m3u |
- | Maghreb | 0 | https://iptv-org.github.io/iptv/regions/maghreb.m3u |
- | Middle East | 0 | https://iptv-org.github.io/iptv/regions/mideast.m3u |
- | Middle East and North Africa | 0 | https://iptv-org.github.io/iptv/regions/mena.m3u |
- | Nordics | 0 | https://iptv-org.github.io/iptv/regions/nord.m3u |
- | North America | 1 | https://iptv-org.github.io/iptv/regions/noram.m3u |
- | Northern America | 1 | https://iptv-org.github.io/iptv/regions/nam.m3u |
- | Oceania | 0 | https://iptv-org.github.io/iptv/regions/oce.m3u |
- | South America | 0 | https://iptv-org.github.io/iptv/regions/southam.m3u |
- | South Asia | 1 | https://iptv-org.github.io/iptv/regions/sas.m3u |
- | Sub-Saharan Africa | 0 | https://iptv-org.github.io/iptv/regions/ssa.m3u |
- | West Africa | 0 | https://iptv-org.github.io/iptv/regions/wafr.m3u |
- | Worldwide | 1 | https://iptv-org.github.io/iptv/regions/int.m3u |
- | Undefined | 2 | https://iptv-org.github.io/iptv/regions/undefined.m3u |
-
-
-
-
-
-## Database
-
-All channel data is taken from the [iptv-org/database](https://github.com/iptv-org/database) repository. If you find any errors please open a new [issue](https://github.com/iptv-org/database/issues) there.
-
-## API
-
-The API documentation can be found in the [iptv-org/api](https://github.com/iptv-org/api) repository.
-
-## Resources
-
-Links to other useful IPTV-related resources can be found in the [iptv-org/awesome-iptv](https://github.com/iptv-org/awesome-iptv) repository.
-
-## Discussions
-
-If you need help finding a channel, have a question or idea, welcome to the [Discussions](https://github.com/orgs/iptv-org/discussions).
-
-## FAQ
-
-The answers to the most popular questions can be found in the [FAQ.md](FAQ.md) file.
-
-## Contribution
-
-Please make sure to read the [Contributing Guide](CONTRIBUTING.md) before sending an issue or making a pull request.
-
-And thank you to everyone who has already contributed!
-
-### Backers
-
-
-
-### Contributors
-
-
-
-## Legal
-
-No video files are stored in this repository. The repository simply contains user-submitted links to publicly available video stream URLs, which to the best of our knowledge have been intentionally made publicly by the copyright holders. If any links in these playlists infringe on your rights as a copyright holder, they may be removed by sending a [pull request](https://github.com/iptv-org/iptv/pulls) or opening an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=freearhey&labels=removal+request&template=--removal-request.yml&title=Remove%3A+). However, note that we have **no control** over the destination of the link, and just removing the link from the playlist will not remove its contents from the web. Note that linking does not directly infringe copyright because no copy is made on the site providing the link, and thus this is **not** a valid reason to send a DMCA notice to GitHub. To remove this content from the web, you should contact the web host that's actually hosting the content (**not** GitHub, nor the maintainers of this repository).
-
-## License
-
-[](LICENSE)
+# IPTV [](https://github.com/iptv-org/iptv/actions/workflows/update.yml)
+
+Collection of publicly available IPTV (Internet Protocol television) channels from all over the world.
+
+## Table of contents
+
+- ๐ [How to use?](#how-to-use)
+- ๐บ [Playlists](#playlists)
+- ๐ [Database](#database)
+- ๐จโ๐ป [API](#api)
+- ๐ [Resources](#resources)
+- ๐ฌ [Discussions](#discussions)
+- โ [FAQ](#faq)
+- ๐ [Contribution](#contribution)
+- โ [Legal](#legal)
+- ยฉ [License](#license)
+
+## How to use?
+
+Simply insert one of the links below into [any video player](https://github.com/iptv-org/awesome-iptv#apps) that supports live streaming and press _Open_.
+
+
+
+## Playlists
+
+There are several versions of playlists that differ in the way they are grouped.
+
+### Main playlist
+
+Playlist includes all known channels except adult channels.
+
+```
+https://iptv-org.github.io/iptv/index.m3u
+```
+
+And here is the full version:
+
+```
+https://iptv-org.github.io/iptv/index.nsfw.m3u
+```
+
+### Grouped by category
+
+
+Expand
+
+
+Playlist in which each channel has its _category_ as a group title:
+
+```
+https://iptv-org.github.io/iptv/index.category.m3u
+```
+
+Same thing, but split up into separate files:
+
+
+
+
+ | Category | Channels | Playlist |
+
+
+ | Animation | 0 | https://iptv-org.github.io/iptv/categories/animation.m3u |
+ | Auto | 0 | https://iptv-org.github.io/iptv/categories/auto.m3u |
+ | Business | 0 | https://iptv-org.github.io/iptv/categories/business.m3u |
+ | Classic | 0 | https://iptv-org.github.io/iptv/categories/classic.m3u |
+ | Comedy | 0 | https://iptv-org.github.io/iptv/categories/comedy.m3u |
+ | Cooking | 0 | https://iptv-org.github.io/iptv/categories/cooking.m3u |
+ | Culture | 0 | https://iptv-org.github.io/iptv/categories/culture.m3u |
+ | Documentary | 0 | https://iptv-org.github.io/iptv/categories/documentary.m3u |
+ | Education | 0 | https://iptv-org.github.io/iptv/categories/education.m3u |
+ | Entertainment | 0 | https://iptv-org.github.io/iptv/categories/entertainment.m3u |
+ | Family | 0 | https://iptv-org.github.io/iptv/categories/family.m3u |
+ | General | 2 | https://iptv-org.github.io/iptv/categories/general.m3u |
+ | Kids | 0 | https://iptv-org.github.io/iptv/categories/kids.m3u |
+ | Legislative | 0 | https://iptv-org.github.io/iptv/categories/legislative.m3u |
+ | Lifestyle | 0 | https://iptv-org.github.io/iptv/categories/lifestyle.m3u |
+ | Movies | 0 | https://iptv-org.github.io/iptv/categories/movies.m3u |
+ | Music | 0 | https://iptv-org.github.io/iptv/categories/music.m3u |
+ | News | 1 | https://iptv-org.github.io/iptv/categories/news.m3u |
+ | Outdoor | 0 | https://iptv-org.github.io/iptv/categories/outdoor.m3u |
+ | Relax | 0 | https://iptv-org.github.io/iptv/categories/relax.m3u |
+ | Religious | 0 | https://iptv-org.github.io/iptv/categories/religious.m3u |
+ | Science | 0 | https://iptv-org.github.io/iptv/categories/science.m3u |
+ | Series | 0 | https://iptv-org.github.io/iptv/categories/series.m3u |
+ | Shop | 0 | https://iptv-org.github.io/iptv/categories/shop.m3u |
+ | Sports | 0 | https://iptv-org.github.io/iptv/categories/sports.m3u |
+ | Travel | 0 | https://iptv-org.github.io/iptv/categories/travel.m3u |
+ | Weather | 1 | https://iptv-org.github.io/iptv/categories/weather.m3u |
+ | XXX | 1 | https://iptv-org.github.io/iptv/categories/xxx.m3u |
+ | Undefined | 3 | https://iptv-org.github.io/iptv/categories/undefined.m3u |
+
+
+
+
+
+### Grouped by language
+
+
+Expand
+
+
+Playlist in which each channel has its _language_ as a group title:
+
+```
+https://iptv-org.github.io/iptv/index.language.m3u
+```
+
+Same thing, but split up into separate files:
+
+
+
+
+ | Language | Channels | Playlist |
+
+
+ | Catalan | 1 | https://iptv-org.github.io/iptv/languages/cat.m3u |
+ | English | 1 | https://iptv-org.github.io/iptv/languages/eng.m3u |
+ | French | 1 | https://iptv-org.github.io/iptv/languages/fra.m3u |
+ | Russian | 1 | https://iptv-org.github.io/iptv/languages/rus.m3u |
+ | Undefined | 2 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
+
+
+
+
+
+### Grouped by country
+
+
+Expand
+
+
+Playlist in which each channel has its _country_ as a group title:
+
+```
+https://iptv-org.github.io/iptv/index.country.m3u
+```
+
+Same thing, but split up into separate files:
+
+
+
+
+ | Country | Channels | Playlist |
+
+
+ | ๐จ๐ฒ Cameroon | 1 | https://iptv-org.github.io/iptv/countries/cm.m3u |
+ | ๐จ๐ฆ Canada | 2 | https://iptv-org.github.io/iptv/countries/ca.m3u |
+ | Ontario | 1 | https://iptv-org.github.io/iptv/subdivisions/ca-on.m3u |
+ | ๐จ๐ป Cape Verde | 1 | https://iptv-org.github.io/iptv/countries/cv.m3u |
+ | ๐จ๐ฌ Republic of the Congo | 1 | https://iptv-org.github.io/iptv/countries/cg.m3u |
+ | ๐ท๐ช Rรฉunion | 1 | https://iptv-org.github.io/iptv/countries/re.m3u |
+ | ๐ท๐ด Romania | 1 | https://iptv-org.github.io/iptv/countries/ro.m3u |
+ | ๐ท๐บ Russia | 2 | https://iptv-org.github.io/iptv/countries/ru.m3u |
+ | ๐ท๐ผ Rwanda | 1 | https://iptv-org.github.io/iptv/countries/rw.m3u |
+ | ๐ง๐ฑ Saint Barthรฉlemy | 1 | https://iptv-org.github.io/iptv/countries/bl.m3u |
+ | ๐ธ๐ญ Saint Helena | 1 | https://iptv-org.github.io/iptv/countries/sh.m3u |
+ | ๐ฐ๐ณ Saint Kitts and Nevis | 1 | https://iptv-org.github.io/iptv/countries/kn.m3u |
+ | Undefined | 2 | https://iptv-org.github.io/iptv/countries/undefined.m3u |
+
+
+
+
+
+### Grouped by region
+
+
+Expand
+
+
+Playlist in which each channel has its _region_ as a group title:
+
+```
+https://iptv-org.github.io/iptv/index.region.m3u
+```
+
+Same thing, but split up into separate files:
+
+
+
+
+ | Region | Channels | Playlist |
+
+
+ | Africa | 0 | https://iptv-org.github.io/iptv/regions/afr.m3u |
+ | Americas | 1 | https://iptv-org.github.io/iptv/regions/amer.m3u |
+ | Arab world | 0 | https://iptv-org.github.io/iptv/regions/arab.m3u |
+ | Asia | 2 | https://iptv-org.github.io/iptv/regions/asia.m3u |
+ | Asia-Pacific | 1 | https://iptv-org.github.io/iptv/regions/apac.m3u |
+ | Association of Southeast Asian Nations | 0 | https://iptv-org.github.io/iptv/regions/asean.m3u |
+ | Caribbean | 0 | https://iptv-org.github.io/iptv/regions/carib.m3u |
+ | Central America | 0 | https://iptv-org.github.io/iptv/regions/cenamer.m3u |
+ | Central Asia | 0 | https://iptv-org.github.io/iptv/regions/cas.m3u |
+ | Commonwealth of Independent States | 1 | https://iptv-org.github.io/iptv/regions/cis.m3u |
+ | Europe | 3 | https://iptv-org.github.io/iptv/regions/eur.m3u |
+ | Europe, the Middle East and Africa | 3 | https://iptv-org.github.io/iptv/regions/emea.m3u |
+ | Hispanic America | 0 | https://iptv-org.github.io/iptv/regions/hispam.m3u |
+ | Latin America | 0 | https://iptv-org.github.io/iptv/regions/latam.m3u |
+ | Latin America and the Caribbean | 0 | https://iptv-org.github.io/iptv/regions/lac.m3u |
+ | Maghreb | 0 | https://iptv-org.github.io/iptv/regions/maghreb.m3u |
+ | Middle East | 0 | https://iptv-org.github.io/iptv/regions/mideast.m3u |
+ | Middle East and North Africa | 0 | https://iptv-org.github.io/iptv/regions/mena.m3u |
+ | Nordics | 0 | https://iptv-org.github.io/iptv/regions/nord.m3u |
+ | North America | 1 | https://iptv-org.github.io/iptv/regions/noram.m3u |
+ | Northern America | 1 | https://iptv-org.github.io/iptv/regions/nam.m3u |
+ | Oceania | 0 | https://iptv-org.github.io/iptv/regions/oce.m3u |
+ | South America | 0 | https://iptv-org.github.io/iptv/regions/southam.m3u |
+ | South Asia | 1 | https://iptv-org.github.io/iptv/regions/sas.m3u |
+ | Sub-Saharan Africa | 0 | https://iptv-org.github.io/iptv/regions/ssa.m3u |
+ | West Africa | 0 | https://iptv-org.github.io/iptv/regions/wafr.m3u |
+ | Worldwide | 1 | https://iptv-org.github.io/iptv/regions/int.m3u |
+ | Undefined | 2 | https://iptv-org.github.io/iptv/regions/undefined.m3u |
+
+
+
+
+
+## Database
+
+All channel data is taken from the [iptv-org/database](https://github.com/iptv-org/database) repository. If you find any errors please open a new [issue](https://github.com/iptv-org/database/issues) there.
+
+## API
+
+The API documentation can be found in the [iptv-org/api](https://github.com/iptv-org/api) repository.
+
+## Resources
+
+Links to other useful IPTV-related resources can be found in the [iptv-org/awesome-iptv](https://github.com/iptv-org/awesome-iptv) repository.
+
+## Discussions
+
+If you need help finding a channel, have a question or idea, welcome to the [Discussions](https://github.com/orgs/iptv-org/discussions).
+
+## FAQ
+
+The answers to the most popular questions can be found in the [FAQ.md](FAQ.md) file.
+
+## Contribution
+
+Please make sure to read the [Contributing Guide](CONTRIBUTING.md) before sending an issue or making a pull request.
+
+And thank you to everyone who has already contributed!
+
+### Backers
+
+
+
+### Contributors
+
+
+
+## Legal
+
+No video files are stored in this repository. The repository simply contains user-submitted links to publicly available video stream URLs, which to the best of our knowledge have been intentionally made publicly by the copyright holders. If any links in these playlists infringe on your rights as a copyright holder, they may be removed by sending a [pull request](https://github.com/iptv-org/iptv/pulls) or opening an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=freearhey&labels=removal+request&template=--removal-request.yml&title=Remove%3A+). However, note that we have **no control** over the destination of the link, and just removing the link from the playlist will not remove its contents from the web. Note that linking does not directly infringe copyright because no copy is made on the site providing the link, and thus this is **not** a valid reason to send a DMCA notice to GitHub. To remove this content from the web, you should contact the web host that's actually hosting the content (**not** GitHub, nor the maintainers of this repository).
+
+## License
+
+[](LICENSE)
diff --git a/tests/__data__/input/api_generate/ad.m3u b/tests/__data__/input/api_generate/ad.m3u
index 64a1dc0cf..9d8926e0e 100644
--- a/tests/__data__/input/api_generate/ad.m3u
+++ b/tests/__data__/input/api_generate/ad.m3u
@@ -1,5 +1,5 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="Zoo.ad",Zoo (720p)
-https://iptv-all.lanesh4d0w.repl.co/andorra/zoo
-#EXTINF:-1 tvg-id="AndorraTV.ad@SD",ATV
-https://iptv-all.lanesh4d0w.repl.co/andorra/atv
+#EXTM3U
+#EXTINF:-1 tvg-id="Zoo.ad",Zoo (720p)
+https://iptv-all.lanesh4d0w.repl.co/andorra/zoo
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD",ATV
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv
diff --git a/tests/__data__/input/api_generate/ca.m3u b/tests/__data__/input/api_generate/ca.m3u
index 9c198b682..672601d7f 100644
--- a/tests/__data__/input/api_generate/ca.m3u
+++ b/tests/__data__/input/api_generate/ca.m3u
@@ -1,3 +1,3 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="MeteoMedia.ca",Meteomedia
-http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="MeteoMedia.ca",Meteomedia
+http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
diff --git a/tests/__data__/input/api_generate/in.m3u b/tests/__data__/input/api_generate/in.m3u
index 62594eb4b..c375e17ac 100644
--- a/tests/__data__/input/api_generate/in.m3u
+++ b/tests/__data__/input/api_generate/in.m3u
@@ -1,3 +1,3 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="",Daawah TV
-http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="",Daawah TV
+http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
diff --git a/tests/__data__/input/api_generate/uk.m3u b/tests/__data__/input/api_generate/uk.m3u
index 5e8c7318e..4a8a1f64a 100644
--- a/tests/__data__/input/api_generate/uk.m3u
+++ b/tests/__data__/input/api_generate/uk.m3u
@@ -1,3 +1,3 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD
-http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
diff --git a/tests/__data__/input/api_generate/unsorted.m3u b/tests/__data__/input/api_generate/unsorted.m3u
index 1a9c40b9f..96f9299e2 100644
--- a/tests/__data__/input/api_generate/unsorted.m3u
+++ b/tests/__data__/input/api_generate/unsorted.m3u
@@ -1,9 +1,9 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="LDPRTV.ru",ะะะะ ะขะ (1080p)
-http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
-#EXTINF:-1 tvg-id="VisitXTV.nl",Visit-X TV
-https://stream.visit-x.tv/vxtv/ngrp:live_all/30fps.m3u8
-#EXTINF:-1 tvg-id="" user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
-#EXTVLCOPT:http-referrer=http://imn.iq
-#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
-http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="LDPRTV.ru",ะะะะ ะขะ (1080p)
+http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
+#EXTINF:-1 tvg-id="VisitXTV.nl",Visit-X TV
+https://stream.visit-x.tv/vxtv/ngrp:live_all/30fps.m3u8
+#EXTINF:-1 tvg-id="" user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
+#EXTVLCOPT:http-referrer=http://imn.iq
+#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
diff --git a/tests/__data__/input/playlist_edit/playlist.m3u b/tests/__data__/input/playlist_edit/playlist.m3u
index 2ebf1ffa7..0abd41b6f 100644
--- a/tests/__data__/input/playlist_edit/playlist.m3u
+++ b/tests/__data__/input/playlist_edit/playlist.m3u
@@ -1,5 +1,5 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="HewadTV.af",Hewad TV (720p) [Not 24/7]
-http://51.210.199.58/hls/stream.m3u8
-#EXTINF:-1 tvg-id="",Tรฉlรฉvision franรงaise 1 (480p)
+#EXTM3U
+#EXTINF:-1 tvg-id="HewadTV.af",Hewad TV (720p) [Not 24/7]
+http://51.210.199.58/hls/stream.m3u8
+#EXTINF:-1 tvg-id="",Tรฉlรฉvision franรงaise 1 (480p)
https://live.relentlessinnovations.net:1936/imantv/imantv/playlist.m3u8
\ No newline at end of file
diff --git a/tests/__data__/input/playlist_format/in.m3u b/tests/__data__/input/playlist_format/in.m3u
index 47c77da2e..3d0bcd359 100644
--- a/tests/__data__/input/playlist_format/in.m3u
+++ b/tests/__data__/input/playlist_format/in.m3u
@@ -1,3 +1,3 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="mn.in",Manorama News -2 [U3] (480p) [Geo-blocked] [Not 24/7]
-https://ythls.onrender.com/channel/UCP0uG-mcMImgKnJz-VjJZmQ.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="mn.in",Manorama News -2 [U3] (480p) [Geo-blocked] [Not 24/7]
+https://ythls.onrender.com/channel/UCP0uG-mcMImgKnJz-VjJZmQ.m3u8
diff --git a/tests/__data__/input/playlist_format/nl.m3u b/tests/__data__/input/playlist_format/nl.m3u
index 5fdeaea52..39d56a3ef 100644
--- a/tests/__data__/input/playlist_format/nl.m3u
+++ b/tests/__data__/input/playlist_format/nl.m3u
@@ -1,13 +1,13 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="NPO2.nl",NPO 2 (302p) [Geo-blocked]
-#EXTVLCOPT:http-referrer=http://imn.iq
-#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
-http://stream.tvtap.net:8081/live/nl-npo2.stream/playlist.m3u8?
-#EXTINF:-1 tvg-id="NPO2.nl",NPO 2 [Geo-blocked]
-http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo2/npo22.isml/.m3u8
-#EXTINF:-1 tvg-id="NPO2.nl",NPO 2 (342p)
-http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo2/npo2.isml/.m3u8
-#EXTINF:-1 tvg-id="NPO1.nl@SD",NPO 1 (342p) [Geo-blocked]
-http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo1/npo1.isml/.m3u8
-#EXTINF:-1 tvg-id="",NPO 2 (Duplicate)
-http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo2/npo2.isml/.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="NPO2.nl",NPO 2 (302p) [Geo-blocked]
+#EXTVLCOPT:http-referrer=http://imn.iq
+#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
+http://stream.tvtap.net:8081/live/nl-npo2.stream/playlist.m3u8?
+#EXTINF:-1 tvg-id="NPO2.nl",NPO 2 [Geo-blocked]
+http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo2/npo22.isml/.m3u8
+#EXTINF:-1 tvg-id="NPO2.nl",NPO 2 (342p)
+http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo2/npo2.isml/.m3u8
+#EXTINF:-1 tvg-id="NPO1.nl@SD",NPO 1 (342p) [Geo-blocked]
+http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo1/npo1.isml/.m3u8
+#EXTINF:-1 tvg-id="",NPO 2 (Duplicate)
+http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo2/npo2.isml/.m3u8
diff --git a/tests/__data__/input/playlist_generate/ad.m3u b/tests/__data__/input/playlist_generate/ad.m3u
index 9a1c9e175..3c3bcae1d 100644
--- a/tests/__data__/input/playlist_generate/ad.m3u
+++ b/tests/__data__/input/playlist_generate/ad.m3u
@@ -1,9 +1,9 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="Zoo.ad@HD",Zoo (720p)
-https://iptv-all.lanesh4d0w.repl.co/andorra/zoo
-#EXTINF:-1 tvg-id="AndorraTV.ad@SD",ATV
-https://iptv-all.lanesh4d0w.repl.co/andorra/atv
-#EXTINF:-1 tvg-id="AndorraTV.ad@HD",ATV HD
-https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
-#EXTINF:-1 tvg-id="AndorraTV.ad",ATV
-https://iptv-all.lanesh4d0w.repl.co/andorra/atv2
+#EXTM3U
+#EXTINF:-1 tvg-id="Zoo.ad@HD",Zoo (720p)
+https://iptv-all.lanesh4d0w.repl.co/andorra/zoo
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD",ATV
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv
+#EXTINF:-1 tvg-id="AndorraTV.ad@HD",ATV HD
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
+#EXTINF:-1 tvg-id="AndorraTV.ad",ATV
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv2
diff --git a/tests/__data__/input/playlist_generate/ca.m3u b/tests/__data__/input/playlist_generate/ca.m3u
index 9c198b682..672601d7f 100644
--- a/tests/__data__/input/playlist_generate/ca.m3u
+++ b/tests/__data__/input/playlist_generate/ca.m3u
@@ -1,3 +1,3 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="MeteoMedia.ca",Meteomedia
-http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="MeteoMedia.ca",Meteomedia
+http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
diff --git a/tests/__data__/input/playlist_generate/in.m3u b/tests/__data__/input/playlist_generate/in.m3u
index 62594eb4b..c375e17ac 100644
--- a/tests/__data__/input/playlist_generate/in.m3u
+++ b/tests/__data__/input/playlist_generate/in.m3u
@@ -1,3 +1,3 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="",Daawah TV
-http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="",Daawah TV
+http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
diff --git a/tests/__data__/input/playlist_generate/kg.m3u b/tests/__data__/input/playlist_generate/kg.m3u
index 9c1d5a575..9bf0832b5 100644
--- a/tests/__data__/input/playlist_generate/kg.m3u
+++ b/tests/__data__/input/playlist_generate/kg.m3u
@@ -1,3 +1,3 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="ElTR.kg",ะญะปะขะ (480p) [Not 24/7]
-http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="ElTR.kg",ะญะปะขะ (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
diff --git a/tests/__data__/input/playlist_generate/uk.m3u b/tests/__data__/input/playlist_generate/uk.m3u
index 5e8c7318e..4a8a1f64a 100644
--- a/tests/__data__/input/playlist_generate/uk.m3u
+++ b/tests/__data__/input/playlist_generate/uk.m3u
@@ -1,3 +1,3 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD
-http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
diff --git a/tests/__data__/input/playlist_generate/unsorted.m3u b/tests/__data__/input/playlist_generate/unsorted.m3u
index b2b798b15..826414ad2 100644
--- a/tests/__data__/input/playlist_generate/unsorted.m3u
+++ b/tests/__data__/input/playlist_generate/unsorted.m3u
@@ -1,11 +1,11 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="LDPRTV.ru",ะะะะ ะขะ (1080p)
-http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
-#EXTINF:-1 tvg-id="VisitXTV.nl",Visit-X TV
-https://stream.visit-x.tv/vxtv/ngrp:live_all/30fps.m3u8
-#EXTINF:-1 tvg-id="" user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
-#EXTVLCOPT:http-referrer=http://imn.iq
-#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
-http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
-#EXTINF:-1 tvg-id="DunaWorld.hu",Duna World (576i)
-http://146.59.85.40:89/dunaworld/index.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="LDPRTV.ru",ะะะะ ะขะ (1080p)
+http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
+#EXTINF:-1 tvg-id="VisitXTV.nl",Visit-X TV
+https://stream.visit-x.tv/vxtv/ngrp:live_all/30fps.m3u8
+#EXTINF:-1 tvg-id="" user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
+#EXTVLCOPT:http-referrer=http://imn.iq
+#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
+#EXTINF:-1 tvg-id="DunaWorld.hu",Duna World (576i)
+http://146.59.85.40:89/dunaworld/index.m3u8
diff --git a/tests/__data__/input/playlist_test/ag.m3u b/tests/__data__/input/playlist_test/ag.m3u
index 66b32b21d..f4716e013 100644
--- a/tests/__data__/input/playlist_test/ag.m3u
+++ b/tests/__data__/input/playlist_test/ag.m3u
@@ -1,5 +1,5 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="ABSTV.ag",ABS TV
-https://tego-cdn2a.sibercdn.com/Live_TV-ABSTV-10/tracks-v3a1/rewind-7200.m3u8?token=e5f61e7be8363eb781b4bdfe591bf917dd529c1a-SjY3NzRTbDZQNnFQVkZaNkZja2RxV3JKc1VBa05zQkdMNStJakRGV0VTTzNrOEVGVUlIQmxta1NLV0o3bzdVdQ-1736094545-1736008145
-#EXTINF:-1 tvg-id="ABSTV.ag@HD",ABS TV (1080p) [Not 24/7]
+#EXTM3U
+#EXTINF:-1 tvg-id="ABSTV.ag",ABS TV
+https://tego-cdn2a.sibercdn.com/Live_TV-ABSTV-10/tracks-v3a1/rewind-7200.m3u8?token=e5f61e7be8363eb781b4bdfe591bf917dd529c1a-SjY3NzRTbDZQNnFQVkZaNkZja2RxV3JKc1VBa05zQkdMNStJakRGV0VTTzNrOEVGVUlIQmxta1NLV0o3bzdVdQ-1736094545-1736008145
+#EXTINF:-1 tvg-id="ABSTV.ag@HD",ABS TV (1080p) [Not 24/7]
https://query-streamlink.herokuapp.com/iptv-query?streaming-ip=https://www.twitch.tv/absliveantigua3
\ No newline at end of file
diff --git a/tests/__data__/input/playlist_update/br.m3u b/tests/__data__/input/playlist_update/br.m3u
index 6dcdaee15..31a869861 100644
--- a/tests/__data__/input/playlist_update/br.m3u
+++ b/tests/__data__/input/playlist_update/br.m3u
@@ -1,6 +1,6 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="",VTV [Not 24/7]
-https://ythls.onrender.com/channel/UC40TUSUx490U5uR1lZt3Ajg.m3u8
-#EXTINF:-1 tvg-id="",Tele2000 [Not 24/7]
-#EXTVLCOPT:http-referrer=https://example2.com/
-https://servilive.com:3126/live/tele2000live.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="",VTV [Not 24/7]
+https://ythls.onrender.com/channel/UC40TUSUx490U5uR1lZt3Ajg.m3u8
+#EXTINF:-1 tvg-id="",Tele2000 [Not 24/7]
+#EXTVLCOPT:http-referrer=https://example2.com/
+https://servilive.com:3126/live/tele2000live.m3u8
diff --git a/tests/__data__/input/playlist_update/cy.m3u b/tests/__data__/input/playlist_update/cy.m3u
index 439794ad7..03c605e3e 100644
--- a/tests/__data__/input/playlist_update/cy.m3u
+++ b/tests/__data__/input/playlist_update/cy.m3u
@@ -1,7 +1,7 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="",RIK HD Cyprus
-http://l6.cloudskep.com/rikcy/rikhd/playlist.m3u8
-#EXTINF:-1 tvg-id="",RIK 2
-http://l6.cloudskep.com/rikcy/rik2/playlist.m3u8
-#EXTINF:-1 tvg-id="AdaTV.cy",AdaTV
-https://ythls.onrender.com/channel/UC40TUSUx490U5uR1lZt3Ajg.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="",RIK HD Cyprus
+http://l6.cloudskep.com/rikcy/rikhd/playlist.m3u8
+#EXTINF:-1 tvg-id="",RIK 2
+http://l6.cloudskep.com/rikcy/rik2/playlist.m3u8
+#EXTINF:-1 tvg-id="AdaTV.cy",AdaTV
+https://ythls.onrender.com/channel/UC40TUSUx490U5uR1lZt3Ajg.m3u8
diff --git a/tests/__data__/input/playlist_update/uk.m3u b/tests/__data__/input/playlist_update/uk.m3u
index c1deeea97..033f5a36b 100644
--- a/tests/__data__/input/playlist_update/uk.m3u
+++ b/tests/__data__/input/playlist_update/uk.m3u
@@ -1,5 +1,5 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD (720p) [Not 24/7]
-http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
-#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD (480p) [Geo-blocked]
-http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/playlist.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD (720p) [Not 24/7]
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
+#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD (480p) [Geo-blocked]
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/playlist.m3u8
diff --git a/tests/__data__/input/playlist_validate/us_blocked.m3u b/tests/__data__/input/playlist_validate/us_blocked.m3u
index 2ffa2273b..3a5e4bd53 100644
--- a/tests/__data__/input/playlist_validate/us_blocked.m3u
+++ b/tests/__data__/input/playlist_validate/us_blocked.m3u
@@ -1,7 +1,7 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="FoxSports2.us@Asia",Fox Sports 2 Asia (Thai) (720p)
-https://example.com/playlist.m3u8
-#EXTINF:-1 tvg-id="TVN.pl",TVN
-https://example.com/playlist2.m3u8
-#EXTINF:-1 tvg-id="EverydayHeroes.us",Everyday Heroes (720p)
-https://a.jsrdn.com/broadcast/7b1451fa52/+0000/c.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="FoxSports2.us@Asia",Fox Sports 2 Asia (Thai) (720p)
+https://example.com/playlist.m3u8
+#EXTINF:-1 tvg-id="TVN.pl",TVN
+https://example.com/playlist2.m3u8
+#EXTINF:-1 tvg-id="EverydayHeroes.us",Everyday Heroes (720p)
+https://a.jsrdn.com/broadcast/7b1451fa52/+0000/c.m3u8
diff --git a/tests/__data__/input/playlist_validate/wrong_id.m3u b/tests/__data__/input/playlist_validate/wrong_id.m3u
index fd9867773..dc7ab8504 100644
--- a/tests/__data__/input/playlist_validate/wrong_id.m3u
+++ b/tests/__data__/input/playlist_validate/wrong_id.m3u
@@ -1,3 +1,3 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="qib22lAq1L.us",ABC (720p)
-https://example.com/playlist2.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="qib22lAq1L.us",ABC (720p)
+https://example.com/playlist2.m3u8
diff --git a/tests/__data__/input/readme_update/.readme/template.md b/tests/__data__/input/readme_update/.readme/template.md
index 04cab4cd5..4883a98e4 100644
--- a/tests/__data__/input/readme_update/.readme/template.md
+++ b/tests/__data__/input/readme_update/.readme/template.md
@@ -1,158 +1,158 @@
-# IPTV [](https://github.com/iptv-org/iptv/actions/workflows/update.yml)
-
-Collection of publicly available IPTV (Internet Protocol television) channels from all over the world.
-
-## Table of contents
-
-- ๐ [How to use?](#how-to-use)
-- ๐บ [Playlists](#playlists)
-- ๐ [Database](#database)
-- ๐จโ๐ป [API](#api)
-- ๐ [Resources](#resources)
-- ๐ฌ [Discussions](#discussions)
-- โ [FAQ](#faq)
-- ๐ [Contribution](#contribution)
-- โ [Legal](#legal)
-- ยฉ [License](#license)
-
-## How to use?
-
-Simply insert one of the links below into [any video player](https://github.com/iptv-org/awesome-iptv#apps) that supports live streaming and press _Open_.
-
-
-
-## Playlists
-
-There are several versions of playlists that differ in the way they are grouped.
-
-### Main playlist
-
-Playlist includes all known channels except adult channels.
-
-```
-https://iptv-org.github.io/iptv/index.m3u
-```
-
-And here is the full version:
-
-```
-https://iptv-org.github.io/iptv/index.nsfw.m3u
-```
-
-### Grouped by category
-
-
-Expand
-
-
-Playlist in which each channel has its _category_ as a group title:
-
-```
-https://iptv-org.github.io/iptv/index.category.m3u
-```
-
-Same thing, but split up into separate files:
-
-
-#include "tests/__data__/output/.readme/_categories.md"
-
-
-
-### Grouped by language
-
-
-Expand
-
-
-Playlist in which each channel has its _language_ as a group title:
-
-```
-https://iptv-org.github.io/iptv/index.language.m3u
-```
-
-Same thing, but split up into separate files:
-
-
-#include "tests/__data__/output/.readme/_languages.md"
-
-
-
-### Grouped by country
-
-
-Expand
-
-
-Playlist in which each channel has its _country_ as a group title:
-
-```
-https://iptv-org.github.io/iptv/index.country.m3u
-```
-
-Same thing, but split up into separate files:
-
-
-#include "tests/__data__/output/.readme/_countries.md"
-
-
-
-### Grouped by region
-
-
-Expand
-
-
-Playlist in which each channel has its _region_ as a group title:
-
-```
-https://iptv-org.github.io/iptv/index.region.m3u
-```
-
-Same thing, but split up into separate files:
-
-
-#include "tests/__data__/output/.readme/_regions.md"
-
-
-
-## Database
-
-All channel data is taken from the [iptv-org/database](https://github.com/iptv-org/database) repository. If you find any errors please open a new [issue](https://github.com/iptv-org/database/issues) there.
-
-## API
-
-The API documentation can be found in the [iptv-org/api](https://github.com/iptv-org/api) repository.
-
-## Resources
-
-Links to other useful IPTV-related resources can be found in the [iptv-org/awesome-iptv](https://github.com/iptv-org/awesome-iptv) repository.
-
-## Discussions
-
-If you need help finding a channel, have a question or idea, welcome to the [Discussions](https://github.com/orgs/iptv-org/discussions).
-
-## FAQ
-
-The answers to the most popular questions can be found in the [FAQ.md](FAQ.md) file.
-
-## Contribution
-
-Please make sure to read the [Contributing Guide](CONTRIBUTING.md) before sending an issue or making a pull request.
-
-And thank you to everyone who has already contributed!
-
-### Backers
-
-
-
-### Contributors
-
-
-
-## Legal
-
-No video files are stored in this repository. The repository simply contains user-submitted links to publicly available video stream URLs, which to the best of our knowledge have been intentionally made publicly by the copyright holders. If any links in these playlists infringe on your rights as a copyright holder, they may be removed by sending a [pull request](https://github.com/iptv-org/iptv/pulls) or opening an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=freearhey&labels=removal+request&template=--removal-request.yml&title=Remove%3A+). However, note that we have **no control** over the destination of the link, and just removing the link from the playlist will not remove its contents from the web. Note that linking does not directly infringe copyright because no copy is made on the site providing the link, and thus this is **not** a valid reason to send a DMCA notice to GitHub. To remove this content from the web, you should contact the web host that's actually hosting the content (**not** GitHub, nor the maintainers of this repository).
-
-## License
-
-[](LICENSE)
+# IPTV [](https://github.com/iptv-org/iptv/actions/workflows/update.yml)
+
+Collection of publicly available IPTV (Internet Protocol television) channels from all over the world.
+
+## Table of contents
+
+- ๐ [How to use?](#how-to-use)
+- ๐บ [Playlists](#playlists)
+- ๐ [Database](#database)
+- ๐จโ๐ป [API](#api)
+- ๐ [Resources](#resources)
+- ๐ฌ [Discussions](#discussions)
+- โ [FAQ](#faq)
+- ๐ [Contribution](#contribution)
+- โ [Legal](#legal)
+- ยฉ [License](#license)
+
+## How to use?
+
+Simply insert one of the links below into [any video player](https://github.com/iptv-org/awesome-iptv#apps) that supports live streaming and press _Open_.
+
+
+
+## Playlists
+
+There are several versions of playlists that differ in the way they are grouped.
+
+### Main playlist
+
+Playlist includes all known channels except adult channels.
+
+```
+https://iptv-org.github.io/iptv/index.m3u
+```
+
+And here is the full version:
+
+```
+https://iptv-org.github.io/iptv/index.nsfw.m3u
+```
+
+### Grouped by category
+
+
+Expand
+
+
+Playlist in which each channel has its _category_ as a group title:
+
+```
+https://iptv-org.github.io/iptv/index.category.m3u
+```
+
+Same thing, but split up into separate files:
+
+
+#include "tests/__data__/output/.readme/_categories.md"
+
+
+
+### Grouped by language
+
+
+Expand
+
+
+Playlist in which each channel has its _language_ as a group title:
+
+```
+https://iptv-org.github.io/iptv/index.language.m3u
+```
+
+Same thing, but split up into separate files:
+
+
+#include "tests/__data__/output/.readme/_languages.md"
+
+
+
+### Grouped by country
+
+
+Expand
+
+
+Playlist in which each channel has its _country_ as a group title:
+
+```
+https://iptv-org.github.io/iptv/index.country.m3u
+```
+
+Same thing, but split up into separate files:
+
+
+#include "tests/__data__/output/.readme/_countries.md"
+
+
+
+### Grouped by region
+
+
+Expand
+
+
+Playlist in which each channel has its _region_ as a group title:
+
+```
+https://iptv-org.github.io/iptv/index.region.m3u
+```
+
+Same thing, but split up into separate files:
+
+
+#include "tests/__data__/output/.readme/_regions.md"
+
+
+
+## Database
+
+All channel data is taken from the [iptv-org/database](https://github.com/iptv-org/database) repository. If you find any errors please open a new [issue](https://github.com/iptv-org/database/issues) there.
+
+## API
+
+The API documentation can be found in the [iptv-org/api](https://github.com/iptv-org/api) repository.
+
+## Resources
+
+Links to other useful IPTV-related resources can be found in the [iptv-org/awesome-iptv](https://github.com/iptv-org/awesome-iptv) repository.
+
+## Discussions
+
+If you need help finding a channel, have a question or idea, welcome to the [Discussions](https://github.com/orgs/iptv-org/discussions).
+
+## FAQ
+
+The answers to the most popular questions can be found in the [FAQ.md](FAQ.md) file.
+
+## Contribution
+
+Please make sure to read the [Contributing Guide](CONTRIBUTING.md) before sending an issue or making a pull request.
+
+And thank you to everyone who has already contributed!
+
+### Backers
+
+
+
+### Contributors
+
+
+
+## Legal
+
+No video files are stored in this repository. The repository simply contains user-submitted links to publicly available video stream URLs, which to the best of our knowledge have been intentionally made publicly by the copyright holders. If any links in these playlists infringe on your rights as a copyright holder, they may be removed by sending a [pull request](https://github.com/iptv-org/iptv/pulls) or opening an [issue](https://github.com/iptv-org/iptv/issues/new?assignees=freearhey&labels=removal+request&template=--removal-request.yml&title=Remove%3A+). However, note that we have **no control** over the destination of the link, and just removing the link from the playlist will not remove its contents from the web. Note that linking does not directly infringe copyright because no copy is made on the site providing the link, and thus this is **not** a valid reason to send a DMCA notice to GitHub. To remove this content from the web, you should contact the web host that's actually hosting the content (**not** GitHub, nor the maintainers of this repository).
+
+## License
+
+[](LICENSE)
diff --git a/tests/__data__/input/readme_update/generators.log b/tests/__data__/input/readme_update/generators.log
index 63cfea058..55adb62b0 100644
--- a/tests/__data__/input/readme_update/generators.log
+++ b/tests/__data__/input/readme_update/generators.log
@@ -1,75 +1,75 @@
-{"type":"category","filepath":"categories/auto.m3u","count":0}
-{"type":"category","filepath":"categories/animation.m3u","count":0}
-{"type":"category","filepath":"categories/business.m3u","count":0}
-{"type":"category","filepath":"categories/classic.m3u","count":0}
-{"type":"category","filepath":"categories/comedy.m3u","count":0}
-{"type":"category","filepath":"categories/cooking.m3u","count":0}
-{"type":"category","filepath":"categories/culture.m3u","count":0}
-{"type":"category","filepath":"categories/documentary.m3u","count":0}
-{"type":"category","filepath":"categories/education.m3u","count":0}
-{"type":"category","filepath":"categories/entertainment.m3u","count":0}
-{"type":"category","filepath":"categories/family.m3u","count":0}
-{"type":"category","filepath":"categories/general.m3u","count":2}
-{"type":"category","filepath":"categories/kids.m3u","count":0}
-{"type":"category","filepath":"categories/legislative.m3u","count":0}
-{"type":"category","filepath":"categories/lifestyle.m3u","count":0}
-{"type":"category","filepath":"categories/movies.m3u","count":0}
-{"type":"category","filepath":"categories/music.m3u","count":0}
-{"type":"category","filepath":"categories/news.m3u","count":1}
-{"type":"category","filepath":"categories/outdoor.m3u","count":0}
-{"type":"category","filepath":"categories/relax.m3u","count":0}
-{"type":"category","filepath":"categories/religious.m3u","count":0}
-{"type":"category","filepath":"categories/series.m3u","count":0}
-{"type":"category","filepath":"categories/science.m3u","count":0}
-{"type":"category","filepath":"categories/shop.m3u","count":0}
-{"type":"category","filepath":"categories/sports.m3u","count":0}
-{"type":"category","filepath":"categories/travel.m3u","count":0}
-{"type":"category","filepath":"categories/weather.m3u","count":1}
-{"type":"category","filepath":"categories/xxx.m3u","count":1}
-{"type":"category","filepath":"categories/undefined.m3u","count":3}
-{"type":"country","filepath":"countries/cm.m3u","count":1}
-{"type":"country","filepath":"countries/ca.m3u","count":2}
-{"type":"country","filepath":"countries/cv.m3u","count":1}
-{"type":"country","filepath":"countries/cg.m3u","count":1}
-{"type":"country","filepath":"countries/ro.m3u","count":1}
-{"type":"subdivision","filepath":"subdivisions/ca-on.m3u","count":1}
-{"type":"country","filepath":"countries/ru.m3u","count":2}
-{"type":"country","filepath":"countries/rw.m3u","count":1}
-{"type":"country","filepath":"countries/re.m3u","count":1}
-{"type":"country","filepath":"countries/undefined.m3u","count":2}
-{"type":"country","filepath":"countries/bl.m3u","count":1}
-{"type":"country","filepath":"countries/sh.m3u","count":1}
-{"type":"country","filepath":"countries/kn.m3u","count":1}
-{"type":"language","filepath":"languages/cat.m3u","count":1}
-{"type":"language","filepath":"languages/eng.m3u","count":1}
-{"type":"language","filepath":"languages/fra.m3u","count":1}
-{"type":"language","filepath":"languages/rus.m3u","count":1}
-{"type":"language","filepath":"languages/undefined.m3u","count":2}
-{"type":"region","filepath":"regions/afr.m3u","count":0}
-{"type":"region","filepath":"regions/amer.m3u","count":1}
-{"type":"region","filepath":"regions/apac.m3u","count":1}
-{"type":"region","filepath":"regions/arab.m3u","count":0}
-{"type":"region","filepath":"regions/asean.m3u","count":0}
-{"type":"region","filepath":"regions/asia.m3u","count":2}
-{"type":"region","filepath":"regions/carib.m3u","count":0}
-{"type":"region","filepath":"regions/cas.m3u","count":0}
-{"type":"region","filepath":"regions/cenamer.m3u","count":0}
-{"type":"region","filepath":"regions/cis.m3u","count":1}
-{"type":"region","filepath":"regions/emea.m3u","count":3}
-{"type":"region","filepath":"regions/eur.m3u","count":3}
-{"type":"region","filepath":"regions/hispam.m3u","count":0}
-{"type":"region","filepath":"regions/lac.m3u","count":0}
-{"type":"region","filepath":"regions/latam.m3u","count":0}
-{"type":"region","filepath":"regions/maghreb.m3u","count":0}
-{"type":"region","filepath":"regions/mena.m3u","count":0}
-{"type":"region","filepath":"regions/mideast.m3u","count":0}
-{"type":"region","filepath":"regions/nam.m3u","count":1}
-{"type":"region","filepath":"regions/noram.m3u","count":1}
-{"type":"region","filepath":"regions/nord.m3u","count":0}
-{"type":"region","filepath":"regions/oce.m3u","count":0}
-{"type":"region","filepath":"regions/undefined.m3u","count":2}
-{"type":"region","filepath":"regions/sas.m3u","count":1}
-{"type":"region","filepath":"regions/int.m3u","count":1}
-{"type":"region","filepath":"regions/southam.m3u","count":0}
-{"type":"region","filepath":"regions/ssa.m3u","count":0}
+{"type":"category","filepath":"categories/auto.m3u","count":0}
+{"type":"category","filepath":"categories/animation.m3u","count":0}
+{"type":"category","filepath":"categories/business.m3u","count":0}
+{"type":"category","filepath":"categories/classic.m3u","count":0}
+{"type":"category","filepath":"categories/comedy.m3u","count":0}
+{"type":"category","filepath":"categories/cooking.m3u","count":0}
+{"type":"category","filepath":"categories/culture.m3u","count":0}
+{"type":"category","filepath":"categories/documentary.m3u","count":0}
+{"type":"category","filepath":"categories/education.m3u","count":0}
+{"type":"category","filepath":"categories/entertainment.m3u","count":0}
+{"type":"category","filepath":"categories/family.m3u","count":0}
+{"type":"category","filepath":"categories/general.m3u","count":2}
+{"type":"category","filepath":"categories/kids.m3u","count":0}
+{"type":"category","filepath":"categories/legislative.m3u","count":0}
+{"type":"category","filepath":"categories/lifestyle.m3u","count":0}
+{"type":"category","filepath":"categories/movies.m3u","count":0}
+{"type":"category","filepath":"categories/music.m3u","count":0}
+{"type":"category","filepath":"categories/news.m3u","count":1}
+{"type":"category","filepath":"categories/outdoor.m3u","count":0}
+{"type":"category","filepath":"categories/relax.m3u","count":0}
+{"type":"category","filepath":"categories/religious.m3u","count":0}
+{"type":"category","filepath":"categories/series.m3u","count":0}
+{"type":"category","filepath":"categories/science.m3u","count":0}
+{"type":"category","filepath":"categories/shop.m3u","count":0}
+{"type":"category","filepath":"categories/sports.m3u","count":0}
+{"type":"category","filepath":"categories/travel.m3u","count":0}
+{"type":"category","filepath":"categories/weather.m3u","count":1}
+{"type":"category","filepath":"categories/xxx.m3u","count":1}
+{"type":"category","filepath":"categories/undefined.m3u","count":3}
+{"type":"country","filepath":"countries/cm.m3u","count":1}
+{"type":"country","filepath":"countries/ca.m3u","count":2}
+{"type":"country","filepath":"countries/cv.m3u","count":1}
+{"type":"country","filepath":"countries/cg.m3u","count":1}
+{"type":"country","filepath":"countries/ro.m3u","count":1}
+{"type":"subdivision","filepath":"subdivisions/ca-on.m3u","count":1}
+{"type":"country","filepath":"countries/ru.m3u","count":2}
+{"type":"country","filepath":"countries/rw.m3u","count":1}
+{"type":"country","filepath":"countries/re.m3u","count":1}
+{"type":"country","filepath":"countries/undefined.m3u","count":2}
+{"type":"country","filepath":"countries/bl.m3u","count":1}
+{"type":"country","filepath":"countries/sh.m3u","count":1}
+{"type":"country","filepath":"countries/kn.m3u","count":1}
+{"type":"language","filepath":"languages/cat.m3u","count":1}
+{"type":"language","filepath":"languages/eng.m3u","count":1}
+{"type":"language","filepath":"languages/fra.m3u","count":1}
+{"type":"language","filepath":"languages/rus.m3u","count":1}
+{"type":"language","filepath":"languages/undefined.m3u","count":2}
+{"type":"region","filepath":"regions/afr.m3u","count":0}
+{"type":"region","filepath":"regions/amer.m3u","count":1}
+{"type":"region","filepath":"regions/apac.m3u","count":1}
+{"type":"region","filepath":"regions/arab.m3u","count":0}
+{"type":"region","filepath":"regions/asean.m3u","count":0}
+{"type":"region","filepath":"regions/asia.m3u","count":2}
+{"type":"region","filepath":"regions/carib.m3u","count":0}
+{"type":"region","filepath":"regions/cas.m3u","count":0}
+{"type":"region","filepath":"regions/cenamer.m3u","count":0}
+{"type":"region","filepath":"regions/cis.m3u","count":1}
+{"type":"region","filepath":"regions/emea.m3u","count":3}
+{"type":"region","filepath":"regions/eur.m3u","count":3}
+{"type":"region","filepath":"regions/hispam.m3u","count":0}
+{"type":"region","filepath":"regions/lac.m3u","count":0}
+{"type":"region","filepath":"regions/latam.m3u","count":0}
+{"type":"region","filepath":"regions/maghreb.m3u","count":0}
+{"type":"region","filepath":"regions/mena.m3u","count":0}
+{"type":"region","filepath":"regions/mideast.m3u","count":0}
+{"type":"region","filepath":"regions/nam.m3u","count":1}
+{"type":"region","filepath":"regions/noram.m3u","count":1}
+{"type":"region","filepath":"regions/nord.m3u","count":0}
+{"type":"region","filepath":"regions/oce.m3u","count":0}
+{"type":"region","filepath":"regions/undefined.m3u","count":2}
+{"type":"region","filepath":"regions/sas.m3u","count":1}
+{"type":"region","filepath":"regions/int.m3u","count":1}
+{"type":"region","filepath":"regions/southam.m3u","count":0}
+{"type":"region","filepath":"regions/ssa.m3u","count":0}
{"type":"region","filepath":"regions/wafr.m3u","count":0}
\ No newline at end of file
diff --git a/tests/__data__/input/report_create/br.m3u b/tests/__data__/input/report_create/br.m3u
index 6dcdaee15..31a869861 100644
--- a/tests/__data__/input/report_create/br.m3u
+++ b/tests/__data__/input/report_create/br.m3u
@@ -1,6 +1,6 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="",VTV [Not 24/7]
-https://ythls.onrender.com/channel/UC40TUSUx490U5uR1lZt3Ajg.m3u8
-#EXTINF:-1 tvg-id="",Tele2000 [Not 24/7]
-#EXTVLCOPT:http-referrer=https://example2.com/
-https://servilive.com:3126/live/tele2000live.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="",VTV [Not 24/7]
+https://ythls.onrender.com/channel/UC40TUSUx490U5uR1lZt3Ajg.m3u8
+#EXTINF:-1 tvg-id="",Tele2000 [Not 24/7]
+#EXTVLCOPT:http-referrer=https://example2.com/
+https://servilive.com:3126/live/tele2000live.m3u8
diff --git a/tests/__data__/input/report_create/cy.m3u b/tests/__data__/input/report_create/cy.m3u
index 581d0961b..82d0b78d4 100644
--- a/tests/__data__/input/report_create/cy.m3u
+++ b/tests/__data__/input/report_create/cy.m3u
@@ -1,5 +1,5 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="",RIK HD Cyprus
-http://l6.cloudskep.com/rikcy/rikhd/playlist.m3u8
-#EXTINF:-1 tvg-id="",RIK 2
-http://l6.cloudskep.com/rikcy/rik2/playlist.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="",RIK HD Cyprus
+http://l6.cloudskep.com/rikcy/rikhd/playlist.m3u8
+#EXTINF:-1 tvg-id="",RIK 2
+http://l6.cloudskep.com/rikcy/rik2/playlist.m3u8
diff --git a/tests/__data__/input/report_create/uk.m3u b/tests/__data__/input/report_create/uk.m3u
index c1deeea97..033f5a36b 100644
--- a/tests/__data__/input/report_create/uk.m3u
+++ b/tests/__data__/input/report_create/uk.m3u
@@ -1,5 +1,5 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD (720p) [Not 24/7]
-http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
-#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD (480p) [Geo-blocked]
-http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/playlist.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD (720p) [Not 24/7]
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
+#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD (480p) [Geo-blocked]
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/playlist.m3u8
diff --git a/tests/__data__/input/report_create/us.m3u b/tests/__data__/input/report_create/us.m3u
index 92cee65b0..78ea4deb5 100644
--- a/tests/__data__/input/report_create/us.m3u
+++ b/tests/__data__/input/report_create/us.m3u
@@ -1,3 +1,3 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="",TUTV
-https://livestream.telvue.com/templeuni1/f7b44cfafd5c52223d5498196c8a2e7b.sdp/playlist.m3u8
+#EXTM3U
+#EXTINF:-1 tvg-id="",TUTV
+https://livestream.telvue.com/templeuni1/f7b44cfafd5c52223d5498196c8a2e7b.sdp/playlist.m3u8
diff --git a/tests/commands/api/generate.test.ts b/tests/commands/api/generate.test.ts
index 7f8f68aa9..931f543cb 100644
--- a/tests/commands/api/generate.test.ts
+++ b/tests/commands/api/generate.test.ts
@@ -1,25 +1,31 @@
+import { pathToFileURL } from 'node:url'
import { execSync } from 'child_process'
import fs from 'fs-extra'
+import os from 'os'
+
+let ENV_VAR =
+ 'DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/input/api_generate API_DIR=tests/__data__/output/.api'
+if (os.platform() === 'win32') {
+ ENV_VAR =
+ 'SET "DATA_DIR=tests/__data__/input/data" && SET "STREAMS_DIR=tests/__data__/input/api_generate" && SET "API_DIR=tests/__data__/output/.api" &&'
+}
beforeEach(() => {
fs.emptyDirSync('tests/__data__/output')
})
-it('can create streams.json', () => {
- execSync(
- 'DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/input/api_generate API_DIR=tests/__data__/output/.api npm run api:generate',
- { encoding: 'utf8' }
- )
+describe('api:generate', () => {
+ it('can create streams.json', () => {
+ const cmd = `${ENV_VAR} npm run api:generate`
+ const stdout = execSync(cmd, { encoding: 'utf8' })
+ if (process.env.DEBUG === 'true') console.log(cmd, stdout)
- expect(content('output/.api/streams.json')).toMatchObject(
- content('expected/api_generate/.api/streams.json')
- )
+ expect(content('tests/__data__/output/.api/streams.json')).toMatchObject(
+ content('tests/__data__/expected/api_generate/.api/streams.json')
+ )
+ })
})
function content(filepath: string) {
- return JSON.parse(
- fs.readFileSync(`tests/__data__/${filepath}`, {
- encoding: 'utf8'
- })
- )
+ return JSON.parse(fs.readFileSync(pathToFileURL(filepath), { encoding: 'utf8' }))
}
diff --git a/tests/commands/playlist/edit.test.ts b/tests/commands/playlist/edit.test.ts
index 4651e5ef8..3334b6dee 100644
--- a/tests/commands/playlist/edit.test.ts
+++ b/tests/commands/playlist/edit.test.ts
@@ -39,5 +39,4 @@ function checkStdout(stdout: string) {
expect(stdout).toContain('TF1.fr (TF1, Tรฉlรฉvision franรงaise 1)')
expect(stdout).toContain('Type...')
expect(stdout).toContain('Skip')
- expect(stdout).toContain("File 'tests/__data__/output/playlist.m3u' successfully saved")
}
diff --git a/tests/commands/playlist/format.test.ts b/tests/commands/playlist/format.test.ts
index d513c8b38..f6c631252 100644
--- a/tests/commands/playlist/format.test.ts
+++ b/tests/commands/playlist/format.test.ts
@@ -1,30 +1,40 @@
+import { pathToFileURL } from 'node:url'
import { execSync } from 'child_process'
import * as fs from 'fs-extra'
import { glob } from 'glob'
+import os from 'os'
+
+let ENV_VAR = 'STREAMS_DIR=tests/__data__/output/streams'
+if (os.platform() === 'win32') {
+ ENV_VAR = 'SET "STREAMS_DIR=tests/__data__/output/streams" &&'
+}
beforeEach(() => {
fs.emptyDirSync('tests/__data__/output')
fs.copySync('tests/__data__/input/playlist_format', 'tests/__data__/output/streams')
})
-it('can format playlists', () => {
- execSync('STREAMS_DIR=tests/__data__/output/streams npm run playlist:format', {
- encoding: 'utf8'
- })
+describe('playlist:format', () => {
+ it('can format playlists', () => {
+ const cmd = `${ENV_VAR} npm run playlist:format`
+ const stdout = execSync(cmd, { encoding: 'utf8' })
+ if (process.env.DEBUG === 'true') console.log(cmd, stdout)
- const files = glob
- .sync('tests/__data__/expected/playlist_format/*.m3u')
- .map(f => f.replace('tests/__data__/expected/playlist_format/', ''))
+ const files = glob.sync('tests/__data__/expected/playlist_format/*.m3u').map(filepath => {
+ const fileUrl = pathToFileURL(filepath).toString()
+ const pathToRemove = pathToFileURL('tests/__data__/expected/playlist_format/').toString()
- files.forEach(filepath => {
- expect(content(`output/streams/${filepath}`), filepath).toBe(
- content(`expected/playlist_format/${filepath}`)
- )
+ return fileUrl.replace(pathToRemove, '')
+ })
+
+ files.forEach(filepath => {
+ expect(content(`tests/__data__/output/streams/${filepath}`), filepath).toBe(
+ content(`tests/__data__/expected/playlist_format/${filepath}`)
+ )
+ })
})
})
function content(filepath: string) {
- return fs.readFileSync(`tests/__data__/${filepath}`, {
- encoding: 'utf8'
- })
+ return fs.readFileSync(pathToFileURL(filepath), { encoding: 'utf8' })
}
diff --git a/tests/commands/playlist/generate.test.ts b/tests/commands/playlist/generate.test.ts
index 389ee022e..4e14d0d30 100644
--- a/tests/commands/playlist/generate.test.ts
+++ b/tests/commands/playlist/generate.test.ts
@@ -1,36 +1,47 @@
+import { pathToFileURL } from 'node:url'
import { execSync } from 'child_process'
+import os, { EOL } from 'node:os'
import * as fs from 'fs-extra'
import * as glob from 'glob'
+let ENV_VAR =
+ 'STREAMS_DIR=tests/__data__/input/playlist_generate DATA_DIR=tests/__data__/input/data PUBLIC_DIR=tests/__data__/output/.gh-pages LOGS_DIR=tests/__data__/output/logs'
+if (os.platform() === 'win32') {
+ ENV_VAR =
+ 'SET "STREAMS_DIR=tests/__data__/input/playlist_generate" && SET "DATA_DIR=tests/__data__/input/data" && SET "PUBLIC_DIR=tests/__data__/output/.gh-pages" && SET "LOGS_DIR=tests/__data__/output/logs" &&'
+}
+
beforeEach(() => {
fs.emptyDirSync('tests/__data__/output')
})
-it('can generate playlists and logs', () => {
- const stdout = execSync(
- 'STREAMS_DIR=tests/__data__/input/playlist_generate DATA_DIR=tests/__data__/input/data PUBLIC_DIR=tests/__data__/output/.gh-pages LOGS_DIR=tests/__data__/output/logs npm run playlist:generate',
- { encoding: 'utf8' }
- )
+describe('playlist:generate', () => {
+ it('can generate playlists and logs', () => {
+ const cmd = `${ENV_VAR} npm run playlist:generate`
+ const stdout = execSync(cmd, { encoding: 'utf8' })
+ if (process.env.DEBUG === 'true') console.log(cmd, stdout)
- if (process.env.DEBUG === 'true') console.log(stdout)
+ const playlists = glob
+ .sync('tests/__data__/expected/playlist_generate/.gh-pages/**/*.m3u')
+ .map(filepath => {
+ const fileUrl = pathToFileURL(filepath).toString()
+ const pathToRemove = pathToFileURL('tests/__data__/expected/playlist_generate/').toString()
- const playlists = glob
- .sync('tests/__data__/expected/playlist_generate/.gh-pages/**/*.m3u')
- .map((file: string) => file.replace('tests/__data__/expected/playlist_generate/', ''))
+ return fileUrl.replace(pathToRemove, '')
+ })
- playlists.forEach((filepath: string) => {
- expect(content(`output/${filepath}`), filepath).toBe(
- content(`expected/playlist_generate/${filepath}`)
+ playlists.forEach((filepath: string) => {
+ expect(content(`tests/__data__/output/${filepath}`), filepath).toBe(
+ content(`tests/__data__/expected/playlist_generate/${filepath}`)
+ )
+ })
+
+ expect(content('tests/__data__/output/logs/generators.log').split(EOL).sort()).toStrictEqual(
+ content('tests/__data__/expected/playlist_generate/logs/generators.log').split(EOL).sort()
)
})
-
- expect(content('output/logs/generators.log').split('\n').sort()).toStrictEqual(
- content('expected/playlist_generate/logs/generators.log').split('\n').sort()
- )
})
function content(filepath: string) {
- return fs.readFileSync(`tests/__data__/${filepath}`, {
- encoding: 'utf8'
- })
+ return fs.readFileSync(pathToFileURL(filepath), { encoding: 'utf8' })
}
diff --git a/tests/commands/playlist/test.test.ts b/tests/commands/playlist/test.test.ts
index 0842f0f10..813ed401d 100644
--- a/tests/commands/playlist/test.test.ts
+++ b/tests/commands/playlist/test.test.ts
@@ -1,19 +1,25 @@
import { execSync } from 'child_process'
+import os from 'node:os'
type ExecError = {
status: number
stdout: string
}
-it('shows an error if the playlist contains a broken link', () => {
- try {
- execSync('ROOT_DIR=tests/__data__/input npm run playlist:test playlist_test/ag.m3u', {
- encoding: 'utf8'
- })
- process.exit(1)
- } catch (error) {
- expect((error as ExecError).status).toBe(1)
- expect((error as ExecError).stdout).toContain('playlist_test/ag.m3u')
- expect((error as ExecError).stdout).toContain('2 problems (1 errors, 1 warnings)')
- }
+let ENV_VAR = 'ROOT_DIR=tests/__data__/input'
+if (os.platform() === 'win32') {
+ ENV_VAR = 'SET "ROOT_DIR=tests/__data__/input" &&'
+}
+
+describe('playlist:test', () => {
+ it('shows an error if the playlist contains a broken link', () => {
+ const cmd = `${ENV_VAR} npm run playlist:test playlist_test/ag.m3u`
+ try {
+ execSync(cmd, { encoding: 'utf8' })
+ } catch (error) {
+ if (process.env.DEBUG === 'true') console.log(cmd, error)
+ expect((error as ExecError).stdout).toContain('playlist_test/ag.m3u')
+ expect((error as ExecError).stdout).toContain('2 problems (1 errors, 1 warnings)')
+ }
+ })
})
diff --git a/tests/commands/playlist/update.test.ts b/tests/commands/playlist/update.test.ts
index cc104d8cc..a430b8df4 100644
--- a/tests/commands/playlist/update.test.ts
+++ b/tests/commands/playlist/update.test.ts
@@ -1,37 +1,45 @@
+import { pathToFileURL } from 'node:url'
import { execSync } from 'child_process'
import * as fs from 'fs-extra'
import { glob } from 'glob'
+import os from 'os'
+
+let ENV_VAR = 'DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/output/streams'
+if (os.platform() === 'win32') {
+ ENV_VAR =
+ 'SET "DATA_DIR=tests/__data__/input/data" && SET "STREAMS_DIR=tests/__data__/output/streams" &&'
+}
beforeEach(() => {
fs.emptyDirSync('tests/__data__/output')
fs.copySync('tests/__data__/input/playlist_update', 'tests/__data__/output/streams')
})
-it('can update playlists', () => {
- const stdout = execSync(
- 'DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/output/streams npm run playlist:update --silent',
- {
- encoding: 'utf8'
- }
- )
+describe('playlist:update', () => {
+ it('can update playlists', () => {
+ const cmd = `${ENV_VAR} npm run playlist:update --silent`
+ const stdout = execSync(cmd, { encoding: 'utf8' })
+ if (process.env.DEBUG === 'true') console.log(cmd, stdout)
- const files = glob
- .sync('tests/__data__/expected/playlist_update/*.m3u')
- .map(f => f.replace('tests/__data__/expected/playlist_update/', ''))
+ const files = glob.sync('tests/__data__/expected/playlist_update/*.m3u').map(filepath => {
+ const fileUrl = pathToFileURL(filepath).toString()
+ const pathToRemove = pathToFileURL('tests/__data__/expected/playlist_update/').toString()
- files.forEach(filepath => {
- expect(content(`output/streams/${filepath}`), filepath).toBe(
- content(`expected/playlist_update/${filepath}`)
+ return fileUrl.replace(pathToRemove, '')
+ })
+
+ files.forEach(filepath => {
+ expect(content(`tests/__data__/output/streams/${filepath}`), filepath).toBe(
+ content(`tests/__data__/expected/playlist_update/${filepath}`)
+ )
+ })
+
+ expect(stdout).toBe(
+ 'OUTPUT=closes #14151, closes #14150, closes #14110, closes #14120, closes #14175, closes #14105, closes #14104, closes #14057, closes #14034, closes #13964, closes #13893, closes #13881, closes #13793, closes #13751, closes #13715\n'
)
})
-
- expect(stdout).toBe(
- 'OUTPUT=closes #14151, closes #14150, closes #14110, closes #14120, closes #14175, closes #14105, closes #14104, closes #14057, closes #14034, closes #13964, closes #13893, closes #13881, closes #13793, closes #13751, closes #13715\n'
- )
})
function content(filepath: string) {
- return fs.readFileSync(`tests/__data__/${filepath}`, {
- encoding: 'utf8'
- })
+ return fs.readFileSync(pathToFileURL(filepath), { encoding: 'utf8' })
}
diff --git a/tests/commands/playlist/validate.test.ts b/tests/commands/playlist/validate.test.ts
index b2a43324e..feef97bbf 100644
--- a/tests/commands/playlist/validate.test.ts
+++ b/tests/commands/playlist/validate.test.ts
@@ -1,41 +1,45 @@
import { execSync } from 'child_process'
+import os from 'os'
type ExecError = {
status: number
stdout: string
}
-it('show an error if channel id in the blocklist', () => {
- try {
- const stdout = execSync(
- 'DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/input/playlist_validate npm run playlist:validate -- us_blocked.m3u',
- {
- encoding: 'utf8'
- }
- )
- if (process.env.DEBUG === 'true') console.log(stdout)
- process.exit(1)
- } catch (error) {
- if (process.env.DEBUG === 'true') console.log((error as ExecError).stdout)
- expect((error as ExecError).status).toBe(1)
- expect((error as ExecError).stdout).toContain(`us_blocked.m3u
- 2 error "FoxSports2.us" is on the blocklist due to claims of copyright holders (https://github.com/iptv-org/iptv/issues/0002)
- 4 error "TVN.pl" is on the blocklist due to NSFW content (https://github.com/iptv-org/iptv/issues/0003)
+let ENV_VAR =
+ 'DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/input/playlist_validate'
+if (os.platform() === 'win32') {
+ ENV_VAR =
+ 'SET "DATA_DIR=tests/__data__/input/data" && SET "STREAMS_DIR=tests/__data__/input/playlist_validate" &&'
+}
-2 problems (2 errors, 0 warnings)`)
- }
-})
-
-it('show a warning if channel has wrong id', () => {
- const stdout = execSync(
- 'DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/input/playlist_validate npm run playlist:validate -- wrong_id.m3u',
- {
- encoding: 'utf8'
+describe('playlist:validate', () => {
+ it('show an error if channel id in the blocklist', () => {
+ const cmd = `${ENV_VAR} npm run playlist:validate -- us_blocked.m3u`
+ try {
+ execSync(cmd, { encoding: 'utf8' })
+ } catch (error) {
+ if (process.env.DEBUG === 'true') console.log(cmd, error)
+ expect((error as ExecError).stdout).toContain('us_blocked.m3u')
+ expect((error as ExecError).stdout).toContain(
+ '2 error "FoxSports2.us" is on the blocklist due to claims of copyright holders (https://github.com/iptv-org/iptv/issues/0002)'
+ )
+ expect((error as ExecError).stdout).toContain(
+ '4 error "TVN.pl" is on the blocklist due to NSFW content (https://github.com/iptv-org/iptv/issues/0003)'
+ )
+ expect((error as ExecError).stdout).toContain('2 problems (2 errors, 0 warnings)')
}
- )
- if (process.env.DEBUG === 'true') console.log(stdout)
+ })
- expect(stdout).toContain(
- 'wrong_id.m3u\n 2 warning "qib22lAq1L.us" is not in the database\n\n1 problems (0 errors, 1 warnings)\n'
- )
+ it('show a warning if channel has wrong id', () => {
+ const cmd = `${ENV_VAR} npm run playlist:validate -- wrong_id.m3u`
+ try {
+ execSync(cmd, { encoding: 'utf8' })
+ } catch (error) {
+ if (process.env.DEBUG === 'true') console.log(cmd, error)
+ expect((error as ExecError).stdout).toContain(
+ 'wrong_id.m3u\n 2 warning "qib22lAq1L.us" is not in the database\n\n1 problems (0 errors, 1 warnings)\n'
+ )
+ }
+ })
})
diff --git a/tests/commands/readme/update.test.ts b/tests/commands/readme/update.test.ts
index f15e71f48..061179ed4 100644
--- a/tests/commands/readme/update.test.ts
+++ b/tests/commands/readme/update.test.ts
@@ -1,6 +1,15 @@
+import { pathToFileURL } from 'node:url'
import { execSync } from 'child_process'
import fs from 'fs-extra'
import path from 'path'
+import os from 'os'
+
+let ENV_VAR =
+ 'DATA_DIR=tests/__data__/input/data LOGS_DIR=tests/__data__/input/readme_update README_DIR=tests/__data__/output/.readme'
+if (os.platform() === 'win32') {
+ ENV_VAR =
+ 'SET "DATA_DIR=tests/__data__/input/data" && SET "LOGS_DIR=tests/__data__/input/readme_update" && SET "README_DIR=tests/__data__/output/.readme" &&'
+}
beforeEach(() => {
fs.emptyDirSync('tests/__data__/output')
@@ -13,23 +22,20 @@ beforeEach(() => {
'tests/__data__/input/readme_update/.readme/template.md',
'tests/__data__/output/.readme/template.md'
)
-
- execSync(
- 'DATA_DIR=tests/__data__/input/data LOGS_DIR=tests/__data__/input/readme_update README_DIR=tests/__data__/output/.readme npm run readme:update',
- { encoding: 'utf8' }
- )
})
-it('can update readme.md', () => {
- expect(content('tests/__data__/output/readme.md')).toEqual(
- content('tests/__data__/expected/readme_update/_readme.md')
- )
+describe('readme:update', () => {
+ it('can update readme.md', () => {
+ const cmd = `${ENV_VAR} npm run readme:update`
+ const stdout = execSync(cmd, { encoding: 'utf8' })
+ if (process.env.DEBUG === 'true') console.log(cmd, stdout)
+
+ expect(content('tests/__data__/output/readme.md')).toEqual(
+ content('tests/__data__/expected/readme_update/_readme.md')
+ )
+ })
})
function content(filepath: string) {
- const data = fs.readFileSync(path.resolve(filepath), {
- encoding: 'utf8'
- })
-
- return JSON.stringify(data)
+ return JSON.stringify(fs.readFileSync(pathToFileURL(filepath), { encoding: 'utf8' }))
}
diff --git a/tests/commands/report/create.test.ts b/tests/commands/report/create.test.ts
index de449347a..18c799445 100644
--- a/tests/commands/report/create.test.ts
+++ b/tests/commands/report/create.test.ts
@@ -1,15 +1,20 @@
import { execSync } from 'child_process'
+import os from 'os'
-it('can create report', () => {
- const stdout = execSync(
- 'DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/input/report_create npm run report:create',
- {
- encoding: 'utf8'
- }
- )
+let ENV_VAR = 'DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/input/report_create'
+if (os.platform() === 'win32') {
+ ENV_VAR =
+ 'SET "DATA_DIR=tests/__data__/input/data" && SET "STREAMS_DIR=tests/__data__/input/report_create" &&'
+}
- expect(
- stdout.includes(`
+describe('report:create', () => {
+ it('can create report', () => {
+ const cmd = `${ENV_VAR} npm run report:create`
+ const stdout = execSync(cmd, { encoding: 'utf8' })
+ if (process.env.DEBUG === 'true') console.log(cmd, stdout)
+
+ expect(
+ stdout.includes(`
โโโโโโโโโโโฌโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
โ (index) โ issueNumber โ type โ streamId โ streamUrl โ status โ
โโโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
@@ -20,5 +25,6 @@ it('can create report', () => {
โ 4 โ 16120 โ 'broken stream' โ undefined โ 'http://190.61.102.67:2000/play/a038/index.m3u8' โ 'wrong_link' โ
โ 5 โ 19956 โ 'channel search' โ 'CNBCe.tr' โ undefined โ 'invalid_id' โ
โโโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโ`)
- ).toBe(true)
+ ).toBe(true)
+ })
})
diff --git a/yarn.lock b/yarn.lock
index 94e14d2f5..188beea60 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -366,24 +366,21 @@
"@eslint/core" "^0.12.0"
levn "^0.4.1"
-"@freearhey/core@^0.7.0":
- version "0.7.0"
- resolved "https://registry.npmjs.org/@freearhey/core/-/core-0.7.0.tgz"
- integrity sha512-HXkKPYGY7ife7JAc1q/Qxzy0WUdSnyt3rHThCShZHgnH3rz0tpkjHFW7LNegB3he0IKn/Zc95/YSOQ97Fq8ctA==
+"@freearhey/core@^0.8.2":
+ version "0.8.2"
+ resolved "https://registry.npmjs.org/@freearhey/core/-/core-0.8.2.tgz"
+ integrity sha512-jlb1XUbhUf3lqD3B9Wmx3c8qYG4+s1I0cr2FFQfiMpJh4nMvfUNdJr2OhH31S/dbNP12ycT6RPVoZ2j2G3+mXA==
dependencies:
- "@types/fs-extra" "^11.0.2"
- "@types/lodash" "^4.14.198"
- "@types/luxon" "^3.3.2"
- fs-extra "^11.1.1"
- glob "^10.3.4"
+ consola "^3.4.2"
+ dayjs "^1.11.13"
+ fs-extra "^11.3.0"
+ glob "^11.0.1"
lodash "^4.17.21"
- luxon "^3.4.3"
- natural-orderby "^3.0.2"
- node-gzip "^1.1.2"
+ natural-orderby "^5.0.0"
normalize-url "^6.1.0"
object-treeify "^2.1.1"
- run-script-os "^1.1.6"
- signale "^1.4.0"
+ pako "^2.1.0"
+ timer-node "^5.0.9"
"@freearhey/search-js@^0.1.2":
version "0.1.2"
@@ -967,11 +964,6 @@
resolved "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz"
integrity sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==
-"@pkgjs/parseargs@^0.11.0":
- version "0.11.0"
- resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz"
- integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
-
"@sinclair/typebox@^0.27.8":
version "0.27.8"
resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz"
@@ -1041,10 +1033,10 @@
resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz"
integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==
-"@types/fs-extra@^11.0.2":
- version "11.0.2"
- resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.2.tgz"
- integrity sha512-c0hrgAOVYr21EX8J0jBMXGLMgJqVf/v6yxi0dLaJboW9aQPh16Id+z6w2Tx1hm+piJOLv8xPfVKZCLfjPw/IMQ==
+"@types/fs-extra@^11.0.4":
+ version "11.0.4"
+ resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz"
+ integrity sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==
dependencies:
"@types/jsonfile" "*"
"@types/node" "*"
@@ -1089,9 +1081,9 @@
integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
"@types/jsonfile@*":
- version "6.1.1"
- resolved "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz"
- integrity sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==
+ version "6.1.4"
+ resolved "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz"
+ integrity sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==
dependencies:
"@types/node" "*"
@@ -1100,11 +1092,6 @@
resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz"
integrity sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==
-"@types/luxon@^3.3.2":
- version "3.3.2"
- resolved "https://registry.npmjs.org/@types/luxon/-/luxon-3.3.2.tgz"
- integrity sha512-l5cpE57br4BIjK+9BSkFBOsWtwv6J9bJpC7gdXIzZyI0vuKvNTk0wZZrkQxMGsUAuGW9+WMNWF2IJMD7br2yeQ==
-
"@types/node@*", "@types/node@>=18":
version "22.13.10"
resolved "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz"
@@ -1263,16 +1250,9 @@ ansi-regex@^5.0.1:
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
ansi-regex@^6.0.1:
- version "6.0.1"
- resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz"
- integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
-
-ansi-styles@^3.2.1:
- version "3.2.1"
- resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz"
- integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
- dependencies:
- color-convert "^1.9.0"
+ version "6.1.0"
+ resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz"
+ integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==
ansi-styles@^4.0.0, ansi-styles@^4.1.0:
version "4.3.0"
@@ -1486,15 +1466,6 @@ caniuse-lite@^1.0.30001688:
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz"
integrity sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==
-chalk@^2.3.2:
- version "2.4.2"
- resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"
- integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.1, chalk@^4.1.2:
version "4.1.2"
resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
@@ -1554,13 +1525,6 @@ collect-v8-coverage@^1.0.0:
resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz"
integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==
-color-convert@^1.9.0:
- version "1.9.3"
- resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz"
- integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
- dependencies:
- color-name "1.1.3"
-
color-convert@^2.0.1:
version "2.0.1"
resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
@@ -1573,11 +1537,6 @@ color-name@~1.1.4:
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-color-name@1.1.3:
- version "1.1.3"
- resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
- integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
-
colors@^1.4.0:
version "1.4.0"
resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz"
@@ -1615,6 +1574,11 @@ concat-map@0.0.1:
resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+consola@^3.4.2:
+ version "3.4.2"
+ resolved "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz"
+ integrity sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==
+
console-table-printer@^2.12.1:
version "2.12.1"
resolved "https://registry.npmjs.org/console-table-printer/-/console-table-printer-2.12.1.tgz"
@@ -1659,6 +1623,11 @@ dateformat@^5.0.3:
resolved "https://registry.npmjs.org/dateformat/-/dateformat-5.0.3.tgz"
integrity sha512-Kvr6HmPXUMerlLcLF+Pwq3K7apHpYmGDVqrxcDasBg86UcKeTSNWbEzU8bwdXnxnR44FtMhJAxI4Bov6Y/KUfA==
+dayjs@^1.11.13:
+ version "1.11.13"
+ resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz"
+ integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==
+
debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
version "4.4.0"
resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz"
@@ -1771,11 +1740,6 @@ escalade@^3.1.1, escalade@^3.2.0:
resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz"
integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
-escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
- integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-
escape-string-regexp@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz"
@@ -1968,13 +1932,6 @@ fb-watchman@^2.0.0:
dependencies:
bser "2.1.1"
-figures@^2.0.0:
- version "2.0.0"
- resolved "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz"
- integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
- dependencies:
- escape-string-regexp "^1.0.5"
-
file-entry-cache@^8.0.0:
version "8.0.0"
resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz"
@@ -1996,13 +1953,6 @@ fill-range@^7.1.1:
dependencies:
to-regex-range "^5.0.1"
-find-up@^2.0.0:
- version "2.1.0"
- resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz"
- integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
- dependencies:
- locate-path "^2.0.0"
-
find-up@^4.0.0:
version "4.1.0"
resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz"
@@ -2062,10 +2012,10 @@ form-data@^4.0.0:
combined-stream "^1.0.8"
mime-types "^2.1.12"
-fs-extra@^11.1.1:
- version "11.1.1"
- resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz"
- integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==
+fs-extra@^11.3.0:
+ version "11.3.0"
+ resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz"
+ integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==
dependencies:
graceful-fs "^4.2.0"
jsonfile "^6.0.1"
@@ -2132,21 +2082,10 @@ glob-parent@^6.0.2:
dependencies:
is-glob "^4.0.3"
-glob@^10.3.4:
- version "10.3.4"
- resolved "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz"
- integrity sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==
- dependencies:
- foreground-child "^3.1.0"
- jackspeak "^2.0.3"
- minimatch "^9.0.1"
- minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
- path-scurry "^1.10.1"
-
-glob@^11.0.0:
- version "11.0.0"
- resolved "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz"
- integrity sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==
+glob@^11.0.0, glob@^11.0.1, glob@^11.0.2:
+ version "11.0.2"
+ resolved "https://registry.npmjs.org/glob/-/glob-11.0.2.tgz"
+ integrity sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==
dependencies:
foreground-child "^3.1.0"
jackspeak "^4.0.1"
@@ -2194,7 +2133,7 @@ globals@^16.0.0:
resolved "https://registry.npmjs.org/globals/-/globals-16.0.0.tgz"
integrity sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==
-graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9:
+graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9:
version "4.2.9"
resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz"
integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==
@@ -2209,11 +2148,6 @@ graphql@^16.8.1:
resolved "https://registry.npmjs.org/graphql/-/graphql-16.10.0.tgz"
integrity sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==
-has-flag@^3.0.0:
- version "3.0.0"
- resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"
- integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
-
has-flag@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
@@ -2484,19 +2418,10 @@ istanbul-reports@^3.1.3:
html-escaper "^2.0.0"
istanbul-lib-report "^3.0.0"
-jackspeak@^2.0.3:
- version "2.3.3"
- resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz"
- integrity sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==
- dependencies:
- "@isaacs/cliui" "^8.0.2"
- optionalDependencies:
- "@pkgjs/parseargs" "^0.11.0"
-
jackspeak@^4.0.1:
- version "4.0.2"
- resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz"
- integrity sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==
+ version "4.1.0"
+ resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz"
+ integrity sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==
dependencies:
"@isaacs/cliui" "^8.0.2"
@@ -2908,11 +2833,6 @@ json-buffer@3.0.1:
resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz"
integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
-json-parse-better-errors@^1.0.1:
- version "1.0.2"
- resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz"
- integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
-
json-parse-even-better-errors@^2.3.0:
version "2.3.1"
resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz"
@@ -2972,24 +2892,6 @@ lines-and-columns@^1.1.6:
resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz"
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
-load-json-file@^4.0.0:
- version "4.0.0"
- resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz"
- integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
- dependencies:
- graceful-fs "^4.1.2"
- parse-json "^4.0.0"
- pify "^3.0.0"
- strip-bom "^3.0.0"
-
-locate-path@^2.0.0:
- version "2.0.0"
- resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz"
- integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
- dependencies:
- p-locate "^2.0.0"
- path-exists "^3.0.0"
-
locate-path@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz"
@@ -3020,9 +2922,9 @@ lodash@^4.17.21:
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
lru-cache@^11.0.0:
- version "11.0.2"
- resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz"
- integrity sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==
+ version "11.1.0"
+ resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz"
+ integrity sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==
lru-cache@^5.1.1:
version "5.1.1"
@@ -3031,16 +2933,6 @@ lru-cache@^5.1.1:
dependencies:
yallist "^3.0.2"
-"lru-cache@^9.1.1 || ^10.0.0":
- version "10.0.1"
- resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz"
- integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==
-
-luxon@^3.4.3:
- version "3.4.3"
- resolved "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz"
- integrity sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==
-
m3u-linter@^0.4.2:
version "0.4.2"
resolved "https://registry.npmjs.org/m3u-linter/-/m3u-linter-0.4.2.tgz"
@@ -3133,13 +3025,6 @@ minimatch@^5.0.1:
dependencies:
brace-expansion "^2.0.1"
-minimatch@^9.0.1:
- version "9.0.3"
- resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz"
- integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
- dependencies:
- brace-expansion "^2.0.1"
-
minimatch@^9.0.4:
version "9.0.5"
resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz"
@@ -3147,7 +3032,7 @@ minimatch@^9.0.4:
dependencies:
brace-expansion "^2.0.1"
-"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2:
+minipass@^7.1.2:
version "7.1.2"
resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz"
integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
@@ -3191,21 +3076,16 @@ natural-compare@^1.4.0:
resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
-natural-orderby@^3.0.2:
- version "3.0.2"
- resolved "https://registry.npmjs.org/natural-orderby/-/natural-orderby-3.0.2.tgz"
- integrity sha512-x7ZdOwBxZCEm9MM7+eQCjkrNLrW3rkBKNHVr78zbtqnMGVNlnDi6C/eUEYgxHNrcbu0ymvjzcwIL/6H1iHri9g==
+natural-orderby@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/natural-orderby/-/natural-orderby-5.0.0.tgz"
+ integrity sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==
node-cleanup@^2.1.2:
version "2.1.2"
resolved "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz"
integrity sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==
-node-gzip@^1.1.2:
- version "1.1.2"
- resolved "https://registry.npmjs.org/node-gzip/-/node-gzip-1.1.2.tgz"
- integrity sha512-ZB6zWpfZHGtxZnPMrJSKHVPrRjURoUzaDbLFj3VO70mpLTW5np96vXyHwft4Id0o+PYIzgDkBUjIzaNHhQ8srw==
-
node-int64@^0.4.0:
version "0.4.0"
resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz"
@@ -3284,13 +3164,6 @@ outvariant@^1.4.0, outvariant@^1.4.3:
resolved "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz"
integrity sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==
-p-limit@^1.1.0:
- version "1.3.0"
- resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz"
- integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
- dependencies:
- p-try "^1.0.0"
-
p-limit@^2.2.0:
version "2.3.0"
resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz"
@@ -3305,13 +3178,6 @@ p-limit@^3.0.2, p-limit@^3.1.0:
dependencies:
yocto-queue "^0.1.0"
-p-locate@^2.0.0:
- version "2.0.0"
- resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz"
- integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
- dependencies:
- p-limit "^1.1.0"
-
p-locate@^4.1.0:
version "4.1.0"
resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz"
@@ -3326,11 +3192,6 @@ p-locate@^5.0.0:
dependencies:
p-limit "^3.0.2"
-p-try@^1.0.0:
- version "1.0.0"
- resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz"
- integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
-
p-try@^2.0.0:
version "2.2.0"
resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz"
@@ -3341,6 +3202,11 @@ package-json-from-dist@^1.0.0:
resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz"
integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==
+pako@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz"
+ integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==
+
parent-module@^1.0.0:
version "1.0.1"
resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz"
@@ -3348,14 +3214,6 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
-parse-json@^4.0.0:
- version "4.0.0"
- resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz"
- integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
- dependencies:
- error-ex "^1.3.1"
- json-parse-better-errors "^1.0.1"
-
parse-json@^5.2.0:
version "5.2.0"
resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz"
@@ -3366,11 +3224,6 @@ parse-json@^5.2.0:
json-parse-even-better-errors "^2.3.0"
lines-and-columns "^1.1.6"
-path-exists@^3.0.0:
- version "3.0.0"
- resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz"
- integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
-
path-exists@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz"
@@ -3391,14 +3244,6 @@ path-parse@^1.0.7:
resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
-path-scurry@^1.10.1:
- version "1.10.1"
- resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz"
- integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==
- dependencies:
- lru-cache "^9.1.1 || ^10.0.0"
- minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
-
path-scurry@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz"
@@ -3422,24 +3267,11 @@ picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1:
resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
-pify@^3.0.0:
- version "3.0.0"
- resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz"
- integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
-
pirates@^4.0.4:
version "4.0.6"
resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz"
integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
-pkg-conf@^2.1.0:
- version "2.1.0"
- resolved "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz"
- integrity sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=
- dependencies:
- find-up "^2.0.0"
- load-json-file "^4.0.0"
-
pkg-dir@^4.2.0:
version "4.2.0"
resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz"
@@ -3574,11 +3406,6 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"
-run-script-os@^1.1.6:
- version "1.1.6"
- resolved "https://registry.npmjs.org/run-script-os/-/run-script-os-1.1.6.tgz"
- integrity sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==
-
"safer-buffer@>= 2.1.2 < 3":
version "2.1.2"
resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
@@ -3626,15 +3453,6 @@ signal-exit@^4.1.0:
resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz"
integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
-signale@^1.4.0:
- version "1.4.0"
- resolved "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz"
- integrity sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==
- dependencies:
- chalk "^2.3.2"
- figures "^2.0.0"
- pkg-conf "^2.1.0"
-
simple-wcswidth@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/simple-wcswidth/-/simple-wcswidth-1.0.1.tgz"
@@ -3768,11 +3586,6 @@ strip-ansi@^7.0.1:
dependencies:
ansi-regex "^6.0.1"
-strip-bom@^3.0.0:
- version "3.0.0"
- resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz"
- integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
-
strip-bom@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz"
@@ -3788,13 +3601,6 @@ strip-json-comments@^3.1.1:
resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
-supports-color@^5.3.0:
- version "5.5.0"
- resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz"
- integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
- dependencies:
- has-flag "^3.0.0"
-
supports-color@^7.1.0:
version "7.2.0"
resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
@@ -3823,6 +3629,11 @@ test-exclude@^6.0.0:
glob "^7.1.4"
minimatch "^3.0.4"
+timer-node@^5.0.9:
+ version "5.0.9"
+ resolved "https://registry.npmjs.org/timer-node/-/timer-node-5.0.9.tgz"
+ integrity sha512-zXxCE/5/YDi0hY9pygqgRqjRbrFRzigYxOudG0I3syaqAAmX9/w9sxex1bNFCN6c1S66RwPtEIJv65dN+1psew==
+
tmp@^0.0.33:
version "0.0.33"
resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz"
@@ -3925,9 +3736,9 @@ universalify@^0.2.0:
integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==
universalify@^2.0.0:
- version "2.0.0"
- resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz"
- integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz"
+ integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
update-browserslist-db@^1.1.1:
version "1.1.1"