From 830fcdf0da1072b92c36a650d930d6b4d3d77b31 Mon Sep 17 00:00:00 2001 From: Patrick Stewart Date: Tue, 9 Jul 2024 10:27:39 -0700 Subject: [PATCH] add: adding ports from the symfony mime component --- packages/mime/lib/mime.dart | 16 + packages/mime/lib/mime_exception.dart | 14 + packages/mime/lib/src/.gitkeep | 0 .../src/exception/exception_interface.dart | 24 + .../exception/invalid_argument_exception.dart | 13 + .../lib/src/exception/logic_exception.dart | 5 + .../src/file_binary_mime_type_guesser.dart | 95 + .../lib/src/file_info_mime_type_guesser.dart | 55 + .../lib/src/mime_type_guesser_interface.dart | 22 + packages/mime/lib/src/mime_types.dart | 3872 +++++++++++++++++ .../mime/lib/src/mime_types_interface.dart | 21 + packages/mime/pubspec.yaml | 1 + 12 files changed, 4138 insertions(+) create mode 100644 packages/mime/lib/mime.dart create mode 100644 packages/mime/lib/mime_exception.dart delete mode 100644 packages/mime/lib/src/.gitkeep create mode 100644 packages/mime/lib/src/exception/exception_interface.dart create mode 100644 packages/mime/lib/src/exception/invalid_argument_exception.dart create mode 100644 packages/mime/lib/src/exception/logic_exception.dart create mode 100644 packages/mime/lib/src/file_binary_mime_type_guesser.dart create mode 100644 packages/mime/lib/src/file_info_mime_type_guesser.dart create mode 100644 packages/mime/lib/src/mime_type_guesser_interface.dart create mode 100644 packages/mime/lib/src/mime_types.dart create mode 100644 packages/mime/lib/src/mime_types_interface.dart diff --git a/packages/mime/lib/mime.dart b/packages/mime/lib/mime.dart new file mode 100644 index 0000000..887614e --- /dev/null +++ b/packages/mime/lib/mime.dart @@ -0,0 +1,16 @@ +/* + * This file is part of the Protevus Platform. + * + * (C) Protevus + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +library; + +export 'src/mime_type_guesser_interface.dart'; +export 'src/file_binary_mime_type_guesser.dart'; +export 'src/file_info_mime_type_guesser.dart'; +export 'src/mime_types_interface.dart'; +export 'src/mime_types.dart'; diff --git a/packages/mime/lib/mime_exception.dart b/packages/mime/lib/mime_exception.dart new file mode 100644 index 0000000..dd07d6c --- /dev/null +++ b/packages/mime/lib/mime_exception.dart @@ -0,0 +1,14 @@ +/* + * This file is part of the Protevus Platform. + * + * (C) Protevus + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +library; + +export 'src/exception/exception_interface.dart'; +export 'src/exception/invalid_argument_exception.dart'; +export 'src/exception/logic_exception.dart'; diff --git a/packages/mime/lib/src/.gitkeep b/packages/mime/lib/src/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/packages/mime/lib/src/exception/exception_interface.dart b/packages/mime/lib/src/exception/exception_interface.dart new file mode 100644 index 0000000..f337a14 --- /dev/null +++ b/packages/mime/lib/src/exception/exception_interface.dart @@ -0,0 +1,24 @@ +// This file is part of the Symfony package. +// +// (c) Fabien Potencier +// +// For the full copyright and license information, please view the LICENSE +// file that was distributed with this source code. + +// In Dart, we don't have a direct equivalent of PHP's namespace. +// Instead, we use library or part directives to organize code. +// For this example, we'll assume this is part of a library called 'symfony_mime'. + +// Dart doesn't have a direct equivalent to PHP's Throwable interface. +// Instead, we'll use the Exception class as the base for our interface. + +/// Exception interface for the Symfony MIME component. +/// +/// This interface is used to mark exceptions specific to the MIME component. +/// It doesn't add any additional methods but serves as a marker interface. +/// +/// @author Fabien Potencier +abstract class ExceptionInterface implements Exception { + // This interface doesn't declare any methods. + // It's used as a marker interface in Dart, similar to its use in PHP. +} diff --git a/packages/mime/lib/src/exception/invalid_argument_exception.dart b/packages/mime/lib/src/exception/invalid_argument_exception.dart new file mode 100644 index 0000000..bad2bed --- /dev/null +++ b/packages/mime/lib/src/exception/invalid_argument_exception.dart @@ -0,0 +1,13 @@ +import 'dart:core'; +import 'exception_interface.dart'; + +/// @author Fabien Potencier +class InvalidArgumentException implements Exception, ExceptionInterface { + final String message; + + // Constructor in Dart + InvalidArgumentException([this.message = '']); + + @override + String toString() => 'InvalidArgumentException: $message'; +} diff --git a/packages/mime/lib/src/exception/logic_exception.dart b/packages/mime/lib/src/exception/logic_exception.dart new file mode 100644 index 0000000..44c8a73 --- /dev/null +++ b/packages/mime/lib/src/exception/logic_exception.dart @@ -0,0 +1,5 @@ +import 'package:protevus_mime/src/exception/exception_interface.dart'; + +class LogicException extends StateError implements ExceptionInterface { + LogicException(super.message); +} diff --git a/packages/mime/lib/src/file_binary_mime_type_guesser.dart b/packages/mime/lib/src/file_binary_mime_type_guesser.dart new file mode 100644 index 0000000..c09564f --- /dev/null +++ b/packages/mime/lib/src/file_binary_mime_type_guesser.dart @@ -0,0 +1,95 @@ +import 'dart:io'; +import 'package:protevus_mime/mime_exception.dart'; +import 'package:protevus_mime/mime.dart'; + +/// This file is part of the Symfony package. +/// +/// (c) Fabien Potencier +/// +/// For the full copyright and license information, please view the LICENSE +/// file that was distributed with this source code. + +/// Guesses the MIME type with the binary "file" (only available on *nix). +/// +/// @author Bernhard Schussek +class FileBinaryMimeTypeGuesser implements MimeTypeGuesserInterface { + /// The command to run to get the MIME type of a file. + /// + /// The $cmd pattern must contain a "%s" string that will be replaced + /// with the file name to guess. + /// + /// The command output must start with the MIME type of the file. + final String _cmd; + + /// Creates a new [FileBinaryMimeTypeGuesser] instance. + /// + /// [cmd] The command to run to get the MIME type of a file. + FileBinaryMimeTypeGuesser([this._cmd = 'file -b --mime -- %s 2>/dev/null']); + + @override + bool isGuesserSupported() { + // Dart doesn't have a direct equivalent to PHP's static variables inside methods, + // so we'll use a top-level variable instead. + return isGuesserSupportedCached(); + } + + @override + Future guessMimeType(String filePath) async { + if (!File(filePath).existsSync() || + !File(filePath).statSync().modeString().contains('r')) { + throw InvalidArgumentException( + 'The "$filePath" file does not exist or is not readable.'); + } + + if (!isGuesserSupported()) { + throw LogicException( + 'The "${runtimeType.toString()}" guesser is not supported.'); + } + + final result = await Process.run( + 'sh', ['-c', _cmd.replaceFirst('%s', _escapeShellArg(filePath))]); + + if (result.exitCode > 0) { + return null; + } + + final type = result.stdout.toString().trim(); + final match = + RegExp(r'^([a-z0-9\-]+/[a-z0-9\-\+\.]+)', caseSensitive: false) + .firstMatch(type); + + if (match == null) { + // it's not a type, but an error message + return null; + } + + return match.group(1); + } + + String _escapeShellArg(String arg) { + return "'${arg.replaceAll("'", "'\\''")}'"; + } +} + +bool? _supportedCache; + +bool isGuesserSupportedCached() { + if (_supportedCache != null) { + return _supportedCache!; + } + + if (Platform.isWindows || !_hasCommand('file')) { + return _supportedCache = false; + } + + return _supportedCache = true; +} + +bool _hasCommand(String command) { + try { + final result = Process.runSync('which', [command]); + return result.exitCode == 0 && result.stdout.toString().trim().isNotEmpty; + } catch (e) { + return false; + } +} diff --git a/packages/mime/lib/src/file_info_mime_type_guesser.dart b/packages/mime/lib/src/file_info_mime_type_guesser.dart new file mode 100644 index 0000000..b26aa41 --- /dev/null +++ b/packages/mime/lib/src/file_info_mime_type_guesser.dart @@ -0,0 +1,55 @@ +import 'dart:io'; +import 'package:mime/mime.dart' as mime; + +import 'package:protevus_mime/mime_exception.dart'; +import 'package:protevus_mime/mime.dart'; + +/// Guesses the MIME type using the MIME package, which is similar to PHP's FileInfo. +/// +/// @author Bernhard Schussek +/// Ported to Dart by [Your Name] +class FileInfoMimeTypeGuesser implements MimeTypeGuesserInterface { + /// Constructs a new FileinfoMimeTypeGuesser. + FileInfoMimeTypeGuesser(); + + @override + bool isGuesserSupported() { + // In Dart, we're using the mime package which is always available if imported + return true; + } + + @override + Future guessMimeType(String path) async { + final file = File(path); + + if (!await file.exists() || + !(await file.stat()).type.toString().contains('file')) { + throw InvalidArgumentException( + 'The "$path" file does not exist or is not readable.'); + } + + if (!isGuesserSupported()) { + throw LogicException( + 'The "${runtimeType.toString()}" guesser is not supported.'); + } + + String? mimeType; + try { + // Using the mime package to guess the MIME type + final bytes = await file.openRead(0, 12).first; + mimeType = mime.lookupMimeType(path, headerBytes: bytes); + } catch (e) { + print('Error guessing MIME type: $e'); + return null; + } + + if (mimeType != null && mimeType.length % 2 == 0) { + final mimeStart = mimeType.substring(0, mimeType.length ~/ 2); + if (mimeStart + mimeStart == mimeType) { + mimeType = mimeStart; + } + } + + return mimeType; + } +} diff --git a/packages/mime/lib/src/mime_type_guesser_interface.dart b/packages/mime/lib/src/mime_type_guesser_interface.dart new file mode 100644 index 0000000..1434323 --- /dev/null +++ b/packages/mime/lib/src/mime_type_guesser_interface.dart @@ -0,0 +1,22 @@ +// This file is part of the Symfony package. +// +// (c) Fabien Potencier +// +// For the full copyright and license information, please view the LICENSE +// file that was distributed with this source code. + +import 'dart:io'; + +/// Guesses the MIME type of a file. +/// +/// @author Fabien Potencier +abstract class MimeTypeGuesserInterface { + /// Returns true if this guesser is supported. + bool isGuesserSupported(); + + /// Guesses the MIME type of the file with the given path. + /// + /// Throws [UnsupportedError] if the guesser is not supported + /// Throws [FileSystemException] if the file does not exist or is not readable + Future guessMimeType(String path); +} diff --git a/packages/mime/lib/src/mime_types.dart b/packages/mime/lib/src/mime_types.dart new file mode 100644 index 0000000..0c03c7a --- /dev/null +++ b/packages/mime/lib/src/mime_types.dart @@ -0,0 +1,3872 @@ +import 'package:protevus_mime/mime_exception.dart'; +import 'package:protevus_mime/mime.dart'; + +final class MimeTypes implements MimeTypesInterface { + final Map> _extensions = {}; + final Map> _mimeTypes = {}; + final List _guessers = []; + static late MimeTypes? _default; + + /// A map of MIME types to their corresponding file extensions. + /// + /// This map provides a comprehensive list of MIME types as keys, with each key + /// associated with a list of file extensions that correspond to that MIME type. + /// It can be used for tasks such as determining the appropriate MIME type for a + /// given file extension, or finding all possible file extensions for a specific + /// MIME type. + /// + /// The map covers a wide range of file types, including but not limited to: + /// - Document formats (PDF, Word, Excel, etc.) + /// - Image formats (JPEG, PNG, GIF, etc.) + /// - Audio and video formats (MP3, MP4, AVI, etc.) + /// - Archive formats (ZIP, RAR, etc.) + /// - Programming language files (Java, Python, C++, etc.) + /// - Web-related formats (HTML, CSS, JavaScript, etc.) + /// + /// This comprehensive mapping can be particularly useful in applications that + /// deal with file type detection, content type negotiation, or file handling + /// based on MIME types. + static final Map> MAP = { + 'application/acrobat': ['pdf'], + 'application/andrew-inset': ['ez'], + 'application/annodex': ['anx'], + 'application/appinstaller': ['appinstaller'], + 'application/applixware': ['aw'], + 'application/appx': ['appx'], + 'application/appxbundle': ['appxbundle'], + 'application/atom+xml': ['atom'], + 'application/atomcat+xml': ['atomcat'], + 'application/atomdeleted+xml': ['atomdeleted'], + 'application/atomsvc+xml': ['atomsvc'], + 'application/atsc-dwd+xml': ['dwd'], + 'application/atsc-held+xml': ['held'], + 'application/atsc-rsat+xml': ['rsat'], + 'application/bat': ['bat'], + 'application/bdoc': ['bdoc'], + 'application/bzip2': ['bz2', 'bz'], + 'application/calendar+xml': ['xcs'], + 'application/cbor': ['cbor'], + 'application/ccxml+xml': ['ccxml'], + 'application/cdfx+xml': ['cdfx'], + 'application/cdmi-capability': ['cdmia'], + 'application/cdmi-container': ['cdmic'], + 'application/cdmi-domain': ['cdmid'], + 'application/cdmi-object': ['cdmio'], + 'application/cdmi-queue': ['cdmiq'], + 'application/cdr': ['cdr'], + 'application/coreldraw': ['cdr'], + 'application/cpl+xml': ['cpl'], + 'application/csv': ['csv'], + 'application/cu-seeme': ['cu'], + 'application/dash+xml': ['mpd'], + 'application/dash-patch+xml': ['mpp'], + 'application/davmount+xml': ['davmount'], + 'application/dbase': ['dbf'], + 'application/dbf': ['dbf'], + 'application/dicom': ['dcm'], + 'application/docbook+xml': ['dbk', 'docbook'], + 'application/dssc+der': ['dssc'], + 'application/dssc+xml': ['xdssc'], + 'application/ecmascript': ['ecma', 'es'], + 'application/emf': ['emf'], + 'application/emma+xml': ['emma'], + 'application/emotionml+xml': ['emotionml'], + 'application/epub+zip': ['epub'], + 'application/exi': ['exi'], + 'application/express': ['exp'], + 'application/fdt+xml': ['fdt'], + 'application/fits': ['fits', 'fit', 'fts'], + 'application/font-tdpfr': ['pfr'], + 'application/font-woff': ['woff'], + 'application/futuresplash': ['swf', 'spl'], + 'application/geo+json': ['geojson', 'geo.json'], + 'application/gml+xml': ['gml'], + 'application/gnunet-directory': ['gnd'], + 'application/gpx': ['gpx'], + 'application/gpx+xml': ['gpx'], + 'application/gxf': ['gxf'], + 'application/gzip': ['gz'], + 'application/hjson': ['hjson'], + 'application/hta': ['hta'], + 'application/hyperstudio': ['stk'], + 'application/ico': ['ico'], + 'application/ics': ['vcs', 'ics'], + 'application/illustrator': ['ai'], + 'application/inkml+xml': ['ink', 'inkml'], + 'application/ipfix': ['ipfix'], + 'application/its+xml': ['its'], + 'application/java': ['class'], + 'application/java-archive': ['jar', 'war', 'ear'], + 'application/java-byte-code': ['class'], + 'application/java-serialized-object': ['ser'], + 'application/java-vm': ['class'], + 'application/javascript': ['js', 'mjs', 'jsm'], + 'application/jrd+json': ['jrd'], + 'application/json': ['json', 'map'], + 'application/json-patch+json': ['json-patch'], + 'application/json5': ['json5'], + 'application/jsonml+json': ['jsonml'], + 'application/ld+json': ['jsonld'], + 'application/lgr+xml': ['lgr'], + 'application/lost+xml': ['lostxml'], + 'application/lotus123': ['123', 'wk1', 'wk3', 'wk4', 'wks'], + 'application/m3u': ['m3u', 'm3u8', 'vlc'], + 'application/mac-binhex40': ['hqx'], + 'application/mac-compactpro': ['cpt'], + 'application/mads+xml': ['mads'], + 'application/manifest+json': ['webmanifest'], + 'application/marc': ['mrc'], + 'application/marcxml+xml': ['mrcx'], + 'application/mathematica': ['ma', 'nb', 'mb'], + 'application/mathml+xml': ['mathml', 'mml'], + 'application/mbox': ['mbox'], + 'application/mdb': ['mdb'], + 'application/media-policy-dataset+xml': ['mpf'], + 'application/mediaservercontrol+xml': ['mscml'], + 'application/metalink+xml': ['metalink'], + 'application/metalink4+xml': ['meta4'], + 'application/mets+xml': ['mets'], + 'application/microsoftpatch': ['msp'], + 'application/microsoftupdate': ['msu'], + 'application/mmt-aei+xml': ['maei'], + 'application/mmt-usd+xml': ['musd'], + 'application/mods+xml': ['mods'], + 'application/mp21': ['m21', 'mp21'], + 'application/mp4': ['mp4s', 'm4p'], + 'application/mrb-consumer+xml': ['xdf'], + 'application/mrb-publish+xml': ['xdf'], + 'application/ms-tnef': ['tnef', 'tnf'], + 'application/msaccess': ['mdb'], + 'application/msexcel': [ + 'xls', + 'xlc', + 'xll', + 'xlm', + 'xlw', + 'xla', + 'xlt', + 'xld' + ], + 'application/msix': ['msix'], + 'application/msixbundle': ['msixbundle'], + 'application/mspowerpoint': ['ppz', 'ppt', 'pps', 'pot'], + 'application/msword': ['doc', 'dot'], + 'application/msword-template': ['dot'], + 'application/mxf': ['mxf'], + 'application/n-quads': ['nq'], + 'application/n-triples': ['nt'], + 'application/nappdf': ['pdf'], + 'application/node': ['cjs'], + 'application/octet-stream': [ + 'bin', + 'dms', + 'lrf', + 'mar', + 'so', + 'dist', + 'distz', + 'pkg', + 'bpk', + 'dump', + 'elc', + 'deploy', + 'exe', + 'dll', + 'deb', + 'dmg', + 'iso', + 'img', + 'msi', + 'msp', + 'msm', + 'buffer' + ], + 'application/oda': ['oda'], + 'application/oebps-package+xml': ['opf'], + 'application/ogg': ['ogx'], + 'application/omdoc+xml': ['omdoc'], + 'application/onenote': ['onetoc', 'onetoc2', 'onetmp', 'onepkg'], + 'application/ovf': ['ova'], + 'application/owl+xml': ['owx'], + 'application/oxps': ['oxps'], + 'application/p2p-overlay+xml': ['relo'], + 'application/patch-ops-error+xml': ['xer'], + 'application/pcap': ['pcap', 'cap', 'dmp'], + 'application/pdf': ['pdf'], + 'application/pgp': ['pgp', 'gpg', 'asc'], + 'application/pgp-encrypted': ['pgp', 'gpg', 'asc'], + 'application/pgp-keys': ['asc', 'skr', 'pkr', 'pgp', 'gpg', 'key'], + 'application/pgp-signature': ['asc', 'sig', 'pgp', 'gpg'], + 'application/photoshop': ['psd'], + 'application/pics-rules': ['prf'], + 'application/pkcs10': ['p10'], + 'application/pkcs12': ['p12', 'pfx'], + 'application/pkcs7-mime': ['p7m', 'p7c'], + 'application/pkcs7-signature': ['p7s'], + 'application/pkcs8': ['p8'], + 'application/pkcs8-encrypted': ['p8e'], + 'application/pkix-attr-cert': ['ac'], + 'application/pkix-cert': ['cer'], + 'application/pkix-crl': ['crl'], + 'application/pkix-pkipath': ['pkipath'], + 'application/pkixcmp': ['pki'], + 'application/pls': ['pls'], + 'application/pls+xml': ['pls'], + 'application/postscript': ['ai', 'eps', 'ps'], + 'application/powerpoint': ['ppz', 'ppt', 'pps', 'pot'], + 'application/provenance+xml': ['provx'], + 'application/prs.cww': ['cww'], + 'application/prs.wavefront-obj': ['obj'], + 'application/pskc+xml': ['pskcxml'], + 'application/ram': ['ram'], + 'application/raml+yaml': ['raml'], + 'application/rdf+xml': ['rdf', 'owl', 'rdfs'], + 'application/reginfo+xml': ['rif'], + 'application/relax-ng-compact-syntax': ['rnc'], + 'application/resource-lists+xml': ['rl'], + 'application/resource-lists-diff+xml': ['rld'], + 'application/rls-services+xml': ['rs'], + 'application/route-apd+xml': ['rapd'], + 'application/route-s-tsid+xml': ['sls'], + 'application/route-usd+xml': ['rusd'], + 'application/rpki-ghostbusters': ['gbr'], + 'application/rpki-manifest': ['mft'], + 'application/rpki-roa': ['roa'], + 'application/rsd+xml': ['rsd'], + 'application/rss+xml': ['rss'], + 'application/rtf': ['rtf'], + 'application/sbml+xml': ['sbml'], + 'application/schema+json': ['json'], + 'application/scvp-cv-request': ['scq'], + 'application/scvp-cv-response': ['scs'], + 'application/scvp-vp-request': ['spq'], + 'application/scvp-vp-response': ['spp'], + 'application/sdp': ['sdp'], + 'application/senml+xml': ['senmlx'], + 'application/sensml+xml': ['sensmlx'], + 'application/set-payment-initiation': ['setpay'], + 'application/set-registration-initiation': ['setreg'], + 'application/shf+xml': ['shf'], + 'application/sieve': ['siv', 'sieve'], + 'application/smil': ['smil', 'smi', 'sml', 'kino'], + 'application/smil+xml': ['smi', 'smil', 'sml', 'kino'], + 'application/sparql-query': ['rq', 'qs'], + 'application/sparql-results+xml': ['srx'], + 'application/sql': ['sql'], + 'application/srgs': ['gram'], + 'application/srgs+xml': ['grxml'], + 'application/sru+xml': ['sru'], + 'application/ssdl+xml': ['ssdl'], + 'application/ssml+xml': ['ssml'], + 'application/stuffit': ['sit', 'hqx'], + 'application/swid+xml': ['swidtag'], + 'application/tei+xml': ['tei', 'teicorpus'], + 'application/tga': ['tga', 'icb', 'tpic', 'vda', 'vst'], + 'application/thraud+xml': ['tfi'], + 'application/timestamped-data': ['tsd'], + 'application/toml': ['toml'], + 'application/trig': ['trig'], + 'application/ttml+xml': ['ttml'], + 'application/ubjson': ['ubj'], + 'application/urc-ressheet+xml': ['rsheet'], + 'application/urc-targetdesc+xml': ['td'], + 'application/vnd.1000minds.decision-model+xml': ['1km'], + 'application/vnd.3gpp.pic-bw-large': ['plb'], + 'application/vnd.3gpp.pic-bw-small': ['psb'], + 'application/vnd.3gpp.pic-bw-var': ['pvb'], + 'application/vnd.3gpp2.tcap': ['tcap'], + 'application/vnd.3m.post-it-notes': ['pwn'], + 'application/vnd.accpac.simply.aso': ['aso'], + 'application/vnd.accpac.simply.imp': ['imp'], + 'application/vnd.acucobol': ['acu'], + 'application/vnd.acucorp': ['atc', 'acutc'], + 'application/vnd.adobe.air-application-installer-package+zip': ['air'], + 'application/vnd.adobe.flash.movie': ['swf', 'spl'], + 'application/vnd.adobe.formscentral.fcdt': ['fcdt'], + 'application/vnd.adobe.fxp': ['fxp', 'fxpl'], + 'application/vnd.adobe.illustrator': ['ai'], + 'application/vnd.adobe.xdp+xml': ['xdp'], + 'application/vnd.adobe.xfdf': ['xfdf'], + 'application/vnd.age': ['age'], + 'application/vnd.ahead.space': ['ahead'], + 'application/vnd.airzip.filesecure.azf': ['azf'], + 'application/vnd.airzip.filesecure.azs': ['azs'], + 'application/vnd.amazon.ebook': ['azw'], + 'application/vnd.amazon.mobi8-ebook': ['azw3', 'kfx'], + 'application/vnd.americandynamics.acc': ['acc'], + 'application/vnd.amiga.ami': ['ami'], + 'application/vnd.android.package-archive': ['apk'], + 'application/vnd.anser-web-certificate-issue-initiation': ['cii'], + 'application/vnd.anser-web-funds-transfer-initiation': ['fti'], + 'application/vnd.antix.game-component': ['atx'], + 'application/vnd.appimage': ['appimage'], + 'application/vnd.apple.installer+xml': ['mpkg'], + 'application/vnd.apple.keynote': ['key', 'keynote'], + 'application/vnd.apple.mpegurl': ['m3u8', 'm3u'], + 'application/vnd.apple.numbers': ['numbers'], + 'application/vnd.apple.pages': ['pages'], + 'application/vnd.apple.pkpass': ['pkpass'], + 'application/vnd.aristanetworks.swi': ['swi'], + 'application/vnd.astraea-software.iota': ['iota'], + 'application/vnd.audiograph': ['aep'], + 'application/vnd.balsamiq.bmml+xml': ['bmml'], + 'application/vnd.blueice.multipass': ['mpm'], + 'application/vnd.bmi': ['bmi'], + 'application/vnd.businessobjects': ['rep'], + 'application/vnd.chemdraw+xml': ['cdxml'], + 'application/vnd.chess-pgn': ['pgn'], + 'application/vnd.chipnuts.karaoke-mmd': ['mmd'], + 'application/vnd.cinderella': ['cdy'], + 'application/vnd.citationstyles.style+xml': ['csl'], + 'application/vnd.claymore': ['cla'], + 'application/vnd.cloanto.rp9': ['rp9'], + 'application/vnd.clonk.c4group': ['c4g', 'c4d', 'c4f', 'c4p', 'c4u'], + 'application/vnd.cluetrust.cartomobile-config': ['c11amc'], + 'application/vnd.cluetrust.cartomobile-config-pkg': ['c11amz'], + 'application/vnd.coffeescript': ['coffee'], + 'application/vnd.comicbook+zip': ['cbz'], + 'application/vnd.comicbook-rar': ['cbr'], + 'application/vnd.commonspace': ['csp'], + 'application/vnd.contact.cmsg': ['cdbcmsg'], + 'application/vnd.corel-draw': ['cdr'], + 'application/vnd.cosmocaller': ['cmc'], + 'application/vnd.crick.clicker': ['clkx'], + 'application/vnd.crick.clicker.keyboard': ['clkk'], + 'application/vnd.crick.clicker.palette': ['clkp'], + 'application/vnd.crick.clicker.template': ['clkt'], + 'application/vnd.crick.clicker.wordbank': ['clkw'], + 'application/vnd.criticaltools.wbs+xml': ['wbs'], + 'application/vnd.ctc-posml': ['pml'], + 'application/vnd.cups-ppd': ['ppd'], + 'application/vnd.curl.car': ['car'], + 'application/vnd.curl.pcurl': ['pcurl'], + 'application/vnd.dart': ['dart'], + 'application/vnd.data-vision.rdz': ['rdz'], + 'application/vnd.dbf': ['dbf'], + 'application/vnd.debian.binary-package': ['deb', 'udeb'], + 'application/vnd.dece.data': ['uvf', 'uvvf', 'uvd', 'uvvd'], + 'application/vnd.dece.ttml+xml': ['uvt', 'uvvt'], + 'application/vnd.dece.unspecified': ['uvx', 'uvvx'], + 'application/vnd.dece.zip': ['uvz', 'uvvz'], + 'application/vnd.denovo.fcselayout-link': ['fe_launch'], + 'application/vnd.dna': ['dna'], + 'application/vnd.dolby.mlp': ['mlp'], + 'application/vnd.dpgraph': ['dpg'], + 'application/vnd.dreamfactory': ['dfac'], + 'application/vnd.ds-keypoint': ['kpxx'], + 'application/vnd.dvb.ait': ['ait'], + 'application/vnd.dvb.service': ['svc'], + 'application/vnd.dynageo': ['geo'], + 'application/vnd.ecowin.chart': ['mag'], + 'application/vnd.efi.img': ['raw-disk-image', 'img'], + 'application/vnd.efi.iso': ['iso', 'iso9660'], + 'application/vnd.emusic-emusic_package': ['emp'], + 'application/vnd.enliven': ['nml'], + 'application/vnd.epson.esf': ['esf'], + 'application/vnd.epson.msf': ['msf'], + 'application/vnd.epson.quickanime': ['qam'], + 'application/vnd.epson.salt': ['slt'], + 'application/vnd.epson.ssf': ['ssf'], + 'application/vnd.eszigno3+xml': ['es3', 'et3'], + 'application/vnd.etsi.asic-e+zip': ['asice'], + 'application/vnd.ezpix-album': ['ez2'], + 'application/vnd.ezpix-package': ['ez3'], + 'application/vnd.fdf': ['fdf'], + 'application/vnd.fdsn.mseed': ['mseed'], + 'application/vnd.fdsn.seed': ['seed', 'dataless'], + 'application/vnd.flatpak': ['flatpak', 'xdgapp'], + 'application/vnd.flatpak.ref': ['flatpakref'], + 'application/vnd.flatpak.repo': ['flatpakrepo'], + 'application/vnd.flographit': ['gph'], + 'application/vnd.fluxtime.clip': ['ftc'], + 'application/vnd.framemaker': ['fm', 'frame', 'maker', 'book'], + 'application/vnd.frogans.fnc': ['fnc'], + 'application/vnd.frogans.ltf': ['ltf'], + 'application/vnd.fsc.weblaunch': ['fsc'], + 'application/vnd.fujitsu.oasys': ['oas'], + 'application/vnd.fujitsu.oasys2': ['oa2'], + 'application/vnd.fujitsu.oasys3': ['oa3'], + 'application/vnd.fujitsu.oasysgp': ['fg5'], + 'application/vnd.fujitsu.oasysprs': ['bh2'], + 'application/vnd.fujixerox.ddd': ['ddd'], + 'application/vnd.fujixerox.docuworks': ['xdw'], + 'application/vnd.fujixerox.docuworks.binder': ['xbd'], + 'application/vnd.fuzzysheet': ['fzs'], + 'application/vnd.genomatix.tuxedo': ['txd'], + 'application/vnd.geo+json': ['geojson', 'geo.json'], + 'application/vnd.geogebra.file': ['ggb'], + 'application/vnd.geogebra.tool': ['ggt'], + 'application/vnd.geometry-explorer': ['gex', 'gre'], + 'application/vnd.geonext': ['gxt'], + 'application/vnd.geoplan': ['g2w'], + 'application/vnd.geospace': ['g3w'], + 'application/vnd.gerber': ['gbr'], + 'application/vnd.gmx': ['gmx'], + 'application/vnd.google-apps.document': ['gdoc'], + 'application/vnd.google-apps.presentation': ['gslides'], + 'application/vnd.google-apps.spreadsheet': ['gsheet'], + 'application/vnd.google-earth.kml+xml': ['kml'], + 'application/vnd.google-earth.kmz': ['kmz'], + 'application/vnd.grafeq': ['gqf', 'gqs'], + 'application/vnd.groove-account': ['gac'], + 'application/vnd.groove-help': ['ghf'], + 'application/vnd.groove-identity-message': ['gim'], + 'application/vnd.groove-injector': ['grv'], + 'application/vnd.groove-tool-message': ['gtm'], + 'application/vnd.groove-tool-template': ['tpl'], + 'application/vnd.groove-vcard': ['vcg'], + 'application/vnd.haansoft-hwp': ['hwp'], + 'application/vnd.haansoft-hwt': ['hwt'], + 'application/vnd.hal+xml': ['hal'], + 'application/vnd.handheld-entertainment+xml': ['zmm'], + 'application/vnd.hbci': ['hbci'], + 'application/vnd.hhe.lesson-player': ['les'], + 'application/vnd.hp-hpgl': ['hpgl'], + 'application/vnd.hp-hpid': ['hpid'], + 'application/vnd.hp-hps': ['hps'], + 'application/vnd.hp-jlyt': ['jlt'], + 'application/vnd.hp-pcl': ['pcl'], + 'application/vnd.hp-pclxl': ['pclxl'], + 'application/vnd.hydrostatix.sof-data': ['sfd-hdstx'], + 'application/vnd.ibm.minipay': ['mpy'], + 'application/vnd.ibm.modcap': ['afp', 'listafp', 'list3820'], + 'application/vnd.ibm.rights-management': ['irm'], + 'application/vnd.ibm.secure-container': ['sc'], + 'application/vnd.iccprofile': ['icc', 'icm'], + 'application/vnd.igloader': ['igl'], + 'application/vnd.immervision-ivp': ['ivp'], + 'application/vnd.immervision-ivu': ['ivu'], + 'application/vnd.insors.igm': ['igm'], + 'application/vnd.intercon.formnet': ['xpw', 'xpx'], + 'application/vnd.intergeo': ['i2g'], + 'application/vnd.intu.qbo': ['qbo'], + 'application/vnd.intu.qfx': ['qfx'], + 'application/vnd.ipunplugged.rcprofile': ['rcprofile'], + 'application/vnd.irepository.package+xml': ['irp'], + 'application/vnd.is-xpr': ['xpr'], + 'application/vnd.isac.fcs': ['fcs'], + 'application/vnd.jam': ['jam'], + 'application/vnd.jcp.javame.midlet-rms': ['rms'], + 'application/vnd.jisp': ['jisp'], + 'application/vnd.joost.joda-archive': ['joda'], + 'application/vnd.kahootz': ['ktz', 'ktr'], + 'application/vnd.kde.karbon': ['karbon'], + 'application/vnd.kde.kchart': ['chrt'], + 'application/vnd.kde.kformula': ['kfo'], + 'application/vnd.kde.kivio': ['flw'], + 'application/vnd.kde.kontour': ['kon'], + 'application/vnd.kde.kpresenter': ['kpr', 'kpt'], + 'application/vnd.kde.kspread': ['ksp'], + 'application/vnd.kde.kword': ['kwd', 'kwt'], + 'application/vnd.kenameaapp': ['htke'], + 'application/vnd.kidspiration': ['kia'], + 'application/vnd.kinar': ['kne', 'knp'], + 'application/vnd.koan': ['skp', 'skd', 'skt', 'skm'], + 'application/vnd.kodak-descriptor': ['sse'], + 'application/vnd.las.las+xml': ['lasxml'], + 'application/vnd.llamagraphics.life-balance.desktop': ['lbd'], + 'application/vnd.llamagraphics.life-balance.exchange+xml': ['lbe'], + 'application/vnd.lotus-1-2-3': ['123', 'wk1', 'wk3', 'wk4', 'wks'], + 'application/vnd.lotus-approach': ['apr'], + 'application/vnd.lotus-freelance': ['pre'], + 'application/vnd.lotus-notes': ['nsf'], + 'application/vnd.lotus-organizer': ['org'], + 'application/vnd.lotus-screencam': ['scm'], + 'application/vnd.lotus-wordpro': ['lwp'], + 'application/vnd.macports.portpkg': ['portpkg'], + 'application/vnd.mapbox-vector-tile': ['mvt'], + 'application/vnd.mcd': ['mcd'], + 'application/vnd.medcalcdata': ['mc1'], + 'application/vnd.mediastation.cdkey': ['cdkey'], + 'application/vnd.mfer': ['mwf'], + 'application/vnd.mfmp': ['mfm'], + 'application/vnd.micrografx.flo': ['flo'], + 'application/vnd.micrografx.igx': ['igx'], + 'application/vnd.microsoft.portable-executable': [ + 'exe', + 'dll', + 'cpl', + 'drv', + 'scr', + 'efi', + 'ocx', + 'sys', + 'lib' + ], + 'application/vnd.mif': ['mif'], + 'application/vnd.mobius.daf': ['daf'], + 'application/vnd.mobius.dis': ['dis'], + 'application/vnd.mobius.mbk': ['mbk'], + 'application/vnd.mobius.mqy': ['mqy'], + 'application/vnd.mobius.msl': ['msl'], + 'application/vnd.mobius.plc': ['plc'], + 'application/vnd.mobius.txf': ['txf'], + 'application/vnd.mophun.application': ['mpn'], + 'application/vnd.mophun.certificate': ['mpc'], + 'application/vnd.mozilla.xul+xml': ['xul'], + 'application/vnd.ms-3mfdocument': ['3mf'], + 'application/vnd.ms-access': ['mdb'], + 'application/vnd.ms-artgalry': ['cil'], + 'application/vnd.ms-asf': ['asf'], + 'application/vnd.ms-cab-compressed': ['cab'], + 'application/vnd.ms-excel': [ + 'xls', + 'xlm', + 'xla', + 'xlc', + 'xlt', + 'xlw', + 'xll', + 'xld' + ], + 'application/vnd.ms-excel.addin.macroenabled.12': ['xlam'], + 'application/vnd.ms-excel.sheet.binary.macroenabled.12': ['xlsb'], + 'application/vnd.ms-excel.sheet.macroenabled.12': ['xlsm'], + 'application/vnd.ms-excel.template.macroenabled.12': ['xltm'], + 'application/vnd.ms-fontobject': ['eot'], + 'application/vnd.ms-htmlhelp': ['chm'], + 'application/vnd.ms-ims': ['ims'], + 'application/vnd.ms-lrm': ['lrm'], + 'application/vnd.ms-officetheme': ['thmx'], + 'application/vnd.ms-outlook': ['msg'], + 'application/vnd.ms-pki.seccat': ['cat'], + 'application/vnd.ms-pki.stl': ['stl'], + 'application/vnd.ms-powerpoint': ['ppt', 'pps', 'pot', 'ppz'], + 'application/vnd.ms-powerpoint.addin.macroenabled.12': ['ppam'], + 'application/vnd.ms-powerpoint.presentation.macroenabled.12': ['pptm'], + 'application/vnd.ms-powerpoint.slide.macroenabled.12': ['sldm'], + 'application/vnd.ms-powerpoint.slideshow.macroenabled.12': ['ppsm'], + 'application/vnd.ms-powerpoint.template.macroenabled.12': ['potm'], + 'application/vnd.ms-project': ['mpp', 'mpt'], + 'application/vnd.ms-publisher': ['pub'], + 'application/vnd.ms-tnef': ['tnef', 'tnf'], + 'application/vnd.ms-visio.drawing.macroenabled.main+xml': ['vsdm'], + 'application/vnd.ms-visio.drawing.main+xml': ['vsdx'], + 'application/vnd.ms-visio.stencil.macroenabled.main+xml': ['vssm'], + 'application/vnd.ms-visio.stencil.main+xml': ['vssx'], + 'application/vnd.ms-visio.template.macroenabled.main+xml': ['vstm'], + 'application/vnd.ms-visio.template.main+xml': ['vstx'], + 'application/vnd.ms-word': ['doc'], + 'application/vnd.ms-word.document.macroenabled.12': ['docm'], + 'application/vnd.ms-word.template.macroenabled.12': ['dotm'], + 'application/vnd.ms-works': ['wps', 'wks', 'wcm', 'wdb', 'xlr'], + 'application/vnd.ms-wpl': ['wpl'], + 'application/vnd.ms-xpsdocument': ['xps'], + 'application/vnd.msaccess': ['mdb'], + 'application/vnd.mseq': ['mseq'], + 'application/vnd.musician': ['mus'], + 'application/vnd.muvee.style': ['msty'], + 'application/vnd.mynfc': ['taglet'], + 'application/vnd.neurolanguage.nlu': ['nlu'], + 'application/vnd.nintendo.snes.rom': ['sfc', 'smc'], + 'application/vnd.nitf': ['ntf', 'nitf'], + 'application/vnd.noblenet-directory': ['nnd'], + 'application/vnd.noblenet-sealer': ['nns'], + 'application/vnd.noblenet-web': ['nnw'], + 'application/vnd.nokia.n-gage.ac+xml': ['ac'], + 'application/vnd.nokia.n-gage.data': ['ngdat'], + 'application/vnd.nokia.n-gage.symbian.install': ['n-gage'], + 'application/vnd.nokia.radio-preset': ['rpst'], + 'application/vnd.nokia.radio-presets': ['rpss'], + 'application/vnd.novadigm.edm': ['edm'], + 'application/vnd.novadigm.edx': ['edx'], + 'application/vnd.novadigm.ext': ['ext'], + 'application/vnd.oasis.opendocument.chart': ['odc'], + 'application/vnd.oasis.opendocument.chart-template': ['otc'], + 'application/vnd.oasis.opendocument.database': ['odb'], + 'application/vnd.oasis.opendocument.formula': ['odf'], + 'application/vnd.oasis.opendocument.formula-template': ['odft', 'otf'], + 'application/vnd.oasis.opendocument.graphics': ['odg'], + 'application/vnd.oasis.opendocument.graphics-flat-xml': ['fodg'], + 'application/vnd.oasis.opendocument.graphics-template': ['otg'], + 'application/vnd.oasis.opendocument.image': ['odi'], + 'application/vnd.oasis.opendocument.image-template': ['oti'], + 'application/vnd.oasis.opendocument.presentation': ['odp'], + 'application/vnd.oasis.opendocument.presentation-flat-xml': ['fodp'], + 'application/vnd.oasis.opendocument.presentation-template': ['otp'], + 'application/vnd.oasis.opendocument.spreadsheet': ['ods'], + 'application/vnd.oasis.opendocument.spreadsheet-flat-xml': ['fods'], + 'application/vnd.oasis.opendocument.spreadsheet-template': ['ots'], + 'application/vnd.oasis.opendocument.text': ['odt'], + 'application/vnd.oasis.opendocument.text-flat-xml': ['fodt'], + 'application/vnd.oasis.opendocument.text-master': ['odm'], + 'application/vnd.oasis.opendocument.text-template': ['ott'], + 'application/vnd.oasis.opendocument.text-web': ['oth'], + 'application/vnd.olpc-sugar': ['xo'], + 'application/vnd.oma.dd2+xml': ['dd2'], + 'application/vnd.openblox.game+xml': ['obgx'], + 'application/vnd.openofficeorg.extension': ['oxt'], + 'application/vnd.openstreetmap.data+xml': ['osm'], + 'application/vnd.openxmlformats-officedocument.presentationml.presentation': + ['pptx'], + 'application/vnd.openxmlformats-officedocument.presentationml.slide': [ + 'sldx' + ], + 'application/vnd.openxmlformats-officedocument.presentationml.slideshow': [ + 'ppsx' + ], + 'application/vnd.openxmlformats-officedocument.presentationml.template': [ + 'potx' + ], + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': [ + 'xlsx' + ], + 'application/vnd.openxmlformats-officedocument.spreadsheetml.template': [ + 'xltx' + ], + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': [ + 'docx' + ], + 'application/vnd.openxmlformats-officedocument.wordprocessingml.template': [ + 'dotx' + ], + 'application/vnd.osgeo.mapguide.package': ['mgp'], + 'application/vnd.osgi.dp': ['dp'], + 'application/vnd.osgi.subsystem': ['esa'], + 'application/vnd.palm': ['pdb', 'pqa', 'oprc', 'prc'], + 'application/vnd.pawaafile': ['paw'], + 'application/vnd.pg.format': ['str'], + 'application/vnd.pg.osasli': ['ei6'], + 'application/vnd.picsel': ['efif'], + 'application/vnd.pmi.widget': ['wg'], + 'application/vnd.pocketlearn': ['plf'], + 'application/vnd.powerbuilder6': ['pbd'], + 'application/vnd.previewsystems.box': ['box'], + 'application/vnd.proteus.magazine': ['mgz'], + 'application/vnd.publishare-delta-tree': ['qps'], + 'application/vnd.pvi.ptid1': ['ptid'], + 'application/vnd.quark.quarkxpress': [ + 'qxd', + 'qxt', + 'qwd', + 'qwt', + 'qxl', + 'qxb' + ], + 'application/vnd.rar': ['rar'], + 'application/vnd.realvnc.bed': ['bed'], + 'application/vnd.recordare.musicxml': ['mxl'], + 'application/vnd.recordare.musicxml+xml': ['musicxml'], + 'application/vnd.rig.cryptonote': ['cryptonote'], + 'application/vnd.rim.cod': ['cod'], + 'application/vnd.rn-realmedia': ['rm', 'rmj', 'rmm', 'rms', 'rmx', 'rmvb'], + 'application/vnd.rn-realmedia-vbr': [ + 'rmvb', + 'rm', + 'rmj', + 'rmm', + 'rms', + 'rmx' + ], + 'application/vnd.route66.link66+xml': ['link66'], + 'application/vnd.sailingtracker.track': ['st'], + 'application/vnd.sdp': ['sdp'], + 'application/vnd.seemail': ['see'], + 'application/vnd.sema': ['sema'], + 'application/vnd.semd': ['semd'], + 'application/vnd.semf': ['semf'], + 'application/vnd.shana.informed.formdata': ['ifm'], + 'application/vnd.shana.informed.formtemplate': ['itp'], + 'application/vnd.shana.informed.interchange': ['iif'], + 'application/vnd.shana.informed.package': ['ipk'], + 'application/vnd.simtech-mindmapper': ['twd', 'twds'], + 'application/vnd.smaf': ['mmf', 'smaf'], + 'application/vnd.smart.teacher': ['teacher'], + 'application/vnd.snap': ['snap'], + 'application/vnd.software602.filler.form+xml': ['fo'], + 'application/vnd.solent.sdkm+xml': ['sdkm', 'sdkd'], + 'application/vnd.spotfire.dxp': ['dxp'], + 'application/vnd.spotfire.sfs': ['sfs'], + 'application/vnd.sqlite3': ['sqlite3'], + 'application/vnd.squashfs': ['sqsh'], + 'application/vnd.stardivision.calc': ['sdc'], + 'application/vnd.stardivision.chart': ['sds'], + 'application/vnd.stardivision.draw': ['sda'], + 'application/vnd.stardivision.impress': ['sdd', 'sdp'], + 'application/vnd.stardivision.mail': ['smd'], + 'application/vnd.stardivision.math': ['smf'], + 'application/vnd.stardivision.writer': ['sdw', 'vor', 'sgl'], + 'application/vnd.stardivision.writer-global': ['sgl', 'sdw', 'vor'], + 'application/vnd.stepmania.package': ['smzip'], + 'application/vnd.stepmania.stepchart': ['sm'], + 'application/vnd.sun.wadl+xml': ['wadl'], + 'application/vnd.sun.xml.base': ['odb'], + 'application/vnd.sun.xml.calc': ['sxc'], + 'application/vnd.sun.xml.calc.template': ['stc'], + 'application/vnd.sun.xml.draw': ['sxd'], + 'application/vnd.sun.xml.draw.template': ['std'], + 'application/vnd.sun.xml.impress': ['sxi'], + 'application/vnd.sun.xml.impress.template': ['sti'], + 'application/vnd.sun.xml.math': ['sxm'], + 'application/vnd.sun.xml.writer': ['sxw'], + 'application/vnd.sun.xml.writer.global': ['sxg'], + 'application/vnd.sun.xml.writer.template': ['stw'], + 'application/vnd.sus-calendar': ['sus', 'susp'], + 'application/vnd.svd': ['svd'], + 'application/vnd.symbian.install': ['sis', 'sisx'], + 'application/vnd.syncml+xml': ['xsm'], + 'application/vnd.syncml.dm+wbxml': ['bdm'], + 'application/vnd.syncml.dm+xml': ['xdm'], + 'application/vnd.syncml.dmddf+xml': ['ddf'], + 'application/vnd.tao.intent-module-archive': ['tao'], + 'application/vnd.tcpdump.pcap': ['pcap', 'cap', 'dmp'], + 'application/vnd.tmobile-livetv': ['tmo'], + 'application/vnd.trid.tpt': ['tpt'], + 'application/vnd.triscape.mxs': ['mxs'], + 'application/vnd.trueapp': ['tra'], + 'application/vnd.truedoc': ['pfr'], + 'application/vnd.ufdl': ['ufd', 'ufdl'], + 'application/vnd.uiq.theme': ['utz'], + 'application/vnd.umajin': ['umj'], + 'application/vnd.unity': ['unityweb'], + 'application/vnd.uoml+xml': ['uoml'], + 'application/vnd.vcx': ['vcx'], + 'application/vnd.visio': ['vsd', 'vst', 'vss', 'vsw'], + 'application/vnd.visionary': ['vis'], + 'application/vnd.vsf': ['vsf'], + 'application/vnd.wap.wbxml': ['wbxml'], + 'application/vnd.wap.wmlc': ['wmlc'], + 'application/vnd.wap.wmlscriptc': ['wmlsc'], + 'application/vnd.webturbo': ['wtb'], + 'application/vnd.wolfram.player': ['nbp'], + 'application/vnd.wordperfect': ['wpd', 'wp', 'wp4', 'wp5', 'wp6', 'wpp'], + 'application/vnd.wqd': ['wqd'], + 'application/vnd.wt.stf': ['stf'], + 'application/vnd.xara': ['xar'], + 'application/vnd.xdgapp': ['flatpak', 'xdgapp'], + 'application/vnd.xfdl': ['xfdl'], + 'application/vnd.yamaha.hv-dic': ['hvd'], + 'application/vnd.yamaha.hv-script': ['hvs'], + 'application/vnd.yamaha.hv-voice': ['hvp'], + 'application/vnd.yamaha.openscoreformat': ['osf'], + 'application/vnd.yamaha.openscoreformat.osfpvg+xml': ['osfpvg'], + 'application/vnd.yamaha.smaf-audio': ['saf'], + 'application/vnd.yamaha.smaf-phrase': ['spf'], + 'application/vnd.yellowriver-custom-menu': ['cmp'], + 'application/vnd.youtube.yt': ['yt'], + 'application/vnd.zul': ['zir', 'zirz'], + 'application/vnd.zzazz.deck+xml': ['zaz'], + 'application/voicexml+xml': ['vxml'], + 'application/wasm': ['wasm'], + 'application/watcherinfo+xml': ['wif'], + 'application/widget': ['wgt'], + 'application/winhlp': ['hlp'], + 'application/wk1': ['123', 'wk1', 'wk3', 'wk4', 'wks'], + 'application/wmf': ['wmf'], + 'application/wordperfect': ['wp', 'wp4', 'wp5', 'wp6', 'wpd', 'wpp'], + 'application/wsdl+xml': ['wsdl'], + 'application/wspolicy+xml': ['wspolicy'], + 'application/wwf': ['wwf'], + 'application/x-123': ['123', 'wk1', 'wk3', 'wk4', 'wks'], + 'application/x-7z-compressed': ['7z', '7z.001'], + 'application/x-abiword': ['abw', 'abw.CRASHED', 'abw.gz', 'zabw'], + 'application/x-ace': ['ace'], + 'application/x-ace-compressed': ['ace'], + 'application/x-alz': ['alz'], + 'application/x-amiga-disk-format': ['adf'], + 'application/x-amipro': ['sam'], + 'application/x-annodex': ['anx'], + 'application/x-aportisdoc': ['pdb', 'pdc'], + 'application/x-apple-diskimage': ['dmg'], + 'application/x-apple-systemprofiler+xml': ['spx'], + 'application/x-appleworks-document': ['cwk'], + 'application/x-applix-spreadsheet': ['as'], + 'application/x-applix-word': ['aw'], + 'application/x-archive': ['a', 'ar'], + 'application/x-arj': ['arj'], + 'application/x-asar': ['asar'], + 'application/x-asp': ['asp'], + 'application/x-atari-2600-rom': ['a26'], + 'application/x-atari-7800-rom': ['a78'], + 'application/x-atari-lynx-rom': ['lnx'], + 'application/x-authorware-bin': ['aab', 'x32', 'u32', 'vox'], + 'application/x-authorware-map': ['aam'], + 'application/x-authorware-seg': ['aas'], + 'application/x-awk': ['awk'], + 'application/x-bat': ['bat'], + 'application/x-bcpio': ['bcpio'], + 'application/x-bdoc': ['bdoc'], + 'application/x-bittorrent': ['torrent'], + 'application/x-blender': ['blend', 'BLEND', 'blender'], + 'application/x-blorb': ['blb', 'blorb'], + 'application/x-bps-patch': ['bps'], + 'application/x-bsdiff': ['bsdiff'], + 'application/x-bz2': ['bz2'], + 'application/x-bzdvi': ['dvi.bz2'], + 'application/x-bzip': ['bz', 'bz2'], + 'application/x-bzip-compressed-tar': ['tar.bz2', 'tbz2', 'tb2'], + 'application/x-bzip1': ['bz'], + 'application/x-bzip1-compressed-tar': ['tar.bz', 'tbz'], + 'application/x-bzip2': ['bz2', 'boz'], + 'application/x-bzip2-compressed-tar': ['tar.bz2', 'tbz2', 'tb2'], + 'application/x-bzip3': ['bz3'], + 'application/x-bzip3-compressed-tar': ['tar.bz3', 'tbz3'], + 'application/x-bzpdf': ['pdf.bz2'], + 'application/x-bzpostscript': ['ps.bz2'], + 'application/x-cb7': ['cb7'], + 'application/x-cbr': ['cbr', 'cba', 'cbt', 'cbz', 'cb7'], + 'application/x-cbt': ['cbt'], + 'application/x-cbz': ['cbz'], + 'application/x-ccmx': ['ccmx'], + 'application/x-cd-image': ['iso', 'iso9660'], + 'application/x-cdlink': ['vcd'], + 'application/x-cdr': ['cdr'], + 'application/x-cdrdao-toc': ['toc'], + 'application/x-cfs-compressed': ['cfs'], + 'application/x-chat': ['chat'], + 'application/x-chess-pgn': ['pgn'], + 'application/x-chm': ['chm'], + 'application/x-chrome-extension': ['crx'], + 'application/x-cisco-vpn-settings': ['pcf'], + 'application/x-cocoa': ['cco'], + 'application/x-compress': ['Z'], + 'application/x-compressed-iso': ['cso'], + 'application/x-compressed-tar': ['tar.gz', 'tgz'], + 'application/x-conference': ['nsc'], + 'application/x-coreldraw': ['cdr'], + 'application/x-cpio': ['cpio'], + 'application/x-cpio-compressed': ['cpio.gz'], + 'application/x-csh': ['csh'], + 'application/x-cue': ['cue'], + 'application/x-dar': ['dar'], + 'application/x-dbase': ['dbf'], + 'application/x-dbf': ['dbf'], + 'application/x-dc-rom': ['dc'], + 'application/x-deb': ['deb', 'udeb'], + 'application/x-debian-package': ['deb', 'udeb'], + 'application/x-designer': ['ui'], + 'application/x-desktop': ['desktop', 'kdelnk'], + 'application/x-dgc-compressed': ['dgc'], + 'application/x-dia-diagram': ['dia'], + 'application/x-dia-shape': ['shape'], + 'application/x-director': [ + 'dir', + 'dcr', + 'dxr', + 'cst', + 'cct', + 'cxt', + 'w3d', + 'fgd', + 'swa' + ], + 'application/x-discjuggler-cd-image': ['cdi'], + 'application/x-docbook+xml': ['dbk', 'docbook'], + 'application/x-doom': ['wad'], + 'application/x-doom-wad': ['wad'], + 'application/x-dosexec': ['exe'], + 'application/x-dreamcast-rom': ['iso'], + 'application/x-dtbncx+xml': ['ncx'], + 'application/x-dtbook+xml': ['dtb'], + 'application/x-dtbresource+xml': ['res'], + 'application/x-dvi': ['dvi'], + 'application/x-e-theme': ['etheme'], + 'application/x-egon': ['egon'], + 'application/x-emf': ['emf'], + 'application/x-envoy': ['evy'], + 'application/x-eris-link+cbor': ['eris'], + 'application/x-eva': ['eva'], + 'application/x-excellon': ['drl'], + 'application/x-fd-file': ['fd', 'qd'], + 'application/x-fds-disk': ['fds'], + 'application/x-fictionbook': ['fb2'], + 'application/x-fictionbook+xml': ['fb2'], + 'application/x-fishscript': ['fish'], + 'application/x-flash-video': ['flv'], + 'application/x-fluid': ['fl'], + 'application/x-font-afm': ['afm'], + 'application/x-font-bdf': ['bdf'], + 'application/x-font-ghostscript': ['gsf'], + 'application/x-font-linux-psf': ['psf'], + 'application/x-font-otf': ['otf'], + 'application/x-font-pcf': ['pcf', 'pcf.Z', 'pcf.gz'], + 'application/x-font-snf': ['snf'], + 'application/x-font-speedo': ['spd'], + 'application/x-font-ttf': ['ttf', 'ttc'], + 'application/x-font-type1': ['pfa', 'pfb', 'pfm', 'afm'], + 'application/x-freearc': ['arc'], + 'application/x-freemind': ['mm'], + 'application/x-futuresplash': ['spl'], + 'application/x-gameboy-color-rom': ['gbc', 'cgb'], + 'application/x-gameboy-rom': ['gb', 'sgb'], + 'application/x-gba-rom': ['gba', 'agb'], + 'application/x-gca-compressed': ['gca'], + 'application/x-gedcom': ['ged', 'gedcom'], + 'application/x-genesis-32x-rom': ['32x', 'mdx'], + 'application/x-genesis-rom': ['gen', 'smd', 'md'], + 'application/x-gettext-translation': ['gmo', 'mo'], + 'application/x-glade': ['glade'], + 'application/x-gnome-app-info': ['desktop', 'desktop.in'], + 'application/x-go-sgf': ['sgf'], + 'application/x-godot-resource': ['tres', 'godot', 'tscn'], + 'application/x-gp32-rom': ['gp32'], + 'application/x-gramps-xml': ['gramps'], + 'application/x-graphing-calculator': ['gcf'], + 'application/x-graphite': ['gra'], + 'application/x-gtar': ['gtar'], + 'application/x-gtar-compressed': ['tgz', 'taz'], + 'application/x-gtk-builder': ['ui'], + 'application/x-gz-font-linux-psf': ['psf.gz'], + 'application/x-gzdvi': ['dvi.gz'], + 'application/x-gzip': ['gz'], + 'application/x-gzpdf': ['pdf.gz'], + 'application/x-gzpostscript': ['ps.gz'], + 'application/x-hdf': ['hdf'], + 'application/x-hfe-file': ['hfe'], + 'application/x-hfe-floppy-image': ['hfe'], + 'application/x-httpd-eruby': ['rhtml'], + 'application/x-httpd-php': ['php', 'php3', 'php4', 'php5', 'phps', 'phtml'], + 'application/x-httpd-php-source': ['phps'], + 'application/x-httpd-php3': ['php3'], + 'application/x-httpd-php4': ['php4'], + 'application/x-httpd-php5': ['php5'], + 'application/x-ica': ['ica'], + 'application/x-info': ['info'], + 'application/x-install-instructions': ['install'], + 'application/x-internet-signup': ['ins', 'isp'], + 'application/x-iphone': ['iii'], + 'application/x-ips-patch': ['ips'], + 'application/x-ipynb+json': ['ipynb'], + 'application/x-iso9660-image': ['iso'], + 'application/x-iwork-keynote-sffkey': ['key'], + 'application/x-iwork-numbers-sffnumbers': ['numbers'], + 'application/x-iwork-pages-sffpages': ['pages'], + 'application/x-java-archive-diff': ['jardiff'], + 'application/x-java-jnlp-file': ['jnlp'], + 'application/x-javascript': ['js', 'jsm'], + 'application/x-jbuilder-project': ['jpr', 'jpx'], + 'application/x-karbon': ['karbon'], + 'application/x-kchart': ['chrt'], + 'application/x-kexi-connectiondata': ['kexic'], + 'application/x-kexi-project': ['kexi'], + 'application/x-kexiproject-shortcut': ['kexis'], + 'application/x-kformula': ['kfo'], + 'application/x-killustrator': ['kil'], + 'application/x-kivio': ['flw'], + 'application/x-kontour': ['kon'], + 'application/x-kpovmodeler': ['kpm'], + 'application/x-kpresenter': ['kpr', 'kpt'], + 'application/x-krita': ['kra'], + 'application/x-kspread': ['ksp'], + 'application/x-kword': ['kwd', 'kwt'], + 'application/x-latex': ['latex'], + 'application/x-lha': ['lha', 'lzh'], + 'application/x-lha-compressed': ['lha', 'lzh'], + 'application/x-lrzip': ['lrz'], + 'application/x-lrzip-compressed-tar': ['tar.lrz', 'tlrz'], + 'application/x-lyx': ['lyx'], + 'application/x-lz4': ['lz4'], + 'application/x-lzh': ['lha', 'lzh'], + 'application/x-lzh-compressed': ['lha', 'lzh'], + 'application/x-lzip': ['lz'], + 'application/x-lzip-compressed-tar': ['tar.lz', 'tlz'], + 'application/x-lzma': ['lzma'], + 'application/x-lzma-compressed-tar': ['tar.lzma', 'tlzma'], + 'application/x-lzop': ['lzo'], + 'application/x-lzx': ['lzx'], + 'application/x-makeself': ['run'], + 'application/x-mame-chd': ['chd'], + 'application/x-markaby': ['mab'], + 'application/x-mie': ['mie'], + 'application/x-mif': ['mif'], + 'application/x-mimearchive': ['mhtml', 'mht'], + 'application/x-mobipocket-ebook': ['prc', 'mobi'], + 'application/x-modrinth-modpack+zip': ['mrpack'], + 'application/x-ms-application': ['application'], + 'application/x-ms-manifest': ['manifest'], + 'application/x-ms-reader': ['lit'], + 'application/x-ms-shortcut': ['lnk'], + 'application/x-ms-wim': ['wim', 'swm'], + 'application/x-ms-wmd': ['wmd'], + 'application/x-ms-wmz': ['wmz'], + 'application/x-ms-xbap': ['xbap'], + 'application/x-msaccess': ['mdb'], + 'application/x-msbinder': ['obd'], + 'application/x-mscardfile': ['crd'], + 'application/x-msclip': ['clp'], + 'application/x-msdownload': ['exe', 'dll', 'com', 'bat', 'msi'], + 'application/x-msdos-program': ['exe', 'dll', 'com', 'bat', 'msi'], + 'application/x-msi': ['msi'], + 'application/x-msmetafile': ['wmf', 'emf', 'emz'], + 'application/x-msmediaview': ['mvb', 'm13', 'm14'], + 'application/x-msmoney': ['mny'], + 'application/x-mspublisher': ['pub'], + 'application/x-msschedule': ['scd'], + 'application/x-msterminal': ['trm'], + 'application/x-mswrite': ['wri'], + 'application/x-n64-rom': ['n64', 'z64', 'v64'], + 'application/x-navi-animation': ['ani'], + 'application/x-navidoc': ['nvd'], + 'application/x-navimap': ['map'], + 'application/x-navistyle': ['stl'], + 'application/x-nds-rom': ['nds'], + 'application/x-neo-geo-pocket-color-rom': ['ngc'], + 'application/x-neo-geo-pocket-rom': ['ngp'], + 'application/x-netcdf': ['nc', 'cdf'], + 'application/x-netshow-channel': ['nsc'], + 'application/x-nintendo-ds-rom': ['nds'], + 'application/x-nintendo-3ds-rom': ['3ds', 'cci'], + 'application/x-ns-proxy-autoconfig': ['pac'], + 'application/x-nwc': ['nwc'], + 'application/x-nzb': ['nzb'], + 'application/x-object': ['o'], + 'application/x-oleo': ['oleo'], + 'application/x-ool': ['ool'], + 'application/x-oz-application': ['oza'], + 'application/x-pagemaker': ['p65', 'pm', 'pm6', 'pmd'], + 'application/x-pak': ['pak'], + 'application/x-par2': ['par2'], + 'application/x-partial-download': [ + '!qb', + '!bt', + '!download', + 'crdownload', + 'part' + ], + 'application/x-pc-engine-rom': ['pce'], + 'application/x-perl': ['pl', 'pm', 't', 'pod'], + 'application/x-pgn': ['pgn'], + 'application/x-php': ['php', 'php3', 'php4', 'php5', 'phps', 'phtml'], + 'application/x-pilot': ['prc', 'pdb'], + 'application/x-pkcs12': ['p12', 'pfx'], + 'application/x-pkcs7-certificates': ['p7b', 'spc'], + 'application/x-pkcs7-certreqresp': ['p7r'], + 'application/x-planperfect': ['pln'], + 'application/x-pocket-word': ['psw'], + 'application/x-pw': ['pw'], + 'application/x-python-bytecode': ['pyc', 'pyo'], + 'application/x-qed-disk': ['qed'], + 'application/x-qemu-disk': [ + 'qcow', + 'qcow2', + 'qed', + 'vpc', + 'vdi', + 'vmdk', + 'vhd', + 'vhdx', + 'hdd' + ], + 'application/x-quicktime-media-link': ['qtl'], + 'application/x-qw': ['qif'], + 'application/x-rar': ['rar'], + 'application/x-rar-compressed': ['rar'], + 'application/x-raw-disk-image': ['raw-disk-image', 'img'], + 'application/x-raw-disk-image-xz-compressed': [ + 'raw-disk-image.xz', + 'img.xz' + ], + 'application/x-raw-floppy-disk-image': ['fd', 'qd'], + 'application/x-redhat-package-manager': ['rpm'], + 'application/x-reject': ['rej'], + 'application/x-research-info-systems': ['ris'], + 'application/x-rpm': ['rpm'], + 'application/x-ruby': ['rb'], + 'application/x-sami': ['smi'], + 'application/x-sap-file': ['sap'], + 'application/x-saturn-rom': ['iso'], + 'application/x-sc': ['sc'], + 'application/x-scd-image': ['scd', 'sit'], + 'application/x-sega-cd-rom': ['iso'], + 'application/x-sega-pico-rom': ['iso'], + 'application/x-sg1000-rom': ['sg'], + 'application/x-sh': ['sh'], + 'application/x-shar': ['shar'], + 'application/x-shared-library-la': ['la'], + 'application/x-sharedlib': ['so'], + 'application/x-shellscript': ['sh'], + 'application/x-shockwave-flash': ['swf', 'spl'], + 'application/x-siag': ['siag'], + 'application/x-silverlight-app': ['xap'], + 'application/x-sit': ['sit'], + 'application/x-slp': ['slp'], + 'application/x-smaf': ['mmf'], + 'application/x-sms-rom': ['sms'], + 'application/x-source-rpm': ['src.rpm', 'spm'], + 'application/x-spss-por': ['por'], + 'application/x-spss-sav': ['sav', 'zsav'], + 'application/x-sql': ['sql'], + 'application/x-sqlite2': ['sqlite2'], + 'application/x-sqlite3': ['sqlite3', 'sqlite', 'db', 'db3'], + 'application/x-srt': ['srt'], + 'application/x-starcalc': ['sdc', 'vor'], + 'application/x-stardraw': ['sda', 'sdd', 'vor'], + 'application/x-starwriter': ['sdw', 'vor'], + 'application/x-stuffit': ['sit', 'sitx'], + 'application/x-stuffitx': ['sitx'], + 'application/x-subrip': ['srt'], + 'application/x-sv4cpio': ['sv4cpio'], + 'application/x-sv4crc': ['sv4crc'], + 'application/x-t3vm-image': ['t3'], + 'application/x-t602': ['602'], + 'application/x-tads': ['gam'], + 'application/x-tar': ['tar', 'gtar', 'gem'], + 'application/x-targa': ['tga', 'icb', 'tpic', 'vda', 'vst'], + 'application/x-tcl': ['tcl', 'tk'], + 'application/x-tex': ['tex'], + 'application/x-tex-gf': ['gf'], + 'application/x-tex-pk': ['pk'], + 'application/x-tex-tfm': ['tfm'], + 'application/x-texinfo': ['texinfo', 'texi'], + 'application/x-tgif': ['obj'], + 'application/x-theme': ['theme'], + 'application/x-thomson-cartridge-memo7': ['m7'], + 'application/x-thomson-cassette': ['k7'], + 'application/x-trash': ['~', '%', 'bak', 'old', 'sik'], + 'application/x-troff': ['t', 'tr', 'roff'], + 'application/x-troff-man': ['man'], + 'application/x-tzo': ['tar.lzo', 'tzo'], + 'application/x-ufraw': ['ufraw'], + 'application/x-ustar': ['ustar'], + 'application/x-virtualbox-hdd': ['vdi', 'vhd', 'vmdk'], + 'application/x-virtualbox-ova': ['ova'], + 'application/x-virtualbox-ovf': ['ovf'], + 'application/x-virtualbox-vbox': ['vbox'], + 'application/x-virtualbox-vbox-extpack': ['vbox-extpack'], + 'application/x-vnd.kde.kexi': ['kexi'], + 'application/x-vnd.kde.kplato': ['kplato'], + 'application/x-vnd.kde.kugar.mixed': ['kud'], + 'application/x-vnd.kde.nsplugin.class': ['class'], + 'application/x-wais-source': ['src'], + 'application/x-wbfs': ['wbfs'], + 'application/x-web-app-manifest+json': ['webapp'], + 'application/x-webarchive': ['webarchive'], + 'application/x-wetransfer': ['wetransfer'], + 'application/x-wii-rom': ['iso'], + 'application/x-wii-wad': ['wad'], + 'application/x-windows-theme': ['theme'], + 'application/x-winhelp': ['hlp'], + 'application/x-wintega-applet': ['wgt'], + 'application/x-wintega-test': ['wtg'], + 'application/x-wonderswan-color-rom': ['wsc'], + 'application/x-wonderswan-rom': ['ws'], + 'application/x-wpg': ['wpg'], + 'application/x-wwf': ['wwf'], + 'application/x-x509-ca-cert': ['der', 'crt', 'cert', 'pem'], + 'application/x-xar': ['xar'], + 'application/x-xbel': ['xbel'], + 'application/x-xfig': ['fig'], + 'application/x-xliff+xml': ['xlf'], + 'application/x-xpinstall': ['xpi'], + 'application/x-xz': ['xz'], + 'application/x-xz-compressed-tar': ['tar.xz', 'txz'], + 'application/x-xzpdf': ['pdf.xz'], + 'application/x-yaml': ['yaml', 'yml'], + 'application/x-zerosize': ['empty'], + 'application/x-zip-compressed': ['zip'], + 'application/x-zoo': ['zoo'], + 'application/x-zstd-compressed-tar': ['tar.zst', 'tzst'], + 'application/xaml+xml': ['xaml'], + 'application/xcap-att+xml': ['xav'], + 'application/xcap-caps+xml': ['xca'], + 'application/xcap-diff+xml': ['xdf'], + 'application/xcap-el+xml': ['xel'], + 'application/xcap-ns+xml': ['xns'], + 'application/xenc+xml': ['xenc'], + 'application/xhtml+xml': ['xhtml', 'xht'], + 'application/xliff+xml': ['xlf'], + 'application/xml': ['xml', 'xsl', 'xsd', 'rng'], + 'application/xml-dtd': ['dtd'], + 'application/xop+xml': ['xop'], + 'application/xproc+xml': ['xpl'], + 'application/xslt+xml': ['xslt'], + 'application/xspf+xml': ['xspf'], + 'application/xv+xml': ['mxml', 'xhvml', 'xvml', 'xvm'], + 'application/yang': ['yang'], + 'application/yin+xml': ['yin'], + 'application/zip': ['zip'], + 'application/zlib': ['zz'], + 'application/zstd': ['zst'], + 'audio/aac': ['aac'], + 'audio/ac3': ['ac3'], + 'audio/adpcm': ['adp'], + 'audio/amr': ['amr'], + 'audio/amr-wb': ['awb'], + 'audio/annodex': ['axa'], + 'audio/aph': ['aph'], + 'audio/basic': ['au', 'snd'], + 'audio/dts': ['dts'], + 'audio/dv': ['dv'], + 'audio/eac3': ['eac3'], + 'audio/flac': ['flac'], + 'audio/m4a': ['m4a'], + 'audio/midi': ['mid', 'midi', 'kar', 'rmi'], + 'audio/mp2': ['mp2'], + 'audio/mp4': ['mp4a', 'm4a'], + 'audio/mpeg': ['mpga', 'mp2', 'mp2a', 'mp3', 'm2a', 'm3a'], + 'audio/ogg': ['oga', 'ogg', 'spx', 'opus'], + 'audio/prs.sid': ['sid'], + 'audio/s3m': ['s3m'], + 'audio/silk': ['sil'], + 'audio/vnd.audible.aax': ['aax'], + 'audio/vnd.dece.audio': ['uva', 'uvva'], + 'audio/vnd.digital-winds': ['eol'], + 'audio/vnd.dra': ['dra'], + 'audio/vnd.dts': ['dts'], + 'audio/vnd.dts.hd': ['dtshd'], + 'audio/vnd.lucent.voice': ['lvp'], + 'audio/vnd.ms-playready.media.pya': ['pya'], + 'audio/vnd.nuera.ecelp4800': ['ecelp4800'], + 'audio/vnd.nuera.ecelp7470': ['ecelp7470'], + 'audio/vnd.nuera.ecelp9600': ['ecelp9600'], + 'audio/vnd.rip': ['rip'], + 'audio/vnd.wave': ['wav'], + 'audio/webm': ['weba'], + 'audio/x-aac': ['aac'], + 'audio/x-aiff': ['aif', 'aiff', 'aifc'], + 'audio/x-caf': ['caf'], + 'audio/x-flac': ['flac'], + 'audio/x-gsm': ['gsm'], + 'audio/x-matroska': ['mka'], + 'audio/x-mpegurl': ['m3u'], + 'audio/x-ms-wax': ['wax'], + 'audio/x-ms-wma': ['wma'], + 'audio/x-pn-realaudio': ['ram', 'ra'], + 'audio/x-pn-realaudio-plugin': ['rmp'], + 'audio/x-realaudio': ['ra'], + 'audio/x-scpls': ['pls'], + 'audio/x-sd2': ['sd2'], + 'audio/x-wav': ['wav'], + 'chemical/x-alchemy': ['alc'], + 'chemical/x-cache': ['cac', 'cache'], + 'chemical/x-cache-csf': ['csf'], + 'chemical/x-cactvs-binary': ['cbin', 'cascii', 'ctab'], + 'chemical/x-cdx': ['cdx'], + 'chemical/x-cerius': ['cer'], + 'chemical/x-chem3d': ['c3d'], + 'chemical/x-chemdraw': ['chm'], + 'chemical/x-cif': ['cif'], + 'chemical/x-cmdf': ['cmdf'], + 'chemical/x-cml': ['cml'], + 'chemical/x-compass': ['cpa'], + 'chemical/x-crossfire': ['bsd'], + 'chemical/x-csml': ['csml', 'csm'], + 'chemical/x-ctx': ['ctx'], + 'chemical/x-cxf': ['cxf', 'cef'], + 'chemical/x-embl-dl-nucleotide': ['emb', 'embl'], + 'chemical/x-galactic-spc': ['spc'], + 'chemical/x-gamess-input': ['inp', 'gam', 'gamin'], + 'chemical/x-gaussian-checkpoint': ['fch', 'fchk'], + 'chemical/x-gaussian-cube': ['cub'], + 'chemical/x-gaussian-input': ['gau', 'gjc', 'gjf'], + 'chemical/x-gaussian-log': ['gal'], + 'chemical/x-gcg8-sequence': ['gcg'], + 'chemical/x-genbank': ['gen'], + 'chemical/x-hin': ['hin'], + 'chemical/x-isostar': ['istr', 'ist'], + 'chemical/x-jcamp-dx': ['jdx', 'dx'], + 'chemical/x-kinemage': ['kin'], + 'chemical/x-macmolecule': ['mcm'], + 'chemical/x-macromodel-input': ['mmd', 'mmod'], + 'chemical/x-mdl-molfile': ['mol'], + 'chemical/x-mdl-rdfile': ['rd'], + 'chemical/x-mdl-rxnfile': ['rxn'], + 'chemical/x-mdl-sdfile': ['sd', 'sdf'], + 'chemical/x-mdl-tgf': ['tgf'], + 'chemical/x-mmcif': ['mcif'], + 'chemical/x-mol2': ['mol2'], + 'chemical/x-molconn-Z': ['b'], + 'chemical/x-mopac-graph': ['gpt'], + 'chemical/x-mopac-input': ['mop', 'mopcrt', 'mpc', 'zmt'], + 'chemical/x-mopac-out': ['moo'], + 'chemical/x-mopac-vib': ['mvb'], + 'chemical/x-ncbi-asn1': ['asn'], + 'chemical/x-ncbi-asn1-ascii': ['prt', 'ent'], + 'chemical/x-ncbi-asn1-binary': ['val', 'aso'], + 'chemical/x-ncbi-asn1-spec': ['asn'], + 'chemical/x-pdb': ['pdb', 'ent'], + 'chemical/x-rosdal': ['ros'], + 'chemical/x-swissprot': ['sw'], + 'chemical/x-vamas-iso14976': ['vms'], + 'chemical/x-vmd': ['vmd'], + 'chemical/x-xtel': ['xtel'], + 'chemical/x-xyz': ['xyz'], + 'font/collection': ['ttc'], + 'font/otf': ['otf'], + 'font/sfnt': ['sfnt'], + 'font/ttf': ['ttf'], + 'font/woff': ['woff'], + 'font/woff2': ['woff2'], + 'image/avif': ['avif'], + 'image/bmp': ['bmp', 'dib'], + 'image/cgm': ['cgm'], + 'image/dicom-rle': ['drle'], + 'image/emf': ['emf'], + 'image/fits': ['fits'], + 'image/g3fax': ['g3'], + 'image/gif': ['gif'], + 'image/heic': ['heic'], + 'image/heic-sequence': ['heics'], + 'image/heif': ['heif'], + 'image/heif-sequence': ['heifs'], + 'image/hej2k': ['hej2'], + 'image/hsj2': ['hsj2'], + 'image/ief': ['ief'], + 'image/jls': ['jls'], + 'image/jp2': ['jp2', 'jpg2'], + 'image/jpeg': ['jpeg', 'jpg', 'jpe'], + 'image/jph': ['jph'], + 'image/jphc': ['jhc'], + 'image/jpm': ['jpm'], + 'image/jpx': ['jpx', 'jpf'], + 'image/jxr': ['jxr'], + 'image/jxra': ['jxra'], + 'image/jxrs': ['jxrs'], + 'image/jxs': ['jxs'], + 'image/jxsc': ['jxsc'], + 'image/jxsi': ['jxsi'], + 'image/jxss': ['jxss'], + 'image/ktx': ['ktx'], + 'image/ktx2': ['ktx2'], + 'image/png': ['png'], + 'image/prs.btif': ['btif'], + 'image/prs.pti': ['pti'], + 'image/sgi': ['sgi'], + 'image/svg+xml': ['svg', 'svgz'], + 'image/t38': ['t38'], + 'image/tiff': ['tif', 'tiff'], + 'image/tiff-fx': ['tfx'], + 'image/vnd.adobe.photoshop': ['psd'], + 'image/vnd.airzip.accelerator.azv': ['azv'], + 'image/vnd.dece.graphic': ['uvi', 'uvvi', 'uvg', 'uvvg'], + 'image/vnd.djvu': ['djvu', 'djv'], + 'image/vnd.dvb.subtitle': ['sub'], + 'image/vnd.dwg': ['dwg'], + 'image/vnd.dxf': ['dxf'], + 'image/vnd.fastbidsheet': ['fbs'], + 'image/vnd.fpx': ['fpx'], + 'image/vnd.fst': ['fst'], + 'image/vnd.fujixerox.edmics-mmr': ['mmr'], + 'image/vnd.fujixerox.edmics-rlc': ['rlc'], + 'image/vnd.globalgraphics.pgb': ['pgb'], + 'image/vnd.microsoft.icon': ['ico'], + 'image/vnd.mix': ['mix'], + 'image/vnd.mozilla.apng': ['apng'], + 'image/vnd.ms-modi': ['mdi'], + 'image/vnd.ms-photo': ['wdp'], + 'image/vnd.net-fpx': ['npx'], + 'image/vnd.pco.b16': ['b16'], + 'image/vnd.radiance': ['rgbe', 'xyze'], + 'image/vnd.sealed.png': ['spng'], + 'image/vnd.sealedmedia.softseal.gif': ['sgif'], + 'image/vnd.sealedmedia.softseal.jpg': ['sjpg'], + 'image/vnd.svf': ['svf'], + 'image/vnd.tencent.tap': ['tap'], + 'image/vnd.valve.source.texture': ['vtf'], + 'image/vnd.wap.wbmp': ['wbmp'], + 'image/vnd.xiff': ['xif'], + 'image/vnd.zbrush.pcx': ['pcx'], + 'image/webp': ['webp'], + 'image/wmf': ['wmf'], + 'image/x-3ds': ['3ds'], + 'image/x-adobe-dng': ['dng'], + 'image/x-applix-graphics': ['ag'], + 'image/x-apm': ['apm'], + 'image/x-bzeps': ['eps.bz2'], + 'image/x-canon-cr2': ['cr2'], + 'image/x-canon-crw': ['crw'], + 'image/x-cmu-raster': ['ras'], + 'image/x-cmx': ['cmx'], + 'image/x-compressed-xcf': ['xcf.gz', 'xcf.bz2'], + 'image/x-dcraw': [ + 'dcr', + 'dng', + 'nef', + 'crw', + 'raf', + 'orf', + 'mrw', + 'x3f', + 'pef', + 'sr2', + 'arw' + ], + 'image/x-dds': ['dds'], + 'image/x-dib': ['dib'], + 'image/x-eps': ['eps', 'epsi', 'epsf'], + 'image/x-exr': ['exr'], + 'image/x-freehand': ['fh', 'fhc', 'fh4', 'fh5', 'fh7'], + 'image/x-gimp-gbr': ['gbr'], + 'image/x-gimp-gih': ['gih'], + 'image/x-gimp-pat': ['pat'], + 'image/x-gzeps': ['eps.gz'], + 'image/x-icns': ['icns'], + 'image/x-ico': ['ico'], + 'image/x-icon': ['ico'], + 'image/x-iff': ['iff', 'lbm'], + 'image/x-ilbm': ['ilbm', 'lbm'], + 'image/x-jng': ['jng'], + 'image/x-kodak-dcr': ['dcr'], + 'image/x-kodak-k25': ['k25'], + 'image/x-kodak-kdc': ['kdc'], + 'image/x-lwo': ['lwo', 'lwob'], + 'image/x-lws': ['lws'], + 'image/x-macpaint': ['pntg'], + 'image/x-mrsid-image': ['sid'], + 'image/x-ms-bmp': ['bmp'], + 'image/x-nikon-nef': ['nef'], + 'image/x-olympus-orf': ['orf'], + 'image/x-panasonic-raw': ['raw'], + 'image/x-panasonic-rw': ['rw2'], + 'image/x-pcx': ['pcx'], + 'image/x-pentax-pef': ['pef'], + 'image/x-pict': ['pic', 'pct', 'pict'], + 'image/x-portable-anymap': ['pnm'], + 'image/x-portable-bitmap': ['pbm'], + 'image/x-portable-graymap': ['pgm'], + 'image/x-portable-pixmap': ['ppm'], + 'image/x-psb': ['psb'], + 'image/x-psd': ['psd'], + 'image/x-rgb': ['rgb'], + 'image/x-sigma-x3f': ['x3f'], + 'image/x-sony-arw': ['arw'], + 'image/x-sony-sr2': ['sr2'], + 'image/x-sony-srf': ['srf'], + 'image/x-targa': ['tga', 'icb', 'tpic', 'vda', 'vst'], + 'image/x-tga': ['tga'], + 'image/x-win-bitmap': ['cur'], + 'image/x-wmf': ['wmf'], + 'image/x-xbitmap': ['xbm'], + 'image/x-xcf': ['xcf'], + 'image/x-xfig': ['fig'], + 'image/x-xpixmap': ['xpm'], + 'image/x-xwindowdump': ['xwd'], + 'message/rfc822': ['eml', 'mime'], + 'model/3mf': ['3mf'], + 'model/gltf+json': ['gltf'], + 'model/gltf-binary': ['glb'], + 'model/iges': ['igs', 'iges'], + 'model/mesh': ['msh', 'mesh', 'silo'], + 'model/mtl': ['mtl'], + 'model/obj': ['obj'], + 'model/stl': ['stl'], + 'model/vnd.collada+xml': ['dae'], + 'model/vnd.dwf': ['dwf'], + 'model/vnd.gdl': ['gdl'], + 'model/vnd.gtw': ['gtw'], + 'model/vnd.mts': ['mts'], + 'model/vnd.usdz+zip': ['usdz'], + 'model/vnd.valve.source.compiled-map': ['bsp'], + 'model/vnd.vtu': ['vtu'], + 'model/vrml': ['wrl', 'vrml'], + 'model/x3d+binary': ['x3db', 'x3dbz'], + 'model/x3d+fastinfoset': ['x3db'], + 'model/x3d+vrml': ['x3dv', 'x3dvz'], + 'model/x3d+xml': ['x3d', 'x3dz'], + 'text/cache-manifest': ['appcache', 'manifest'], + 'text/calendar': ['ics', 'ifb'], + 'text/coffeescript': ['coffee', 'litcoffee'], + 'text/css': ['css'], + 'text/csv': ['csv'], + 'text/h323': ['323'], + 'text/html': ['html', 'htm', 'shtml'], + 'text/iuls': ['uls'], + 'text/javascript': ['js', 'mjs'], + 'text/jsx': ['jsx'], + 'text/less': ['less'], + 'text/markdown': ['markdown', 'md'], + 'text/mathml': ['mml'], + 'text/n3': ['n3'], + 'text/plain': ['txt', 'text', 'conf', 'def', 'list', 'log', 'in', 'ini'], + 'text/prs.lines.tag': ['dsc'], + 'text/richtext': ['rtx'], + 'text/rtf': ['rtf'], + 'text/sgml': ['sgml', 'sgm'], + 'text/shex': ['shex'], + 'text/slim': ['slim', 'slm'], + 'text/spdx': ['spdx'], + 'text/stylus': ['stylus', 'styl'], + 'text/tab-separated-values': ['tsv'], + 'text/troff': ['t', 'tr', 'roff', 'man', 'me', 'ms'], + 'text/turtle': ['ttl'], + 'text/uri-list': ['uri', 'uris', 'urls'], + 'text/vcard': ['vcard'], + 'text/vnd.curl': ['curl'], + 'text/vnd.curl.dcurl': ['dcurl'], + 'text/vnd.curl.mcurl': ['mcurl'], + 'text/vnd.curl.scurl': ['scurl'], + 'text/vnd.dvb.subtitle': ['sub'], + 'text/vnd.fly': ['fly'], + 'text/vnd.fmi.flexstor': ['flx'], + 'text/vnd.graphviz': ['gv'], + 'text/vnd.in3d.3dml': ['3dml'], + 'text/vnd.in3d.spot': ['spot'], + 'text/vnd.sun.j2me.app-descriptor': ['jad'], + 'text/vnd.wap.wml': ['wml'], + 'text/vnd.wap.wmlscript': ['wmls'], + 'text/vtt': ['vtt'], + 'text/x-asm': ['s', 'asm'], + 'text/x-bibtex': ['bib'], + 'text/x-boo': ['boo'], + 'text/x-c': ['c', 'cc', 'cxx', 'cpp', 'h', 'hh', 'dic'], + 'text/x-c++hdr': ['hpp', 'h++', 'hxx', 'hh'], + 'text/x-c++src': ['cpp', 'c++', 'cc', 'cxx'], + 'text/x-chdr': ['h'], + 'text/x-component': ['htc'], + 'text/x-csh': ['csh'], + 'text/x-csrc': ['c'], + 'text/x-dart': ['dart'], + 'text/x-dbus-service': ['service'], + 'text/x-dcl': ['dcl'], + 'text/x-diff': ['diff', 'patch'], + 'text/x-dsrc': ['d', 'di'], + 'text/x-dtd': ['dtd'], + 'text/x-eiffel': ['e', 'eif'], + 'text/x-emacs-lisp': ['el'], + 'text/x-erlang': ['erl'], + 'text/x-fortran': ['f', 'for', 'f77', 'f90'], + 'text/x-gcode': ['gcode'], + 'text/x-genie': ['gs'], + 'text/x-gettext-translation': ['po'], + 'text/x-gherkin': ['feature'], + 'text/x-go': ['go'], + 'text/x-gradle': ['gradle'], + 'text/x-groovy': ['groovy', 'gvy', 'gy', 'gsh'], + 'text/x-handlebars-template': ['hbs'], + 'text/x-haskell': ['hs'], + 'text/x-idl': ['idl'], + 'text/x-imelody': ['imy'], + 'text/x-iptables': ['iptables'], + 'text/x-java': ['java'], + 'text/x-java-source': ['java'], + 'text/x-koka': ['kk', 'kki'], + 'text/x-kotlin': ['kt'], + 'text/x-ldif': ['ldif'], + 'text/x-lilypond': ['ly'], + 'text/x-literate-haskell': ['lhs'], + 'text/x-log': ['log'], + 'text/x-lua': ['lua'], + 'text/x-makefile': ['mak', 'mk'], + 'text/x-matlab': ['m'], + 'text/x-meson': ['meson.build'], + 'text/x-modelica': ['mo'], + 'text/x-mof': ['mof'], + 'text/x-mpsub': ['sub'], + 'text/x-msdos-batch': ['bat', 'cmd'], + 'text/x-msil': ['il'], + 'text/x-nfo': ['nfo'], + 'text/x-objcsrc': ['m', 'mm'], + 'text/x-ocaml': ['ml', 'mli', 'mll', 'mly'], + 'text/x-opml': ['opml'], + 'text/x-pascal': ['p', 'pas'], + 'text/x-patch': ['diff', 'patch'], + 'text/x-perl': ['pl', 'pm', 't', 'pod'], + 'text/x-php': ['php', 'php3', 'php4', 'php5', 'phps', 'phtml'], + 'text/x-processing': ['pde'], + 'text/x-python': ['py', 'pyi'], + 'text/x-qml': ['qml', 'qbs'], + 'text/x-R': ['r'], + 'text/x-reject': ['rej'], + 'text/x-rfc822-headers': ['eml'], + 'text/x-rpm-spec': ['spec'], + 'text/x-rst': ['rst'], + 'text/x-ruby': ['rb'], + 'text/x-sass': ['sass'], + 'text/x-scala': ['scala', 'sc'], + 'text/x-scheme': ['scm', 'ss'], + 'text/x-scss': ['scss'], + 'text/x-setext': ['etx'], + 'text/x-sfv': ['sfv'], + 'text/x-sh': ['sh'], + 'text/x-shellscript': ['sh'], + 'text/x-sql': ['sql'], + 'text/x-suse-ymp': ['ymp'], + 'text/x-systemd-unit': [ + 'automount', + 'device', + 'mount', + 'path', + 'scope', + 'service', + 'slice', + 'socket', + 'swap', + 'target', + 'timer' + ], + 'text/x-tcl': ['tcl', 'tk'], + 'text/x-tex': ['tex', 'ltx', 'sty', 'cls', 'dtx', 'ins', 'latex'], + 'text/x-texinfo': ['texinfo', 'texi'], + 'text/x-troff': ['t', 'tr', 'roff', 'man', 'me', 'ms'], + 'text/x-txt2tags': ['t2t'], + 'text/x-uil': ['uil'], + 'text/x-uuencode': ['uu'], + 'text/x-vala': ['vala', 'vapi'], + 'text/x-vcalendar': ['vcs'], + 'text/x-vcard': ['vcf'], + 'text/x-verilog': ['v'], + 'text/x-vhdl': ['vhd', 'vhdl'], + 'text/x-xmi': ['xmi'], + 'text/x-xslfo': ['fo', 'xslfo'], + 'text/x-yaml': ['yaml', 'yml'], + 'video/3gpp': ['3gp', '3gpp'], + 'video/3gpp2': ['3g2'], + 'video/annodex': ['axv'], + 'video/divx': ['divx'], + 'video/h261': ['h261'], + 'video/h263': ['h263'], + 'video/h264': ['h264'], + 'video/iso.segment': ['m4s'], + 'video/jpeg': ['jpgv'], + 'video/jpm': ['jpm', 'jpgm'], + 'video/mj2': ['mj2', 'mjp2'], + 'video/mp2t': ['ts'], + 'video/mp4': ['mp4', 'mp4v', 'mpg4'], + 'video/mpeg': ['mpeg', 'mpg', 'mpe', 'm1v', 'm2v'], + 'video/ogg': ['ogv'], + 'video/quicktime': ['qt', 'mov'], + 'video/vnd.dece.hd': ['uvh', 'uvvh'], + 'video/vnd.dece.mobile': ['uvm', 'uvvm'], + 'video/vnd.dece.pd': ['uvp', 'uvvp'], + 'video/vnd.dece.sd': ['uvs', 'uvvs'], + 'video/vnd.dece.video': ['uvv', 'uvvv'], + 'video/vnd.dvb.file': ['dvb'], + 'video/vnd.fvt': ['fvt'], + 'video/vnd.mpegurl': ['mxu', 'm4u'], + 'video/vnd.ms-playready.media.pyv': ['pyv'], + 'video/vnd.uvvu.mp4': ['uvu', 'uvvu'], + 'video/vnd.vivo': ['viv'], + 'video/webm': ['webm'], + 'video/x-f4v': ['f4v'], + 'video/x-fli': ['fli'], + 'video/x-flv': ['flv'], + 'video/x-m4v': ['m4v'], + 'video/x-matroska': ['mkv', 'mk3d', 'mks'], + 'video/x-mng': ['mng'], + 'video/x-ms-asf': ['asf', 'asx'], + 'video/x-ms-vob': ['vob'], + 'video/x-ms-wm': ['wm'], + 'video/x-ms-wmv': ['wmv'], + 'video/x-ms-wmx': ['wmx'], + 'video/x-ms-wvx': ['wvx'], + 'video/x-msvideo': ['avi'], + 'video/x-nsv': ['nsv'], + 'video/x-ogm+ogg': ['ogm'], + 'video/x-sgi-movie': ['movie'], + 'video/x-smv': ['smv'], + 'x-conference/x-cooltalk': ['ice'], + 'x-epoc/x-sisx-app': ['sisx'], + 'x-world/x-vrml': ['vrm', 'vrml', 'wrl'], + }; + + /// A utility class for handling MIME types and file extensions. + /// + /// This class provides methods to: + /// - Get file extensions for a given MIME type + /// - Get MIME types for a given file extension + /// - Guess the MIME type for a given file path + /// - Check if MIME type guessing is supported + static final Map> reverseMap = { + '2': ['application/x-stuffit'], + '3g2': ['audio/3gpp2', 'video/3gpp2'], + '3ga': ['video/3gpp'], + '3gp': [ + 'application/vnd.3gpp.pic-bw-large', + 'application/vnd.3gpp.pic-bw-small', + 'application/vnd.3gpp.pic-bw-var', + 'audio/3gpp', + 'audio/3gpp2', + 'video/3gpp', + 'video/3gpp2' + ], + '3gpp': ['audio/3gpp', 'video/3gpp'], + '3gpp2': ['audio/3gpp2', 'video/3gpp2'], + '3mf': ['application/vnd.ms-3mfdocument', 'model/3mf'], + '602': ['application/x-t602'], + '669': ['audio/x-mod'], + '7z': ['application/x-7z-compressed'], + '7z.001': ['application/x-7z-compressed'], + 'BLEND': ['application/x-blender'], + 'C': ['text/x-c++src'], + 'PAR2': ['application/x-par2'], + 'PL': ['application/x-perl', 'text/x-perl'], + 'Z': ['application/x-compress'], + 'a': ['application/x-archive'], + 'a26': ['application/x-atari-2600-rom'], + 'a78': ['application/x-atari-7800-rom'], + 'aa': ['audio/vnd.audible', 'audio/x-pn-audibleaudio'], + 'aab': ['application/x-authorware-bin'], + 'aac': ['audio/aac', 'audio/x-aac', 'audio/x-hx-aac-adts'], + 'aam': ['application/x-authorware-map'], + 'aas': ['application/x-authorware-seg'], + 'aax': [ + 'audio/vnd.audible', + 'audio/vnd.audible.aax', + 'audio/x-pn-audibleaudio' + ], + 'aaxc': ['audio/vnd.audible.aaxc'], + 'abw': ['application/x-abiword'], + 'abw.CRASHED': ['application/x-abiword'], + 'abw.gz': ['application/x-abiword'], + 'ac': ['application/pkix-attr-cert', 'application/vnd.nokia.n-gage.ac+xml'], + 'ac3': ['audio/ac3'], + 'acc': ['application/vnd.americandynamics.acc'], + 'ace': ['application/x-ace', 'application/x-ace-compressed'], + 'acu': ['application/vnd.acucobol'], + 'acutc': ['application/vnd.acucorp'], + 'adb': ['text/x-adasrc'], + 'adf': ['application/x-amiga-disk-format'], + 'adp': ['audio/adpcm'], + 'ads': ['text/x-adasrc'], + 'adts': ['audio/aac', 'audio/x-aac', 'audio/x-hx-aac-adts'], + 'aep': ['application/vnd.audiograph'], + 'afm': ['application/x-font-afm', 'application/x-font-type1'], + 'afp': ['application/vnd.ibm.modcap'], + 'ag': ['image/x-applix-graphics'], + 'agb': ['application/x-gba-rom'], + 'age': ['application/vnd.age'], + 'ahead': ['application/vnd.ahead.space'], + 'ai': [ + 'application/illustrator', + 'application/postscript', + 'application/vnd.adobe.illustrator' + ], + 'aif': ['audio/x-aiff'], + 'aifc': ['audio/x-aifc', 'audio/x-aiff', 'audio/x-aiffc'], + 'aiff': ['audio/x-aiff'], + 'aiffc': ['audio/x-aifc', 'audio/x-aiffc'], + 'air': ['application/vnd.adobe.air-application-installer-package+zip'], + 'ait': ['application/vnd.dvb.ait'], + 'al': ['application/x-perl', 'text/x-perl'], + 'alz': ['application/x-alz'], + 'ami': ['application/vnd.amiga.ami'], + 'amr': ['audio/amr', 'audio/amr-encrypted'], + 'amz': ['audio/x-amzxml'], + 'ani': ['application/x-navi-animation'], + 'anim1': ['video/x-anim'], + 'anim2': ['video/x-anim'], + 'anim3': ['video/x-anim'], + 'anim4': ['video/x-anim'], + 'anim5': ['video/x-anim'], + 'anim6': ['video/x-anim'], + 'anim7': ['video/x-anim'], + 'anim8': ['video/x-anim'], + 'anim9': ['video/x-anim'], + 'animj': ['video/x-anim'], + 'anx': ['application/annodex', 'application/x-annodex'], + 'ape': ['audio/x-ape'], + 'apk': ['application/vnd.android.package-archive'], + 'apng': ['image/apng', 'image/vnd.mozilla.apng'], + 'appcache': ['text/cache-manifest'], + 'appimage': ['application/vnd.appimage', 'application/x-iso9660-appimage'], + 'appinstaller': ['application/appinstaller'], + 'application': ['application/x-ms-application'], + 'appx': ['application/appx'], + 'appxbundle': ['application/appxbundle'], + 'apr': ['application/vnd.lotus-approach'], + 'ar': ['application/x-archive'], + 'arc': ['application/x-freearc'], + 'arj': ['application/x-arj'], + 'arw': ['image/x-sony-arw'], + 'as': ['application/x-applix-spreadsheet'], + 'asar': ['application/x-asar'], + 'asc': [ + 'application/pgp', + 'application/pgp-encrypted', + 'application/pgp-keys', + 'application/pgp-signature', + 'text/plain' + ], + 'asd': ['text/x-common-lisp'], + 'asf': [ + 'application/vnd.ms-asf', + 'video/x-ms-asf', + 'video/x-ms-asf-plugin', + 'video/x-ms-wm' + ], + 'asice': ['application/vnd.etsi.asic-e+zip'], + 'asm': ['text/x-asm'], + 'aso': ['application/vnd.accpac.simply.aso'], + 'asp': ['application/x-asp'], + 'ass': ['audio/aac', 'audio/x-aac', 'audio/x-hx-aac-adts', 'text/x-ssa'], + 'astc': ['image/astc'], + 'asx': [ + 'application/x-ms-asx', + 'audio/x-ms-asx', + 'video/x-ms-asf', + 'video/x-ms-wax', + 'video/x-ms-wmx', + 'video/x-ms-wvx' + ], + 'atc': ['application/vnd.acucorp'], + 'atom': ['application/atom+xml'], + 'atomcat': ['application/atomcat+xml'], + 'atomdeleted': ['application/atomdeleted+xml'], + 'atomsvc': ['application/atomsvc+xml'], + 'atx': ['application/vnd.antix.game-component'], + 'au': ['audio/basic'], + 'automount': ['text/x-systemd-unit'], + 'avci': ['image/avci'], + 'avcs': ['image/avcs'], + 'avf': [ + 'video/avi', + 'video/divx', + 'video/msvideo', + 'video/vnd.avi', + 'video/vnd.divx', + 'video/x-avi', + 'video/x-msvideo' + ], + 'avi': [ + 'video/avi', + 'video/divx', + 'video/msvideo', + 'video/vnd.avi', + 'video/vnd.divx', + 'video/x-avi', + 'video/x-msvideo' + ], + 'avif': ['image/avif', 'image/avif-sequence'], + 'avifs': ['image/avif', 'image/avif-sequence'], + 'aw': ['application/applixware', 'application/x-applix-word'], + 'awb': ['audio/amr-wb', 'audio/amr-wb-encrypted'], + 'awk': ['application/x-awk'], + 'axa': ['audio/annodex', 'audio/x-annodex'], + 'axv': ['video/annodex', 'video/x-annodex'], + 'azf': ['application/vnd.airzip.filesecure.azf'], + 'azs': ['application/vnd.airzip.filesecure.azs'], + 'azv': ['image/vnd.airzip.accelerator.azv'], + 'azw': ['application/vnd.amazon.ebook'], + 'azw3': ['application/vnd.amazon.mobi8-ebook', 'application/x-mobi8-ebook'], + 'b16': ['image/vnd.pco.b16'], + 'bak': ['application/x-trash'], + 'bas': ['text/x-basic'], + 'bat': ['application/bat', 'application/x-bat', 'application/x-msdownload'], + 'bcpio': ['application/x-bcpio'], + 'bdf': ['application/x-font-bdf'], + 'bdm': ['application/vnd.syncml.dm+wbxml', 'video/mp2t'], + 'bdmv': ['video/mp2t'], + 'bdoc': ['application/bdoc', 'application/x-bdoc'], + 'bed': ['application/vnd.realvnc.bed'], + 'bh2': ['application/vnd.fujitsu.oasysprs'], + 'bib': ['text/x-bibtex'], + 'bik': ['video/vnd.radgamettools.bink'], + 'bin': ['application/octet-stream'], + 'bk2': ['video/vnd.radgamettools.bink'], + 'blb': ['application/x-blorb'], + 'blend': ['application/x-blender'], + 'blender': ['application/x-blender'], + 'blorb': ['application/x-blorb'], + 'blp': ['text/x-blueprint'], + 'bmi': ['application/vnd.bmi'], + 'bmml': ['application/vnd.balsamiq.bmml+xml'], + 'bmp': ['image/bmp', 'image/x-bmp', 'image/x-ms-bmp'], + 'book': ['application/vnd.framemaker'], + 'box': ['application/vnd.previewsystems.box'], + 'boz': ['application/x-bzip2'], + 'bps': ['application/x-bps-patch'], + 'brk': ['chemical/x-pdb'], + 'bsdiff': ['application/x-bsdiff'], + 'bsp': ['model/vnd.valve.source.compiled-map'], + 'btif': ['image/prs.btif'], + 'bz': ['application/bzip2', 'application/x-bzip', 'application/x-bzip1'], + 'bz2': [ + 'application/x-bz2', + 'application/bzip2', + 'application/x-bzip', + 'application/x-bzip2' + ], + 'bz3': ['application/x-bzip3'], + 'c': ['text/x-c', 'text/x-csrc'], + 'c++': ['text/x-c++src'], + 'c11amc': ['application/vnd.cluetrust.cartomobile-config'], + 'c11amz': ['application/vnd.cluetrust.cartomobile-config-pkg'], + 'c4d': ['application/vnd.clonk.c4group'], + 'c4f': ['application/vnd.clonk.c4group'], + 'c4g': ['application/vnd.clonk.c4group'], + 'c4p': ['application/vnd.clonk.c4group'], + 'c4u': ['application/vnd.clonk.c4group'], + 'cab': [ + 'application/vnd.ms-cab-compressed', + 'zz-application/zz-winassoc-cab' + ], + 'caf': ['audio/x-caf'], + 'cap': [ + 'application/pcap', + 'application/vnd.tcpdump.pcap', + 'application/x-pcap' + ], + 'car': ['application/vnd.curl.car'], + 'cat': ['application/vnd.ms-pki.seccat'], + 'cb7': ['application/x-cb7', 'application/x-cbr'], + 'cba': ['application/x-cbr'], + 'cbl': ['text/x-cobol'], + 'cbor': ['application/cbor'], + 'cbr': ['application/vnd.comicbook-rar', 'application/x-cbr'], + 'cbt': ['application/x-cbr', 'application/x-cbt'], + 'cbz': [ + 'application/vnd.comicbook+zip', + 'application/x-cbr', + 'application/x-cbz' + ], + 'cc': ['text/x-c', 'text/x-c++src'], + 'cci': ['application/x-nintendo-3ds-rom'], + 'ccmx': ['application/x-ccmx'], + 'cco': ['application/x-cocoa'], + 'cct': ['application/x-director'], + 'ccxml': ['application/ccxml+xml'], + 'cdbcmsg': ['application/vnd.contact.cmsg'], + 'cdf': ['application/x-netcdf'], + 'cdfx': ['application/cdfx+xml'], + 'cdi': ['application/x-discjuggler-cd-image'], + 'cdkey': ['application/vnd.mediastation.cdkey'], + 'cdmia': ['application/cdmi-capability'], + 'cdmic': ['application/cdmi-container'], + 'cdmid': ['application/cdmi-domain'], + 'cdmio': ['application/cdmi-object'], + 'cdmiq': ['application/cdmi-queue'], + 'cdr': [ + 'application/cdr', + 'application/coreldraw', + 'application/vnd.corel-draw', + 'application/x-cdr', + 'application/x-coreldraw', + 'image/cdr', + 'image/x-cdr', + 'zz-application/zz-winassoc-cdr' + ], + 'cdx': ['chemical/x-cdx'], + 'cdxml': ['application/vnd.chemdraw+xml'], + 'cdy': ['application/vnd.cinderella'], + 'cer': ['application/pkix-cert'], + 'cert': ['application/x-x509-ca-cert'], + 'cfs': ['application/x-cfs-compressed'], + 'cgb': ['application/x-gameboy-color-rom'], + 'cgm': ['image/cgm'], + 'chat': ['application/x-chat'], + 'chd': ['application/x-mame-chd'], + 'chm': ['application/vnd.ms-htmlhelp', 'application/x-chm'], + 'chrt': ['application/vnd.kde.kchart', 'application/x-kchart'], + 'cif': ['chemical/x-cif'], + 'cii': ['application/vnd.anser-web-certificate-issue-initiation'], + 'cil': ['application/vnd.ms-artgalry'], + 'cjs': ['application/node'], + 'cl': ['text/x-opencl-src'], + 'cla': ['application/vnd.claymore'], + 'class': [ + 'application/java', + 'application/java-byte-code', + 'application/java-vm', + 'application/x-java', + 'application/x-java-class', + 'application/x-java-vm' + ], + 'clkk': ['application/vnd.crick.clicker.keyboard'], + 'clkp': ['application/vnd.crick.clicker.palette'], + 'clkt': ['application/vnd.crick.clicker.template'], + 'clkw': ['application/vnd.crick.clicker.wordbank'], + 'clkx': ['application/vnd.crick.clicker'], + 'clp': ['application/x-msclip'], + 'clpi': ['video/mp2t'], + 'cls': ['application/x-tex', 'text/x-tex'], + 'cmake': ['text/x-cmake'], + 'cmc': ['application/vnd.cosmocaller'], + 'cmdf': ['chemical/x-cmdf'], + 'cml': ['chemical/x-cml'], + 'cmp': ['application/vnd.yellowriver-custom-menu'], + 'cmx': ['image/x-cmx'], + 'cob': ['text/x-cobol'], + 'cod': ['application/vnd.rim.cod'], + 'coffee': ['application/vnd.coffeescript', 'text/coffeescript'], + 'com': ['application/x-msdownload'], + 'conf': ['text/plain'], + 'cpi': ['video/mp2t'], + 'cpio': ['application/x-cpio'], + 'cpio.gz': ['application/x-cpio-compressed'], + 'cpl': [ + 'application/cpl+xml', + 'application/vnd.microsoft.portable-executable', + 'application/x-ms-dos-executable', + 'application/x-ms-ne-executable', + 'application/x-msdownload' + ], + 'cpp': ['text/x-c', 'text/x-c++src'], + 'cpt': ['application/mac-compactpro'], + 'cr': ['text/crystal', 'text/x-crystal'], + 'cr2': ['image/x-canon-cr2'], + 'cr3': ['image/x-canon-cr3'], + 'crd': ['application/x-mscardfile'], + 'crdownload': ['application/x-partial-download'], + 'crl': ['application/pkix-crl'], + 'crt': ['application/x-x509-ca-cert'], + 'crw': ['image/x-canon-crw'], + 'crx': ['application/x-chrome-extension'], + 'cryptonote': ['application/vnd.rig.cryptonote'], + 'cs': ['text/x-csharp'], + 'csh': ['application/x-csh'], + 'csl': ['application/vnd.citationstyles.style+xml'], + 'csml': ['chemical/x-csml'], + 'cso': ['application/x-compressed-iso'], + 'csp': ['application/vnd.commonspace'], + 'css': ['text/css'], + 'cst': ['application/x-director'], + 'csv': [ + 'text/csv', + 'application/csv', + 'text/x-comma-separated-values', + 'text/x-csv' + ], + 'csvs': ['text/csv-schema'], + 'cu': ['application/cu-seeme'], + 'cue': ['application/x-cue'], + 'cur': ['image/x-win-bitmap'], + 'curl': ['text/vnd.curl'], + 'cwk': ['application/x-appleworks-document'], + 'cww': ['application/prs.cww'], + 'cxt': ['application/x-director'], + 'cxx': ['text/x-c', 'text/x-c++src'], + 'd': ['text/x-dsrc'], + 'dae': ['model/vnd.collada+xml'], + 'daf': ['application/vnd.mobius.daf'], + 'dar': ['application/x-dar'], + 'dart': ['application/vnd.dart', 'text/x-dart'], + 'dataless': ['application/vnd.fdsn.seed'], + 'davmount': ['application/davmount+xml'], + 'dbf': [ + 'application/dbase', + 'application/dbf', + 'application/vnd.dbf', + 'application/x-dbase', + 'application/x-dbf' + ], + 'dbk': [ + 'application/docbook+xml', + 'application/vnd.oasis.docbook+xml', + 'application/x-docbook+xml' + ], + 'dc': ['application/x-dc-rom'], + 'dcl': ['text/x-dcl'], + 'dcm': ['application/dicom'], + 'dcr': ['application/x-director', 'image/x-kodak-dcr'], + 'dcurl': ['text/vnd.curl.dcurl'], + 'dd2': ['application/vnd.oma.dd2+xml'], + 'ddd': ['application/vnd.fujixerox.ddd'], + 'ddf': ['application/vnd.syncml.dmddf+xml'], + 'dds': ['image/vnd.ms-dds', 'image/x-dds'], + 'deb': [ + 'application/vnd.debian.binary-package', + 'application/x-deb', + 'application/x-debian-package' + ], + 'def': ['text/plain'], + 'der': ['application/x-x509-ca-cert'], + 'desktop': ['application/x-desktop', 'application/x-gnome-app-info'], + 'device': ['text/x-systemd-unit'], + 'dfac': ['application/vnd.dreamfactory'], + 'dff': ['audio/dff', 'audio/x-dff'], + 'dgc': ['application/x-dgc-compressed'], + 'di': ['text/x-dsrc'], + 'dia': ['application/x-dia-diagram'], + 'dib': ['image/bmp', 'image/x-bmp', 'image/x-ms-bmp'], + 'dic': ['text/x-c'], + 'diff': ['text/x-diff', 'text/x-patch'], + 'dir': ['application/x-director'], + 'dis': ['application/vnd.mobius.dis'], + 'disposition-notification': ['message/disposition-notification'], + 'divx': [ + 'video/avi', + 'video/divx', + 'video/msvideo', + 'video/vnd.avi', + 'video/vnd.divx', + 'video/x-avi', + 'video/x-msvideo' + ], + 'djv': [ + 'image/vnd.djvu', + 'image/vnd.djvu+multipage', + 'image/x-djvu', + 'image/x.djvu' + ], + 'djvu': [ + 'image/vnd.djvu', + 'image/vnd.djvu+multipage', + 'image/x-djvu', + 'image/x.djvu' + ], + 'dll': [ + 'application/vnd.microsoft.portable-executable', + 'application/x-ms-dos-executable', + 'application/x-ms-ne-executable', + 'application/x-msdownload' + ], + 'dmg': ['application/x-apple-diskimage'], + 'dmp': [ + 'application/pcap', + 'application/vnd.tcpdump.pcap', + 'application/x-pcap' + ], + 'dna': ['application/vnd.dna'], + 'dng': ['image/x-adobe-dng'], + 'doc': [ + 'application/msword', + 'application/vnd.ms-word', + 'application/x-msword', + 'zz-application/zz-winassoc-doc' + ], + 'docbook': [ + 'application/docbook+xml', + 'application/vnd.oasis.docbook+xml', + 'application/x-docbook+xml' + ], + 'docm': ['application/vnd.ms-word.document.macroenabled.12'], + 'docx': [ + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' + ], + 'dot': [ + 'application/msword', + 'application/msword-template', + 'text/vnd.graphviz' + ], + 'dotm': ['application/vnd.ms-word.template.macroenabled.12'], + 'dotx': [ + 'application/vnd.openxmlformats-officedocument.wordprocessingml.template' + ], + 'dp': ['application/vnd.osgi.dp'], + 'dpg': ['application/vnd.dpgraph'], + 'dra': ['audio/vnd.dra'], + 'drl': ['application/x-excellon'], + 'drle': ['image/dicom-rle'], + 'drv': [ + 'application/vnd.microsoft.portable-executable', + 'application/x-ms-dos-executable', + 'application/x-ms-ne-executable', + 'application/x-msdownload' + ], + 'dsc': ['text/prs.lines.tag'], + 'dsf': ['audio/dsd', 'audio/dsf', 'audio/x-dsd', 'audio/x-dsf'], + 'dsl': ['text/x-dsl'], + 'dssc': ['application/dssc+der'], + 'dtb': ['application/x-dtbook+xml', 'text/x-devicetree-binary'], + 'dtd': ['application/xml-dtd', 'text/x-dtd'], + 'dts': ['audio/vnd.dts', 'audio/x-dts', 'text/x-devicetree-source'], + 'dtshd': ['audio/vnd.dts.hd', 'audio/x-dtshd'], + 'dtsi': ['text/x-devicetree-source'], + 'dtx': ['application/x-tex', 'text/x-tex'], + 'dv': ['video/dv'], + 'dvb': ['video/vnd.dvb.file'], + 'dvi': ['application/x-dvi'], + 'dvi.bz2': ['application/x-bzdvi'], + 'dvi.gz': ['application/x-gzdvi'], + 'dwd': ['application/atsc-dwd+xml'], + 'dwf': ['model/vnd.dwf'], + 'dwg': ['image/vnd.dwg'], + 'dxf': ['image/vnd.dxf'], + 'dxp': ['application/vnd.spotfire.dxp'], + 'dxr': ['application/x-director'], + 'e': ['text/x-eiffel'], + 'ear': ['application/java-archive'], + 'ecelp4800': ['audio/vnd.nuera.ecelp4800'], + 'ecelp7470': ['audio/vnd.nuera.ecelp7470'], + 'ecelp9600': ['audio/vnd.nuera.ecelp9600'], + 'ecma': ['application/ecmascript'], + 'edm': ['application/vnd.novadigm.edm'], + 'edx': ['application/vnd.novadigm.edx'], + 'efi': ['application/vnd.microsoft.portable-executable'], + 'efif': ['application/vnd.picsel'], + 'egon': ['application/x-egon'], + 'ei6': ['application/vnd.pg.osasli'], + 'eif': ['text/x-eiffel'], + 'el': ['text/x-emacs-lisp'], + 'emf': [ + 'application/emf', + 'application/x-emf', + 'application/x-msmetafile', + 'image/emf', + 'image/x-emf' + ], + 'eml': ['message/rfc822'], + 'emma': ['application/emma+xml'], + 'emotionml': ['application/emotionml+xml'], + 'emp': ['application/vnd.emusic-emusic_package'], + 'emz': ['application/x-msmetafile'], + 'ent': [ + 'application/xml-external-parsed-entity', + 'text/xml-external-parsed-entity' + ], + 'eol': ['audio/vnd.digital-winds'], + 'eot': ['application/vnd.ms-fontobject'], + 'eps': ['application/postscript', 'image/x-eps'], + 'eps.bz2': ['image/x-bzeps'], + 'eps.gz': ['image/x-gzeps'], + 'epsf': ['image/x-eps'], + 'epsf.bz2': ['image/x-bzeps'], + 'epsf.gz': ['image/x-gzeps'], + 'epsi': ['image/x-eps'], + 'epsi.bz2': ['image/x-bzeps'], + 'epsi.gz': ['image/x-gzeps'], + 'epub': ['application/epub+zip'], + 'eris': ['application/x-eris-link+cbor'], + 'erl': ['text/x-erlang'], + 'es': ['application/ecmascript', 'text/ecmascript'], + 'es3': ['application/vnd.eszigno3+xml'], + 'esa': ['application/vnd.osgi.subsystem'], + 'escn': ['application/x-godot-scene'], + 'esf': ['application/vnd.epson.esf'], + 'et3': ['application/vnd.eszigno3+xml'], + 'etheme': ['application/x-e-theme'], + 'etx': ['text/x-setext'], + 'eva': ['application/x-eva'], + 'evy': ['application/x-envoy'], + 'ex': ['text/x-elixir'], + 'exe': [ + 'application/vnd.microsoft.portable-executable', + 'application/x-dosexec', + 'application/x-ms-dos-executable', + 'application/x-ms-ne-executable', + 'application/x-msdos-program', + 'application/x-msdownload' + ], + 'exi': ['application/exi'], + 'exp': ['application/express'], + 'exr': ['image/aces', 'image/x-exr'], + 'exs': ['text/x-elixir'], + 'ext': ['application/vnd.novadigm.ext'], + 'ez': ['application/andrew-inset'], + 'ez2': ['application/vnd.ezpix-album'], + 'ez3': ['application/vnd.ezpix-package'], + 'f': ['text/x-fortran'], + 'f4a': ['audio/m4a', 'audio/mp4', 'audio/x-m4a'], + 'f4b': ['audio/x-m4b'], + 'f4v': ['video/mp4', 'video/mp4v-es', 'video/x-f4v', 'video/x-m4v'], + 'f77': ['text/x-fortran'], + 'f90': ['text/x-fortran'], + 'f95': ['text/x-fortran'], + 'fasl': ['text/x-common-lisp'], + 'fb2': ['application/x-fictionbook', 'application/x-fictionbook+xml'], + 'fb2.zip': ['application/x-zip-compressed-fb2'], + 'fbs': ['image/vnd.fastbidsheet'], + 'fcdt': ['application/vnd.adobe.formscentral.fcdt'], + 'fcs': ['application/vnd.isac.fcs'], + 'fd': ['application/x-fd-file', 'application/x-raw-floppy-disk-image'], + 'fdf': ['application/vnd.fdf'], + 'fds': ['application/x-fds-disk'], + 'fdt': ['application/fdt+xml'], + 'fe_launch': ['application/vnd.denovo.fcselayout-link'], + 'feature': ['text/x-gherkin'], + 'fg5': ['application/vnd.fujitsu.oasysgp'], + 'fgd': ['application/x-director'], + 'fh': ['image/x-freehand'], + 'fh4': ['image/x-freehand'], + 'fh5': ['image/x-freehand'], + 'fh7': ['image/x-freehand'], + 'fhc': ['image/x-freehand'], + 'fig': ['application/x-xfig', 'image/x-xfig'], + 'fish': ['application/x-fishscript', 'text/x-fish'], + 'fit': ['application/fits', 'image/fits', 'image/x-fits'], + 'fits': ['application/fits', 'image/fits', 'image/x-fits'], + 'fl': ['application/x-fluid'], + 'flac': ['audio/flac', 'audio/x-flac'], + 'flatpak': ['application/vnd.flatpak', 'application/vnd.xdgapp'], + 'flatpakref': ['application/vnd.flatpak.ref'], + 'flatpakrepo': ['application/vnd.flatpak.repo'], + 'flc': ['video/fli', 'video/x-fli', 'video/x-flic'], + 'fli': ['video/fli', 'video/x-fli', 'video/x-flic'], + 'flo': ['application/vnd.micrografx.flo'], + 'flv': [ + 'video/x-flv', + 'application/x-flash-video', + 'flv-application/octet-stream', + 'video/flv' + ], + 'flw': ['application/vnd.kde.kivio', 'application/x-kivio'], + 'flx': ['text/vnd.fmi.flexstor'], + 'fly': ['text/vnd.fly'], + 'fm': ['application/vnd.framemaker', 'application/x-frame'], + 'fnc': ['application/vnd.frogans.fnc'], + 'fo': ['application/vnd.software602.filler.form+xml', 'text/x-xslfo'], + 'fodg': ['application/vnd.oasis.opendocument.graphics-flat-xml'], + 'fodp': ['application/vnd.oasis.opendocument.presentation-flat-xml'], + 'fods': ['application/vnd.oasis.opendocument.spreadsheet-flat-xml'], + 'fodt': ['application/vnd.oasis.opendocument.text-flat-xml'], + 'for': ['text/x-fortran'], + 'fpx': ['image/vnd.fpx'], + 'frame': ['application/vnd.framemaker'], + 'fsc': ['application/vnd.fsc.weblaunch'], + 'fst': ['image/vnd.fst'], + 'ftc': ['application/vnd.fluxtime.clip'], + 'fti': ['application/vnd.anser-web-funds-transfer-initiation'], + 'fts': ['application/fits', 'image/fits', 'image/x-fits'], + 'fvt': ['video/vnd.fvt'], + 'fxm': ['video/x-javafx'], + 'fxp': ['application/vnd.adobe.fxp'], + 'fxpl': ['application/vnd.adobe.fxp'], + 'fzs': ['application/vnd.fuzzysheet'], + 'g2w': ['application/vnd.geoplan'], + 'g3': ['image/fax-g3', 'image/g3fax'], + 'g3w': ['application/vnd.geospace'], + 'gac': ['application/vnd.groove-account'], + 'gam': ['application/x-tads'], + 'gb': ['application/x-gameboy-rom'], + 'gba': ['application/x-gba-rom'], + 'gbc': ['application/x-gameboy-color-rom'], + 'gbr': [ + 'application/rpki-ghostbusters', + 'application/vnd.gerber', + 'application/x-gerber', + 'image/x-gimp-gbr' + ], + 'gbrjob': ['application/x-gerber-job'], + 'gca': ['application/x-gca-compressed'], + 'gcode': ['text/x.gcode'], + 'gcrd': ['text/directory', 'text/vcard', 'text/x-vcard'], + 'gd': ['application/x-gdscript'], + 'gdi': ['application/x-gd-rom-cue'], + 'gdl': ['model/vnd.gdl'], + 'gdoc': ['application/vnd.google-apps.document'], + 'gdshader': ['application/x-godot-shader'], + 'ged': [ + 'application/x-gedcom', + 'text/gedcom', + 'text/vnd.familysearch.gedcom' + ], + 'gedcom': [ + 'application/x-gedcom', + 'text/gedcom', + 'text/vnd.familysearch.gedcom' + ], + 'gem': ['application/x-gtar', 'application/x-tar'], + 'gen': ['application/x-genesis-rom'], + 'geo': ['application/vnd.dynageo'], + 'geo.json': ['application/geo+json', 'application/vnd.geo+json'], + 'geojson': ['application/geo+json', 'application/vnd.geo+json'], + 'gex': ['application/vnd.geometry-explorer'], + 'gf': ['application/x-tex-gf'], + 'gg': ['application/x-gamegear-rom'], + 'ggb': ['application/vnd.geogebra.file'], + 'ggt': ['application/vnd.geogebra.tool'], + 'ghf': ['application/vnd.groove-help'], + 'gif': ['image/gif'], + 'gih': ['image/x-gimp-gih'], + 'gim': ['application/vnd.groove-identity-message'], + 'glade': ['application/x-glade'], + 'glb': ['model/gltf-binary'], + 'gltf': ['model/gltf+json'], + 'gml': ['application/gml+xml'], + 'gmo': ['application/x-gettext-translation'], + 'gmx': ['application/vnd.gmx'], + 'gnc': ['application/x-gnucash'], + 'gnd': ['application/gnunet-directory'], + 'gnucash': ['application/x-gnucash'], + 'gnumeric': ['application/x-gnumeric'], + 'gnuplot': ['application/x-gnuplot'], + 'go': ['text/x-go'], + 'gp': ['application/x-gnuplot'], + 'gpg': [ + 'application/pgp', + 'application/pgp-encrypted', + 'application/pgp-keys', + 'application/pgp-signature' + ], + 'gph': ['application/vnd.flographit'], + 'gplt': ['application/x-gnuplot'], + 'gpx': [ + 'application/gpx', + 'application/gpx+xml', + 'application/x-gpx', + 'application/x-gpx+xml' + ], + 'gqf': ['application/vnd.grafeq'], + 'gqs': ['application/vnd.grafeq'], + 'gra': ['application/x-graphite'], + 'gradle': ['text/x-gradle'], + 'gram': ['application/srgs'], + 'gramps': ['application/x-gramps-xml'], + 'gre': ['application/vnd.geometry-explorer'], + 'groovy': ['text/x-groovy'], + 'grv': ['application/vnd.groove-injector'], + 'grxml': ['application/srgs+xml'], + 'gs': ['text/x-genie'], + 'gsf': ['application/x-font-ghostscript', 'application/x-font-type1'], + 'gsh': ['text/x-groovy'], + 'gsheet': ['application/vnd.google-apps.spreadsheet'], + 'gslides': ['application/vnd.google-apps.presentation'], + 'gsm': ['audio/x-gsm'], + 'gtar': ['application/x-gtar', 'application/x-tar'], + 'gtm': ['application/vnd.groove-tool-message'], + 'gtw': ['model/vnd.gtw'], + 'gv': ['text/vnd.graphviz'], + 'gvp': ['text/google-video-pointer', 'text/x-google-video-pointer'], + 'gvy': ['text/x-groovy'], + 'gx': ['text/x-gcode-gx'], + 'gxf': ['application/gxf'], + 'gxt': ['application/vnd.geonext'], + 'gy': ['text/x-groovy'], + 'gz': ['application/x-gzip', 'application/gzip'], + 'h': ['text/x-c', 'text/x-chdr'], + 'h++': ['text/x-c++hdr'], + 'h261': ['video/h261'], + 'h263': ['video/h263'], + 'h264': ['video/h264'], + 'h4': ['application/x-hdf'], + 'h5': ['application/x-hdf'], + 'hal': ['application/vnd.hal+xml'], + 'hbci': ['application/vnd.hbci'], + 'hbs': ['text/x-handlebars-template'], + 'hdd': ['application/x-virtualbox-hdd'], + 'hdf': ['application/x-hdf'], + 'hdf4': ['application/x-hdf'], + 'hdf5': ['application/x-hdf'], + 'hdp': ['image/jxr', 'image/vnd.ms-photo'], + 'heic': [ + 'image/heic', + 'image/heic-sequence', + 'image/heif', + 'image/heif-sequence' + ], + 'heics': ['image/heic-sequence'], + 'heif': [ + 'image/heic', + 'image/heic-sequence', + 'image/heif', + 'image/heif-sequence' + ], + 'heifs': ['image/heif-sequence'], + 'hej2': ['image/hej2k'], + 'held': ['application/atsc-held+xml'], + 'hfe': ['application/x-hfe-file', 'application/x-hfe-floppy-image'], + 'hh': ['text/x-c', 'text/x-c++hdr'], + 'hif': [ + 'image/heic', + 'image/heic-sequence', + 'image/heif', + 'image/heif-sequence' + ], + 'hjson': ['application/hjson'], + 'hlp': ['application/winhlp', 'zz-application/zz-winassoc-hlp'], + 'hp': ['text/x-c++hdr'], + 'hpgl': ['application/vnd.hp-hpgl'], + 'hpid': ['application/vnd.hp-hpid'], + 'hpp': ['text/x-c++hdr'], + 'hps': ['application/vnd.hp-hps'], + 'hqx': ['application/stuffit', 'application/mac-binhex40'], + 'hs': ['text/x-haskell'], + 'hsj2': ['image/hsj2'], + 'hta': ['application/hta'], + 'htc': ['text/x-component'], + 'htke': ['application/vnd.kenameaapp'], + 'htm': ['text/html', 'application/xhtml+xml'], + 'html': ['text/html', 'application/xhtml+xml'], + 'hvd': ['application/vnd.yamaha.hv-dic'], + 'hvp': ['application/vnd.yamaha.hv-voice'], + 'hvs': ['application/vnd.yamaha.hv-script'], + 'hwp': ['application/vnd.haansoft-hwp', 'application/x-hwp'], + 'hwt': ['application/vnd.haansoft-hwt', 'application/x-hwt'], + 'hxx': ['text/x-c++hdr'], + 'i2g': ['application/vnd.intergeo'], + 'ica': ['application/x-ica'], + 'icb': [ + 'application/tga', + 'application/x-targa', + 'application/x-tga', + 'image/targa', + 'image/tga', + 'image/x-icb', + 'image/x-targa', + 'image/x-tga' + ], + 'icc': ['application/vnd.iccprofile'], + 'ice': ['x-conference/x-cooltalk'], + 'icm': ['application/vnd.iccprofile'], + 'icns': ['image/x-icns'], + 'ico': [ + 'application/ico', + 'image/ico', + 'image/icon', + 'image/vnd.microsoft.icon', + 'image/x-ico', + 'image/x-icon', + 'text/ico' + ], + 'ics': ['application/ics', 'text/calendar', 'text/x-vcalendar'], + 'idl': ['text/x-idl'], + 'ief': ['image/ief'], + 'ifb': ['text/calendar'], + 'iff': ['image/x-iff', 'image/x-ilbm'], + 'ifm': ['application/vnd.shana.informed.formdata'], + 'iges': ['model/iges'], + 'igl': ['application/vnd.igloader'], + 'igm': ['application/vnd.insors.igm'], + 'igs': ['model/iges'], + 'igx': ['application/vnd.micrografx.igx'], + 'iif': ['application/vnd.shana.informed.interchange'], + 'ilbm': ['image/x-iff', 'image/x-ilbm'], + 'ime': ['audio/imelody', 'audio/x-imelody', 'text/x-imelody'], + 'img': ['application/vnd.efi.img', 'application/x-raw-disk-image'], + 'img.xz': ['application/x-raw-disk-image-xz-compressed'], + 'imp': ['application/vnd.accpac.simply.imp'], + 'ims': ['application/vnd.ms-ims'], + 'imy': ['audio/imelody', 'audio/x-imelody', 'text/x-imelody'], + 'in': ['text/plain'], + 'ini': ['text/plain'], + 'ink': ['application/inkml+xml'], + 'inkml': ['application/inkml+xml'], + 'ins': ['application/x-tex', 'text/x-tex'], + 'install': ['application/x-install-instructions'], + 'iota': ['application/vnd.astraea-software.iota'], + 'ipfix': ['application/ipfix'], + 'ipk': ['application/vnd.shana.informed.package'], + 'ips': ['application/x-ips-patch'], + 'iptables': ['text/x-iptables'], + 'ipynb': ['application/x-ipynb+json'], + 'irm': ['application/vnd.ibm.rights-management'], + 'irp': ['application/vnd.irepository.package+xml'], + 'iso': [ + 'application/vnd.efi.iso', + 'application/x-cd-image', + 'application/x-dreamcast-rom', + 'application/x-gamecube-iso-image', + 'application/x-gamecube-rom', + 'application/x-iso9660-image', + 'application/x-saturn-rom', + 'application/x-sega-cd-rom', + 'application/x-sega-pico-rom', + 'application/x-wbfs', + 'application/x-wia', + 'application/x-wii-iso-image', + 'application/x-wii-rom' + ], + 'iso9660': [ + 'application/vnd.efi.iso', + 'application/x-cd-image', + 'application/x-iso9660-image' + ], + 'it': ['audio/x-it'], + 'it87': ['application/x-it87'], + 'itp': ['application/vnd.shana.informed.formtemplate'], + 'its': ['application/its+xml'], + 'ivp': ['application/vnd.immervision-ivp'], + 'ivu': ['application/vnd.immervision-ivu'], + 'j2c': ['image/x-jp2-codestream'], + 'j2k': ['image/x-jp2-codestream'], + 'jad': ['text/vnd.sun.j2me.app-descriptor'], + 'jade': ['text/jade'], + 'jam': ['application/vnd.jam'], + 'jar': [ + 'application/x-java-archive', + 'application/java-archive', + 'application/x-jar' + ], + 'jardiff': ['application/x-java-archive-diff'], + 'java': ['text/x-java', 'text/x-java-source'], + 'jceks': ['application/x-java-jce-keystore'], + 'jfif': ['image/jpeg', 'image/pjpeg'], + 'jhc': ['image/jphc'], + 'jisp': ['application/vnd.jisp'], + 'jks': ['application/x-java-keystore'], + 'jl': ['text/julia'], + 'jls': ['image/jls'], + 'jlt': ['application/vnd.hp-jlyt'], + 'jng': ['image/x-jng'], + 'jnlp': ['application/x-java-jnlp-file'], + 'joda': ['application/vnd.joost.joda-archive'], + 'jp2': [ + 'image/jp2', + 'image/jpeg2000', + 'image/jpeg2000-image', + 'image/x-jpeg2000-image' + ], + 'jpc': ['image/x-jp2-codestream'], + 'jpe': ['image/jpeg', 'image/pjpeg'], + 'jpeg': ['image/jpeg', 'image/pjpeg'], + 'jpf': ['image/jpx'], + 'jpg': ['image/jpeg', 'image/pjpeg'], + 'jpg2': [ + 'image/jp2', + 'image/jpeg2000', + 'image/jpeg2000-image', + 'image/x-jpeg2000-image' + ], + 'jpgm': ['image/jpm', 'video/jpm'], + 'jpgv': ['video/jpeg'], + 'jph': ['image/jph'], + 'jpm': ['image/jpm', 'video/jpm'], + 'jpr': ['application/x-jbuilder-project'], + 'jpx': ['application/x-jbuilder-project', 'image/jpx'], + 'jrd': ['application/jrd+json'], + 'js': [ + 'text/javascript', + 'application/javascript', + 'application/x-javascript', + 'text/jscript' + ], + 'jse': ['text/jscript.encode'], + 'jsm': [ + 'application/javascript', + 'application/x-javascript', + 'text/javascript', + 'text/jscript' + ], + 'json': ['application/json', 'application/schema+json'], + 'json-patch': ['application/json-patch+json'], + 'json5': ['application/json5'], + 'jsonld': ['application/ld+json'], + 'jsonml': ['application/jsonml+json'], + 'jsx': ['text/jsx'], + 'jxl': ['image/jxl'], + 'jxr': ['image/jxr', 'image/vnd.ms-photo'], + 'jxra': ['image/jxra'], + 'jxrs': ['image/jxrs'], + 'jxs': ['image/jxs'], + 'jxsc': ['image/jxsc'], + 'jxsi': ['image/jxsi'], + 'jxss': ['image/jxss'], + 'k25': ['image/x-kodak-k25'], + 'k7': ['application/x-thomson-cassette'], + 'kar': ['audio/midi', 'audio/x-midi'], + 'karbon': ['application/vnd.kde.karbon', 'application/x-karbon'], + 'kdbx': ['application/x-keepass2'], + 'kdc': ['image/x-kodak-kdc'], + 'kdelnk': ['application/x-desktop', 'application/x-gnome-app-info'], + 'kexi': [ + 'application/x-kexiproject-sqlite', + 'application/x-kexiproject-sqlite2', + 'application/x-kexiproject-sqlite3', + 'application/x-vnd.kde.kexi' + ], + 'kexic': ['application/x-kexi-connectiondata'], + 'kexis': ['application/x-kexiproject-shortcut'], + 'key': [ + 'application/vnd.apple.keynote', + 'application/pgp-keys', + 'application/x-iwork-keynote-sffkey' + ], + 'keynote': ['application/vnd.apple.keynote'], + 'kfo': ['application/vnd.kde.kformula', 'application/x-kformula'], + 'kfx': ['application/vnd.amazon.mobi8-ebook', 'application/x-mobi8-ebook'], + 'kia': ['application/vnd.kidspiration'], + 'kil': ['application/x-killustrator'], + 'kino': ['application/smil', 'application/smil+xml'], + 'kml': ['application/vnd.google-earth.kml+xml'], + 'kmz': ['application/vnd.google-earth.kmz'], + 'kne': ['application/vnd.kinar'], + 'knp': ['application/vnd.kinar'], + 'kon': ['application/vnd.kde.kontour', 'application/x-kontour'], + 'kpm': ['application/x-kpovmodeler'], + 'kpr': ['application/vnd.kde.kpresenter', 'application/x-kpresenter'], + 'kpt': ['application/vnd.kde.kpresenter', 'application/x-kpresenter'], + 'kpxx': ['application/vnd.ds-keypoint'], + 'kra': ['application/x-krita'], + 'krz': ['application/x-krita'], + 'ks': ['application/x-java-keystore'], + 'ksp': ['application/vnd.kde.kspread', 'application/x-kspread'], + 'ksy': ['text/x-kaitai-struct'], + 'kt': ['text/x-kotlin'], + 'ktr': ['application/vnd.kahootz'], + 'ktx': ['image/ktx'], + 'ktx2': ['image/ktx2'], + 'ktz': ['application/vnd.kahootz'], + 'kud': ['application/x-kugar'], + 'kwd': ['application/vnd.kde.kword', 'application/x-kword'], + 'kwt': ['application/vnd.kde.kword', 'application/x-kword'], + 'la': ['application/x-shared-library-la'], + 'lasxml': ['application/vnd.las.las+xml'], + 'latex': ['application/x-latex', 'application/x-tex', 'text/x-tex'], + 'lbd': ['application/vnd.llamagraphics.life-balance.desktop'], + 'lbe': ['application/vnd.llamagraphics.life-balance.exchange+xml'], + 'lbm': ['image/x-iff', 'image/x-ilbm'], + 'ldif': ['text/x-ldif'], + 'les': ['application/vnd.hhe.lesson-player'], + 'less': ['text/less'], + 'lgr': ['application/lgr+xml'], + 'lha': ['application/x-lha', 'application/x-lzh-compressed'], + 'lhs': ['text/x-literate-haskell'], + 'lhz': ['application/x-lhz'], + 'lib': ['application/vnd.microsoft.portable-executable'], + 'link66': ['application/vnd.route66.link66+xml'], + 'lisp': ['text/x-common-lisp'], + 'list': ['text/plain'], + 'list3820': ['application/vnd.ibm.modcap'], + 'listafp': ['application/vnd.ibm.modcap'], + 'litcoffee': ['text/coffeescript'], + 'lmdb': ['application/x-lmdb'], + 'lnk': ['application/x-ms-shortcut', 'application/x-win-lnk'], + 'lnx': ['application/x-atari-lynx-rom'], + 'loas': ['audio/usac'], + 'log': ['text/plain', 'text/x-log'], + 'lostxml': ['application/lost+xml'], + 'lrm': ['application/vnd.ms-lrm'], + 'lrv': ['video/mp4', 'video/mp4v-es', 'video/x-m4v'], + 'lrz': ['application/x-lrzip'], + 'ltf': ['application/vnd.frogans.ltf'], + 'ltx': ['application/x-tex', 'text/x-tex'], + 'lua': ['text/x-lua'], + 'luac': ['application/x-lua-bytecode'], + 'lvp': ['audio/vnd.lucent.voice'], + 'lwo': ['image/x-lwo'], + 'lwob': ['image/x-lwo'], + 'lwp': ['application/vnd.lotus-wordpro'], + 'lws': ['image/x-lws'], + 'ly': ['text/x-lilypond'], + 'lyx': ['application/x-lyx', 'text/x-lyx'], + 'lz': ['application/x-lzip'], + 'lz4': ['application/x-lz4'], + 'lzh': ['application/x-lha', 'application/x-lzh-compressed'], + 'lzma': ['application/x-lzma'], + 'lzo': ['application/x-lzop'], + 'm': ['text/x-matlab', 'text/x-objcsrc', 'text/x-octave'], + 'm13': ['application/x-msmediaview'], + 'm14': ['application/x-msmediaview'], + 'm15': ['audio/x-mod'], + 'm1u': ['video/vnd.mpegurl', 'video/x-mpegurl'], + 'm1v': ['video/mpeg'], + 'm21': ['application/mp21'], + 'm2a': ['audio/mpeg'], + 'm2t': ['video/mp2t'], + 'm2ts': ['video/mp2t'], + 'm2v': ['video/mpeg'], + 'm3a': ['audio/mpeg'], + 'm3u': [ + 'audio/x-mpegurl', + 'application/m3u', + 'application/vnd.apple.mpegurl', + 'audio/m3u', + 'audio/mpegurl', + 'audio/x-m3u', + 'audio/x-mp3-playlist' + ], + 'm3u8': [ + 'application/m3u', + 'application/vnd.apple.mpegurl', + 'audio/m3u', + 'audio/mpegurl', + 'audio/x-m3u', + 'audio/x-mp3-playlist', + 'audio/x-mpegurl' + ], + 'm4': ['application/x-m4'], + 'm4a': ['audio/mp4', 'audio/m4a', 'audio/x-m4a'], + 'm4b': ['audio/x-m4b'], + 'm4p': ['application/mp4'], + 'm4r': ['audio/x-m4r'], + 'm4s': ['video/iso.segment'], + 'm4u': ['video/vnd.mpegurl', 'video/x-mpegurl'], + 'm4v': ['video/mp4', 'video/mp4v-es', 'video/x-m4v'], + 'm7': ['application/x-thomson-cartridge-memo7'], + 'ma': ['application/mathematica'], + 'mab': ['application/x-markaby'], + 'mads': ['application/mads+xml'], + 'maei': ['application/mmt-aei+xml'], + 'mag': ['application/vnd.ecowin.chart'], + 'mak': ['text/x-makefile'], + 'maker': ['application/vnd.framemaker'], + 'man': ['application/x-troff-man', 'text/troff'], + 'manifest': ['text/cache-manifest'], + 'map': ['application/json'], + 'markdown': ['text/markdown', 'text/x-markdown'], + 'mathml': ['application/mathml+xml'], + 'mb': ['application/mathematica'], + 'mbk': ['application/vnd.mobius.mbk'], + 'mbox': ['application/mbox'], + 'mc1': ['application/vnd.medcalcdata'], + 'mc2': ['text/vnd.senx.warpscript'], + 'mcd': ['application/vnd.mcd'], + 'mcurl': ['text/vnd.curl.mcurl'], + 'md': ['text/markdown', 'text/x-markdown'], + 'mdb': [ + 'application/x-msaccess', + 'application/mdb', + 'application/msaccess', + 'application/vnd.ms-access', + 'application/vnd.msaccess', + 'application/x-lmdb', + 'application/x-mdb', + 'zz-application/zz-winassoc-mdb' + ], + 'mdi': ['image/vnd.ms-modi'], + 'mdx': ['application/x-genesis-32x-rom', 'text/mdx'], + 'me': ['text/troff', 'text/x-troff-me'], + 'med': ['audio/x-mod'], + 'mesh': ['model/mesh'], + 'meta4': ['application/metalink4+xml'], + 'metalink': ['application/metalink+xml'], + 'mets': ['application/mets+xml'], + 'mfm': ['application/vnd.mfmp'], + 'mft': ['application/rpki-manifest'], + 'mgp': [ + 'application/vnd.osgeo.mapguide.package', + 'application/x-magicpoint' + ], + 'mgz': ['application/vnd.proteus.magazine'], + 'mht': ['message/rfc822'], + 'mhtml': ['message/rfc822'], + 'mid': ['audio/midi', 'audio/x-midi'], + 'midi': ['audio/midi', 'audio/x-midi'], + 'mie': ['application/x-mie'], + 'mif': ['application/vnd.mif', 'application/x-mif'], + 'mime': ['message/rfc822'], + 'minipsf': ['audio/x-minipsf'], + 'mj2': ['video/mj2'], + 'mjp2': ['video/mj2'], + 'mjs': ['application/javascript', 'text/javascript'], + 'mk': ['text/x-makefile'], + 'mk3d': ['video/x-matroska', 'video/x-matroska-3d'], + 'mka': ['audio/x-matroska'], + 'mkd': ['text/markdown', 'text/x-markdown'], + 'mks': ['video/x-matroska'], + 'mkv': ['video/x-matroska'], + 'ml': ['text/x-ocaml'], + 'mli': ['text/x-ocaml'], + 'mlp': ['application/vnd.dolby.mlp'], + 'mm': ['application/x-freemind', 'text/x-troff-mm'], + 'mmd': ['application/vnd.chipnuts.karaoke-mmd'], + 'mmf': ['application/vnd.smaf'], + 'mml': ['application/mathml+xml', 'text/mathml'], + 'mmr': ['image/vnd.fujixerox.edmics-mmr'], + 'mng': ['video/x-mng'], + 'mny': ['application/x-msmoney'], + 'mo': ['application/x-gettext-translation'], + 'mo3': ['audio/x-mo3'], + 'mobi': ['application/x-mobipocket-ebook'], + 'moc': ['text/x-moc'], + 'mod': ['audio/x-mod'], + 'mods': ['application/mods+xml'], + 'mof': ['text/x-mof'], + 'mol': ['chemical/x-mdl-molfile'], + 'mol2': ['chemical/x-mol2'], + 'moo': ['chemical/x-mopac-out'], + 'moov': ['video/quicktime'], + 'mount': ['text/x-systemd-unit'], + 'mov': ['video/quicktime'], + 'movie': ['video/x-sgi-movie'], + 'mp2': [ + 'audio/mpeg', + 'audio/x-mpeg', + 'video/mpeg', + 'video/x-mpeg', + 'video/mp2t' + ], + 'mp21': ['application/mp21'], + 'mp2a': ['audio/mpeg'], + 'mp3': ['audio/mpeg', 'audio/x-mp3', 'audio/x-mpg'], + 'mp4': ['video/mp4', 'application/mp4'], + 'mp4a': ['audio/mp4'], + 'mp4s': ['application/mp4'], + 'mp4v': ['video/mp4'], + 'mpc': ['application/vnd.mophun.certificate', 'audio/x-musepack'], + 'mpe': ['video/mpeg'], + 'mpeg': ['video/mpeg'], + 'mpega': ['audio/mpeg'], + 'mpg': ['video/mpeg'], + 'mpg4': ['video/mp4'], + 'mpga': ['audio/mpeg'], + 'mpkg': ['application/vnd.apple.installer+xml'], + 'mpl': ['text/x-mpl2-playlist', 'video/mp2t'], + 'mpls': ['video/mp2t'], + 'mpm': ['application/vnd.blueice.multipass'], + 'mpn': ['application/vnd.mophun.application'], + 'mpp': ['application/vnd.ms-project'], + 'mpt': ['application/vnd.ms-project'], + 'mpy': ['application/vnd.ibm.minipay'], + 'mqy': ['application/vnd.mobius.mqy'], + 'mrc': ['application/marc'], + 'mrcx': ['application/marcxml+xml'], + 'ms': ['text/troff', 'text/x-troff-ms'], + 'mscml': ['application/mediaservercontrol+xml'], + 'mseed': ['application/vnd.fdsn.mseed'], + 'mseq': ['application/vnd.mseq'], + 'msf': ['application/vnd.epson.msf'], + 'msh': ['model/mesh'], + 'msi': ['application/x-msi', 'application/x-msdownload'], + 'msl': ['application/vnd.mobius.msl'], + 'msod': ['image/x-msod'], + 'msty': ['application/vnd.muvee.style'], + 'msx': ['application/x-msx-rom'], + 'mtl': ['model/mtl', 'text/x-mtl'], + 'mtm': ['audio/x-mod'], + 'mts': ['model/vnd.mts', 'video/mp2t'], + 'mup': ['text/x-mup'], + 'mus': ['application/vnd.musician'], + 'musicxml': ['application/vnd.recordare.musicxml+xml'], + 'mvb': ['application/x-msmediaview'], + 'mwf': ['application/vnd.mfer'], + 'mxf': ['application/mxf'], + 'mxl': ['application/vnd.recordare.musicxml'], + 'mxmf': ['audio/mobile-xmf'], + 'mxml': ['application/xv+xml'], + 'mxs': ['application/vnd.triscape.mxs'], + 'mxu': ['video/vnd.mpegurl', 'video/x-mpegurl'], + 'n-gage': ['application/vnd.nokia.n-gage.symbian.install'], + 'n3': ['text/n3'], + 'n64': ['application/x-n64-rom'], + 'nb': [ + 'application/mathematica', + 'application/vnd.wolfram.mathematica', + 'application/x-mathematica' + ], + 'nbp': ['application/vnd.wolfram.player'], + 'nc': ['application/x-netcdf'], + 'ncx': ['application/x-dtbncx+xml'], + 'nds': ['application/x-nintendo-ds-rom'], + 'nef': ['image/x-nikon-nef'], + 'nes': ['application/x-nes-rom'], + 'nez': ['application/x-nes-rom'], + 'nfo': ['text/x-nfo'], + 'ngc': ['application/x-neo-geo-pocket-color-rom'], + 'ngdat': ['application/vnd.nokia.n-gage.data'], + 'ngp': ['application/x-neo-geo-pocket-rom'], + 'nitf': ['application/vnd.nitf'], + 'nlu': ['application/vnd.neurolanguage.nlu'], + 'nml': ['application/vnd.enliven'], + 'nnd': ['application/vnd.noblenet-directory'], + 'nns': ['application/vnd.noblenet-sealer'], + 'nnw': ['application/vnd.noblenet-web'], + 'not': ['text/x-mup'], + 'npx': ['image/vnd.net-fpx'], + 'nsc': ['application/x-conference', 'application/x-netshow-channel'], + 'nsf': ['application/vnd.lotus-notes'], + 'ntf': ['application/vnd.nitf'], + 'numbers': [ + 'application/vnd.apple.numbers', + 'application/x-iwork-numbers-sffnumbers' + ], + 'nwc': ['application/x-nwc'], + 'nzb': ['application/x-nzb'], + 'o': ['application/x-object'], + 'oa2': ['application/vnd.fujitsu.oasys2'], + 'oa3': ['application/vnd.fujitsu.oasys3'], + 'oas': ['application/vnd.fujitsu.oasys'], + 'obd': ['application/x-msbinder'], + 'obj': ['application/x-tgif', 'model/obj'], + 'ocl': ['text/x-ocl'], + 'oda': ['application/oda'], + 'odb': ['application/vnd.oasis.opendocument.database'], + 'odc': ['application/vnd.oasis.opendocument.chart'], + 'odf': ['application/vnd.oasis.opendocument.formula'], + 'odft': ['application/vnd.oasis.opendocument.formula-template'], + 'odg': ['application/vnd.oasis.opendocument.graphics'], + 'odi': ['application/vnd.oasis.opendocument.image'], + 'odm': ['application/vnd.oasis.opendocument.text-master'], + 'odp': ['application/vnd.oasis.opendocument.presentation'], + 'ods': ['application/vnd.oasis.opendocument.spreadsheet'], + 'odt': ['application/vnd.oasis.opendocument.text'], + 'oga': ['audio/ogg', 'audio/x-vorbis+ogg'], + 'ogg': [ + 'audio/ogg', + 'audio/x-ogg', + 'audio/x-vorbis+ogg', + 'video/ogg', + 'video/x-ogg' + ], + 'ogm': ['video/x-ogm', 'video/x-ogm+ogg'], + 'ogv': ['video/ogg'], + 'ogx': ['application/ogg'], + 'old': ['application/x-trash'], + 'oleo': ['application/x-oleo'], + 'omf': ['application/x-omf'], + 'onepkg': ['application/onenote'], + 'onetmp': ['application/onenote'], + 'onetoc': ['application/onenote'], + 'onetoc2': ['application/onenote'], + 'ooc': ['text/x-ooc'], + 'opf': ['application/oebps-package+xml'], + 'opml': ['text/x-opml', 'text/x-opml+xml'], + 'oprc': ['application/vnd.palm'], + 'opus': ['audio/ogg', 'audio/x-ogg'], + 'ora': ['image/openraster'], + 'orf': ['image/x-olympus-orf'], + 'org': ['application/vnd.lotus-organizer', 'text/org'], + 'osf': ['application/vnd.yamaha.openscoreformat'], + 'osfpvg': ['application/vnd.yamaha.openscoreformat.osfpvg+xml'], + 'otc': ['application/vnd.oasis.opendocument.chart-template'], + 'otf': ['application/vnd.oasis.opendocument.formula-template', 'font/otf'], + 'otg': ['application/vnd.oasis.opendocument.graphics-template'], + 'oth': ['application/vnd.oasis.opendocument.text-web'], + 'oti': ['application/vnd.oasis.opendocument.image-template'], + 'otp': ['application/vnd.oasis.opendocument.presentation-template'], + 'ots': ['application/vnd.oasis.opendocument.spreadsheet-template'], + 'ott': ['application/vnd.oasis.opendocument.text-template'], + 'ova': ['application/ovf', 'application/x-virtualbox-ova'], + 'ovf': ['application/x-virtualbox-ovf'], + 'owl': ['application/rdf+xml'], + 'oxps': ['application/oxps'], + 'oxt': ['application/vnd.openofficeorg.extension'], + 'p': ['text/x-pascal'], + 'p10': ['application/pkcs10'], + 'p12': ['application/pkcs12', 'application/x-pkcs12'], + 'p65': ['application/x-pagemaker'], + 'p7b': ['application/x-pkcs7-certificates'], + 'p7c': ['application/pkcs7-mime'], + 'p7m': ['application/pkcs7-mime'], + 'p7r': ['application/x-pkcs7-certreqresp'], + 'p7s': ['application/pkcs7-signature'], + 'p8': ['application/pkcs8'], + 'p8e': ['application/pkcs8-encrypted'], + 'pack': ['application/x-java-pack200'], + 'pages': [ + 'application/vnd.apple.pages', + 'application/x-iwork-pages-sffpages' + ], + 'pak': ['application/x-pak'], + 'palm': ['application/vnd.palm'], + 'pam': ['application/x-php-arc-managed'], + 'paq': ['application/x-par2'], + 'par': ['application/x-par2'], + 'par2': ['application/x-par2'], + 'pas': ['text/x-pascal'], + 'pat': ['image/x-coreldrawpattern'], + 'patch': ['text/x-diff', 'text/x-patch'], + 'path': ['text/x-systemd-unit'], + 'paw': ['application/vnd.pawaafile'], + 'pbd': ['application/vnd.powerbuilder6'], + 'pbm': ['image/x-portable-bitmap'], + 'pcap': [ + 'application/pcap', + 'application/vnd.tcpdump.pcap', + 'application/x-pcap' + ], + 'pcd': ['image/x-photo-cd'], + 'pce': ['application/x-pc-engine-rom'], + 'pcf': ['application/x-cisco-vpn-settings', 'application/x-font-pcf'], + 'pcf.gz': ['application/x-font-pcf'], + 'pcf.z': ['application/x-font-pcf'], + 'pcl': ['application/vnd.hp-pcl'], + 'pclxl': ['application/vnd.hp-pclxl'], + 'pct': ['image/x-pict'], + 'pcurl': ['application/vnd.curl.pcurl'], + 'pcx': ['image/pcx', 'image/vnd.zbrush.pcx', 'image/x-pcx'], + 'pdb': [ + 'application/vnd.palm', + 'application/x-aportisdoc', + 'application/x-palm-database', + 'application/x-pilot', + 'chemical/x-pdb' + ], + 'pdc': ['application/x-aportisdoc'], + 'pdf': ['application/pdf', 'application/x-pdf'], + 'pdf.bz2': ['application/x-bzpdf'], + 'pdf.gz': ['application/x-gzpdf'], + 'pef': ['image/x-pentax-pef'], + 'pem': ['application/x-x509-ca-cert'], + 'perl': ['application/x-perl'], + 'pfa': ['application/x-font-type1'], + 'pfb': ['application/x-font-type1'], + 'pfm': ['application/x-font-type1'], + 'pfr': ['application/font-tdpfr'], + 'pfx': ['application/x-pkcs12'], + 'pgm': ['image/x-portable-graymap'], + 'pgn': ['application/x-chess-pgn'], + 'pgp': [ + 'application/pgp', + 'application/pgp-encrypted', + 'application/pgp-keys', + 'application/pgp-signature' + ], + 'php': ['application/x-httpd-php', 'application/x-php'], + 'php3': ['application/x-httpd-php3', 'application/x-php'], + 'php4': ['application/x-httpd-php4', 'application/x-php'], + 'php5': ['application/x-httpd-php5'], + 'phps': ['application/x-httpd-php-source'], + 'pht': ['application/x-httpd-php'], + 'phtml': ['application/x-httpd-php'], + 'pic': ['image/x-pict'], + 'pict': ['image/pict', 'image/x-pict'], + 'pkg': ['application/x-newton-compatible-pkg'], + 'pki': ['application/pkixcmp'], + 'pkipath': ['application/pkix-pkipath'], + 'pkpass': ['application/vnd.apple.pkpass'], + 'pl': ['application/x-perl', 'text/x-perl'], + 'plb': ['application/vnd.3gpp.pic-bw-large'], + 'plc': ['application/vnd.mobius.plc'], + 'plf': ['application/vnd.pocketlearn'], + 'pln': ['application/x-planperfect'], + 'pls': ['application/pls+xml', 'audio/x-scpls'], + 'plt': ['application/vnd.hp-hpgl'], + 'pm': ['application/x-perl', 'text/x-perl'], + 'pmd': ['application/x-pagemaker'], + 'pml': ['application/vnd.ctc-posml'], + 'png': ['image/png'], + 'pnm': ['image/x-portable-anymap'], + 'pntg': ['image/x-macpaint'], + 'po': ['text/x-gettext-translation'], + 'pod': ['application/x-perl'], + 'por': ['application/x-spss-por'], + 'portpkg': ['application/vnd.macports.portpkg'], + 'pot': [ + 'application/mspowerpoint', + 'application/vnd.ms-powerpoint', + 'text/x-gettext-translation-template' + ], + 'potm': ['application/vnd.ms-powerpoint.template.macroenabled.12'], + 'potx': [ + 'application/vnd.openxmlformats-officedocument.presentationml.template' + ], + 'ppam': ['application/vnd.ms-powerpoint.addin.macroenabled.12'], + 'ppd': ['application/vnd.cups-ppd'], + 'ppm': ['image/x-portable-pixmap'], + 'pps': ['application/mspowerpoint', 'application/vnd.ms-powerpoint'], + 'ppsm': ['application/vnd.ms-powerpoint.slideshow.macroenabled.12'], + 'ppsx': [ + 'application/vnd.openxmlformats-officedocument.presentationml.slideshow' + ], + 'ppt': [ + 'application/mspowerpoint', + 'application/powerpoint', + 'application/vnd.ms-powerpoint', + 'application/x-mspowerpoint' + ], + 'pptm': ['application/vnd.ms-powerpoint.presentation.macroenabled.12'], + 'pptx': [ + 'application/vnd.openxmlformats-officedocument.presentationml.presentation' + ], + 'ppz': ['application/mspowerpoint'], + 'pqa': ['application/vnd.palm'], + 'prc': [ + 'application/vnd.palm', + 'application/x-mobipocket-ebook', + 'application/x-palm-database' + ], + 'pre': ['application/vnd.lotus-freelance'], + 'prf': ['application/pics-rules'], + 'ps': ['application/postscript'], + 'ps.bz2': ['application/x-bzpostscript'], + 'ps.gz': ['application/x-gzpostscript'], + 'psb': ['application/vnd.3gpp.pic-bw-small'], + 'psd': ['application/x-photoshop', 'image/vnd.adobe.photoshop'], + 'psf': ['application/x-font-linux-psf', 'audio/x-psf'], + 'psf.gz': ['application/x-gz-font-linux-psf'], + 'psflib': ['audio/x-psflib'], + 'psid': ['audio/prs.sid'], + 'pskcxml': ['application/pskc+xml'], + 'psw': ['application/x-pocket-word'], + 'ptid': ['application/vnd.pvi.ptid1'], + 'pub': ['application/vnd.ms-publisher', 'application/x-mspublisher'], + 'pvb': ['application/vnd.3gpp.pic-bw-var'], + 'pvu': ['paleovu/x-pv'], + 'pw': ['application/x-pw'], + 'pwn': ['application/vnd.3m.post-it-notes'], + 'pya': ['audio/vnd.ms-playready.media.pya'], + 'pyc': ['application/x-python-code'], + 'pyo': ['application/x-python-code'], + 'pyscript': ['text/pyscript'], + 'pyv': ['video/vnd.ms-playready.media.pyv'], + 'qam': ['application/vnd.epson.quickanime'], + 'qbo': ['application/vnd.intu.qbo'], + 'qcow': ['application/x-qemu-disk'], + 'qcow2': ['application/x-qemu-disk'], + 'qd': ['application/x-qed'], + 'qed': ['application/x-qed'], + 'qfx': ['application/vnd.intu.qfx'], + 'qif': ['application/x-qw', 'image/x-quicktime'], + 'qml': ['text/x-qml'], + 'qmlproject': ['text/x-qml'], + 'qmltypes': ['text/x-qml'], + 'qom': ['application/x-qed'], + 'qps': ['application/vnd.publishare-delta-tree'], + 'qs': ['application/sparql-query'], + 'qt': ['video/quicktime'], + 'qti': ['application/x-qtiplot'], + 'qti.gz': ['application/x-qtiplot'], + 'qtif': ['image/x-quicktime'], + 'qtl': ['application/x-quicktimeplayer'], + 'qwd': ['application/vnd.quark.quarkxpress'], + 'qwt': ['application/vnd.quark.quarkxpress'], + 'qxb': ['application/vnd.quark.quarkxpress'], + 'qxd': ['application/vnd.quark.quarkxpress'], + 'qxl': ['application/vnd.quark.quarkxpress'], + 'qxt': ['application/vnd.quark.quarkxpress'], + 'ra': [ + 'audio/vnd.rn-realaudio', + 'audio/x-pn-realaudio', + 'audio/x-realaudio' + ], + 'raf': ['image/x-fuji-raf'], + 'ram': ['application/ram', 'audio/x-pn-realaudio'], + 'raml': ['application/raml+yaml'], + 'rar': [ + 'application/rar', + 'application/vnd.rar', + 'application/x-rar', + 'application/x-rar-compressed' + ], + 'ras': ['image/x-cmu-raster'], + 'raw': ['image/x-panasonic-raw'], + 'rax': ['audio/vnd.rn-realaudio'], + 'rb': ['application/x-ruby', 'text/ruby'], + 'rbw': ['application/x-ruby'], + 'rcprofile': ['application/vnd.ipunplugged.rcprofile'], + 'rdf': ['application/rdf+xml'], + 'rdfs': ['application/rdf+xml'], + 'rdz': ['application/vnd.data-vision.rdz'], + 'reg': ['text/x-ms-regedit'], + 'rexx': ['text/x-script.rexx'], + 'rez': ['application/x-rezfile'], + 'rf64': ['audio/x-rf64'], + 'rgb': ['image/x-rgb'], + 'rhtml': ['application/x-httpd-eruby'], + 'rip': ['audio/vnd.rip'], + 'ris': ['application/x-research-info-systems'], + 'rl': ['application/resource-lists+xml'], + 'rlc': ['image/vnd.fujixerox.edmics-rlc'], + 'rld': ['application/resource-lists-diff+xml'], + 'rm': ['application/vnd.rn-realmedia', 'audio/x-pn-realaudio'], + 'rmi': ['audio/midi'], + 'rmj': ['application/vnd.rn-realmedia'], + 'rmm': ['audio/x-pn-realaudio'], + 'rmp': ['audio/x-pn-realaudio', 'audio/x-pn-realaudio-plugin'], + 'rms': ['application/vnd.jcp.javame.midlet-rms', 'video/vnd.rn-realvideo'], + 'rmvb': [ + 'application/vnd.rn-realmedia', + 'application/vnd.rn-realmedia-vbr' + ], + 'rmx': ['application/vnd.rn-realmedia'], + 'rnc': ['application/relax-ng-compact-syntax'], + 'rng': ['application/xml'], + 'roa': ['application/rpki-roa'], + 'roff': ['application/x-troff', 'text/troff'], + 'rp': ['image/vnd.rn-realpix'], + 'rp9': ['application/vnd.cloanto.rp9'], + 'rpm': ['application/x-redhat-package-manager', 'application/x-rpm'], + 'rpss': ['application/vnd.nokia.radio-presets'], + 'rpst': ['application/vnd.nokia.radio-preset'], + 'rq': ['application/sparql-query'], + 'rs': ['application/rls-services+xml', 'text/rust'], + 'rsd': ['application/rsd+xml'], + 'rss': ['application/rss+xml'], + 'rst': ['text/x-rst'], + 'rtf': ['application/rtf'], + 'rtx': ['text/richtext'], + 'run': ['application/x-makeself'], + 'rusd': ['application/route-usd+xml'], + 'rv': ['video/vnd.rn-realvideo'], + 'rvx': ['video/vnd.rn-realvideo'], + 'rw2': ['image/x-panasonic-rw2'], + 's': ['text/x-asm'], + 's3m': ['audio/s3m', 'audio/x-s3m'], + 'saf': ['application/vnd.yamaha.smaf-audio'], + 'sage': ['text/x-sagemath'], + 'sam': ['application/x-amipro'], + 'sami': ['application/x-sami'], + 'sap': ['application/x-sap-file'], + 'sass': ['text/x-sass'], + 'sat': ['application/x-sat'], + 'sb': ['application/x-scratch'], + 'sbml': ['application/sbml+xml'], + 'sc': ['application/vnd.ibm.secure-container', 'text/x-scala'], + 'scd': ['application/x-msschedule'], + 'scm': [ + 'application/vnd.lotus-screencam', + 'application/x-lothaire', + 'text/x-scheme' + ], + 'scn': ['application/x-godot-scene'], + 'scq': ['application/scvp-cv-request'], + 'scs': ['application/scvp-cv-response'], + 'scss': ['text/x-scss'], + 'sct': ['text/scriptlet'], + 'scurl': ['text/vnd.curl.scurl'], + 'sda': ['application/vnd.stardivision.draw'], + 'sdc': ['application/vnd.stardivision.calc'], + 'sdd': ['application/vnd.stardivision.impress'], + 'sdkd': ['application/vnd.solent.sdkm+xml'], + 'sdkm': ['application/vnd.solent.sdkm+xml'], + 'sdp': [ + 'application/sdp', + 'application/vnd.stardivision.impress', + 'application/x-sdp' + ], + 'sds': ['application/vnd.stardivision.chart'], + 'sdw': ['application/vnd.stardivision.writer'], + 'sea': ['application/x-sea'], + 'see': ['application/vnd.seemail'], + 'seed': ['application/vnd.fdsn.seed'], + 'sema': ['application/vnd.sema'], + 'semd': ['application/vnd.semd'], + 'semf': ['application/vnd.semf'], + 'ser': ['application/java-serialized-object'], + 'service': ['text/x-dbus-service', 'text/x-systemd-unit'], + 'setpay': ['application/set-payment-initiation'], + 'setreg': ['application/set-registration-initiation'], + 'sfd': ['application/vnd.font-fontforge-sfd'], + 'sfd-hdstx': ['application/vnd.hydrostatix.sof-data'], + 'sfg': ['application/vnd.spotfire.sfg'], + 'sfs': ['application/vnd.spotfire.sfs'], + 'sfv': ['text/x-sfv'], + 'sg': ['application/x-sg1000-rom'], + 'sgb': ['application/x-gameboy-rom'], + 'sgd': ['application/x-genesis-32x-rom'], + 'sgf': ['application/x-go-sgf'], + 'sgi': ['image/sgi', 'image/x-sgi'], + 'sgl': ['application/vnd.stardivision.writer-global'], + 'sgm': ['text/sgml'], + 'sgml': ['text/sgml'], + 'sh': ['application/x-sh', 'application/x-shellscript', 'text/x-sh'], + 'shape': ['application/x-dia-shape'], + 'shar': ['application/x-shar'], + 'shf': ['application/shf+xml'], + 'shn': ['application/x-shorten'], + 'siag': ['application/x-siag'], + 'sid': ['audio/prs.sid', 'image/x-mrsid-image'], + 'sig': ['application/pgp-signature'], + 'sik': ['application/x-trash'], + 'sil': ['audio/silk'], + 'silo': ['model/mesh'], + 'sis': ['application/vnd.symbian.install'], + 'sisx': ['application/vnd.symbian.install', 'x-epoc/x-sisx-app'], + 'sit': ['application/x-stuffit'], + 'sitx': ['application/x-stuffitx'], + 'siv': ['application/sieve'], + 'sk': ['image/x-skencil'], + 'sk1': ['image/x-skencil'], + 'skd': ['application/x-koan'], + 'skm': ['application/x-koan'], + 'skp': ['application/x-koan'], + 'skt': ['application/x-koan'], + 'sla': ['application/vnd.scribus'], + 'slaz': ['application/vnd.scribus'], + 'slk': ['text/spreadsheet'], + 'sldm': ['application/vnd.ms-powerpoint.slide.macroenabled.12'], + 'sldx': [ + 'application/vnd.openxmlformats-officedocument.presentationml.slide' + ], + 'slim': ['text/slim'], + 'slm': ['text/slim'], + 'sln': ['text/plain'], + 'slt': ['application/vnd.epson.salt'], + 'sm': ['application/vnd.stepmania.stepchart'], + 'smf': ['application/vnd.stardivision.math'], + 'smi': ['application/smil', 'application/smil+xml', 'application/x-sami'], + 'smil': ['application/smil', 'application/smil+xml'], + 'smk': ['video/vnd.radgamettools.smacker'], + 'sml': ['application/smil', 'application/smil+xml'], + 'sms': ['application/x-sms-rom'], + 'smv': ['video/x-smv'], + 'smzip': ['application/vnd.stepmania.package'], + 'snap': ['application/vnd.snap'], + 'snd': ['audio/basic'], + 'snf': ['application/x-font-snf'], + 'so': ['application/x-sharedlib'], + 'spc': ['application/x-pkcs7-certificates', 'chemical/x-galactic-spc'], + 'spd': ['application/x-font-speedo'], + 'spec': ['text/x-rpm-spec'], + 'spf': ['application/vnd.yamaha.smaf-phrase'], + 'spl': [ + 'application/futuresplash', + 'application/x-futuresplash', + 'application/x-shockwave-flash' + ], + 'spot': ['text/vnd.in3d.spot'], + 'spp': ['application/scvp-vp-response'], + 'spq': ['application/scvp-vp-request'], + 'spx': [ + 'application/xspf+xml', + 'audio/ogg', + 'audio/x-speex', + 'audio/x-speex+ogg' + ], + 'sql': ['application/sql', 'application/x-sql', 'text/x-sql'], + 'sqlite2': ['application/x-sqlite2'], + 'sqlite3': ['application/vnd.sqlite3', 'application/x-sqlite3'], + 'sqsh': ['application/vnd.squashfs'], + 'sr2': ['image/x-sony-sr2'], + 'src': ['application/x-wais-source'], + 'src.rpm': ['application/x-source-rpm'], + 'srf': ['image/x-sony-srf'], + 'srt': ['application/x-subrip'], + 'sru': ['application/sru+xml'], + 'srx': ['application/sparql-results+xml'], + 'ss': ['text/x-scheme'], + 'ssa': ['text/x-ssa'], + 'ssdl': ['application/ssdl+xml'], + 'sse': ['application/vnd.kodak-descriptor'], + 'ssf': ['application/vnd.epson.ssf'], + 'ssml': ['application/ssml+xml'], + 'st': ['application/vnd.sailingtracker.track'], + 'stc': ['application/vnd.sun.xml.calc.template'], + 'std': ['application/vnd.sun.xml.draw.template'], + 'stf': ['application/vnd.wt.stf'], + 'sti': ['application/vnd.sun.xml.impress.template'], + 'stk': ['application/hyperstudio'], + 'stl': [ + 'application/sla', + 'application/vnd.ms-pki.stl', + 'application/x-navistyle', + 'model/stl' + ], + 'stm': ['audio/x-stm'], + 'stp': ['application/step', 'application/x-step', 'model/step'], + 'str': ['application/vnd.pg.format'], + 'stw': ['application/vnd.sun.xml.writer.template'], + 'sub': ['image/vnd.dvb.subtitle', 'text/vnd.dvb.subtitle'], + 'sun': ['image/x-sun-raster'], + 'sus': ['application/vnd.sus-calendar'], + 'susp': ['application/vnd.sus-calendar'], + 'sv4cpio': ['application/x-sv4cpio'], + 'sv4crc': ['application/x-sv4crc'], + 'svc': ['application/vnd.dvb.service'], + 'svd': ['application/vnd.svd'], + 'svg': ['image/svg+xml'], + 'svgz': ['image/svg+xml', 'image/svg+xml-compressed'], + 'swa': ['application/x-director'], + 'swf': [ + 'application/vnd.adobe.flash.movie', + 'application/x-shockwave-flash' + ], + 'swi': ['application/vnd.aristanetworks.swi'], + 'swidtag': ['application/swid+xml'], + 'sxc': ['application/vnd.sun.xml.calc'], + 'sxd': ['application/vnd.sun.xml.draw'], + 'sxg': ['application/vnd.sun.xml.writer.global'], + 'sxi': ['application/vnd.sun.xml.impress'], + 'sxm': ['application/vnd.sun.xml.math'], + 'sxw': ['application/vnd.sun.xml.writer'], + 'sylk': ['text/spreadsheet'], + 't': ['application/x-troff', 'text/troff'], + 't2t': ['text/x-txt2tags'], + 't3': ['application/x-t3vm-image'], + 'taglet': ['application/vnd.mynfc'], + 'tao': ['application/vnd.tao.intent-module-archive'], + 'tar': ['application/x-tar'], + 'tar.bz2': ['application/x-bzip-compressed-tar'], + 'tar.gz': ['application/x-compressed-tar'], + 'tar.lzma': ['application/x-lzma-compressed-tar'], + 'tar.lzo': ['application/x-tzo'], + 'tar.xz': ['application/x-xz-compressed-tar'], + 'tar.z': ['application/x-tarz'], + 'tar.zst': ['application/x-zstd-compressed-tar'], + 'targa': [ + 'application/targa', + 'application/x-targa', + 'application/x-tga', + 'image/targa', + 'image/tga', + 'image/x-icb', + 'image/x-targa', + 'image/x-tga' + ], + 'tcap': ['application/vnd.3gpp2.tcap'], + 'tcl': ['application/x-tcl', 'text/tcl'], + 'teacher': ['application/vnd.smart.teacher'], + 'tei': ['application/tei+xml'], + 'teicorpus': ['application/tei+xml'], + 'tex': ['application/x-tex', 'text/x-tex'], + 'texi': ['application/x-texinfo'], + 'texinfo': ['application/x-texinfo'], + 'text': ['text/plain'], + 'tfi': ['application/thraud+xml'], + 'tfm': ['application/x-tex-tfm'], + 'tga': [ + 'application/targa', + 'application/x-targa', + 'application/x-tga', + 'image/targa', + 'image/tga', + 'image/x-icb', + 'image/x-targa', + 'image/x-tga' + ], + 'tgz': ['application/x-compressed-tar'], + 'theme': ['application/x-theme'], + 'themepack': ['application/x-windows-themepack'], + 'thmx': ['application/vnd.ms-officetheme'], + 'tif': ['image/tiff'], + 'tiff': ['image/tiff'], + 'timer': ['text/x-systemd-unit'], + 'tk': ['text/tcl'], + 'tmo': ['application/vnd.tmobile-livetv'], + 'tnef': ['application/vnd.ms-tnef'], + 'tnf': ['application/vnd.ms-tnef'], + 'toc': ['application/x-cdrdao-toc'], + 'toml': ['application/toml'], + 'torrent': ['application/x-bittorrent'], + 'tpic': ['image/x-tga'], + 'tpl': ['application/vnd.groove-tool-template'], + 'tpt': ['application/vnd.trid.tpt'], + 'tr': ['application/x-troff', 'text/troff'], + 'tra': ['application/vnd.trueapp'], + 'trig': ['application/trig', 'application/x-trig'], + 'trm': ['application/x-msterminal'], + 'ts': ['text/vnd.trolltech.linguist', 'video/mp2t'], + 'tsd': ['application/timestamped-data'], + 'tsv': ['text/tab-separated-values'], + 'tta': ['audio/x-tta'], + 'ttc': ['application/x-font-ttf', 'font/collection'], + 'ttf': ['application/x-font-ttf', 'font/ttf'], + 'ttl': ['text/turtle'], + 'ttml': ['application/ttml+xml'], + 'twd': ['application/vnd.simtech-mindmapper'], + 'twds': ['application/vnd.simtech-mindmapper'], + 'txd': ['application/vnd.genomatix.tuxedo'], + 'txf': ['application/vnd.mobius.txf'], + 'txt': ['text/plain'], + 'u32': ['application/x-authorware-bin'], + 'udeb': [ + 'application/vnd.debian.binary-package', + 'application/x-debian-package' + ], + 'ufd': ['application/vnd.ufdl'], + 'ufdl': ['application/vnd.ufdl'], + 'ufraw': ['application/x-ufraw'], + 'ui': ['application/x-designer', 'application/x-gtk-builder'], + 'uil': ['text/x-uil'], + 'ult': ['audio/x-mod'], + 'ulx': ['application/x-glulx'], + 'umj': ['application/vnd.umajin'], + 'unf': [ + 'application/realaudio-secure', + 'application/x-uss-secure', + 'application/x-uss-stream-audio' + ], + 'unidata': ['application/x-asus-undidata'], + 'unif': ['application/x-nes-rom'], + 'unityweb': ['application/vnd.unity'], + 'uoml': ['application/vnd.uoml+xml'], + 'uri': ['text/uri-list'], + 'uris': ['text/uri-list'], + 'urls': ['text/uri-list'], + 'ustar': ['application/x-ustar'], + 'utz': ['application/vnd.uiq.theme'], + 'uu': ['text/x-uuencode'], + 'uue': ['text/x-uuencode'], + 'uva': ['audio/vnd.dece.audio'], + 'uvd': ['application/vnd.dece.data'], + 'uvf': ['application/vnd.dece.data'], + 'uvg': ['image/vnd.dece.graphic'], + 'uvh': ['video/vnd.dece.hd'], + 'uvi': ['image/vnd.dece.graphic'], + 'uvm': ['video/vnd.dece.mobile'], + 'uvp': ['video/vnd.dece.pd'], + 'uvs': ['video/vnd.dece.sd'], + 'uvt': ['application/vnd.dece.ttml+xml'], + 'uvu': ['video/vnd.uvvu.mp4'], + 'uvv': ['video/vnd.dece.video'], + 'uvva': ['audio/vnd.dece.audio'], + 'uvvd': ['application/vnd.dece.data'], + 'uvvf': ['application/vnd.dece.data'], + 'uvvg': ['image/vnd.dece.graphic'], + 'uvvh': ['video/vnd.dece.hd'], + 'uvvi': ['image/vnd.dece.graphic'], + 'uvvm': ['video/vnd.dece.mobile'], + 'uvvp': ['video/vnd.dece.pd'], + 'uvvs': ['video/vnd.dece.sd'], + 'uvvt': ['application/vnd.dece.ttml+xml'], + 'uvvu': ['video/vnd.uvvu.mp4'], + 'uvvv': ['video/vnd.dece.video'], + 'uvvx': ['application/vnd.dece.unspecified'], + 'uvvz': ['application/vnd.dece.zip'], + 'uvx': ['application/vnd.dece.unspecified'], + 'uvz': ['application/vnd.dece.zip'], + 'vala': ['text/x-vala'], + 'vapi': ['text/x-vala'], + 'vb': ['text/x-vb'], + 'vbd': ['application/vnd.videobeans'], + 'vbox': ['application/x-virtualbox-vbox'], + 'vbox-extpack': ['application/x-virtualbox-vbox-extpack'], + 'vbs': ['text/vbscript'], + 'vcard': ['text/directory', 'text/vcard', 'text/x-vcard'], + 'vcd': ['application/x-cdlink'], + 'vcf': ['text/directory', 'text/vcard', 'text/x-vcard'], + 'vcg': ['application/vnd.groove-vcard'], + 'vcs': ['text/calendar', 'text/x-vcalendar'], + 'vct': ['text/directory', 'text/vcard', 'text/x-vcard'], + 'vcx': ['application/vnd.vcx'], + 'vdi': ['application/x-virtualbox-vdi'], + 'vds': ['model/vnd.sap.vds'], + 'vhd': ['application/x-virtualbox-vhd'], + 'vhdx': ['application/x-virtualbox-vhdx'], + 'vis': ['application/vnd.visionary'], + 'viv': ['video/vnd.vivo', 'video/vivo'], + 'vivo': ['video/vnd.vivo', 'video/vivo'], + 'vlc': ['audio/x-mpegurl'], + 'vmd': ['application/vocaltec-media-desc'], + 'vmdk': ['application/x-virtualbox-vmdk'], + 'vmi': ['application/x-dreamcast-vms-info'], + 'vms': ['application/x-dreamcast-vms'], + 'vob': ['video/mpeg', 'video/x-ms-vob'], + 'voc': ['audio/voc', 'audio/x-voc'], + 'vor': ['application/vnd.stardivision.writer'], + 'vox': ['application/x-authorware-bin'], + 'vrm': ['model/vrml', 'x-world/x-vrml'], + 'vsd': ['application/vnd.visio'], + 'vsf': ['application/vnd.vsf'], + 'vss': ['application/vnd.visio'], + 'vst': ['application/vnd.visio', 'image/x-tga'], + 'vsw': ['application/vnd.visio'], + 'vtf': ['image/vnd.valve.source.texture'], + 'vtt': ['text/vtt'], + 'vtu': ['model/vnd.vtu'], + 'vxml': ['application/voicexml+xml'], + 'w3d': ['application/x-director'], + 'wad': ['application/x-doom', 'application/x-wii-wad'], + 'wav': ['audio/wav', 'audio/vnd.wave', 'audio/wave', 'audio/x-wav'], + 'wax': [ + 'audio/x-ms-asx', + 'audio/x-ms-wax', + 'video/x-ms-wax', + 'video/x-ms-wvx' + ], + 'wbmp': ['image/vnd.wap.wbmp'], + 'wbs': ['application/vnd.criticaltools.wbs+xml'], + 'wbxml': ['application/vnd.wap.wbxml'], + 'wcm': ['application/vnd.ms-works'], + 'wdb': ['application/vnd.ms-works'], + 'wdp': ['image/vnd.ms-photo'], + 'weba': ['audio/webm'], + 'webm': ['video/webm'], + 'webmanifest': ['application/manifest+json'], + 'webp': ['image/webp'], + 'wg': ['application/vnd.pmi.widget'], + 'wgt': ['application/widget'], + 'wim': ['application/x-ms-wim'], + 'wk': ['application/x-123'], + 'wks': ['application/vnd.ms-works'], + 'wm': ['video/x-ms-wm'], + 'wma': ['audio/x-ms-wma'], + 'wmd': ['application/x-ms-wmd'], + 'wmf': [ + 'application/x-msmetafile', + 'application/x-wmf', + 'image/wmf', + 'image/x-wmf' + ], + 'wml': ['text/vnd.wap.wml'], + 'wmlc': ['application/vnd.wap.wmlc'], + 'wmls': ['text/vnd.wap.wmlscript'], + 'wmlsc': ['application/vnd.wap.wmlscriptc'], + 'wmv': ['video/x-ms-wmv'], + 'wmx': [ + 'audio/x-ms-asx', + 'video/x-ms-wax', + 'video/x-ms-wmx', + 'video/x-ms-wvx' + ], + 'wmz': ['application/x-ms-wmz', 'application/x-msmetafile'], + 'woff': ['application/font-woff', 'font/woff'], + 'woff2': ['application/font-woff2', 'font/woff2'], + 'wpd': [ + 'application/vnd.wordperfect', + 'application/wordperfect', + 'application/x-wpd', + 'application/x-wordperfect' + ], + 'wpl': ['application/vnd.ms-wpl'], + 'wps': ['application/vnd.ms-works'], + 'wqd': ['application/vnd.wqd'], + 'wri': ['application/mswrite', 'application/x-mswrite'], + 'wrl': ['model/vrml', 'x-world/x-vrml'], + 'wsc': ['text/scriptlet'], + 'wsdl': ['application/wsdl+xml'], + 'wspolicy': ['application/wspolicy+xml'], + 'wsrc': ['application/x-wais-source'], + 'wtb': ['application/vnd.webturbo'], + 'wv': ['audio/x-wavpack'], + 'wvc': ['audio/x-wavpack-correction'], + 'wvp': ['audio/x-wavpack'], + 'wvx': ['audio/x-ms-asx', 'video/x-ms-wax', 'video/x-ms-wvx'], + 'wwf': ['application/x-wwf'], + 'x32': ['application/x-authorware-bin'], + 'x3d': ['model/x3d+xml'], + 'x3db': ['model/x3d+binary'], + 'x3dbz': ['model/x3d+binary'], + 'x3dv': ['model/x3d+vrml'], + 'x3dvz': ['model/x3d+vrml'], + 'x3dz': ['model/x3d+xml'], + 'x3f': ['image/x-sigma-x3f'], + 'xaml': ['application/xaml+xml'], + 'xap': ['application/x-silverlight-app'], + 'xar': ['application/vnd.xara', 'application/x-xar'], + 'xbap': ['application/x-ms-xbap'], + 'xbd': ['application/vnd.fujixerox.docuworks.binder'], + 'xbel': ['application/x-xbel'], + 'xbm': ['image/x-xbitmap'], + 'xbw': ['application/vnd.fuzzysheet'], + 'xdf': ['application/xcap-diff+xml'], + 'xdgapp': ['application/vnd.flatpak', 'application/vnd.xdgapp'], + 'xdm': ['application/vnd.syncml.dm+xml'], + 'xdp': ['application/vnd.adobe.xdp+xml'], + 'xdssc': ['application/dssc+xml'], + 'xdw': ['application/vnd.fujixerox.docuworks'], + 'xeb': ['application/x-ebook+zip'], + 'xenc': ['application/xenc+xml'], + 'xer': ['application/patch-ops-error+xml'], + 'xfdf': ['application/vnd.adobe.xfdf'], + 'xfdl': ['application/vnd.xfdl'], + 'xht': ['application/xhtml+xml'], + 'xhtml': ['application/xhtml+xml'], + 'xhvml': ['application/xv+xml'], + 'xi': ['audio/x-xi'], + 'xif': ['image/vnd.xiff'], + 'xla': [ + 'application/excel', + 'application/vnd.ms-excel', + 'application/x-excel', + 'application/x-msexcel' + ], + 'xlam': ['application/vnd.ms-excel.addin.macroenabled.12'], + 'xlb': [ + 'application/excel', + 'application/vnd.ms-excel', + 'application/x-excel' + ], + 'xlc': [ + 'application/excel', + 'application/vnd.ms-excel', + 'application/x-excel' + ], + 'xlf': ['application/x-xliff+xml'], + 'xliff': ['application/x-xliff+xml'], + 'xll': [ + 'application/excel', + 'application/vnd.ms-excel', + 'application/x-excel' + ], + 'xlm': [ + 'application/excel', + 'application/vnd.ms-excel', + 'application/x-excel' + ], + 'xls': [ + 'application/excel', + 'application/vnd.ms-excel', + 'application/x-excel', + 'application/x-msexcel' + ], + 'xlsb': ['application/vnd.ms-excel.sheet.binary.macroenabled.12'], + 'xlsm': ['application/vnd.ms-excel.sheet.macroenabled.12'], + 'xlsx': [ + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' + ], + 'xlt': [ + 'application/excel', + 'application/vnd.ms-excel', + 'application/x-excel' + ], + 'xltm': ['application/vnd.ms-excel.template.macroenabled.12'], + 'xltx': [ + 'application/vnd.openxmlformats-officedocument.spreadsheetml.template' + ], + 'xlw': [ + 'application/excel', + 'application/vnd.ms-excel', + 'application/x-excel', + 'application/x-msexcel' + ], + 'xm': ['audio/xm', 'audio/x-xm'], + 'xml': ['application/xml', 'text/xml'], + 'xmz': ['xgl/movie'], + 'xo': ['application/vnd.olpc-sugar'], + 'xoa': ['application/x-xodviewer'], + 'xop': ['application/xop+xml'], + 'xpi': ['application/x-xpinstall'], + 'xpl': ['application/xproc+xml'], + 'xpm': ['image/x-xpixmap'], + 'xpr': ['application/vnd.is-xpr'], + 'xps': ['application/vnd.ms-xpsdocument'], + 'xpw': ['application/vnd.intercon.formnet'], + 'xpx': ['application/vnd.intercon.formnet'], + 'xsd': ['application/xml'], + 'xsl': ['application/xml', 'application/xslt+xml'], + 'xslt': ['application/xslt+xml'], + 'xsm': ['application/vnd.syncml+xml'], + 'xspf': ['application/xspf+xml'], + 'xul': ['application/vnd.mozilla.xul+xml'], + 'xvm': ['application/xv+xml'], + 'xvml': ['application/xv+xml'], + 'xwd': ['image/x-xwindowdump'], + 'xyz': ['chemical/x-xyz'], + 'xz': ['application/x-xz'], + 'yaml': ['application/x-yaml', 'text/yaml'], + 'yang': ['application/yang'], + 'yin': ['application/yin+xml'], + 'yml': ['application/x-yaml', 'text/yaml'], + 'yt': ['application/vnd.youtube.yt'], + 'yurl': ['text/yurl'], + 'yuv': ['image/x-yuv'], + 'z': ['application/x-compress'], + 'z1': ['application/x-zmachine'], + 'z2': ['application/x-zmachine'], + 'z3': ['application/x-zmachine'], + 'z4': ['application/x-zmachine'], + 'z5': ['application/x-zmachine'], + 'z6': ['application/x-zmachine'], + 'z7': ['application/x-zmachine'], + 'z8': ['application/x-zmachine'], + 'zaz': ['application/vnd.zzazz.deck+xml'], + 'zip': [ + 'application/zip', + 'application/x-zip', + 'application/x-zip-compressed' + ], + 'zipx': [ + 'application/x-zip-compressed', + 'application/zip', + 'application/vnd.rar' + ], + 'zir': ['application/vnd.zul'], + 'zirz': ['application/vnd.zul'], + 'zmm': ['application/vnd.handheld-entertainment+xml'], + 'zst': ['application/zstd'], + 'zx': ['application/x-spectrum-rom'], + 'zz': ['application/zlib'], + }; + + MimeTypes([Map> map = const {}]) { + map.forEach((mimeType, extensions) { + _extensions[mimeType] = extensions; + for (var extension in extensions) { + _mimeTypes.putIfAbsent(extension, () => []).add(mimeType); + } + }); + + registerGuesser(FileBinaryMimeTypeGuesser()); + registerGuesser(FileInfoMimeTypeGuesser()); + } + + static void setDefault(MimeTypes defaultType) { + _default = defaultType; + } + + static MimeTypes getDefault() { + return _default ??= MimeTypes(); + } + + void registerGuesser(MimeTypeGuesserInterface guesser) { + _guessers.add(guesser); + } + + @override + List getExtensions(String mimeType) { + List? extensions; + if (_extensions.isNotEmpty) { + extensions = _extensions[mimeType] ?? _extensions[mimeType.toLowerCase()]; + } + return extensions ?? MAP[mimeType] ?? MAP[mimeType.toLowerCase()] ?? []; + } + + @override + List getMimeTypes(String ext) { + List? mimeTypes; + if (_mimeTypes.isNotEmpty) { + mimeTypes = _mimeTypes[ext] ?? _mimeTypes[ext.toLowerCase()]; + } + return mimeTypes ?? reverseMap[ext] ?? reverseMap[ext.toLowerCase()] ?? []; + } + + @override + Future guessMimeType(String path) async { + for (var guesser in _guessers.reversed) { + if (!guesser.isGuesserSupported()) { + continue; + } + String? mimeType = await guesser.guessMimeType(path); + if (mimeType != null) { + return mimeType; + } + } + if (!isGuesserSupported()) { + throw LogicException( + 'Unable to guess the MIME type as no guessers are available.'); + } + return null; + } + + @override + bool isGuesserSupported() { + for (var guesser in _guessers) { + if (guesser.isGuesserSupported()) { + return true; + } + } + return false; + } +} diff --git a/packages/mime/lib/src/mime_types_interface.dart b/packages/mime/lib/src/mime_types_interface.dart new file mode 100644 index 0000000..8039651 --- /dev/null +++ b/packages/mime/lib/src/mime_types_interface.dart @@ -0,0 +1,21 @@ +// This file is part of the Symfony package. +// +// (c) Fabien Potencier +// +// For the full copyright and license information, please view the LICENSE +// file that was distributed with this source code. + +import 'package:protevus_mime/mime.dart'; + +/// @author Fabien Potencier +abstract class MimeTypesInterface implements MimeTypeGuesserInterface { + /// Gets the extensions for the given MIME type in decreasing order of preference. + /// + /// Returns a list of strings representing file extensions. + List getExtensions(String mimeType); + + /// Gets the MIME types for the given extension in decreasing order of preference. + /// + /// Returns a list of strings representing MIME types. + List getMimeTypes(String ext); +} diff --git a/packages/mime/pubspec.yaml b/packages/mime/pubspec.yaml index 3f8cbcc..b6cf485 100644 --- a/packages/mime/pubspec.yaml +++ b/packages/mime/pubspec.yaml @@ -10,6 +10,7 @@ environment: # Add regular dependencies here. dependencies: + mime: ^1.0.5 # path: ^1.8.0 dev_dependencies: