FUCK ANDROID STORAGE

This commit is contained in:
LagradOst 2023-08-24 21:04:18 +02:00
parent 9b4701fe91
commit 3659906516
4 changed files with 883 additions and 31 deletions

View file

@ -591,7 +591,7 @@ class ResultViewModel2 : ViewModel() {
link, link,
"$fileName ${link.name}", "$fileName ${link.name}",
folder, folder,
if (link.url.contains(".srt")) ".srt" else "vtt", if (link.url.contains(".srt")) "srt" else "vtt",
false, false,
null, createNotificationCallback = {} null, createNotificationCallback = {}
) )
@ -719,7 +719,7 @@ class ResultViewModel2 : ViewModel() {
) )
) )
} }
.map { ExtractorSubtitleLink(it.name, it.url, "") } .map { ExtractorSubtitleLink(it.name, it.url, "") }.take(3)
.forEach { link -> .forEach { link ->
val fileName = VideoDownloadManager.getFileName(context, meta) val fileName = VideoDownloadManager.getFileName(context, meta)
downloadSubtitle(context, link, fileName, folder) downloadSubtitle(context, link, fileName, folder)

View file

@ -581,6 +581,7 @@ object VideoDownloadManager {
val foundFile = subDir.findFile(displayName) val foundFile = subDir.findFile(displayName)
val (file, fileLength) = if (foundFile == null || foundFile.exists() != true) { val (file, fileLength) = if (foundFile == null || foundFile.exists() != true) {
foundFile?.delete()
subDir.createFileOrThrow(displayName) to 0L subDir.createFileOrThrow(displayName) to 0L
} else { } else {
if (tryResume) { if (tryResume) {
@ -1678,6 +1679,11 @@ object VideoDownloadManager {
try { try {
val info = val info =
context.getKey<DownloadedFileInfo>(KEY_DOWNLOAD_INFO, id.toString()) ?: return null context.getKey<DownloadedFileInfo>(KEY_DOWNLOAD_INFO, id.toString()) ?: return null
/*
val test = basePathToFile(context, info.basePath)?.gotoDirectory(info.relativePath)
val files = test?.listFiles()
println("FILES:::: $files")*/
val file = info.toFile(context) val file = info.toFile(context)
// only delete the key if the file is not found // only delete the key if the file is not found

View file

@ -13,6 +13,7 @@ import com.hippo.unifile.UniRandomAccessFile
import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.logError
import okhttp3.internal.closeQuietly import okhttp3.internal.closeQuietly
import java.io.File import java.io.File
import java.io.FileNotFoundException
import java.io.InputStream import java.io.InputStream
import java.io.OutputStream import java.io.OutputStream
@ -65,6 +66,10 @@ class MediaFile(
private val external: Boolean = true, private val external: Boolean = true,
absolutePath: String, absolutePath: String,
) : SafeFile { ) : SafeFile {
override fun toString(): String {
return sanitizedAbsolutePath
}
// this is the path relative to the download directory so "/hello/text.txt" = "hello/text.txt" is in fact "Download/hello/text.txt" // this is the path relative to the download directory so "/hello/text.txt" = "hello/text.txt" is in fact "Download/hello/text.txt"
private val sanitizedAbsolutePath: String = private val sanitizedAbsolutePath: String =
replaceDuplicateFileSeparators(absolutePath) replaceDuplicateFileSeparators(absolutePath)
@ -84,6 +89,20 @@ class MediaFile(
private val baseUri = folderType.toUri(external) private val baseUri = folderType.toUri(external)
private val contentResolver: ContentResolver = context.contentResolver private val contentResolver: ContentResolver = context.contentResolver
fun removeCache() {
cachedUri = null
}
fun setCache(uri: Uri) {
cachedUri = uri
}
private var cachedUri : Uri? = null
private val fileUri: Uri? get() {
cachedUri?.let { return it }
return if (isFile) query()?.uri?.also { cachedUri = it } else null
}
init { init {
// some standard asserts that should always be hold or else this class wont work // some standard asserts that should always be hold or else this class wont work
assert(!relativePath.endsWith(File.separator)) assert(!relativePath.endsWith(File.separator))
@ -155,7 +174,12 @@ class MediaFile(
put(MediaStore.MediaColumns.MIME_TYPE, mime) put(MediaStore.MediaColumns.MIME_TYPE, mime)
put(MediaStore.MediaColumns.RELATIVE_PATH, relativePath) put(MediaStore.MediaColumns.RELATIVE_PATH, relativePath)
} }
return contentResolver.insert(baseUri, newFile)
return contentResolver.insert(baseUri, newFile)?.also {
if(displayName == namePath) {
setCache(it)
}
}
} }
override fun createFile(displayName: String?): SafeFile? { override fun createFile(displayName: String?): SafeFile? {
@ -172,22 +196,79 @@ class MediaFile(
private data class QueryResult( private data class QueryResult(
val uri: Uri, val uri: Uri,
val lastModified: Long, // val lastModified: Long,
val length: Long, // val length: Long,
) )
@RequiresApi(Build.VERSION_CODES.Q) @RequiresApi(Build.VERSION_CODES.Q)
private fun query(displayName: String = namePath): QueryResult? { private fun query(displayName: String = namePath): QueryResult? {
try { try {
//val (name, mime) = splitFilenameMime(fullName) val (name, ext) = splitFilenameExt(displayName)
contentResolver.query(
val projection = arrayOf( baseUri,
arrayOf(
MediaStore.MediaColumns._ID, MediaStore.MediaColumns._ID,
MediaStore.MediaColumns.DATE_MODIFIED, //MediaStore.MediaColumns.DATE_MODIFIED,
MediaStore.MediaColumns.SIZE, //MediaStore.MediaColumns.SIZE
) ),
"${MediaStore.MediaColumns.RELATIVE_PATH}='$relativePath${File.separator}' AND ${MediaStore.MediaColumns.DISPLAY_NAME}='$displayName'",
null,
null
)?.use { cursor ->
while (cursor.moveToNext()) {
val cursorId =
cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns._ID))
val selection = return QueryResult(
uri = ContentUris.withAppendedId(
baseUri, cursorId
),
// lastModified = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATE_MODIFIED)),
// length = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.SIZE)),
)
}
}
// fuck android fr, who decided that MediaStore.MediaColumns.DISPLAY_NAME ***WONT*** BE THE SAME AS THE FUCKING NAME IN EXPLORER
contentResolver.query(
baseUri,
arrayOf(
MediaStore.MediaColumns._ID,
MediaStore.MediaColumns.MIME_TYPE,
// MediaStore.MediaColumns.DATE_MODIFIED,
// MediaStore.MediaColumns.SIZE
),
"${MediaStore.MediaColumns.RELATIVE_PATH}='$relativePath${File.separator}' AND ${MediaStore.MediaColumns.TITLE}='$name'",
null,
null
)?.use { cursor ->
while (cursor.moveToNext()) {
val cursorMime =
cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.MIME_TYPE))
val matchAgainst = MimeTypes.fromMimeToExt(cursorMime)
// if extension does not exist and mime has no match, or both are nonull and match contains ext
if (!((ext == null && matchAgainst == null) || (matchAgainst != null && ext != null && matchAgainst.contains(
ext
)))
) continue
val cursorId =
cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns._ID))
return QueryResult(
uri = ContentUris.withAppendedId(
baseUri, cursorId
),
//lastModified = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATE_MODIFIED)),
//length = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.SIZE)),
)
}
}
/*val selection =
"${MediaStore.MediaColumns.RELATIVE_PATH}='$relativePath${File.separator}' AND ${MediaStore.MediaColumns.DISPLAY_NAME}='$displayName'" "${MediaStore.MediaColumns.RELATIVE_PATH}='$relativePath${File.separator}' AND ${MediaStore.MediaColumns.DISPLAY_NAME}='$displayName'"
contentResolver.query( contentResolver.query(
@ -206,7 +287,7 @@ class MediaFile(
length = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.SIZE)), length = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.SIZE)),
) )
} }
} }*/
} catch (t: Throwable) { } catch (t: Throwable) {
logError(t) logError(t)
} }
@ -215,7 +296,7 @@ class MediaFile(
} }
override fun uri(): Uri? { override fun uri(): Uri? {
return query()?.uri return fileUri //query()?.uri
} }
override fun name(): String? { override fun name(): String? {
@ -241,23 +322,42 @@ class MediaFile(
override fun lastModified(): Long? { override fun lastModified(): Long? {
if (isDir) return null if (isDir) return null
return query()?.lastModified
return null
//return query()?.lastModified
} }
override fun length(): Long? { override fun length(): Long? {
if (isDir) return null if (isDir) return null
val length = query()?.length ?: return null //val query = query()
if(length <= 0) { // val length = query?.length ?: return null
// if (length <= 0) {
try {
uri()?.let { uri ->
contentResolver.openFileDescriptor(uri, "r")
.use {
it?.statSize
}?.let {
return it
}
}
} catch (e: FileNotFoundException) {
removeCache()
return null
}
val inputStream: InputStream = openInputStream() ?: return null val inputStream: InputStream = openInputStream() ?: return null
return try { return try {
inputStream.available().toLong() inputStream.available().toLong()
} catch (t: Throwable) { } catch (t: Throwable) {
logError(t)
null null
} finally { } finally {
inputStream.closeQuietly() inputStream.closeQuietly()
} }
} //return null
return length // }
// return length
} }
override fun canRead(): Boolean { override fun canRead(): Boolean {
@ -278,20 +378,24 @@ class MediaFile(
it.delete() it.delete()
} }
} else { } else {
delete(uri() ?: return false) delete(uri() ?: return false).also {
removeCache()
}
} }
} }
override fun exists(): Boolean { override fun exists(): Boolean {
if (isDir) return true if (isDir) return true
return query() != null return length() != null
} }
override fun listFiles(): List<SafeFile>? { override fun listFiles(): List<SafeFile>? {
if (isFile) return null if (isFile) return null
try { try {
val projection = arrayOf( val projection = arrayOf(
MediaStore.MediaColumns.DISPLAY_NAME MediaStore.MediaColumns.DISPLAY_NAME,
// MediaStore.MediaColumns.TITLE,
// MediaStore.MediaColumns._ID
) )
val selection = val selection =
@ -304,14 +408,16 @@ class MediaFile(
while (cursor.moveToNext()) { while (cursor.moveToNext()) {
val nameIdx = cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME) val nameIdx = cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME)
if (nameIdx == -1) continue if (nameIdx == -1) continue
//val titleIdx = cursor.getColumnIndex(MediaStore.MediaColumns.TITLE)
//val title = cursor.getString(titleIdx)
val name = cursor.getString(nameIdx) val name = cursor.getString(nameIdx)
//println("title = $title, name = $name")
appendRelativePath(name, false)?.let { new -> appendRelativePath(name, false)?.let { new ->
out.add(new) out.add(new)
} }
} }
out return out
} }
} catch (t: Throwable) { } catch (t: Throwable) {
logError(t) logError(t)
@ -362,6 +468,7 @@ class MediaFile(
try { try {
return contentResolver.openInputStream(uri() ?: return null) return contentResolver.openInputStream(uri() ?: return null)
} catch (t: Throwable) { } catch (t: Throwable) {
logError(t)
return null return null
} }
} }

View file

@ -0,0 +1,739 @@
package com.lagradost.cloudstream3.utils.storage
object MimeTypes {
fun fromMimeToExt(mime : String) : Array<String>? {
return map[mime.lowercase()]
}
private val map : HashMap<String, Array<String>> = hashMapOf(
"application/x-subrip" to arrayOf("srt"),
"text/vtt " to arrayOf("vtt"),
"application/andrew-inset" to arrayOf("ez"),
"application/applixware" to arrayOf("aw"),
"application/atom+xml" to arrayOf("atom"),
"application/atomcat+xml" to arrayOf("atomcat"),
"application/atomsvc+xml" to arrayOf("atomsvc"),
"application/ccxml+xml" to arrayOf("ccxml"),
"application/cu-seeme" to arrayOf("cu"),
"application/davmount+xml" to arrayOf("davmount"),
"application/ecmascript" to arrayOf("ecma"),
"application/emma+xml" to arrayOf("emma"),
"application/epub+zip" to arrayOf("epub"),
"application/font-tdpfr" to arrayOf("pfr"),
"application/gzip" to arrayOf("gz","tgz"),
"application/x-gzip" to arrayOf("gz","tgz"),
"application/hyperstudio" to arrayOf("stk"),
"application/java-archive" to arrayOf("jar"),
"application/java-serialized-object" to arrayOf("ser"),
"application/java-vm" to arrayOf("class"),
"application/json" to arrayOf("json"),
"text/json" to arrayOf("json"),
"application/lost+xml" to arrayOf("lostxml"),
"application/mac-binhex40" to arrayOf("hqx"),
"application/mac-compactpro" to arrayOf("cpt"),
"application/marc" to arrayOf("mrc"),
"application/mathematica" to arrayOf("ma","mb","nb"),
"application/mathml+xml" to arrayOf("mathml","mml"),
"text/mathml" to arrayOf("mathml","mml"),
"application/mbox" to arrayOf("mbox"),
"application/mediaservercontrol+xml" to arrayOf("mscml"),
"application/mp4" to arrayOf("mp4s"),
"application/msword" to arrayOf("doc","dot","wiz"),
"application/mxf" to arrayOf("mxf"),
"application/octet-stream" to arrayOf("a","bin","bpk","deploy","dist","distz","dmg","dms","dump","elc","iso","lha","lrf","lzh","o","obj","pkg","so","srt"),
"application/oda" to arrayOf("oda"),
"application/oebps-package+xml" to arrayOf("opf"),
"application/ogg" to arrayOf("ogx"),
"application/onenote" to arrayOf("onepkg","onetmp","onetoc","onetoc2"),
"application/patch-ops-error+xml" to arrayOf("xer"),
"application/pdf" to arrayOf("pdf"),
"application/x-pdf" to arrayOf("pdf"),
"application/pgp-encrypted" to arrayOf("pgp"),
"application/pgp-signature" to arrayOf("asc","sig"),
"application/pics-rules" to arrayOf("prf"),
"application/pkcs10" to arrayOf("p10"),
"application/pkcs7-mime" to arrayOf("p7c","p7m"),
"application/x-pkcs7-certreqresp" to arrayOf("p7c","p7m"),
"application/x-pkcs7-certificates" to arrayOf("p7c","p7m"),
"application/pkcs7-signature" to arrayOf("p7s"),
"application/pkix-cert" to arrayOf("cer"),
"application/pkix-crl" to arrayOf("crl"),
"application/pkix-pkipath" to arrayOf("pkipath"),
"application/pkixcmp" to arrayOf("pki"),
"application/pls+xml" to arrayOf("pls"),
"application/postscript" to arrayOf("ai","eps","ps"),
"application/prs.cww" to arrayOf("cww"),
"application/rdf+xml" to arrayOf("rdf"),
"application/reginfo+xml" to arrayOf("rif"),
"application/relax-ng-compact-syntax" to arrayOf("rnc"),
"application/resource-lists+xml" to arrayOf("rl"),
"application/resource-lists-diff+xml" to arrayOf("rld"),
"application/rls-services+xml" to arrayOf("rs"),
"application/rsd+xml" to arrayOf("rsd"),
"application/rss+xml" to arrayOf("rss","xml"),
"application/rtf" to arrayOf("rtf"),
"application/sbml+xml" to arrayOf("sbml"),
"application/scvp-cv-request" to arrayOf("scq"),
"application/scvp-cv-response" to arrayOf("scs"),
"application/scvp-vp-request" to arrayOf("spq"),
"application/scvp-vp-response" to arrayOf("spp"),
"application/sdp" to arrayOf("sdp"),
"application/set-payment-initiation" to arrayOf("setpay"),
"application/set-registration-initiation" to arrayOf("setreg"),
"application/shf+xml" to arrayOf("shf"),
"application/smil+xml" to arrayOf("smi","smil"),
"application/sparql-query" to arrayOf("rq"),
"application/sparql-results+xml" to arrayOf("srx"),
"application/srgs" to arrayOf("gram"),
"application/srgs+xml" to arrayOf("grxml"),
"application/ssml+xml" to arrayOf("ssml"),
"application/vnd.3gpp.pic-bw-large" to arrayOf("plb"),
"application/vnd.3gpp.pic-bw-small" to arrayOf("psb"),
"application/vnd.3gpp.pic-bw-var" to arrayOf("pvb"),
"application/vnd.3gpp2.tcap" to arrayOf("tcap"),
"application/vnd.3m.post-it-notes" to arrayOf("pwn"),
"application/vnd.accpac.simply.aso" to arrayOf("aso"),
"application/vnd.accpac.simply.imp" to arrayOf("imp"),
"application/vnd.acucobol" to arrayOf("acu"),
"application/vnd.acucorp" to arrayOf("acutc","atc"),
"application/vnd.adobe.air-application-installer-package+zip" to arrayOf("air"),
"application/vnd.adobe.xdp+xml" to arrayOf("xdp"),
"application/vnd.adobe.xfdf" to arrayOf("xfdf"),
"application/vnd.airzip.filesecure.azf" to arrayOf("azf"),
"application/vnd.airzip.filesecure.azs" to arrayOf("azs"),
"application/vnd.amazon.ebook" to arrayOf("azw"),
"application/vnd.americandynamics.acc" to arrayOf("acc"),
"application/vnd.amiga.ami" to arrayOf("ami"),
"application/vnd.android.package-archive" to arrayOf("apk"),
"application/vnd.anser-web-certificate-issue-initiation" to arrayOf("cii"),
"application/vnd.anser-web-funds-transfer-initiation" to arrayOf("fti"),
"application/vnd.antix.game-component" to arrayOf("atx"),
"application/vnd.apple.installer+xml" to arrayOf("mpkg"),
"application/vnd.arastra.swi" to arrayOf("swi"),
"application/vnd.audiograph" to arrayOf("aep"),
"application/vnd.blueice.multipass" to arrayOf("mpm"),
"application/vnd.bmi" to arrayOf("bmi"),
"application/vnd.businessobjects" to arrayOf("rep"),
"application/vnd.chemdraw+xml" to arrayOf("cdxml"),
"application/vnd.chipnuts.karaoke-mmd" to arrayOf("mmd"),
"application/vnd.cinderella" to arrayOf("cdy"),
"application/vnd.claymore" to arrayOf("cla"),
"application/vnd.clonk.c4group" to arrayOf("c4d","c4f","c4g","c4p","c4u"),
"application/vnd.commonspace" to arrayOf("csp"),
"application/vnd.contact.cmsg" to arrayOf("cdbcmsg"),
"application/vnd.cosmocaller" to arrayOf("cmc"),
"application/vnd.crick.clicker" to arrayOf("clkx"),
"application/vnd.crick.clicker.keyboard" to arrayOf("clkk"),
"application/vnd.crick.clicker.palette" to arrayOf("clkp"),
"application/vnd.crick.clicker.template" to arrayOf("clkt"),
"application/vnd.crick.clicker.wordbank" to arrayOf("clkw"),
"application/vnd.criticaltools.wbs+xml" to arrayOf("wbs"),
"application/vnd.ctc-posml" to arrayOf("pml"),
"application/vnd.cups-ppd" to arrayOf("ppd"),
"application/vnd.curl.car" to arrayOf("car"),
"application/vnd.curl.pcurl" to arrayOf("pcurl"),
"application/vnd.data-vision.rdz" to arrayOf("rdz"),
"application/vnd.debian.binary-package" to arrayOf("deb","udeb"),
"application/vnd.denovo.fcselayout-link" to arrayOf("fe_launch"),
"application/vnd.dna" to arrayOf("dna"),
"application/vnd.dolby.mlp" to arrayOf("mlp"),
"application/vnd.dpgraph" to arrayOf("dpg"),
"application/vnd.dreamfactory" to arrayOf("dfac"),
"application/vnd.dynageo" to arrayOf("geo"),
"application/vnd.ecowin.chart" to arrayOf("mag"),
"application/vnd.enliven" to arrayOf("nml"),
"application/vnd.epson.esf" to arrayOf("esf"),
"application/vnd.epson.msf" to arrayOf("msf"),
"application/vnd.epson.quickanime" to arrayOf("qam"),
"application/vnd.epson.salt" to arrayOf("slt"),
"application/vnd.epson.ssf" to arrayOf("ssf"),
"application/vnd.eszigno3+xml" to arrayOf("es3","et3"),
"application/vnd.ezpix-album" to arrayOf("ez2"),
"application/vnd.ezpix-package" to arrayOf("ez3"),
"application/vnd.fdf" to arrayOf("fdf"),
"application/vnd.fdsn.mseed" to arrayOf("mseed"),
"application/vnd.fdsn.seed" to arrayOf("dataless","seed"),
"application/vnd.flographit" to arrayOf("gph"),
"application/vnd.fluxtime.clip" to arrayOf("ftc"),
"application/vnd.framemaker" to arrayOf("book","fm","frame","maker"),
"application/vnd.frogans.fnc" to arrayOf("fnc"),
"application/vnd.frogans.ltf" to arrayOf("ltf"),
"application/vnd.fsc.weblaunch" to arrayOf("fsc"),
"application/vnd.fujitsu.oasys" to arrayOf("oas"),
"application/vnd.fujitsu.oasys2" to arrayOf("oa2"),
"application/vnd.fujitsu.oasys3" to arrayOf("oa3"),
"application/vnd.fujitsu.oasysgp" to arrayOf("fg5"),
"application/vnd.fujitsu.oasysprs" to arrayOf("bh2"),
"application/vnd.fujixerox.ddd" to arrayOf("ddd"),
"application/vnd.fujixerox.docuworks" to arrayOf("xdw"),
"application/vnd.fujixerox.docuworks.binder" to arrayOf("xbd"),
"application/vnd.fuzzysheet" to arrayOf("fzs"),
"application/vnd.genomatix.tuxedo" to arrayOf("txd"),
"application/vnd.geogebra.file" to arrayOf("ggb"),
"application/vnd.geogebra.tool" to arrayOf("ggt"),
"application/vnd.geometry-explorer" to arrayOf("gex","gre"),
"application/vnd.gmx" to arrayOf("gmx"),
"application/vnd.google-earth.kml+xml" to arrayOf("kml"),
"application/vnd.google-earth.kmz" to arrayOf("kmz"),
"application/vnd.grafeq" to arrayOf("gqf","gqs"),
"application/vnd.groove-account" to arrayOf("gac"),
"application/vnd.groove-help" to arrayOf("ghf"),
"application/vnd.groove-identity-message" to arrayOf("gim"),
"application/vnd.groove-injector" to arrayOf("grv"),
"application/vnd.groove-tool-message" to arrayOf("gtm"),
"application/vnd.groove-tool-template" to arrayOf("tpl"),
"application/vnd.groove-vcard" to arrayOf("vcg"),
"application/vnd.handheld-entertainment+xml" to arrayOf("zmm"),
"application/vnd.hbci" to arrayOf("hbci"),
"application/vnd.hhe.lesson-player" to arrayOf("les"),
"application/vnd.hp-hpgl" to arrayOf("hpgl"),
"application/vnd.hp-hpid" to arrayOf("hpid"),
"application/vnd.hp-hps" to arrayOf("hps"),
"application/vnd.hp-jlyt" to arrayOf("jlt"),
"application/vnd.hp-pcl" to arrayOf("pcl"),
"application/vnd.hp-pclxl" to arrayOf("pclxl"),
"application/vnd.hydrostatix.sof-data" to arrayOf("sfd-hdstx"),
"application/vnd.hzn-3d-crossword" to arrayOf("x3d"),
"application/vnd.ibm.minipay" to arrayOf("mpy"),
"application/vnd.ibm.modcap" to arrayOf("afp","list3820","listafp"),
"application/vnd.ibm.rights-management" to arrayOf("irm"),
"application/vnd.ibm.secure-container" to arrayOf("sc"),
"application/vnd.iccprofile" to arrayOf("icc","icm"),
"application/vnd.igloader" to arrayOf("igl"),
"application/vnd.immervision-ivp" to arrayOf("ivp"),
"application/vnd.immervision-ivu" to arrayOf("ivu"),
"application/vnd.intercon.formnet" to arrayOf("xpw","xpx"),
"application/vnd.intu.qbo" to arrayOf("qbo"),
"application/vnd.intu.qfx" to arrayOf("qfx"),
"application/vnd.ipunplugged.rcprofile" to arrayOf("rcprofile"),
"application/vnd.irepository.package+xml" to arrayOf("irp"),
"application/vnd.is-xpr" to arrayOf("xpr"),
"application/vnd.jam" to arrayOf("jam"),
"application/vnd.jcp.javame.midlet-rms" to arrayOf("rms"),
"application/vnd.jisp" to arrayOf("jisp"),
"application/vnd.joost.joda-archive" to arrayOf("joda"),
"application/vnd.kahootz" to arrayOf("ktr","ktz"),
"application/vnd.kde.karbon" to arrayOf("karbon"),
"application/vnd.kde.kchart" to arrayOf("chrt"),
"application/vnd.kde.kformula" to arrayOf("kfo"),
"application/vnd.kde.kivio" to arrayOf("flw"),
"application/vnd.kde.kontour" to arrayOf("kon"),
"application/vnd.kde.kpresenter" to arrayOf("kpr","kpt"),
"application/vnd.kde.kspread" to arrayOf("ksp"),
"application/vnd.kde.kword" to arrayOf("kwd","kwt"),
"application/vnd.kenameaapp" to arrayOf("htke"),
"application/vnd.kidspiration" to arrayOf("kia"),
"application/vnd.kinar" to arrayOf("kne","knp"),
"application/vnd.koan" to arrayOf("skd","skm","skp","skt"),
"application/vnd.kodak-descriptor" to arrayOf("sse"),
"application/vnd.llamagraphics.life-balance.desktop" to arrayOf("lbd"),
"application/vnd.llamagraphics.life-balance.exchange+xml" to arrayOf("lbe"),
"application/vnd.lotus-1-2-3" to arrayOf("123"),
"application/vnd.lotus-approach" to arrayOf("apr"),
"application/vnd.lotus-freelance" to arrayOf("pre"),
"application/vnd.lotus-notes" to arrayOf("nsf"),
"application/vnd.lotus-organizer" to arrayOf("org"),
"application/vnd.lotus-screencam" to arrayOf("scm"),
"application/vnd.lotus-wordpro" to arrayOf("lwp"),
"application/vnd.macports.portpkg" to arrayOf("portpkg"),
"application/vnd.mcd" to arrayOf("mcd"),
"application/vnd.medcalcdata" to arrayOf("mc1"),
"application/vnd.mediastation.cdkey" to arrayOf("cdkey"),
"application/vnd.mfer" to arrayOf("mwf"),
"application/vnd.mfmp" to arrayOf("mfm"),
"application/vnd.micrografx.flo" to arrayOf("flo"),
"application/vnd.micrografx.igx" to arrayOf("igx"),
"application/vnd.mif" to arrayOf("mif"),
"application/vnd.mobius.daf" to arrayOf("daf"),
"application/vnd.mobius.dis" to arrayOf("dis"),
"application/vnd.mobius.mbk" to arrayOf("mbk"),
"application/vnd.mobius.mqy" to arrayOf("mqy"),
"application/vnd.mobius.msl" to arrayOf("msl"),
"application/vnd.mobius.plc" to arrayOf("plc"),
"application/vnd.mobius.txf" to arrayOf("txf"),
"application/vnd.mophun.application" to arrayOf("mpn"),
"application/vnd.mophun.certificate" to arrayOf("mpc"),
"application/vnd.mozilla.xul+xml" to arrayOf("xul"),
"application/vnd.ms-artgalry" to arrayOf("cil"),
"application/vnd.ms-cab-compressed" to arrayOf("cab"),
"application/vnd.ms-excel" to arrayOf("xla","xlb","xlc","xlm","xls","xlt","xlw"),
"application/vnd.ms-excel.addin.macroenabled.12" to arrayOf("xlam"),
"application/vnd.ms-excel.sheet.binary.macroenabled.12" to arrayOf("xlsb"),
"application/vnd.ms-excel.sheet.macroenabled.12" to arrayOf("xlsm"),
"application/vnd.ms-excel.template.macroenabled.12" to arrayOf("xltm"),
"application/vnd.ms-fontobject" to arrayOf("eot"),
"application/vnd.ms-htmlhelp" to arrayOf("chm"),
"application/vnd.ms-ims" to arrayOf("ims"),
"application/vnd.ms-lrm" to arrayOf("lrm"),
"application/vnd.ms-pki.seccat" to arrayOf("cat"),
"application/vnd.ms-pki.stl" to arrayOf("stl"),
"application/vnd.ms-powerpoint" to arrayOf("pot","ppa","pps","ppt","pwz"),
"application/vnd.ms-powerpoint.addin.macroenabled.12" to arrayOf("ppam"),
"application/vnd.ms-powerpoint.presentation.macroenabled.12" to arrayOf("pptm"),
"application/vnd.ms-powerpoint.slide.macroenabled.12" to arrayOf("sldm"),
"application/vnd.ms-powerpoint.slideshow.macroenabled.12" to arrayOf("ppsm"),
"application/vnd.ms-powerpoint.template.macroenabled.12" to arrayOf("potm"),
"application/vnd.ms-project" to arrayOf("mpp","mpt"),
"application/vnd.ms-word.document.macroenabled.12" to arrayOf("docm"),
"application/vnd.ms-word.template.macroenabled.12" to arrayOf("dotm"),
"application/vnd.ms-works" to arrayOf("wcm","wdb","wks","wps"),
"application/vnd.ms-wpl" to arrayOf("wpl"),
"application/vnd.ms-xpsdocument" to arrayOf("xps"),
"application/vnd.mseq" to arrayOf("mseq"),
"application/vnd.musician" to arrayOf("mus"),
"application/vnd.muvee.style" to arrayOf("msty"),
"application/vnd.neurolanguage.nlu" to arrayOf("nlu"),
"application/vnd.noblenet-directory" to arrayOf("nnd"),
"application/vnd.noblenet-sealer" to arrayOf("nns"),
"application/vnd.noblenet-web" to arrayOf("nnw"),
"application/vnd.nokia.n-gage.data" to arrayOf("ngdat"),
"application/vnd.nokia.n-gage.symbian.install" to arrayOf("n-gage"),
"application/vnd.nokia.radio-preset" to arrayOf("rpst"),
"application/vnd.nokia.radio-presets" to arrayOf("rpss"),
"application/vnd.novadigm.edm" to arrayOf("edm"),
"application/vnd.novadigm.edx" to arrayOf("edx"),
"application/vnd.novadigm.ext" to arrayOf("ext"),
"application/vnd.oasis.opendocument.chart" to arrayOf("odc"),
"application/vnd.oasis.opendocument.chart-template" to arrayOf("otc"),
"application/vnd.oasis.opendocument.database" to arrayOf("odb"),
"application/vnd.oasis.opendocument.formula" to arrayOf("odf"),
"application/vnd.oasis.opendocument.formula-template" to arrayOf("odft"),
"application/vnd.oasis.opendocument.graphics" to arrayOf("odg"),
"application/vnd.oasis.opendocument.graphics-template" to arrayOf("otg"),
"application/vnd.oasis.opendocument.image" to arrayOf("odi"),
"application/vnd.oasis.opendocument.image-template" to arrayOf("oti"),
"application/vnd.oasis.opendocument.presentation" to arrayOf("odp"),
"application/vnd.oasis.opendocument.presentation-template" to arrayOf("otp"),
"application/vnd.oasis.opendocument.spreadsheet" to arrayOf("ods"),
"application/vnd.oasis.opendocument.spreadsheet-template" to arrayOf("ots"),
"application/vnd.oasis.opendocument.text" to arrayOf("odt"),
"application/vnd.oasis.opendocument.text-master" to arrayOf("otm"),
"application/vnd.oasis.opendocument.text-template" to arrayOf("ott"),
"application/vnd.oasis.opendocument.text-web" to arrayOf("oth"),
"application/vnd.olpc-sugar" to arrayOf("xo"),
"application/vnd.oma.dd2+xml" to arrayOf("dd2"),
"application/vnd.openofficeorg.extension" to arrayOf("oxt"),
"application/vnd.openxmlformats-officedocument.presentationml.presentation" to arrayOf("pptx"),
"application/vnd.openxmlformats-officedocument.presentationml.slide" to arrayOf("sldx"),
"application/vnd.openxmlformats-officedocument.presentationml.slideshow" to arrayOf("ppsx"),
"application/vnd.openxmlformats-officedocument.presentationml.template" to arrayOf("potx"),
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" to arrayOf("xlsx"),
"application/vnd.openxmlformats-officedocument.spreadsheetml.template" to arrayOf("xltx"),
"application/vnd.openxmlformats-officedocument.wordprocessingml.document" to arrayOf("docx"),
"application/vnd.openxmlformats-officedocument.wordprocessingml.template" to arrayOf("dotx"),
"application/vnd.osgi.dp" to arrayOf("dp"),
"application/vnd.palm" to arrayOf("oprc","pdb","pqa"),
"application/vnd.pg.format" to arrayOf("str"),
"application/vnd.pg.osasli" to arrayOf("ei6"),
"application/vnd.picsel" to arrayOf("efif"),
"application/vnd.pocketlearn" to arrayOf("plf"),
"application/vnd.powerbuilder6" to arrayOf("pbd"),
"application/vnd.previewsystems.box" to arrayOf("box"),
"application/vnd.proteus.magazine" to arrayOf("mgz"),
"application/vnd.publishare-delta-tree" to arrayOf("qps"),
"application/vnd.pvi.ptid1" to arrayOf("ptid"),
"application/vnd.quark.quarkxpress" to arrayOf("qwd","qwt","qxb","qxd","qxl","qxt"),
"application/vnd.rar" to arrayOf("rar"),
"application/x-rar-compressed" to arrayOf("rar"),
"application/vnd.recordare.musicxml" to arrayOf("mxl"),
"application/vnd.recordare.musicxml+xml" to arrayOf("musicxml"),
"application/vnd.rim.cod" to arrayOf("cod"),
"application/vnd.rn-realmedia" to arrayOf("rm"),
"application/vnd.route66.link66+xml" to arrayOf("link66"),
"application/vnd.seemail" to arrayOf("see"),
"application/vnd.sema" to arrayOf("sema"),
"application/vnd.semd" to arrayOf("semd"),
"application/vnd.semf" to arrayOf("semf"),
"application/vnd.shana.informed.formdata" to arrayOf("ifm"),
"application/vnd.shana.informed.formtemplate" to arrayOf("itp"),
"application/vnd.shana.informed.interchange" to arrayOf("iif"),
"application/vnd.shana.informed.package" to arrayOf("ipk"),
"application/vnd.simtech-mindmapper" to arrayOf("twd","twds"),
"application/vnd.smaf" to arrayOf("mmf"),
"application/vnd.smart.teacher" to arrayOf("teacher"),
"application/vnd.solent.sdkm+xml" to arrayOf("sdkd","sdkm"),
"application/vnd.spotfire.dxp" to arrayOf("dxp"),
"application/vnd.spotfire.sfs" to arrayOf("sfs"),
"application/vnd.sqlite3" to arrayOf("db","sqlite","sqlite3","db-wal","sqlite-wal","db-shm","sqlite-shm"),
"application/x-sqlite3" to arrayOf("db","sqlite","sqlite3","db-wal","sqlite-wal","db-shm","sqlite-shm"),
"application/vnd.stardivision.calc" to arrayOf("sdc"),
"application/vnd.stardivision.draw" to arrayOf("sda"),
"application/vnd.stardivision.impress" to arrayOf("sdd"),
"application/vnd.stardivision.math" to arrayOf("smf"),
"application/vnd.stardivision.writer" to arrayOf("sdw","vor"),
"application/vnd.stardivision.writer-global" to arrayOf("sgl"),
"application/vnd.sun.xml.calc" to arrayOf("sxc"),
"application/vnd.sun.xml.calc.template" to arrayOf("stc"),
"application/vnd.sun.xml.draw" to arrayOf("sxd"),
"application/vnd.sun.xml.draw.template" to arrayOf("std"),
"application/vnd.sun.xml.impress" to arrayOf("sxi"),
"application/vnd.sun.xml.impress.template" to arrayOf("sti"),
"application/vnd.sun.xml.math" to arrayOf("sxm"),
"application/vnd.sun.xml.writer" to arrayOf("sxw"),
"application/vnd.sun.xml.writer.global" to arrayOf("sxg"),
"application/vnd.sun.xml.writer.template" to arrayOf("stw"),
"application/vnd.sus-calendar" to arrayOf("sus","susp"),
"application/vnd.svd" to arrayOf("svd"),
"application/vnd.symbian.install" to arrayOf("sis","sisx"),
"application/vnd.syncml+xml" to arrayOf("xsm"),
"application/vnd.syncml.dm+wbxml" to arrayOf("bdm"),
"application/vnd.syncml.dm+xml" to arrayOf("xdm"),
"application/vnd.tao.intent-module-archive" to arrayOf("tao"),
"application/vnd.tmobile-livetv" to arrayOf("tmo"),
"application/vnd.trid.tpt" to arrayOf("tpt"),
"application/vnd.triscape.mxs" to arrayOf("mxs"),
"application/vnd.trueapp" to arrayOf("tra"),
"application/vnd.ufdl" to arrayOf("ufd","ufdl"),
"application/vnd.uiq.theme" to arrayOf("utz"),
"application/vnd.umajin" to arrayOf("umj"),
"application/vnd.unity" to arrayOf("unityweb"),
"application/vnd.uoml+xml" to arrayOf("uoml"),
"application/vnd.vcx" to arrayOf("vcx"),
"application/vnd.visio" to arrayOf("vsd","vss","vst","vsw","vsdx","vssx","vstx","vssm","vstm"),
"application/vnd.visionary" to arrayOf("vis"),
"application/vnd.vsf" to arrayOf("vsf"),
"application/vnd.wap.sic" to arrayOf("sic"),
"application/vnd.wap.slc" to arrayOf("slc"),
"application/vnd.wap.wbxml" to arrayOf("wbxml"),
"application/vnd.wap.wmlc" to arrayOf("wmlc"),
"application/vnd.wap.wmlscriptc" to arrayOf("wmlsc"),
"application/vnd.webturbo" to arrayOf("wtb"),
"application/vnd.wordperfect" to arrayOf("wpd"),
"application/vnd.wqd" to arrayOf("wqd"),
"application/vnd.wt.stf" to arrayOf("stf"),
"application/vnd.xara" to arrayOf("xar"),
"application/vnd.xfdl" to arrayOf("xfdl"),
"application/vnd.yamaha.hv-dic" to arrayOf("hvd"),
"application/vnd.yamaha.hv-script" to arrayOf("hvs"),
"application/vnd.yamaha.hv-voice" to arrayOf("hvp"),
"application/vnd.yamaha.openscoreformat" to arrayOf("osf"),
"application/vnd.yamaha.openscoreformat.osfpvg+xml" to arrayOf("osfpvg"),
"application/vnd.yamaha.smaf-audio" to arrayOf("saf"),
"application/vnd.yamaha.smaf-phrase" to arrayOf("spf"),
"application/vnd.yellowriver-custom-menu" to arrayOf("cmp"),
"application/vnd.zul" to arrayOf("zir","zirz"),
"application/vnd.zzazz.deck+xml" to arrayOf("zaz"),
"application/voicexml+xml" to arrayOf("vxml"),
"application/winhlp" to arrayOf("hlp"),
"application/wsdl+xml" to arrayOf("wsdl"),
"application/wspolicy+xml" to arrayOf("wspolicy"),
"application/x-7z-compressed" to arrayOf("7z"),
"application/x-abiword" to arrayOf("abw"),
"application/x-ace-compressed" to arrayOf("ace"),
"application/x-authorware-bin" to arrayOf("aab","u32","vox","x32"),
"application/x-authorware-map" to arrayOf("aam"),
"application/x-authorware-seg" to arrayOf("aas"),
"application/x-bcpio" to arrayOf("bcpio"),
"application/x-bittorrent" to arrayOf("torrent"),
"application/x-bzip" to arrayOf("bz"),
"application/x-bzip2" to arrayOf("boz","bz2"),
"application/x-cdlink" to arrayOf("vcd"),
"application/x-chat" to arrayOf("chat"),
"application/x-chess-pgn" to arrayOf("pgn"),
"application/x-cpio" to arrayOf("cpio"),
"application/x-csh" to arrayOf("csh"),
"application/x-debian-package" to arrayOf("deb","udeb"),
"application/x-director" to arrayOf("cct","cst","cxt","dcr","dir","dxr","fgd","swa","w3d"),
"application/x-doom" to arrayOf("wad"),
"application/x-dtbncx+xml" to arrayOf("ncx"),
"application/x-dtbook+xml" to arrayOf("dtb"),
"application/x-dtbresource+xml" to arrayOf("res"),
"application/x-dvi" to arrayOf("dvi"),
"application/x-font-bdf" to arrayOf("bdf"),
"application/x-font-ghostscript" to arrayOf("gsf"),
"application/x-font-linux-psf" to arrayOf("psf"),
"application/x-font-otf" to arrayOf("otf"),
"font/otf" to arrayOf(),
"application/x-font-pcf" to arrayOf("pcf"),
"application/x-font-snf" to arrayOf("snf"),
"application/x-font-ttf" to arrayOf("ttc","ttf"),
"application/x-font-type1" to arrayOf("afm","pfa","pfb","pfm"),
"application/x-futuresplash" to arrayOf("spl"),
"application/x-gnumeric" to arrayOf("gnumeric"),
"application/x-gtar" to arrayOf("gtar"),
"application/x-gzip" to arrayOf("gz","tgz"),
"application/gzip" to arrayOf("gz","tgz"),
"application/x-hdf" to arrayOf("hdf"),
"application/x-java-jnlp-file" to arrayOf("jnlp"),
"application/x-killustrator" to arrayOf("kil"),
"application/x-krita" to arrayOf("kra","krz"),
"application/x-latex" to arrayOf("latex"),
"application/x-mobipocket-ebook" to arrayOf("mobi","prc"),
"application/x-ms-application" to arrayOf("application"),
"application/x-ms-wmd" to arrayOf("wmd"),
"application/x-ms-wmz" to arrayOf("wmz"),
"application/x-ms-xbap" to arrayOf("xbap"),
"application/x-msaccess" to arrayOf("mdb"),
"application/x-msbinder" to arrayOf("obd"),
"application/x-mscardfile" to arrayOf("crd"),
"application/x-msclip" to arrayOf("clp"),
"application/x-msdownload" to arrayOf("bat","com","dll","exe","msi"),
"application/x-msmediaview" to arrayOf("m13","m14","mvb"),
"application/x-msmetafile" to arrayOf("wmf"),
"application/x-msmoney" to arrayOf("mny"),
"application/x-mspublisher" to arrayOf("pub"),
"application/x-msschedule" to arrayOf("scd"),
"application/x-msterminal" to arrayOf("trm"),
"application/x-mswrite" to arrayOf("wri"),
"application/x-netcdf" to arrayOf("cdf","nc"),
"application/x-perl" to arrayOf("pm","pl"),
"application/x-pkcs12" to arrayOf("p12","pfx"),
"application/x-pkcs7-certificates" to arrayOf("p7b","spc"),
"application/x-python-code" to arrayOf("pyc","pyo"),
"application/x-redhat-package-manager" to arrayOf("rpa"),
"application/x-rpm" to arrayOf("rpm"),
"application/x-sh" to arrayOf("sh"),
"application/x-shar" to arrayOf("shar"),
"application/x-shellscript" to arrayOf("sh"),
"application/x-shockwave-flash" to arrayOf("swf"),
"application/x-silverlight-app" to arrayOf("xap"),
"application/x-stuffit" to arrayOf("sit"),
"application/x-stuffitx" to arrayOf("sitx"),
"application/x-sv4cpio" to arrayOf("sv4cpio"),
"application/x-sv4crc" to arrayOf("sv4crc"),
"application/x-tar" to arrayOf("tar"),
"application/x-tcl" to arrayOf("tcl"),
"application/x-tex" to arrayOf("tex"),
"application/x-tex-tfm" to arrayOf("tfm"),
"application/x-texinfo" to arrayOf("texi","texinfo"),
"application/x-trash" to arrayOf(),
"application/x-ustar" to arrayOf("ustar"),
"application/x-wais-source" to arrayOf("src"),
"application/x-x509-ca-cert" to arrayOf("crt","der"),
"application/x-xfig" to arrayOf("fig"),
"application/x-xpinstall" to arrayOf("xpi"),
"application/xenc+xml" to arrayOf("xenc"),
"application/xhtml+xml" to arrayOf("xht","xhtml"),
"application/xml" to arrayOf("xml","xpdl","xsl"),
"application/xml-dtd" to arrayOf("dtd"),
"application/xop+xml" to arrayOf("xop"),
"application/xslt+xml" to arrayOf("xslt"),
"application/xspf+xml" to arrayOf("xspf"),
"application/xv+xml" to arrayOf("mxml","xhvml","xvm","xvml"),
"application/yaml" to arrayOf("yaml","yml"),
"text/yaml" to arrayOf("yaml","yml"),
"text/x-yaml" to arrayOf("yaml","yml"),
"application/x-yaml" to arrayOf("yaml","yml"),
"application/zip" to arrayOf("zip"),
"application/x-zip-compressed" to arrayOf("zip"),
"application/zip-compressed" to arrayOf("zip"),
"audio/3gpp" to arrayOf("3gp"),
"video/3gpp" to arrayOf("3gp"),
"audio/3gpp2" to arrayOf("3g2"),
"video/3gpp2" to arrayOf("3g2"),
"audio/aac" to arrayOf("aac","mp4","m4a"),
"audio/x-aac" to arrayOf("aac","mp4","m4a"),
"audio/adpcm" to arrayOf("adp"),
"audio/aiff" to arrayOf("aiff","aif","aff"),
"audio/x-aiff" to arrayOf("aiff","aif","aff"),
"audio/basic" to arrayOf("au","snd"),
"audio/flac" to arrayOf("flac"),
"audio/x-flac" to arrayOf("flac"),
"audio/midi" to arrayOf("kar","mid","midi","rmi"),
"audio/mp4" to arrayOf("mp4a"),
"audio/mpeg" to arrayOf("m2a","m3a","mp2","mp2a","mp3","mpga"),
"audio/mp3" to arrayOf("m2a","m3a","mp2","mp2a","mp3","mpga"),
"audio/mpeg3" to arrayOf("m2a","m3a","mp2","mp2a","mp3","mpga"),
"audio/x-mpeg-3" to arrayOf("m2a","m3a","mp2","mp2a","mp3","mpga"),
"audio/ogg" to arrayOf("oga","ogg","spx"),
"audio/opus" to arrayOf("opus"),
"audio/vnd.digital-winds" to arrayOf("eol"),
"audio/vnd.dts" to arrayOf("dts"),
"audio/vnd.dts.hd" to arrayOf("dtshd"),
"audio/vnd.lucent.voice" to arrayOf("lvp"),
"audio/vnd.ms-playready.media.pya" to arrayOf("pya"),
"audio/vnd.nuera.ecelp4800" to arrayOf("ecelp4800"),
"audio/vnd.nuera.ecelp7470" to arrayOf("ecelp7470"),
"audio/vnd.nuera.ecelp9600" to arrayOf("ecelp9600"),
"audio/wav" to arrayOf("wav"),
"audio/x-wav" to arrayOf("wav"),
"audio/vnd.wave" to arrayOf("wav"),
"audio/wave" to arrayOf("wav"),
"audio/x-pn-wav" to arrayOf("wav"),
"audio/webm" to arrayOf("weba"),
"audio/x-aiff" to arrayOf("aif","aifc","aiff"),
"audio/x-matroska" to arrayOf("mka"),
"audio/x-mpegurl" to arrayOf("m3u"),
"audio/x-ms-wax" to arrayOf("wax"),
"audio/x-ms-wma" to arrayOf("wma"),
"audio/x-pn-realaudio" to arrayOf("ra","ram"),
"audio/x-pn-realaudio-plugin" to arrayOf("rmp"),
"chemical/x-cdx" to arrayOf("cdx"),
"chemical/x-cif" to arrayOf("cif"),
"chemical/x-cmdf" to arrayOf("cmdf"),
"chemical/x-cml" to arrayOf("cml"),
"chemical/x-csml" to arrayOf("csml"),
"chemical/x-xyz" to arrayOf("xyz"),
"font/otf" to arrayOf("otf"),
"application/x-font-otf" to arrayOf(),
"font/woff" to arrayOf("woff"),
"font/woff2" to arrayOf("woff2"),
"gcode" to arrayOf("gcode"),
"text/x.gcode" to arrayOf("gcode"),
"text/x-gcode" to arrayOf("gcode"),
"image/avif" to arrayOf("avif","avifs"),
"image/bmp" to arrayOf("bmp"),
"image/cgm" to arrayOf("cgm"),
"image/g3fax" to arrayOf("g3"),
"image/gif" to arrayOf("gif"),
"image/heic" to arrayOf("heif","heic"),
"image/ief" to arrayOf("ief"),
"image/jpeg" to arrayOf("jpe","jpeg","jpg","pjpg","jfif","jfif-tbnl","jif"),
"image/pjpeg" to arrayOf("jpe","jpeg","jpg","pjpg","jfi","jfif","jfif-tbnl","jif"),
"image/png" to arrayOf("png"),
"image/x-png" to arrayOf("png"),
"image/vnd.mozilla.apng" to arrayOf(),
"image/prs.btif" to arrayOf("btif"),
"image/svg+xml" to arrayOf("svg","svgz"),
"image/tiff" to arrayOf("tif","tiff"),
"image/vnd.adobe.photoshop" to arrayOf("psd"),
"image/vnd.djvu" to arrayOf("djv","djvu"),
"image/vnd.dwg" to arrayOf("dwg"),
"image/vnd.dxf" to arrayOf("dxf"),
"image/vnd.fastbidsheet" to arrayOf("fbs"),
"image/vnd.fpx" to arrayOf("fpx"),
"image/vnd.fst" to arrayOf("fst"),
"image/vnd.fujixerox.edmics-mmr" to arrayOf("mmr"),
"image/vnd.fujixerox.edmics-rlc" to arrayOf("rlc"),
"image/vnd.ms-modi" to arrayOf("mdi"),
"image/vnd.net-fpx" to arrayOf("npx"),
"image/vnd.wap.wbmp" to arrayOf("wbmp"),
"image/vnd.xiff" to arrayOf("xif"),
"image/webp" to arrayOf("webp"),
"image/x-adobe-dng" to arrayOf("dng"),
"image/x-canon-cr2" to arrayOf("cr2"),
"image/x-canon-crw" to arrayOf("crw"),
"image/x-cmu-raster" to arrayOf("ras"),
"image/x-cmx" to arrayOf("cmx"),
"image/x-epson-erf" to arrayOf("erf"),
"image/x-freehand" to arrayOf("fh","fh4","fh5","fh7","fhc"),
"image/x-fuji-raf" to arrayOf("raf"),
"image/x-icns" to arrayOf("icns"),
"image/x-icon" to arrayOf("ico"),
"image/x-kodak-dcr" to arrayOf("dcr"),
"image/x-kodak-k25" to arrayOf("k25"),
"image/x-kodak-kdc" to arrayOf("kdc"),
"image/x-minolta-mrw" to arrayOf("mrw"),
"image/x-nikon-nef" to arrayOf("nef"),
"image/x-olympus-orf" to arrayOf("orf"),
"image/x-panasonic-raw" to arrayOf("raw","rw2","rwl"),
"image/x-pcx" to arrayOf("pcx"),
"image/x-pentax-pef" to arrayOf("pef","ptx"),
"image/x-pict" to arrayOf("pct","pic"),
"image/x-portable-anymap" to arrayOf("pnm"),
"image/x-portable-bitmap" to arrayOf("pbm"),
"image/x-portable-graymap" to arrayOf("pgm"),
"image/x-portable-pixmap" to arrayOf("ppm"),
"image/x-rgb" to arrayOf("rgb"),
"image/x-sigma-x3f" to arrayOf("x3f"),
"image/x-sony-arw" to arrayOf("arw"),
"image/x-sony-sr2" to arrayOf("sr2"),
"image/x-sony-srf" to arrayOf("srf"),
"image/x-xbitmap" to arrayOf("xbm"),
"image/x-xpixmap" to arrayOf("xpm"),
"image/x-xwindowdump" to arrayOf("xwd"),
"message/rfc822" to arrayOf("eml","mht","mhtml","mime","nws"),
"model/iges" to arrayOf("iges","igs"),
"model/mesh" to arrayOf("mesh","msh","silo"),
"model/vnd.dwf" to arrayOf("dwf"),
"model/vnd.gdl" to arrayOf("gdl"),
"model/vnd.gtw" to arrayOf("gtw"),
"model/vnd.mts" to arrayOf("mts"),
"model/vnd.vtu" to arrayOf("vtu"),
"model/vrml" to arrayOf("vrml","wrl"),
"text/calendar" to arrayOf("ics","ifb"),
"text/css" to arrayOf("css"),
"text/csv" to arrayOf("csv"),
"application/csv" to arrayOf(),
"text/x-csv" to arrayOf(),
"application/x-csv" to arrayOf(),
"text/x-comma-separated-values" to arrayOf(),
"text/comma-separated-values" to arrayOf(),
"text/html" to arrayOf("htm","html"),
"text/javascript" to arrayOf("js"),
"application/ecmascript" to arrayOf("js"),
"application/javascript" to arrayOf("js"),
"application/x-ecmascript" to arrayOf("js"),
"application/x-javascript" to arrayOf("js"),
"text/ecmascript" to arrayOf("js"),
"text/javascript1.0" to arrayOf("js"),
"text/javascript1.1" to arrayOf("js"),
"text/javascript1.2" to arrayOf("js"),
"text/javascript1.3" to arrayOf("js"),
"text/javascript1.4" to arrayOf("js"),
"text/javascript1.5" to arrayOf("js"),
"text/jscript" to arrayOf("js"),
"text/livescript" to arrayOf("js"),
"text/x-ecmascript" to arrayOf("js"),
"text/x-javascript" to arrayOf("js"),
"text/markdown" to arrayOf("md","markdown","mdown","markdn"),
"text/x-markdown" to arrayOf("md","markdown","mdown","markdn"),
"text/mathml" to arrayOf("mathml","mml"),
"application/mathml+xml" to arrayOf("mml"),
"text/plain" to arrayOf("conf","def","diff","in","ksh","list","log","pl","text","txt"),
"text/prs.lines.tag" to arrayOf("dsc"),
"text/richtext" to arrayOf("rtx"),
"text/sgml" to arrayOf("sgm","sgml"),
"text/tab-separated-values" to arrayOf("tsv"),
"text/troff" to arrayOf("man","me","ms","roff","t","tr"),
"text/uri-list" to arrayOf("uri","uris","urls"),
"text/vnd.curl" to arrayOf("curl"),
"text/vnd.curl.dcurl" to arrayOf("dcurl"),
"text/vnd.curl.mcurl" to arrayOf("mcurl"),
"text/vnd.curl.scurl" to arrayOf("scurl"),
"text/vnd.fly" to arrayOf("fly"),
"text/vnd.fmi.flexstor" to arrayOf("flx"),
"text/vnd.graphviz" to arrayOf("gv"),
"text/vnd.in3d.3dml" to arrayOf("3dml"),
"text/vnd.in3d.spot" to arrayOf("spot"),
"text/vnd.sun.j2me.app-descriptor" to arrayOf("jad"),
"text/vnd.wap.si" to arrayOf("si"),
"text/vnd.wap.sl" to arrayOf("sl"),
"text/vnd.wap.wml" to arrayOf("wml"),
"text/vnd.wap.wmlscript" to arrayOf("wmls"),
"text/x-asm" to arrayOf("asm","s"),
"text/x-c" to arrayOf("c","cc","cpp","cxx","dic","h","hh"),
"text/x-fortran" to arrayOf("f","f77","f90","for"),
"text/x-java-source" to arrayOf("java"),
"text/x-pascal" to arrayOf("p","pas","pp","inc"),
"text/x-python" to arrayOf("py"),
"text/x-setext" to arrayOf("etx"),
"text/x-uuencode" to arrayOf("uu"),
"text/x-vcalendar" to arrayOf("vcs"),
"text/x-vcard" to arrayOf("vcf"),
"video/3gpp" to arrayOf("3gp"),
"audio/3gpp" to arrayOf("3gp"),
"video/3gpp2" to arrayOf("3g2"),
"audio/3gpp2" to arrayOf("3g2"),
"video/h261" to arrayOf("h261"),
"video/h263" to arrayOf("h263"),
"video/h264" to arrayOf("h264"),
"video/jpeg" to arrayOf("jpgv"),
"video/jpm" to arrayOf("jpgm","jpm"),
"video/mj2" to arrayOf("mj2","mjp2"),
"video/mp2t" to arrayOf("ts"),
"video/mp4" to arrayOf("mp4","mp4v","mpg4"),
"video/mpeg" to arrayOf("m1v","m2v","mpa","mpe","mpeg","mpg"),
"video/ogg" to arrayOf("ogv"),
"video/quicktime" to arrayOf("mov","qt"),
"video/vnd.fvt" to arrayOf("fvt"),
"video/vnd.mpegurl" to arrayOf("m4u","mxu"),
"video/vnd.ms-playready.media.pyv" to arrayOf("pyv"),
"video/vnd.vivo" to arrayOf("viv"),
"video/webm" to arrayOf("webm"),
"video/x-f4v" to arrayOf("f4v"),
"video/x-fli" to arrayOf("fli"),
"video/x-flv" to arrayOf("flv"),
"video/x-m4v" to arrayOf("m4v"),
"video/x-matroska" to arrayOf("mkv"),
"video/x-ms-asf" to arrayOf("asf","asx"),
"video/x-ms-wm" to arrayOf("wm"),
"video/x-ms-wmv" to arrayOf("wmv"),
"video/x-ms-wmx" to arrayOf("wmx"),
"video/x-ms-wvx" to arrayOf("wvx"),
"video/x-msvideo" to arrayOf("avi"),
"video/x-sgi-movie" to arrayOf("movie"),
"x-conference/x-cooltalk" to arrayOf("ice"))
}