2023-09-09 12:16:04 +00:00
|
|
|
package com.hexated
|
|
|
|
|
|
|
|
import com.lagradost.cloudstream3.extractors.Filesim
|
|
|
|
import com.lagradost.cloudstream3.extractors.GMPlayer
|
|
|
|
import com.lagradost.cloudstream3.extractors.StreamSB
|
|
|
|
import com.lagradost.cloudstream3.extractors.Voe
|
|
|
|
import com.fasterxml.jackson.annotation.JsonProperty
|
|
|
|
import com.lagradost.cloudstream3.APIHolder.getCaptchaToken
|
|
|
|
import com.lagradost.cloudstream3.SubtitleFile
|
2023-09-13 07:58:52 +00:00
|
|
|
import com.lagradost.cloudstream3.apmap
|
2023-09-09 12:16:04 +00:00
|
|
|
import com.lagradost.cloudstream3.app
|
2023-09-13 07:58:52 +00:00
|
|
|
import com.lagradost.cloudstream3.base64Decode
|
2023-12-24 09:09:45 +00:00
|
|
|
import com.lagradost.cloudstream3.extractors.Jeniusplay
|
2024-01-01 12:05:41 +00:00
|
|
|
import com.lagradost.cloudstream3.extractors.PixelDrain
|
2023-09-09 12:16:04 +00:00
|
|
|
import com.lagradost.cloudstream3.utils.*
|
|
|
|
import java.math.BigInteger
|
|
|
|
import java.security.MessageDigest
|
|
|
|
|
|
|
|
open class Playm4u : ExtractorApi() {
|
|
|
|
override val name = "Playm4u"
|
|
|
|
override val mainUrl = "https://play9str.playm4u.xyz"
|
|
|
|
override val requiresReferer = true
|
|
|
|
private val password = "plhq@@@22"
|
|
|
|
|
|
|
|
override suspend fun getUrl(
|
|
|
|
url: String,
|
|
|
|
referer: String?,
|
|
|
|
subtitleCallback: (SubtitleFile) -> Unit,
|
|
|
|
callback: (ExtractorLink) -> Unit
|
|
|
|
) {
|
|
|
|
val document = app.get(url, referer = referer).document
|
|
|
|
val script = document.selectFirst("script:containsData(idfile =)")?.data() ?: return
|
|
|
|
val passScript = document.selectFirst("script:containsData(domain_ref =)")?.data() ?: return
|
|
|
|
|
|
|
|
val pass = passScript.substringAfter("CryptoJS.MD5('").substringBefore("')")
|
|
|
|
val amount = passScript.substringAfter(".toString()), ").substringBefore("));").toInt()
|
|
|
|
|
2023-09-10 06:12:57 +00:00
|
|
|
val idFile = "idfile".findIn(script)
|
|
|
|
val idUser = "idUser".findIn(script)
|
|
|
|
val domainApi = "DOMAIN_API".findIn(script)
|
|
|
|
val nameKeyV3 = "NameKeyV3".findIn(script)
|
2023-09-09 12:16:04 +00:00
|
|
|
val dataEnc = caesarShift(
|
|
|
|
mahoa(
|
|
|
|
"Win32|$idUser|$idFile|$referer",
|
|
|
|
md5(pass)
|
|
|
|
), amount
|
|
|
|
).toHex()
|
|
|
|
|
|
|
|
val captchaKey =
|
|
|
|
document.select("script[src*=https://www.google.com/recaptcha/api.js?render=]")
|
|
|
|
.attr("src").substringAfter("render=")
|
|
|
|
val token = getCaptchaToken(
|
|
|
|
url,
|
|
|
|
captchaKey,
|
|
|
|
referer = referer
|
|
|
|
)
|
|
|
|
|
|
|
|
val source = app.post(
|
|
|
|
domainApi, data = mapOf(
|
|
|
|
"namekey" to nameKeyV3,
|
|
|
|
"token" to "$token",
|
|
|
|
"referrer" to "$referer",
|
|
|
|
"data" to "$dataEnc|${md5(dataEnc + password)}",
|
|
|
|
), referer = "$mainUrl/"
|
|
|
|
).parsedSafe<Source>()
|
|
|
|
|
|
|
|
callback.invoke(
|
|
|
|
ExtractorLink(
|
|
|
|
this.name,
|
|
|
|
this.name,
|
|
|
|
source?.data ?: return,
|
|
|
|
"$mainUrl/",
|
|
|
|
Qualities.P1080.value,
|
|
|
|
INFER_TYPE
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
subtitleCallback.invoke(
|
|
|
|
SubtitleFile(
|
|
|
|
source.sub?.substringBefore("|")?.toLanguage() ?: return,
|
|
|
|
source.sub.substringAfter("|"),
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun caesarShift(str: String, amount: Int): String {
|
|
|
|
var output = ""
|
|
|
|
val adjustedAmount = if (amount < 0) amount + 26 else amount
|
|
|
|
for (element in str) {
|
|
|
|
var c = element
|
|
|
|
if (c.isLetter()) {
|
|
|
|
val code = c.code
|
|
|
|
c = when (code) {
|
|
|
|
in 65..90 -> ((code - 65 + adjustedAmount) % 26 + 65).toChar()
|
|
|
|
in 97..122 -> ((code - 97 + adjustedAmount) % 26 + 97).toChar()
|
|
|
|
else -> c
|
|
|
|
}
|
|
|
|
}
|
|
|
|
output += c
|
|
|
|
}
|
|
|
|
return output
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun mahoa(input: String, key: String): String {
|
|
|
|
val a = CryptoJS.encrypt(key, input)
|
|
|
|
return a.replace("U2FsdGVkX1", "")
|
|
|
|
.replace("/", "|a")
|
|
|
|
.replace("+", "|b")
|
|
|
|
.replace("=", "|c")
|
|
|
|
.replace("|", "-z")
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun md5(input: String): String {
|
|
|
|
val md = MessageDigest.getInstance("MD5")
|
|
|
|
return BigInteger(1, md.digest(input.toByteArray())).toString(16).padStart(32, '0')
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun String.toHex(): String {
|
|
|
|
return this.toByteArray().joinToString("") { "%02x".format(it) }
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun String.findIn(data: String): String {
|
2023-09-10 06:12:57 +00:00
|
|
|
return "$this\\s*=\\s*[\"'](\\S+)[\"'];".toRegex().find(data)?.groupValues?.get(1) ?: ""
|
2023-09-09 12:16:04 +00:00
|
|
|
}
|
|
|
|
|
2023-12-23 02:16:09 +00:00
|
|
|
private fun String.toLanguage(): String {
|
|
|
|
return if (this == "EN") "English" else this
|
2023-09-09 12:16:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
data class Source(
|
|
|
|
@JsonProperty("data") val data: String? = null,
|
|
|
|
@JsonProperty("sub") val sub: String? = null,
|
|
|
|
)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2023-09-19 02:48:36 +00:00
|
|
|
open class M4ufree : ExtractorApi() {
|
|
|
|
override val name = "M4ufree"
|
|
|
|
override val mainUrl = "https://play.playm4u.xyz"
|
|
|
|
override val requiresReferer = true
|
|
|
|
|
|
|
|
override suspend fun getUrl(
|
|
|
|
url: String,
|
|
|
|
referer: String?,
|
|
|
|
subtitleCallback: (SubtitleFile) -> Unit,
|
|
|
|
callback: (ExtractorLink) -> Unit
|
|
|
|
) {
|
|
|
|
val document = session.get(url, referer = referer).document
|
|
|
|
val script = document.selectFirst("script:containsData(idfile =)")?.data() ?: return
|
|
|
|
|
|
|
|
val idFile = "idfile".findIn(script)
|
|
|
|
val idUser = "idUser".findIn(script)
|
|
|
|
|
|
|
|
val video = session.post(
|
|
|
|
"https://api-plhq.playm4u.xyz/apidatard/$idUser/$idFile",
|
|
|
|
data = mapOf("referrer" to "$referer"),
|
|
|
|
headers = mapOf(
|
|
|
|
"Accept" to "*/*",
|
|
|
|
"X-Requested-With" to "XMLHttpRequest",
|
|
|
|
)
|
|
|
|
).text.let { AppUtils.tryParseJson<Source>(it) }?.data
|
|
|
|
|
|
|
|
callback.invoke(
|
|
|
|
ExtractorLink(
|
|
|
|
this.name,
|
|
|
|
this.name,
|
|
|
|
video ?: return,
|
|
|
|
referer ?: "",
|
|
|
|
Qualities.P720.value,
|
|
|
|
INFER_TYPE
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun String.findIn(data: String): String? {
|
|
|
|
return "$this\\s*=\\s*[\"'](\\S+)[\"'];".toRegex().find(data)?.groupValues?.get(1)
|
|
|
|
}
|
|
|
|
|
|
|
|
data class Source(
|
|
|
|
@JsonProperty("data") val data: String? = null,
|
|
|
|
)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2023-09-13 07:58:52 +00:00
|
|
|
open class VCloud : ExtractorApi() {
|
|
|
|
override val name: String = "V-Cloud"
|
|
|
|
override val mainUrl: String = "https://v-cloud.bio"
|
|
|
|
override val requiresReferer = true
|
|
|
|
|
|
|
|
override suspend fun getUrl(
|
|
|
|
url: String,
|
|
|
|
referer: String?,
|
|
|
|
subtitleCallback: (SubtitleFile) -> Unit,
|
|
|
|
callback: (ExtractorLink) -> Unit
|
|
|
|
) {
|
|
|
|
val res = app.get(url)
|
|
|
|
val doc = res.document
|
|
|
|
val changedLink = doc.selectFirst("script:containsData(url =)")?.data()?.let {
|
2023-12-11 04:24:12 +00:00
|
|
|
val regex = """url\s*=\s*['"](.*)['"];""".toRegex()
|
|
|
|
val doc2 = app.get(regex.find(it)?.groupValues?.get(1) ?: return).text
|
|
|
|
regex.find(doc2)?.groupValues?.get(1)?.substringAfter("r=")
|
|
|
|
}
|
2023-09-13 07:58:52 +00:00
|
|
|
val header = doc.selectFirst("div.card-header")?.text()
|
|
|
|
app.get(
|
|
|
|
base64Decode(changedLink ?: return), cookies = res.cookies, headers = mapOf(
|
|
|
|
"Accept" to "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8"
|
|
|
|
)
|
|
|
|
).document.select("p.text-success ~ a").apmap {
|
|
|
|
val link = it.attr("href")
|
2023-12-23 02:16:09 +00:00
|
|
|
if (link.contains("workers.dev") || it.text().contains("[Server : 1]") || link.contains(
|
|
|
|
"/dl.php?"
|
|
|
|
)
|
|
|
|
) {
|
2023-09-13 07:58:52 +00:00
|
|
|
callback.invoke(
|
|
|
|
ExtractorLink(
|
|
|
|
this.name,
|
|
|
|
this.name,
|
|
|
|
link,
|
|
|
|
"",
|
|
|
|
getIndexQuality(header),
|
|
|
|
INFER_TYPE
|
|
|
|
)
|
|
|
|
)
|
|
|
|
} else {
|
2023-12-23 02:16:09 +00:00
|
|
|
val direct = if (link.contains("gofile.io")) app.get(link).url else link
|
2023-09-13 07:58:52 +00:00
|
|
|
loadExtractor(direct, referer, subtitleCallback, callback)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun getIndexQuality(str: String?): Int {
|
|
|
|
return Regex("(\\d{3,4})[pP]").find(str ?: "")?.groupValues?.getOrNull(1)?.toIntOrNull()
|
|
|
|
?: Qualities.Unknown.value
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2023-10-08 01:37:12 +00:00
|
|
|
open class Streamruby : ExtractorApi() {
|
|
|
|
override val name = "Streamruby"
|
|
|
|
override val mainUrl = "https://streamruby.com"
|
|
|
|
override val requiresReferer = true
|
|
|
|
|
|
|
|
override suspend fun getUrl(
|
|
|
|
url: String,
|
|
|
|
referer: String?,
|
|
|
|
subtitleCallback: (SubtitleFile) -> Unit,
|
|
|
|
callback: (ExtractorLink) -> Unit
|
|
|
|
) {
|
|
|
|
val id = "/e/(\\w+)".toRegex().find(url)?.groupValues?.get(1) ?: return
|
2023-12-23 02:16:09 +00:00
|
|
|
val response = app.post(
|
|
|
|
"$mainUrl/dl", data = mapOf(
|
|
|
|
"op" to "embed",
|
|
|
|
"file_code" to id,
|
|
|
|
"auto" to "1",
|
|
|
|
"referer" to "",
|
|
|
|
), referer = referer
|
|
|
|
)
|
2023-10-08 01:37:12 +00:00
|
|
|
val script = if (!getPacked(response.text).isNullOrEmpty()) {
|
|
|
|
getAndUnpack(response.text)
|
|
|
|
} else {
|
|
|
|
response.document.selectFirst("script:containsData(sources:)")?.data()
|
|
|
|
}
|
2024-01-12 07:17:54 +00:00
|
|
|
val m3u8 = Regex("file:\\s*\"(.*?m3u8.*?)\"").find(script ?: return)?.groupValues?.getOrNull(1)
|
2023-10-08 01:37:12 +00:00
|
|
|
M3u8Helper.generateM3u8(
|
|
|
|
name,
|
|
|
|
m3u8 ?: return,
|
|
|
|
mainUrl
|
|
|
|
).forEach(callback)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2023-11-21 19:33:27 +00:00
|
|
|
open class Uploadever : ExtractorApi() {
|
|
|
|
override val name = "Uploadever"
|
|
|
|
override val mainUrl = "https://uploadever.in"
|
|
|
|
override val requiresReferer = true
|
|
|
|
|
|
|
|
override suspend fun getUrl(
|
|
|
|
url: String,
|
|
|
|
referer: String?,
|
|
|
|
subtitleCallback: (SubtitleFile) -> Unit,
|
|
|
|
callback: (ExtractorLink) -> Unit
|
|
|
|
) {
|
|
|
|
var res = app.get(url, referer = referer).document
|
|
|
|
val formUrl = res.select("form").attr("action")
|
2023-12-23 02:16:09 +00:00
|
|
|
var formData = res.select("form input").associate { it.attr("name") to it.attr("value") }
|
|
|
|
.filterKeys { it != "go" }
|
2023-11-21 19:33:27 +00:00
|
|
|
.toMutableMap()
|
|
|
|
val formReq = app.post(formUrl, data = formData)
|
|
|
|
|
|
|
|
res = formReq.document
|
2023-12-23 02:16:09 +00:00
|
|
|
val captchaKey =
|
|
|
|
res.select("script[src*=https://www.google.com/recaptcha/api.js?render=]").attr("src")
|
|
|
|
.substringAfter("render=")
|
2023-11-21 19:33:27 +00:00
|
|
|
val token = getCaptchaToken(url, captchaKey, referer = "$mainUrl/")
|
2023-12-23 02:16:09 +00:00
|
|
|
formData = res.select("form#down input").associate { it.attr("name") to it.attr("value") }
|
|
|
|
.toMutableMap()
|
2023-11-21 19:33:27 +00:00
|
|
|
formData["adblock_detected"] = "0"
|
|
|
|
formData["referer"] = url
|
2023-12-23 02:16:09 +00:00
|
|
|
res = app.post(
|
|
|
|
formReq.url,
|
|
|
|
data = formData + mapOf("g-recaptcha-response" to "$token"),
|
|
|
|
cookies = formReq.cookies
|
|
|
|
).document
|
2023-11-21 19:33:27 +00:00
|
|
|
val video = res.select("div.download-button a.btn.btn-dow.recaptchav2").attr("href")
|
|
|
|
|
|
|
|
callback.invoke(
|
|
|
|
ExtractorLink(
|
|
|
|
this.name,
|
|
|
|
this.name,
|
|
|
|
video,
|
|
|
|
"",
|
|
|
|
Qualities.Unknown.value,
|
|
|
|
INFER_TYPE
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2023-12-08 19:59:36 +00:00
|
|
|
open class Netembed : ExtractorApi() {
|
|
|
|
override var name: String = "Netembed"
|
|
|
|
override var mainUrl: String = "https://play.netembed.xyz"
|
|
|
|
override val requiresReferer = true
|
|
|
|
|
|
|
|
override suspend fun getUrl(
|
|
|
|
url: String,
|
|
|
|
referer: String?,
|
|
|
|
subtitleCallback: (SubtitleFile) -> Unit,
|
|
|
|
callback: (ExtractorLink) -> Unit
|
|
|
|
) {
|
|
|
|
val response = app.get(url, referer = referer)
|
|
|
|
val script = getAndUnpack(response.text)
|
2023-12-20 07:52:09 +00:00
|
|
|
val m3u8 = Regex("((https:|http:)//.*\\.m3u8)").find(script)?.groupValues?.getOrNull(1) ?: return
|
|
|
|
|
2024-01-02 23:57:41 +00:00
|
|
|
M3u8Helper.generateM3u8(this.name, m3u8, "$mainUrl/", ).forEach(callback)
|
2023-12-08 19:59:36 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-11 11:49:11 +00:00
|
|
|
open class Ridoo : ExtractorApi() {
|
|
|
|
override val name = "Ridoo"
|
|
|
|
override var mainUrl = "https://ridoo.net"
|
|
|
|
override val requiresReferer = true
|
|
|
|
|
|
|
|
override suspend fun getUrl(
|
|
|
|
url: String,
|
|
|
|
referer: String?,
|
|
|
|
subtitleCallback: (SubtitleFile) -> Unit,
|
|
|
|
callback: (ExtractorLink) -> Unit
|
|
|
|
) {
|
|
|
|
val response = app.get(url, referer = referer)
|
|
|
|
val script = if (!getPacked(response.text).isNullOrEmpty()) {
|
|
|
|
getAndUnpack(response.text)
|
|
|
|
} else {
|
|
|
|
response.document.selectFirst("script:containsData(sources:)")?.data()
|
|
|
|
}
|
|
|
|
val m3u8 = Regex("file:\\s*\"(.*?m3u8.*?)\"").find(script ?: return)?.groupValues?.getOrNull(1)
|
|
|
|
callback.invoke(
|
|
|
|
ExtractorLink(
|
|
|
|
this.name,
|
|
|
|
this.name,
|
|
|
|
m3u8 ?: return,
|
|
|
|
mainUrl,
|
|
|
|
Qualities.P1080.value,
|
|
|
|
INFER_TYPE
|
|
|
|
)
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
open class Streamvid : ExtractorApi() {
|
|
|
|
override val name = "Streamvid"
|
|
|
|
override val mainUrl = "https://streamvid.net"
|
|
|
|
override val requiresReferer = true
|
|
|
|
|
|
|
|
override suspend fun getUrl(
|
|
|
|
url: String,
|
|
|
|
referer: String?,
|
|
|
|
subtitleCallback: (SubtitleFile) -> Unit,
|
|
|
|
callback: (ExtractorLink) -> Unit
|
|
|
|
) {
|
|
|
|
val response = app.get(url, referer = referer)
|
|
|
|
val script = if (!getPacked(response.text).isNullOrEmpty()) {
|
|
|
|
getAndUnpack(response.text)
|
|
|
|
} else {
|
|
|
|
response.document.selectFirst("script:containsData(sources:)")?.data()
|
|
|
|
}
|
|
|
|
val m3u8 =
|
|
|
|
Regex("src:\\s*\"(.*?m3u8.*?)\"").find(script ?: return)?.groupValues?.getOrNull(1)
|
|
|
|
M3u8Helper.generateM3u8(
|
|
|
|
name,
|
|
|
|
m3u8 ?: return,
|
|
|
|
mainUrl
|
|
|
|
).forEach(callback)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
open class Embedrise : ExtractorApi() {
|
|
|
|
override val name = "Embedrise"
|
|
|
|
override val mainUrl = "https://embedrise.com"
|
|
|
|
override val requiresReferer = true
|
|
|
|
|
|
|
|
override suspend fun getUrl(
|
|
|
|
url: String,
|
|
|
|
referer: String?,
|
|
|
|
subtitleCallback: (SubtitleFile) -> Unit,
|
|
|
|
callback: (ExtractorLink) -> Unit
|
|
|
|
) {
|
|
|
|
val res = app.get(url, referer = referer).document
|
|
|
|
val title = res.select("title").text()
|
|
|
|
val video = res.select("video#player source").attr("src")
|
|
|
|
|
|
|
|
callback.invoke(
|
|
|
|
ExtractorLink(
|
|
|
|
this.name,
|
|
|
|
this.name,
|
|
|
|
video,
|
|
|
|
"$mainUrl/",
|
|
|
|
getIndexQuality(title),
|
|
|
|
INFER_TYPE
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2023-10-08 01:37:12 +00:00
|
|
|
class Streamwish : Filesim() {
|
|
|
|
override val name = "Streamwish"
|
|
|
|
override var mainUrl = "https://streamwish.to"
|
|
|
|
}
|
|
|
|
|
2023-11-16 11:05:39 +00:00
|
|
|
class Wishfast : Filesim() {
|
|
|
|
override val name = "Wishfast"
|
|
|
|
override var mainUrl = "https://wishfast.top"
|
|
|
|
}
|
|
|
|
|
2023-10-08 01:37:12 +00:00
|
|
|
class FilelionsTo : Filesim() {
|
|
|
|
override val name = "Filelions"
|
|
|
|
override var mainUrl = "https://filelions.to"
|
|
|
|
}
|
|
|
|
|
2024-01-01 12:05:41 +00:00
|
|
|
class Pixeldra : PixelDrain() {
|
2023-09-13 07:58:52 +00:00
|
|
|
override val mainUrl = "https://pixeldra.in"
|
|
|
|
}
|
|
|
|
|
2023-09-09 12:16:04 +00:00
|
|
|
class TravelR : GMPlayer() {
|
|
|
|
override val name = "TravelR"
|
|
|
|
override val mainUrl = "https://travel-russia.xyz"
|
|
|
|
}
|
|
|
|
|
|
|
|
class Mwish : Filesim() {
|
|
|
|
override val name = "Mwish"
|
|
|
|
override var mainUrl = "https://mwish.pro"
|
|
|
|
}
|
|
|
|
|
|
|
|
class Animefever : Filesim() {
|
|
|
|
override val name = "Animefever"
|
|
|
|
override var mainUrl = "https://animefever.fun"
|
|
|
|
}
|
|
|
|
|
2024-01-12 07:17:54 +00:00
|
|
|
class Multimovies : Ridoo() {
|
2023-09-09 12:16:04 +00:00
|
|
|
override val name = "Multimovies"
|
|
|
|
override var mainUrl = "https://multimovies.cloud"
|
|
|
|
}
|
|
|
|
|
|
|
|
class MultimoviesSB : StreamSB() {
|
|
|
|
override var name = "Multimovies"
|
|
|
|
override var mainUrl = "https://multimovies.website"
|
|
|
|
}
|
|
|
|
|
|
|
|
class Yipsu : Voe() {
|
|
|
|
override val name = "Yipsu"
|
|
|
|
override var mainUrl = "https://yip.su"
|
2023-10-22 09:52:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
class Embedwish : Filesim() {
|
|
|
|
override val name = "Embedwish"
|
|
|
|
override var mainUrl = "https://embedwish.com"
|
2023-12-06 04:15:42 +00:00
|
|
|
}
|
2023-12-15 04:32:48 +00:00
|
|
|
class Flaswish : Filesim() {
|
|
|
|
override val name = "Flaswish"
|
|
|
|
override var mainUrl = "https://flaswish.com"
|
2023-12-24 09:09:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
class Comedyshow : Jeniusplay() {
|
|
|
|
override val mainUrl = "https://comedyshow.to"
|
|
|
|
override val name = "Comedyshow"
|
2023-09-30 16:31:50 +00:00
|
|
|
}
|