module.exports = [ "[project]/node_modules/libmime/lib/charsets.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { "use strict"; /* eslint quote-props: 0*/ module.exports = { '866': 'IBM866', 'unicode-1-1-utf-8': 'UTF-8', 'utf-8': 'UTF-8', utf8: 'UTF-8', cp866: 'IBM866', csibm866: 'IBM866', ibm866: 'IBM866', csisolatin2: 'ISO-8859-2', 'iso-8859-2': 'ISO-8859-2', 'iso-ir-101': 'ISO-8859-2', 'iso8859-2': 'ISO-8859-2', iso88592: 'ISO-8859-2', 'iso_8859-2': 'ISO-8859-2', 'iso_8859-2:1987': 'ISO-8859-2', l2: 'ISO-8859-2', latin2: 'ISO-8859-2', csisolatin3: 'ISO-8859-3', 'iso-8859-3': 'ISO-8859-3', 'iso-ir-109': 'ISO-8859-3', 'iso8859-3': 'ISO-8859-3', iso88593: 'ISO-8859-3', 'iso_8859-3': 'ISO-8859-3', 'iso_8859-3:1988': 'ISO-8859-3', l3: 'ISO-8859-3', latin3: 'ISO-8859-3', csisolatin4: 'ISO-8859-4', 'iso-8859-4': 'ISO-8859-4', 'iso-ir-110': 'ISO-8859-4', 'iso8859-4': 'ISO-8859-4', iso88594: 'ISO-8859-4', 'iso_8859-4': 'ISO-8859-4', 'iso_8859-4:1988': 'ISO-8859-4', l4: 'ISO-8859-4', latin4: 'ISO-8859-4', csisolatincyrillic: 'ISO-8859-5', cyrillic: 'ISO-8859-5', 'iso-8859-5': 'ISO-8859-5', 'iso-ir-144': 'ISO-8859-5', 'iso8859-5': 'ISO-8859-5', iso88595: 'ISO-8859-5', 'iso_8859-5': 'ISO-8859-5', 'iso_8859-5:1988': 'ISO-8859-5', arabic: 'ISO-8859-6', 'asmo-708': 'ISO-8859-6', csiso88596e: 'ISO-8859-6', csiso88596i: 'ISO-8859-6', csisolatinarabic: 'ISO-8859-6', 'ecma-114': 'ISO-8859-6', 'iso-8859-6': 'ISO-8859-6', 'iso-8859-6-e': 'ISO-8859-6', 'iso-8859-6-i': 'ISO-8859-6', 'iso-ir-127': 'ISO-8859-6', 'iso8859-6': 'ISO-8859-6', iso88596: 'ISO-8859-6', 'iso_8859-6': 'ISO-8859-6', 'iso_8859-6:1987': 'ISO-8859-6', csisolatingreek: 'ISO-8859-7', 'ecma-118': 'ISO-8859-7', elot_928: 'ISO-8859-7', greek: 'ISO-8859-7', greek8: 'ISO-8859-7', 'iso-8859-7': 'ISO-8859-7', 'iso-ir-126': 'ISO-8859-7', 'iso8859-7': 'ISO-8859-7', iso88597: 'ISO-8859-7', 'iso_8859-7': 'ISO-8859-7', 'iso_8859-7:1987': 'ISO-8859-7', sun_eu_greek: 'ISO-8859-7', csiso88598e: 'ISO-8859-8', csisolatinhebrew: 'ISO-8859-8', hebrew: 'ISO-8859-8', 'iso-8859-8': 'ISO-8859-8', 'iso-8859-8-e': 'ISO-8859-8', 'iso-8859-8-i': 'ISO-8859-8', 'iso-ir-138': 'ISO-8859-8', 'iso8859-8': 'ISO-8859-8', iso88598: 'ISO-8859-8', 'iso_8859-8': 'ISO-8859-8', 'iso_8859-8:1988': 'ISO-8859-8', visual: 'ISO-8859-8', csisolatin6: 'ISO-8859-10', 'iso-8859-10': 'ISO-8859-10', 'iso-ir-157': 'ISO-8859-10', 'iso8859-10': 'ISO-8859-10', iso885910: 'ISO-8859-10', l6: 'ISO-8859-10', latin6: 'ISO-8859-10', 'iso-8859-13': 'ISO-8859-13', 'iso8859-13': 'ISO-8859-13', iso885913: 'ISO-8859-13', 'iso-8859-14': 'ISO-8859-14', 'iso8859-14': 'ISO-8859-14', iso885914: 'ISO-8859-14', csisolatin9: 'ISO-8859-15', 'iso-8859-15': 'ISO-8859-15', 'iso8859-15': 'ISO-8859-15', iso885915: 'ISO-8859-15', 'iso_8859-15': 'ISO-8859-15', l9: 'ISO-8859-15', 'iso-8859-16': 'ISO-8859-16', cskoi8r: 'KOI8-R', koi: 'KOI8-R', koi8: 'KOI8-R', 'koi8-r': 'KOI8-R', koi8_r: 'KOI8-R', 'koi8-ru': 'KOI8-U', 'koi8-u': 'KOI8-U', csmacintosh: 'macintosh', mac: 'macintosh', macintosh: 'macintosh', 'x-mac-roman': 'macintosh', 'dos-874': 'windows-874', 'iso-8859-11': 'windows-874', 'iso8859-11': 'windows-874', iso885911: 'windows-874', 'tis-620': 'windows-874', 'windows-874': 'windows-874', cp1250: 'windows-1250', 'windows-1250': 'windows-1250', 'x-cp1250': 'windows-1250', cp1251: 'windows-1251', 'windows-1251': 'windows-1251', 'x-cp1251': 'windows-1251', 'ansi_x3.4-1968': 'windows-1252', ascii: 'windows-1252', cp1252: 'windows-1252', cp819: 'windows-1252', csisolatin1: 'windows-1252', ibm819: 'windows-1252', 'iso-8859-1': 'windows-1252', 'iso-ir-100': 'windows-1252', 'iso8859-1': 'windows-1252', iso88591: 'windows-1252', 'iso_8859-1': 'windows-1252', 'iso_8859-1:1987': 'windows-1252', l1: 'windows-1252', latin1: 'windows-1252', 'us-ascii': 'windows-1252', 'windows-1252': 'windows-1252', 'x-cp1252': 'windows-1252', cp1253: 'windows-1253', 'windows-1253': 'windows-1253', 'x-cp1253': 'windows-1253', cp1254: 'windows-1254', csisolatin5: 'windows-1254', 'iso-8859-9': 'windows-1254', 'iso-ir-148': 'windows-1254', 'iso8859-9': 'windows-1254', iso88599: 'windows-1254', 'iso_8859-9': 'windows-1254', 'iso_8859-9:1989': 'windows-1254', l5: 'windows-1254', latin5: 'windows-1254', 'windows-1254': 'windows-1254', 'x-cp1254': 'windows-1254', cp1255: 'windows-1255', 'windows-1255': 'windows-1255', 'x-cp1255': 'windows-1255', cp1256: 'windows-1256', 'windows-1256': 'windows-1256', 'x-cp1256': 'windows-1256', cp1257: 'windows-1257', 'windows-1257': 'windows-1257', 'x-cp1257': 'windows-1257', cp1258: 'windows-1258', 'windows-1258': 'windows-1258', 'x-cp1258': 'windows-1258', chinese: 'GBK', csgb2312: 'GBK', csiso58gb231280: 'GBK', gb2312: 'GBK', gb_2312: 'GBK', 'gb_2312-80': 'GBK', gbk: 'GBK', 'iso-ir-58': 'GBK', 'x-gbk': 'GBK', gb18030: 'gb18030', big5: 'Big5', 'big5-hkscs': 'Big5', 'cn-big5': 'Big5', csbig5: 'Big5', 'x-x-big5': 'Big5', cseucpkdfmtjapanese: 'EUC-JP', 'euc-jp': 'EUC-JP', 'x-euc-jp': 'EUC-JP', csshiftjis: 'Shift_JIS', ms932: 'Shift_JIS', ms_kanji: 'Shift_JIS', 'shift-jis': 'Shift_JIS', shift_jis: 'Shift_JIS', sjis: 'Shift_JIS', 'windows-31j': 'Shift_JIS', 'x-sjis': 'Shift_JIS', cseuckr: 'EUC-KR', csksc56011987: 'EUC-KR', 'euc-kr': 'EUC-KR', 'iso-ir-149': 'EUC-KR', korean: 'EUC-KR', 'ks_c_5601-1987': 'EUC-KR', 'ks_c_5601-1989': 'EUC-KR', ksc5601: 'EUC-KR', ksc_5601: 'EUC-KR', 'windows-949': 'EUC-KR', 'utf-16be': 'UTF-16BE', 'utf-16': 'UTF-16LE', 'utf-16le': 'UTF-16LE' }; }), "[project]/node_modules/libmime/lib/charset.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { "use strict"; const { Buffer } = __turbopack_context__.r("[externals]/node:buffer [external] (node:buffer, cjs)"); const iconv = __turbopack_context__.r("[project]/node_modules/iconv-lite/lib/index.js [app-route] (ecmascript)"); const encodingJapanese = __turbopack_context__.r("[project]/node_modules/encoding-japanese/src/index.js [app-route] (ecmascript)"); const charsets = __turbopack_context__.r("[project]/node_modules/libmime/lib/charsets.js [app-route] (ecmascript)"); /** * Character set encoding and decoding functions */ const charset = module.exports = { /** * Encodes an unicode string into an Buffer object as UTF-8 * * We force UTF-8 here, no strange encodings allowed. * * @param {String} str String to be encoded * @return {Buffer} UTF-8 encoded typed array */ encode (str) { return Buffer.from(str, 'utf-8'); }, /** * Decodes a string from Buffer to an unicode string using specified encoding * NB! Throws if unknown charset is used * * @param {Buffer} buf Binary data to be decoded * @param {String} [fromCharset='UTF-8'] Binary data is decoded into string using this charset * @return {String} Decoded string */ decode (buf, fromCharset) { fromCharset = charset.normalizeCharset(fromCharset || 'UTF-8'); if (/^(us-)?ascii|utf-8|7bit$/i.test(fromCharset)) { return buf.toString('utf-8'); } try { if (/^jis|^iso-?2022-?jp|^EUCJP/i.test(fromCharset)) { if (typeof buf === 'string') { buf = Buffer.from(buf); } try { let output = encodingJapanese.convert(buf, { to: 'UNICODE', from: fromCharset, type: 'string' }); if (typeof output === 'string') { return output; } // fall through to iconv-lite if convert returned something unexpected } catch (err) { // ignore, defaults to iconv-lite on error } } return iconv.decode(buf, fromCharset); } catch (err) { // enforce utf-8, data loss might occur return buf.toString(); } }, /** * Convert a string from specific encoding to UTF-8 Buffer * * @param {String|Buffer} data String or Buffer to be encoded * @param {String} [fromCharset='UTF-8'] Source encoding for the string * @return {Buffer} UTF-8 encoded typed array */ convert (data, fromCharset) { fromCharset = charset.normalizeCharset(fromCharset || 'UTF-8'); let bufString; if (typeof data !== 'string') { if (/^(us-)?ascii|utf-8|7bit$/i.test(fromCharset)) { return data; } bufString = charset.decode(data, fromCharset); return charset.encode(bufString); } return charset.encode(data); }, /** * Converts well known invalid character set names to proper names. * eg. win-1257 will be converted to WINDOWS-1257 * * @param {String} charset Charset name to convert * @return {String} Canonicalized charset name */ normalizeCharset (charset) { charset = charset.toLowerCase().trim(); // first pass if (charsets.hasOwnProperty(charset) && charsets[charset]) { return charsets[charset]; } charset = charset.replace(/^utf[-_]?(\d+)/, 'utf-$1').replace(/^(?:us[-_]?)ascii/, 'windows-1252').replace(/^win(?:dows)?[-_]?(\d+)/, 'windows-$1').replace(/^(?:latin|iso[-_]?8859)?[-_]?(\d+)/, 'iso-8859-$1').replace(/^l[-_]?(\d+)/, 'iso-8859-$1'); // updated pass if (charsets.hasOwnProperty(charset) && charsets[charset]) { return charsets[charset]; } return charset.toUpperCase(); } }; }), "[project]/node_modules/libmime/lib/mimetypes.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { "use strict"; /* eslint quote-props: 0 */ module.exports = { list: { 'application/acad': 'dwg', 'application/applixware': 'aw', 'application/arj': 'arj', 'application/atom+xml': 'xml', 'application/atomcat+xml': 'atomcat', 'application/atomsvc+xml': 'atomsvc', 'application/base64': [ 'mm', 'mme' ], 'application/binhex': 'hqx', 'application/binhex4': 'hqx', 'application/book': [ 'book', 'boo' ], 'application/ccxml+xml,': 'ccxml', 'application/cdf': 'cdf', 'application/cdmi-capability': 'cdmia', 'application/cdmi-container': 'cdmic', 'application/cdmi-domain': 'cdmid', 'application/cdmi-object': 'cdmio', 'application/cdmi-queue': 'cdmiq', 'application/clariscad': 'ccad', 'application/commonground': 'dp', 'application/cu-seeme': 'cu', 'application/davmount+xml': 'davmount', 'application/drafting': 'drw', 'application/dsptype': 'tsp', 'application/dssc+der': 'dssc', 'application/dssc+xml': 'xdssc', 'application/dxf': 'dxf', 'application/ecmascript': [ 'js', 'es' ], 'application/emma+xml': 'emma', 'application/envoy': 'evy', 'application/epub+zip': 'epub', 'application/excel': [ 'xls', 'xl', 'xla', 'xlb', 'xlc', 'xld', 'xlk', 'xll', 'xlm', 'xlt', 'xlv', 'xlw' ], 'application/exi': 'exi', 'application/font-tdpfr': 'pfr', 'application/fractals': 'fif', 'application/freeloader': 'frl', 'application/futuresplash': 'spl', 'application/gnutar': 'tgz', 'application/groupwise': 'vew', 'application/hlp': 'hlp', 'application/hta': 'hta', 'application/hyperstudio': 'stk', 'application/i-deas': 'unv', 'application/iges': [ 'iges', 'igs' ], 'application/inf': 'inf', 'application/internet-property-stream': 'acx', 'application/ipfix': 'ipfix', 'application/java': 'class', 'application/java-archive': 'jar', 'application/java-byte-code': 'class', 'application/java-serialized-object': 'ser', 'application/java-vm': 'class', 'application/javascript': 'js', 'application/json': 'json', 'application/lha': 'lha', 'application/lzx': 'lzx', 'application/mac-binary': 'bin', 'application/mac-binhex': 'hqx', 'application/mac-binhex40': 'hqx', 'application/mac-compactpro': 'cpt', 'application/macbinary': 'bin', 'application/mads+xml': 'mads', 'application/marc': 'mrc', 'application/marcxml+xml': 'mrcx', 'application/mathematica': 'ma', 'application/mathml+xml': 'mathml', 'application/mbedlet': 'mbd', 'application/mbox': 'mbox', 'application/mcad': 'mcd', 'application/mediaservercontrol+xml': 'mscml', 'application/metalink4+xml': 'meta4', 'application/mets+xml': 'mets', 'application/mime': 'aps', 'application/mods+xml': 'mods', 'application/mp21': 'm21', 'application/mp4': 'mp4', 'application/mspowerpoint': [ 'ppt', 'pot', 'pps', 'ppz' ], 'application/msword': [ 'doc', 'dot', 'w6w', 'wiz', 'word' ], 'application/mswrite': 'wri', 'application/mxf': 'mxf', 'application/netmc': 'mcp', 'application/octet-stream': [ '*' ], 'application/oda': 'oda', 'application/oebps-package+xml': 'opf', 'application/ogg': 'ogx', 'application/olescript': 'axs', 'application/onenote': 'onetoc', 'application/patch-ops-error+xml': 'xer', 'application/pdf': 'pdf', 'application/pgp-encrypted': 'asc', 'application/pgp-signature': 'pgp', 'application/pics-rules': 'prf', 'application/pkcs-12': 'p12', 'application/pkcs-crl': 'crl', 'application/pkcs10': 'p10', 'application/pkcs7-mime': [ 'p7c', 'p7m' ], 'application/pkcs7-signature': 'p7s', 'application/pkcs8': 'p8', 'application/pkix-attr-cert': 'ac', 'application/pkix-cert': [ 'cer', 'crt' ], 'application/pkix-crl': 'crl', 'application/pkix-pkipath': 'pkipath', 'application/pkixcmp': 'pki', 'application/plain': 'text', 'application/pls+xml': 'pls', 'application/postscript': [ 'ps', 'ai', 'eps' ], 'application/powerpoint': 'ppt', 'application/pro_eng': [ 'part', 'prt' ], 'application/prs.cww': 'cww', 'application/pskc+xml': 'pskcxml', 'application/rdf+xml': 'rdf', 'application/reginfo+xml': 'rif', 'application/relax-ng-compact-syntax': 'rnc', 'application/resource-lists+xml': 'rl', 'application/resource-lists-diff+xml': 'rld', 'application/ringing-tones': 'rng', 'application/rls-services+xml': 'rs', 'application/rsd+xml': 'rsd', 'application/rss+xml': 'xml', 'application/rtf': [ 'rtf', 'rtx' ], 'application/sbml+xml': 'sbml', 'application/scvp-cv-request': 'scq', 'application/scvp-cv-response': 'scs', 'application/scvp-vp-request': 'spq', 'application/scvp-vp-response': 'spp', 'application/sdp': 'sdp', 'application/sea': 'sea', 'application/set': 'set', 'application/set-payment-initiation': 'setpay', 'application/set-registration-initiation': 'setreg', 'application/shf+xml': 'shf', 'application/sla': 'stl', 'application/smil': [ 'smi', 'smil' ], 'application/smil+xml': 'smi', 'application/solids': 'sol', 'application/sounder': 'sdr', 'application/sparql-query': 'rq', 'application/sparql-results+xml': 'srx', 'application/srgs': 'gram', 'application/srgs+xml': 'grxml', 'application/sru+xml': 'sru', 'application/ssml+xml': 'ssml', 'application/step': [ 'step', 'stp' ], 'application/streamingmedia': 'ssm', 'application/tei+xml': 'tei', 'application/thraud+xml': 'tfi', 'application/timestamped-data': 'tsd', 'application/toolbook': 'tbk', 'application/vda': 'vda', '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', 'application/vnd.adobe.air-application-installer-package+zip': 'air', 'application/vnd.adobe.fxp': 'fxp', 'application/vnd.adobe.xdp+xml': 'xdp', 'application/vnd.adobe.xfdf': 'xfdf', 'application/vnd.ahead.space': 'ahead', 'application/vnd.airzip.filesecure.azf': 'azf', 'application/vnd.airzip.filesecure.azs': 'azs', 'application/vnd.amazon.ebook': 'azw', '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.apple.installer+xml': 'mpkg', 'application/vnd.apple.mpegurl': 'm3u8', 'application/vnd.aristanetworks.swi': 'swi', 'application/vnd.audiograph': 'aep', 'application/vnd.blueice.multipass': 'mpm', 'application/vnd.bmi': 'bmi', 'application/vnd.businessobjects': 'rep', 'application/vnd.chemdraw+xml': 'cdxml', 'application/vnd.chipnuts.karaoke-mmd': 'mmd', 'application/vnd.cinderella': 'cdy', 'application/vnd.claymore': 'cla', 'application/vnd.cloanto.rp9': 'rp9', 'application/vnd.clonk.c4group': 'c4g', 'application/vnd.cluetrust.cartomobile-config': 'c11amc', 'application/vnd.cluetrust.cartomobile-config-pkg': 'c11amz', 'application/vnd.commonspace': 'csp', 'application/vnd.contact.cmsg': 'cdbcmsg', '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.data-vision.rdz': 'rdz', '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.dvb.ait': 'ait', 'application/vnd.dvb.service': 'svc', 'application/vnd.dynageo': 'geo', 'application/vnd.ecowin.chart': 'mag', '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', 'application/vnd.ezpix-album': 'ez2', 'application/vnd.ezpix-package': 'ez3', 'application/vnd.fdf': 'fdf', 'application/vnd.fdsn.seed': 'seed', 'application/vnd.flographit': 'gph', 'application/vnd.fluxtime.clip': 'ftc', 'application/vnd.framemaker': 'fm', '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.geogebra.file': 'ggb', 'application/vnd.geogebra.tool': 'ggt', 'application/vnd.geometry-explorer': 'gex', 'application/vnd.geonext': 'gxt', 'application/vnd.geoplan': 'g2w', 'application/vnd.geospace': 'g3w', 'application/vnd.gmx': 'gmx', 'application/vnd.google-earth.kml+xml': 'kml', 'application/vnd.google-earth.kmz': 'kmz', 'application/vnd.grafeq': 'gqf', '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.hal+xml': 'hal', 'application/vnd.handheld-entertainment+xml': 'zmm', 'application/vnd.hbci': 'hbci', 'application/vnd.hhe.lesson-player': 'les', 'application/vnd.hp-hpgl': [ 'hgl', 'hpg', '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.hzn-3d-crossword': 'x3d', 'application/vnd.ibm.minipay': 'mpy', 'application/vnd.ibm.modcap': 'afp', 'application/vnd.ibm.rights-management': 'irm', 'application/vnd.ibm.secure-container': 'sc', 'application/vnd.iccprofile': 'icc', 'application/vnd.igloader': 'igl', 'application/vnd.immervision-ivp': 'ivp', 'application/vnd.immervision-ivu': 'ivu', 'application/vnd.insors.igm': 'igm', 'application/vnd.intercon.formnet': 'xpw', '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', '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', 'application/vnd.kde.kspread': 'ksp', 'application/vnd.kde.kword': 'kwd', 'application/vnd.kenameaapp': 'htke', 'application/vnd.kidspiration': 'kia', 'application/vnd.kinar': 'kne', 'application/vnd.koan': 'skp', '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', '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.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.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-artgalry': 'cil', 'application/vnd.ms-cab-compressed': 'cab', 'application/vnd.ms-excel': [ 'xls', 'xla', 'xlc', 'xlm', 'xlt', 'xlw', 'xlb', 'xll' ], '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.certstore': 'sst', 'application/vnd.ms-pki.pko': 'pko', 'application/vnd.ms-pki.seccat': 'cat', 'application/vnd.ms-pki.stl': 'stl', 'application/vnd.ms-pkicertstore': 'sst', 'application/vnd.ms-pkiseccat': 'cat', 'application/vnd.ms-pkistl': 'stl', 'application/vnd.ms-powerpoint': [ 'ppt', 'pot', 'pps', 'ppa', 'pwz' ], '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', 'application/vnd.ms-word.document.macroenabled.12': 'docm', 'application/vnd.ms-word.template.macroenabled.12': 'dotm', 'application/vnd.ms-works': [ 'wks', 'wcm', 'wdb', 'wps' ], 'application/vnd.ms-wpl': 'wpl', 'application/vnd.ms-xpsdocument': 'xps', 'application/vnd.mseq': 'mseq', 'application/vnd.musician': 'mus', 'application/vnd.muvee.style': 'msty', 'application/vnd.neurolanguage.nlu': 'nlu', 'application/vnd.noblenet-directory': 'nnd', 'application/vnd.noblenet-sealer': 'nns', 'application/vnd.noblenet-web': 'nnw', 'application/vnd.nokia.configuration-message': 'ncm', '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.nokia.ringing-tone': 'rng', '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', 'application/vnd.oasis.opendocument.graphics': 'odg', '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-template': 'otp', 'application/vnd.oasis.opendocument.spreadsheet': 'ods', 'application/vnd.oasis.opendocument.spreadsheet-template': 'ots', 'application/vnd.oasis.opendocument.text': 'odt', '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.openofficeorg.extension': 'oxt', '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.palm': 'pdb', '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', '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', 'application/vnd.rn-realplayer': 'rnx', 'application/vnd.route66.link66+xml': 'link66', 'application/vnd.sailingtracker.track': 'st', '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', 'application/vnd.smaf': 'mmf', 'application/vnd.smart.teacher': 'teacher', 'application/vnd.solent.sdkm+xml': 'sdkm', 'application/vnd.spotfire.dxp': 'dxp', 'application/vnd.spotfire.sfs': 'sfs', 'application/vnd.stardivision.calc': 'sdc', 'application/vnd.stardivision.draw': 'sda', 'application/vnd.stardivision.impress': 'sdd', 'application/vnd.stardivision.math': 'smf', 'application/vnd.stardivision.writer': 'sdw', 'application/vnd.stardivision.writer-global': 'sgl', 'application/vnd.stepmania.stepchart': 'sm', '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', 'application/vnd.svd': 'svd', 'application/vnd.symbian.install': 'sis', 'application/vnd.syncml+xml': 'xsm', 'application/vnd.syncml.dm+wbxml': 'bdm', 'application/vnd.syncml.dm+xml': 'xdm', 'application/vnd.tao.intent-module-archive': 'tao', 'application/vnd.tmobile-livetv': 'tmo', 'application/vnd.trid.tpt': 'tpt', 'application/vnd.triscape.mxs': 'mxs', 'application/vnd.trueapp': 'tra', 'application/vnd.ufdl': 'ufd', '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', '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', 'application/vnd.wqd': 'wqd', 'application/vnd.wt.stf': 'stf', 'application/vnd.xara': [ 'web', 'xar' ], '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.zul': 'zir', 'application/vnd.zzazz.deck+xml': 'zaz', 'application/vocaltec-media-desc': 'vmd', 'application/vocaltec-media-file': 'vmf', 'application/voicexml+xml': 'vxml', 'application/widget': 'wgt', 'application/winhlp': 'hlp', 'application/wordperfect': [ 'wp', 'wp5', 'wp6', 'wpd' ], 'application/wordperfect6.0': [ 'w60', 'wp5' ], 'application/wordperfect6.1': 'w61', 'application/wsdl+xml': 'wsdl', 'application/wspolicy+xml': 'wspolicy', 'application/x-123': 'wk1', 'application/x-7z-compressed': '7z', 'application/x-abiword': 'abw', 'application/x-ace-compressed': 'ace', 'application/x-aim': 'aim', 'application/x-authorware-bin': 'aab', 'application/x-authorware-map': 'aam', 'application/x-authorware-seg': 'aas', 'application/x-bcpio': 'bcpio', 'application/x-binary': 'bin', 'application/x-binhex40': 'hqx', 'application/x-bittorrent': 'torrent', 'application/x-bsh': [ 'bsh', 'sh', 'shar' ], 'application/x-bytecode.elisp': 'elc', 'applicaiton/x-bytecode.python': 'pyc', 'application/x-bzip': 'bz', 'application/x-bzip2': [ 'boz', 'bz2' ], 'application/x-cdf': 'cdf', 'application/x-cdlink': 'vcd', 'application/x-chat': [ 'cha', 'chat' ], 'application/x-chess-pgn': 'pgn', 'application/x-cmu-raster': 'ras', 'application/x-cocoa': 'cco', 'application/x-compactpro': 'cpt', 'application/x-compress': 'z', 'application/x-compressed': [ 'tgz', 'gz', 'z', 'zip' ], 'application/x-conference': 'nsc', 'application/x-cpio': 'cpio', 'application/x-cpt': 'cpt', 'application/x-csh': 'csh', 'application/x-debian-package': 'deb', 'application/x-deepv': 'deepv', 'application/x-director': [ 'dir', 'dcr', 'dxr' ], 'application/x-doom': 'wad', 'application/x-dtbncx+xml': 'ncx', 'application/x-dtbook+xml': 'dtb', 'application/x-dtbresource+xml': 'res', 'application/x-dvi': 'dvi', 'application/x-elc': 'elc', 'application/x-envoy': [ 'env', 'evy' ], 'application/x-esrehber': 'es', 'application/x-excel': [ 'xls', 'xla', 'xlb', 'xlc', 'xld', 'xlk', 'xll', 'xlm', 'xlt', 'xlv', 'xlw' ], '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', 'application/x-font-snf': 'snf', 'application/x-font-ttf': 'ttf', 'application/x-font-type1': 'pfa', 'application/x-font-woff': 'woff', 'application/x-frame': 'mif', 'application/x-freelance': 'pre', 'application/x-futuresplash': 'spl', 'application/x-gnumeric': 'gnumeric', 'application/x-gsp': 'gsp', 'application/x-gss': 'gss', 'application/x-gtar': 'gtar', 'application/x-gzip': [ 'gz', 'gzip' ], 'application/x-hdf': 'hdf', 'application/x-helpfile': [ 'help', 'hlp' ], 'application/x-httpd-imap': 'imap', 'application/x-ima': 'ima', 'application/x-internet-signup': [ 'ins', 'isp' ], 'application/x-internett-signup': 'ins', 'application/x-inventor': 'iv', 'application/x-ip2': 'ip', 'application/x-iphone': 'iii', 'application/x-java-class': 'class', 'application/x-java-commerce': 'jcm', 'application/x-java-jnlp-file': 'jnlp', 'application/x-javascript': 'js', 'application/x-koan': [ 'skd', 'skm', 'skp', 'skt' ], 'application/x-ksh': 'ksh', 'application/x-latex': [ 'latex', 'ltx' ], 'application/x-lha': 'lha', 'application/x-lisp': 'lsp', 'application/x-livescreen': 'ivy', 'application/x-lotus': 'wq1', 'application/x-lotusscreencam': 'scm', 'application/x-lzh': 'lzh', 'application/x-lzx': 'lzx', 'application/x-mac-binhex40': 'hqx', 'application/x-macbinary': 'bin', 'application/x-magic-cap-package-1.0': 'mc$', 'application/x-mathcad': 'mcd', 'application/x-meme': 'mm', 'application/x-midi': [ 'mid', 'midi' ], 'application/x-mif': 'mif', 'application/x-mix-transfer': 'nix', 'application/x-mobipocket-ebook': 'prc', 'application/x-mplayer2': 'asx', 'application/x-ms-application': 'application', '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' ], 'application/x-msexcel': [ 'xls', 'xla', 'xlw' ], 'application/x-msmediaview': [ 'mvb', 'm13', 'm14' ], 'application/x-msmetafile': 'wmf', 'application/x-msmoney': 'mny', 'application/x-mspowerpoint': 'ppt', 'application/x-mspublisher': 'pub', 'application/x-msschedule': 'scd', 'application/x-msterminal': 'trm', 'application/x-mswrite': 'wri', 'application/x-navi-animation': 'ani', 'application/x-navidoc': 'nvd', 'application/x-navimap': 'map', 'application/x-navistyle': 'stl', 'application/x-netcdf': [ 'cdf', 'nc' ], 'application/x-newton-compatible-pkg': 'pkg', 'application/x-nokia-9000-communicator-add-on-software': 'aos', 'application/x-omc': 'omc', 'application/x-omcdatamaker': 'omcd', 'application/x-omcregerator': 'omcr', 'application/x-pagemaker': [ 'pm4', 'pm5' ], 'application/x-pcl': 'pcl', 'application/x-perfmon': [ 'pma', 'pmc', 'pml', 'pmr', 'pmw' ], 'application/x-pixclscript': 'plx', 'application/x-pkcs10': 'p10', 'application/x-pkcs12': [ 'p12', 'pfx' ], 'application/x-pkcs7-certificates': [ 'p7b', 'spc' ], 'application/x-pkcs7-certreqresp': 'p7r', 'application/x-pkcs7-mime': [ 'p7m', 'p7c' ], 'application/x-pkcs7-signature': [ 'p7s', 'p7a' ], 'application/x-pointplus': 'css', 'application/x-portable-anymap': 'pnm', 'application/x-project': [ 'mpc', 'mpt', 'mpv', 'mpx' ], 'application/x-qpro': 'wb1', 'application/x-rar-compressed': 'rar', 'application/x-rtf': 'rtf', 'application/x-sdp': 'sdp', 'application/x-sea': 'sea', 'application/x-seelogo': 'sl', 'application/x-sh': 'sh', 'application/x-shar': [ 'shar', 'sh' ], 'application/x-shockwave-flash': 'swf', 'application/x-silverlight-app': 'xap', 'application/x-sit': 'sit', 'application/x-sprite': [ 'spr', 'sprite' ], 'application/x-stuffit': 'sit', 'application/x-stuffitx': 'sitx', 'application/x-sv4cpio': 'sv4cpio', 'application/x-sv4crc': 'sv4crc', 'application/x-tar': 'tar', 'application/x-tbook': [ 'sbk', 'tbk' ], 'application/x-tcl': 'tcl', 'application/x-tex': 'tex', 'application/x-tex-tfm': 'tfm', 'application/x-texinfo': [ 'texi', 'texinfo' ], 'application/x-troff': [ 'roff', 't', 'tr' ], 'application/x-troff-man': 'man', 'application/x-troff-me': 'me', 'application/x-troff-ms': 'ms', 'application/x-troff-msvideo': 'avi', 'application/x-ustar': 'ustar', 'application/x-visio': [ 'vsd', 'vst', 'vsw' ], 'application/x-vnd.audioexplosion.mzz': 'mzz', 'application/x-vnd.ls-xpix': 'xpix', 'application/x-vrml': 'vrml', 'application/x-wais-source': [ 'src', 'wsrc' ], 'application/x-winhelp': 'hlp', 'application/x-wintalk': 'wtk', 'application/x-world': [ 'wrl', 'svr' ], 'application/x-wpwin': 'wpd', 'application/x-wri': 'wri', 'application/x-x509-ca-cert': [ 'cer', 'crt', 'der' ], 'application/x-x509-user-cert': 'crt', 'application/x-xfig': 'fig', 'application/x-xpinstall': 'xpi', 'application/x-zip-compressed': 'zip', 'application/xcap-diff+xml': 'xdf', 'application/xenc+xml': 'xenc', 'application/xhtml+xml': 'xhtml', 'application/xml': 'xml', 'application/xml-dtd': 'dtd', 'application/xop+xml': 'xop', 'application/xslt+xml': 'xslt', 'application/xspf+xml': 'xspf', 'application/xv+xml': 'mxml', 'application/yang': 'yang', 'application/yin+xml': 'yin', 'application/ynd.ms-pkipko': 'pko', 'application/zip': 'zip', 'audio/adpcm': 'adp', 'audio/aiff': [ 'aiff', 'aif', 'aifc' ], 'audio/basic': [ 'snd', 'au' ], 'audio/it': 'it', 'audio/make': [ 'funk', 'my', 'pfunk' ], 'audio/make.my.funk': 'pfunk', 'audio/mid': [ 'mid', 'rmi' ], 'audio/midi': [ 'midi', 'kar', 'mid' ], 'audio/mod': 'mod', 'audio/mp4': 'mp4a', 'audio/mpeg': [ 'mpga', 'mp3', 'm2a', 'mp2', 'mpa', 'mpg' ], 'audio/mpeg3': 'mp3', 'audio/nspaudio': [ 'la', 'lma' ], 'audio/ogg': 'oga', 'audio/s3m': 's3m', 'audio/tsp-audio': 'tsi', 'audio/tsplayer': 'tsp', 'audio/vnd.dece.audio': 'uva', '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.qcelp': 'qcp', 'audio/vnd.rip': 'rip', 'audio/voc': 'voc', 'audio/voxware': 'vox', 'audio/wav': 'wav', 'audio/webm': 'weba', 'audio/x-aac': 'aac', 'audio/x-adpcm': 'snd', 'audio/x-aiff': [ 'aiff', 'aif', 'aifc' ], 'audio/x-au': 'au', 'audio/x-gsm': [ 'gsd', 'gsm' ], 'audio/x-jam': 'jam', 'audio/x-liveaudio': 'lam', 'audio/x-mid': [ 'mid', 'midi' ], 'audio/x-midi': [ 'midi', 'mid' ], 'audio/x-mod': 'mod', 'audio/x-mpeg': 'mp2', 'audio/x-mpeg-3': 'mp3', 'audio/x-mpegurl': 'm3u', 'audio/x-mpequrl': 'm3u', 'audio/x-ms-wax': 'wax', 'audio/x-ms-wma': 'wma', 'audio/x-nspaudio': [ 'la', 'lma' ], 'audio/x-pn-realaudio': [ 'ra', 'ram', 'rm', 'rmm', 'rmp' ], 'audio/x-pn-realaudio-plugin': [ 'ra', 'rmp', 'rpm' ], 'audio/x-psid': 'sid', 'audio/x-realaudio': 'ra', 'audio/x-twinvq': 'vqf', 'audio/x-twinvq-plugin': [ 'vqe', 'vql' ], 'audio/x-vnd.audioexplosion.mjuicemediafile': 'mjf', 'audio/x-voc': 'voc', 'audio/x-wav': 'wav', 'audio/xm': 'xm', 'chemical/x-cdx': 'cdx', 'chemical/x-cif': 'cif', 'chemical/x-cmdf': 'cmdf', 'chemical/x-cml': 'cml', 'chemical/x-csml': 'csml', 'chemical/x-pdb': [ 'pdb', 'xyz' ], 'chemical/x-xyz': 'xyz', 'drawing/x-dwf': 'dwf', 'i-world/i-vrml': 'ivr', 'image/bmp': [ 'bmp', 'bm' ], 'image/cgm': 'cgm', 'image/cis-cod': 'cod', 'image/cmu-raster': [ 'ras', 'rast' ], 'image/fif': 'fif', 'image/florian': [ 'flo', 'turbot' ], 'image/g3fax': 'g3', 'image/gif': 'gif', 'image/ief': [ 'ief', 'iefs' ], 'image/jpeg': [ 'jpeg', 'jpe', 'jpg', 'jfif', 'jfif-tbnl' ], 'image/jutvision': 'jut', 'image/ktx': 'ktx', 'image/naplps': [ 'nap', 'naplps' ], 'image/pict': [ 'pic', 'pict' ], 'image/pipeg': 'jfif', 'image/pjpeg': [ 'jfif', 'jpe', 'jpeg', 'jpg' ], 'image/png': [ 'png', 'x-png' ], 'image/prs.btif': 'btif', 'image/svg+xml': 'svg', 'image/tiff': [ 'tif', 'tiff' ], 'image/vasa': 'mcf', 'image/vnd.adobe.photoshop': 'psd', 'image/vnd.dece.graphic': 'uvi', 'image/vnd.djvu': 'djvu', 'image/vnd.dvb.subtitle': 'sub', 'image/vnd.dwg': [ 'dwg', 'dxf', 'svf' ], '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.ms-modi': 'mdi', 'image/vnd.net-fpx': [ 'fpx', 'npx' ], 'image/vnd.rn-realflash': 'rf', 'image/vnd.rn-realpix': 'rp', 'image/vnd.wap.wbmp': 'wbmp', 'image/vnd.xiff': 'xif', 'image/webp': 'webp', 'image/x-cmu-raster': 'ras', 'image/x-cmx': 'cmx', 'image/x-dwg': [ 'dwg', 'dxf', 'svf' ], 'image/x-freehand': 'fh', 'image/x-icon': 'ico', 'image/x-jg': 'art', 'image/x-jps': 'jps', 'image/x-niff': [ 'niff', 'nif' ], 'image/x-pcx': 'pcx', 'image/x-pict': [ 'pct', 'pic' ], 'image/x-portable-anymap': 'pnm', 'image/x-portable-bitmap': 'pbm', 'image/x-portable-graymap': 'pgm', 'image/x-portable-greymap': 'pgm', 'image/x-portable-pixmap': 'ppm', 'image/x-quicktime': [ 'qif', 'qti', 'qtif' ], 'image/x-rgb': 'rgb', 'image/x-tiff': [ 'tif', 'tiff' ], 'image/x-windows-bmp': 'bmp', 'image/x-xbitmap': 'xbm', 'image/x-xbm': 'xbm', 'image/x-xpixmap': [ 'xpm', 'pm' ], 'image/x-xwd': 'xwd', 'image/x-xwindowdump': 'xwd', 'image/xbm': 'xbm', 'image/xpm': 'xpm', 'message/rfc822': [ 'eml', 'mht', 'mhtml', 'nws', 'mime' ], 'model/iges': [ 'iges', 'igs' ], 'model/mesh': 'msh', 'model/vnd.collada+xml': 'dae', 'model/vnd.dwf': 'dwf', 'model/vnd.gdl': 'gdl', 'model/vnd.gtw': 'gtw', 'model/vnd.mts': 'mts', 'model/vnd.vtu': 'vtu', 'model/vrml': [ 'vrml', 'wrl', 'wrz' ], 'model/x-pov': 'pov', 'multipart/x-gzip': 'gzip', 'multipart/x-ustar': 'ustar', 'multipart/x-zip': 'zip', 'music/crescendo': [ 'mid', 'midi' ], 'music/x-karaoke': 'kar', 'paleovu/x-pv': 'pvu', 'text/asp': 'asp', 'text/calendar': 'ics', 'text/css': 'css', 'text/csv': 'csv', 'text/ecmascript': 'js', 'text/h323': '323', 'text/html': [ 'html', 'htm', 'stm', 'acgi', 'htmls', 'htx', 'shtml' ], 'text/iuls': 'uls', 'text/javascript': 'js', 'text/mcf': 'mcf', 'text/n3': 'n3', 'text/pascal': 'pas', 'text/plain': [ 'txt', 'bas', 'c', 'h', 'c++', 'cc', 'com', 'conf', 'cxx', 'def', 'f', 'f90', 'for', 'g', 'hh', 'idc', 'jav', 'java', 'list', 'log', 'lst', 'm', 'mar', 'pl', 'sdml', 'text' ], 'text/plain-bas': 'par', 'text/prs.lines.tag': 'dsc', 'text/richtext': [ 'rtx', 'rt', 'rtf' ], 'text/scriplet': 'wsc', 'text/scriptlet': 'sct', 'text/sgml': [ 'sgm', 'sgml' ], 'text/tab-separated-values': 'tsv', 'text/troff': 't', 'text/turtle': 'ttl', 'text/uri-list': [ 'uni', 'unis', 'uri', 'uris' ], 'text/vnd.abc': 'abc', 'text/vnd.curl': 'curl', 'text/vnd.curl.dcurl': 'dcurl', 'text/vnd.curl.mcurl': 'mcurl', 'text/vnd.curl.scurl': 'scurl', '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.rn-realtext': 'rt', 'text/vnd.sun.j2me.app-descriptor': 'jad', 'text/vnd.wap.wml': 'wml', 'text/vnd.wap.wmlscript': 'wmls', 'text/webviewhtml': 'htt', 'text/x-asm': [ 'asm', 's' ], 'text/x-audiosoft-intra': 'aip', 'text/x-c': [ 'c', 'cc', 'cpp' ], 'text/x-component': 'htc', 'text/x-fortran': [ 'for', 'f', 'f77', 'f90' ], 'text/x-h': [ 'h', 'hh' ], 'text/x-java-source': [ 'java', 'jav' ], 'text/x-java-source,java': 'java', 'text/x-la-asf': 'lsx', 'text/x-m': 'm', 'text/x-pascal': 'p', 'text/x-script': 'hlb', 'text/x-script.csh': 'csh', 'text/x-script.elisp': 'el', 'text/x-script.guile': 'scm', 'text/x-script.ksh': 'ksh', 'text/x-script.lisp': 'lsp', 'text/x-script.perl': 'pl', 'text/x-script.perl-module': 'pm', 'text/x-script.phyton': 'py', 'text/x-script.rexx': 'rexx', 'text/x-script.scheme': 'scm', 'text/x-script.sh': 'sh', 'text/x-script.tcl': 'tcl', 'text/x-script.tcsh': 'tcsh', 'text/x-script.zsh': 'zsh', 'text/x-server-parsed-html': [ 'shtml', 'ssi' ], 'text/x-setext': 'etx', 'text/x-sgml': [ 'sgm', 'sgml' ], 'text/x-speech': [ 'spc', 'talk' ], 'text/x-uil': 'uil', 'text/x-uuencode': [ 'uu', 'uue' ], 'text/x-vcalendar': 'vcs', 'text/x-vcard': 'vcf', 'text/xml': 'xml', 'video/3gpp': '3gp', 'video/3gpp2': '3g2', 'video/animaflex': 'afl', 'video/avi': 'avi', 'video/avs-video': 'avs', 'video/dl': 'dl', 'video/fli': 'fli', 'video/gl': 'gl', 'video/h261': 'h261', 'video/h263': 'h263', 'video/h264': 'h264', 'video/jpeg': 'jpgv', 'video/jpm': 'jpm', 'video/mj2': 'mj2', 'video/mp4': 'mp4', 'video/mpeg': [ 'mpeg', 'mp2', 'mpa', 'mpe', 'mpg', 'mpv2', 'm1v', 'm2v', 'mp3' ], 'video/msvideo': 'avi', 'video/ogg': 'ogv', 'video/quicktime': [ 'mov', 'qt', 'moov' ], 'video/vdo': 'vdo', 'video/vivo': [ 'viv', 'vivo' ], 'video/vnd.dece.hd': 'uvh', 'video/vnd.dece.mobile': 'uvm', 'video/vnd.dece.pd': 'uvp', 'video/vnd.dece.sd': 'uvs', 'video/vnd.dece.video': 'uvv', 'video/vnd.fvt': 'fvt', 'video/vnd.mpegurl': 'mxu', 'video/vnd.ms-playready.media.pyv': 'pyv', 'video/vnd.rn-realvideo': 'rv', 'video/vnd.uvvu.mp4': 'uvu', 'video/vnd.vivo': [ 'viv', 'vivo' ], 'video/vosaic': 'vos', 'video/webm': 'webm', 'video/x-amt-demorun': 'xdr', 'video/x-amt-showrun': 'xsr', 'video/x-atomic3d-feature': 'fmf', 'video/x-dl': 'dl', 'video/x-dv': [ 'dif', 'dv' ], 'video/x-f4v': 'f4v', 'video/x-fli': 'fli', 'video/x-flv': 'flv', 'video/x-gl': 'gl', 'video/x-isvideo': 'isu', 'video/x-la-asf': [ 'lsf', 'lsx' ], 'video/x-m4v': 'm4v', 'video/x-motion-jpeg': 'mjpg', 'video/x-mpeg': [ 'mp3', 'mp2' ], 'video/x-mpeq2a': 'mp2', 'video/x-ms-asf': [ 'asf', 'asr', 'asx' ], 'video/x-ms-asf-plugin': 'asx', '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-qtc': 'qtc', 'video/x-scm': 'scm', 'video/x-sgi-movie': [ 'movie', 'mv' ], 'windows/metafile': 'wmf', 'www/mime': 'mime', 'x-conference/x-cooltalk': 'ice', 'x-music/x-midi': [ 'mid', 'midi' ], 'x-world/x-3dmf': [ '3dm', '3dmf', 'qd3', 'qd3d' ], 'x-world/x-svr': 'svr', 'x-world/x-vrml': [ 'flr', 'vrml', 'wrl', 'wrz', 'xaf', 'xof' ], 'x-world/x-vrt': 'vrt', 'xgl/drawing': 'xgz', 'xgl/movie': 'xmz' }, extensions: { '*': 'application/octet-stream', '123': 'application/vnd.lotus-1-2-3', '323': 'text/h323', '3dm': 'x-world/x-3dmf', '3dmf': 'x-world/x-3dmf', '3dml': 'text/vnd.in3d.3dml', '3g2': 'video/3gpp2', '3gp': 'video/3gpp', '7z': 'application/x-7z-compressed', a: 'application/octet-stream', aab: 'application/x-authorware-bin', aac: 'audio/x-aac', aam: 'application/x-authorware-map', aas: 'application/x-authorware-seg', abc: 'text/vnd.abc', abw: 'application/x-abiword', ac: 'application/pkix-attr-cert', acc: 'application/vnd.americandynamics.acc', ace: 'application/x-ace-compressed', acgi: 'text/html', acu: 'application/vnd.acucobol', acx: 'application/internet-property-stream', adp: 'audio/adpcm', aep: 'application/vnd.audiograph', afl: 'video/animaflex', afp: 'application/vnd.ibm.modcap', ahead: 'application/vnd.ahead.space', ai: 'application/postscript', aif: [ 'audio/aiff', 'audio/x-aiff' ], aifc: [ 'audio/aiff', 'audio/x-aiff' ], aiff: [ 'audio/aiff', 'audio/x-aiff' ], aim: 'application/x-aim', aip: 'text/x-audiosoft-intra', air: 'application/vnd.adobe.air-application-installer-package+zip', ait: 'application/vnd.dvb.ait', ami: 'application/vnd.amiga.ami', ani: 'application/x-navi-animation', aos: 'application/x-nokia-9000-communicator-add-on-software', apk: 'application/vnd.android.package-archive', application: 'application/x-ms-application', apr: 'application/vnd.lotus-approach', aps: 'application/mime', arc: 'application/octet-stream', arj: [ 'application/arj', 'application/octet-stream' ], art: 'image/x-jg', asf: 'video/x-ms-asf', asm: 'text/x-asm', aso: 'application/vnd.accpac.simply.aso', asp: 'text/asp', asr: 'video/x-ms-asf', asx: [ 'video/x-ms-asf', 'application/x-mplayer2', 'video/x-ms-asf-plugin' ], atc: 'application/vnd.acucorp', atomcat: 'application/atomcat+xml', atomsvc: 'application/atomsvc+xml', atx: 'application/vnd.antix.game-component', au: [ 'audio/basic', 'audio/x-au' ], avi: [ 'video/avi', 'video/msvideo', 'application/x-troff-msvideo', 'video/x-msvideo' ], avs: 'video/avs-video', aw: 'application/applixware', axs: 'application/olescript', azf: 'application/vnd.airzip.filesecure.azf', azs: 'application/vnd.airzip.filesecure.azs', azw: 'application/vnd.amazon.ebook', bas: 'text/plain', bcpio: 'application/x-bcpio', bdf: 'application/x-font-bdf', bdm: 'application/vnd.syncml.dm+wbxml', bed: 'application/vnd.realvnc.bed', bh2: 'application/vnd.fujitsu.oasysprs', bin: [ 'application/octet-stream', 'application/mac-binary', 'application/macbinary', 'application/x-macbinary', 'application/x-binary' ], bm: 'image/bmp', bmi: 'application/vnd.bmi', bmp: [ 'image/bmp', 'image/x-windows-bmp' ], boo: 'application/book', book: 'application/book', box: 'application/vnd.previewsystems.box', boz: 'application/x-bzip2', bsh: 'application/x-bsh', btif: 'image/prs.btif', bz: 'application/x-bzip', bz2: 'application/x-bzip2', c: [ 'text/plain', 'text/x-c' ], 'c++': 'text/plain', c11amc: 'application/vnd.cluetrust.cartomobile-config', c11amz: 'application/vnd.cluetrust.cartomobile-config-pkg', c4g: 'application/vnd.clonk.c4group', cab: 'application/vnd.ms-cab-compressed', car: 'application/vnd.curl.car', cat: [ 'application/vnd.ms-pkiseccat', 'application/vnd.ms-pki.seccat' ], cc: [ 'text/plain', 'text/x-c' ], ccad: 'application/clariscad', cco: 'application/x-cocoa', ccxml: 'application/ccxml+xml,', cdbcmsg: 'application/vnd.contact.cmsg', cdf: [ 'application/cdf', 'application/x-cdf', 'application/x-netcdf' ], 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', cdx: 'chemical/x-cdx', cdxml: 'application/vnd.chemdraw+xml', cdy: 'application/vnd.cinderella', cer: [ 'application/pkix-cert', 'application/x-x509-ca-cert' ], cgm: 'image/cgm', cha: 'application/x-chat', chat: 'application/x-chat', chm: 'application/vnd.ms-htmlhelp', chrt: 'application/vnd.kde.kchart', cif: 'chemical/x-cif', cii: 'application/vnd.anser-web-certificate-issue-initiation', cil: 'application/vnd.ms-artgalry', cla: 'application/vnd.claymore', class: [ 'application/octet-stream', 'application/java', 'application/java-byte-code', 'application/java-vm', 'application/x-java-class' ], 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', cmc: 'application/vnd.cosmocaller', cmdf: 'chemical/x-cmdf', cml: 'chemical/x-cml', cmp: 'application/vnd.yellowriver-custom-menu', cmx: 'image/x-cmx', cod: [ 'image/cis-cod', 'application/vnd.rim.cod' ], com: [ 'application/octet-stream', 'text/plain' ], conf: 'text/plain', cpio: 'application/x-cpio', cpp: 'text/x-c', cpt: [ 'application/mac-compactpro', 'application/x-compactpro', 'application/x-cpt' ], crd: 'application/x-mscardfile', crl: [ 'application/pkix-crl', 'application/pkcs-crl' ], crt: [ 'application/pkix-cert', 'application/x-x509-user-cert', 'application/x-x509-ca-cert' ], cryptonote: 'application/vnd.rig.cryptonote', csh: [ 'text/x-script.csh', 'application/x-csh' ], csml: 'chemical/x-csml', csp: 'application/vnd.commonspace', css: [ 'text/css', 'application/x-pointplus' ], csv: 'text/csv', cu: 'application/cu-seeme', curl: 'text/vnd.curl', cww: 'application/prs.cww', cxx: 'text/plain', dae: 'model/vnd.collada+xml', daf: 'application/vnd.mobius.daf', davmount: 'application/davmount+xml', dcr: 'application/x-director', dcurl: 'text/vnd.curl.dcurl', dd2: 'application/vnd.oma.dd2+xml', ddd: 'application/vnd.fujixerox.ddd', deb: 'application/x-debian-package', deepv: 'application/x-deepv', def: 'text/plain', der: 'application/x-x509-ca-cert', dfac: 'application/vnd.dreamfactory', dif: 'video/x-dv', dir: 'application/x-director', dis: 'application/vnd.mobius.dis', djvu: 'image/vnd.djvu', dl: [ 'video/dl', 'video/x-dl' ], dll: 'application/x-msdownload', dms: 'application/octet-stream', dna: 'application/vnd.dna', doc: 'application/msword', docm: 'application/vnd.ms-word.document.macroenabled.12', docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', dot: 'application/msword', dotm: 'application/vnd.ms-word.template.macroenabled.12', dotx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', dp: [ 'application/commonground', 'application/vnd.osgi.dp' ], dpg: 'application/vnd.dpgraph', dra: 'audio/vnd.dra', drw: 'application/drafting', dsc: 'text/prs.lines.tag', dssc: 'application/dssc+der', dtb: 'application/x-dtbook+xml', dtd: 'application/xml-dtd', dts: 'audio/vnd.dts', dtshd: 'audio/vnd.dts.hd', dump: 'application/octet-stream', dv: 'video/x-dv', dvi: 'application/x-dvi', dwf: [ 'model/vnd.dwf', 'drawing/x-dwf' ], dwg: [ 'application/acad', 'image/vnd.dwg', 'image/x-dwg' ], dxf: [ 'application/dxf', 'image/vnd.dwg', 'image/vnd.dxf', 'image/x-dwg' ], dxp: 'application/vnd.spotfire.dxp', dxr: 'application/x-director', ecelp4800: 'audio/vnd.nuera.ecelp4800', ecelp7470: 'audio/vnd.nuera.ecelp7470', ecelp9600: 'audio/vnd.nuera.ecelp9600', edm: 'application/vnd.novadigm.edm', edx: 'application/vnd.novadigm.edx', efif: 'application/vnd.picsel', ei6: 'application/vnd.pg.osasli', el: 'text/x-script.elisp', elc: [ 'application/x-elc', 'application/x-bytecode.elisp' ], eml: 'message/rfc822', emma: 'application/emma+xml', env: 'application/x-envoy', eol: 'audio/vnd.digital-winds', eot: 'application/vnd.ms-fontobject', eps: 'application/postscript', epub: 'application/epub+zip', es: [ 'application/ecmascript', 'application/x-esrehber' ], es3: 'application/vnd.eszigno3+xml', esf: 'application/vnd.epson.esf', etx: 'text/x-setext', evy: [ 'application/envoy', 'application/x-envoy' ], exe: [ 'application/octet-stream', 'application/x-msdownload' ], exi: 'application/exi', ext: 'application/vnd.novadigm.ext', ez2: 'application/vnd.ezpix-album', ez3: 'application/vnd.ezpix-package', f: [ 'text/plain', 'text/x-fortran' ], f4v: 'video/x-f4v', f77: 'text/x-fortran', f90: [ 'text/plain', 'text/x-fortran' ], fbs: 'image/vnd.fastbidsheet', fcs: 'application/vnd.isac.fcs', fdf: 'application/vnd.fdf', fe_launch: 'application/vnd.denovo.fcselayout-link', fg5: 'application/vnd.fujitsu.oasysgp', fh: 'image/x-freehand', fif: [ 'application/fractals', 'image/fif' ], fig: 'application/x-xfig', fli: [ 'video/fli', 'video/x-fli' ], flo: [ 'image/florian', 'application/vnd.micrografx.flo' ], flr: 'x-world/x-vrml', flv: 'video/x-flv', flw: 'application/vnd.kde.kivio', flx: 'text/vnd.fmi.flexstor', fly: 'text/vnd.fly', fm: 'application/vnd.framemaker', fmf: 'video/x-atomic3d-feature', fnc: 'application/vnd.frogans.fnc', for: [ 'text/plain', 'text/x-fortran' ], fpx: [ 'image/vnd.fpx', 'image/vnd.net-fpx' ], frl: 'application/freeloader', fsc: 'application/vnd.fsc.weblaunch', fst: 'image/vnd.fst', ftc: 'application/vnd.fluxtime.clip', fti: 'application/vnd.anser-web-funds-transfer-initiation', funk: 'audio/make', fvt: 'video/vnd.fvt', fxp: 'application/vnd.adobe.fxp', fzs: 'application/vnd.fuzzysheet', g: 'text/plain', g2w: 'application/vnd.geoplan', g3: 'image/g3fax', g3w: 'application/vnd.geospace', gac: 'application/vnd.groove-account', gdl: 'model/vnd.gdl', geo: 'application/vnd.dynageo', gex: 'application/vnd.geometry-explorer', ggb: 'application/vnd.geogebra.file', ggt: 'application/vnd.geogebra.tool', ghf: 'application/vnd.groove-help', gif: 'image/gif', gim: 'application/vnd.groove-identity-message', gl: [ 'video/gl', 'video/x-gl' ], gmx: 'application/vnd.gmx', gnumeric: 'application/x-gnumeric', gph: 'application/vnd.flographit', gqf: 'application/vnd.grafeq', gram: 'application/srgs', grv: 'application/vnd.groove-injector', grxml: 'application/srgs+xml', gsd: 'audio/x-gsm', gsf: 'application/x-font-ghostscript', gsm: 'audio/x-gsm', gsp: 'application/x-gsp', gss: 'application/x-gss', gtar: 'application/x-gtar', gtm: 'application/vnd.groove-tool-message', gtw: 'model/vnd.gtw', gv: 'text/vnd.graphviz', gxt: 'application/vnd.geonext', gz: [ 'application/x-gzip', 'application/x-compressed' ], gzip: [ 'multipart/x-gzip', 'application/x-gzip' ], h: [ 'text/plain', 'text/x-h' ], h261: 'video/h261', h263: 'video/h263', h264: 'video/h264', hal: 'application/vnd.hal+xml', hbci: 'application/vnd.hbci', hdf: 'application/x-hdf', help: 'application/x-helpfile', hgl: 'application/vnd.hp-hpgl', hh: [ 'text/plain', 'text/x-h' ], hlb: 'text/x-script', hlp: [ 'application/winhlp', 'application/hlp', 'application/x-helpfile', 'application/x-winhelp' ], hpg: 'application/vnd.hp-hpgl', hpgl: 'application/vnd.hp-hpgl', hpid: 'application/vnd.hp-hpid', hps: 'application/vnd.hp-hps', hqx: [ 'application/mac-binhex40', 'application/binhex', 'application/binhex4', 'application/mac-binhex', 'application/x-binhex40', 'application/x-mac-binhex40' ], hta: 'application/hta', htc: 'text/x-component', htke: 'application/vnd.kenameaapp', htm: 'text/html', html: 'text/html', htmls: 'text/html', htt: 'text/webviewhtml', htx: 'text/html', hvd: 'application/vnd.yamaha.hv-dic', hvp: 'application/vnd.yamaha.hv-voice', hvs: 'application/vnd.yamaha.hv-script', i2g: 'application/vnd.intergeo', icc: 'application/vnd.iccprofile', ice: 'x-conference/x-cooltalk', ico: 'image/x-icon', ics: 'text/calendar', idc: 'text/plain', ief: 'image/ief', iefs: 'image/ief', ifm: 'application/vnd.shana.informed.formdata', iges: [ 'application/iges', 'model/iges' ], igl: 'application/vnd.igloader', igm: 'application/vnd.insors.igm', igs: [ 'application/iges', 'model/iges' ], igx: 'application/vnd.micrografx.igx', iif: 'application/vnd.shana.informed.interchange', iii: 'application/x-iphone', ima: 'application/x-ima', imap: 'application/x-httpd-imap', imp: 'application/vnd.accpac.simply.imp', ims: 'application/vnd.ms-ims', inf: 'application/inf', ins: [ 'application/x-internet-signup', 'application/x-internett-signup' ], ip: 'application/x-ip2', ipfix: 'application/ipfix', ipk: 'application/vnd.shana.informed.package', irm: 'application/vnd.ibm.rights-management', irp: 'application/vnd.irepository.package+xml', isp: 'application/x-internet-signup', isu: 'video/x-isvideo', it: 'audio/it', itp: 'application/vnd.shana.informed.formtemplate', iv: 'application/x-inventor', ivp: 'application/vnd.immervision-ivp', ivr: 'i-world/i-vrml', ivu: 'application/vnd.immervision-ivu', ivy: 'application/x-livescreen', jad: 'text/vnd.sun.j2me.app-descriptor', jam: [ 'application/vnd.jam', 'audio/x-jam' ], jar: 'application/java-archive', jav: [ 'text/plain', 'text/x-java-source' ], java: [ 'text/plain', 'text/x-java-source,java', 'text/x-java-source' ], jcm: 'application/x-java-commerce', jfif: [ 'image/pipeg', 'image/jpeg', 'image/pjpeg' ], 'jfif-tbnl': 'image/jpeg', jisp: 'application/vnd.jisp', jlt: 'application/vnd.hp-jlyt', jnlp: 'application/x-java-jnlp-file', joda: 'application/vnd.joost.joda-archive', jpe: [ 'image/jpeg', 'image/pjpeg' ], jpeg: [ 'image/jpeg', 'image/pjpeg' ], jpg: [ 'image/jpeg', 'image/pjpeg' ], jpgv: 'video/jpeg', jpm: 'video/jpm', jps: 'image/x-jps', js: [ 'application/javascript', 'application/ecmascript', 'text/javascript', 'text/ecmascript', 'application/x-javascript' ], json: 'application/json', jut: 'image/jutvision', kar: [ 'audio/midi', 'music/x-karaoke' ], karbon: 'application/vnd.kde.karbon', kfo: 'application/vnd.kde.kformula', kia: 'application/vnd.kidspiration', kml: 'application/vnd.google-earth.kml+xml', kmz: 'application/vnd.google-earth.kmz', kne: 'application/vnd.kinar', kon: 'application/vnd.kde.kontour', kpr: 'application/vnd.kde.kpresenter', ksh: [ 'application/x-ksh', 'text/x-script.ksh' ], ksp: 'application/vnd.kde.kspread', ktx: 'image/ktx', ktz: 'application/vnd.kahootz', kwd: 'application/vnd.kde.kword', la: [ 'audio/nspaudio', 'audio/x-nspaudio' ], lam: 'audio/x-liveaudio', lasxml: 'application/vnd.las.las+xml', latex: 'application/x-latex', lbd: 'application/vnd.llamagraphics.life-balance.desktop', lbe: 'application/vnd.llamagraphics.life-balance.exchange+xml', les: 'application/vnd.hhe.lesson-player', lha: [ 'application/octet-stream', 'application/lha', 'application/x-lha' ], lhx: 'application/octet-stream', link66: 'application/vnd.route66.link66+xml', list: 'text/plain', lma: [ 'audio/nspaudio', 'audio/x-nspaudio' ], log: 'text/plain', lrm: 'application/vnd.ms-lrm', lsf: 'video/x-la-asf', lsp: [ 'application/x-lisp', 'text/x-script.lisp' ], lst: 'text/plain', lsx: [ 'video/x-la-asf', 'text/x-la-asf' ], ltf: 'application/vnd.frogans.ltf', ltx: 'application/x-latex', lvp: 'audio/vnd.lucent.voice', lwp: 'application/vnd.lotus-wordpro', lzh: [ 'application/octet-stream', 'application/x-lzh' ], lzx: [ 'application/lzx', 'application/octet-stream', 'application/x-lzx' ], m: [ 'text/plain', 'text/x-m' ], m13: 'application/x-msmediaview', m14: 'application/x-msmediaview', m1v: 'video/mpeg', m21: 'application/mp21', m2a: 'audio/mpeg', m2v: 'video/mpeg', m3u: [ 'audio/x-mpegurl', 'audio/x-mpequrl' ], m3u8: 'application/vnd.apple.mpegurl', m4v: 'video/x-m4v', ma: 'application/mathematica', mads: 'application/mads+xml', mag: 'application/vnd.ecowin.chart', man: 'application/x-troff-man', map: 'application/x-navimap', mar: 'text/plain', mathml: 'application/mathml+xml', mbd: 'application/mbedlet', mbk: 'application/vnd.mobius.mbk', mbox: 'application/mbox', mc$: 'application/x-magic-cap-package-1.0', mc1: 'application/vnd.medcalcdata', mcd: [ 'application/mcad', 'application/vnd.mcd', 'application/x-mathcad' ], mcf: [ 'image/vasa', 'text/mcf' ], mcp: 'application/netmc', mcurl: 'text/vnd.curl.mcurl', mdb: 'application/x-msaccess', mdi: 'image/vnd.ms-modi', me: 'application/x-troff-me', meta4: 'application/metalink4+xml', mets: 'application/mets+xml', mfm: 'application/vnd.mfmp', mgp: 'application/vnd.osgeo.mapguide.package', mgz: 'application/vnd.proteus.magazine', mht: 'message/rfc822', mhtml: 'message/rfc822', mid: [ 'audio/mid', 'audio/midi', 'music/crescendo', 'x-music/x-midi', 'audio/x-midi', 'application/x-midi', 'audio/x-mid' ], midi: [ 'audio/midi', 'music/crescendo', 'x-music/x-midi', 'audio/x-midi', 'application/x-midi', 'audio/x-mid' ], mif: [ 'application/vnd.mif', 'application/x-mif', 'application/x-frame' ], mime: [ 'message/rfc822', 'www/mime' ], mj2: 'video/mj2', mjf: 'audio/x-vnd.audioexplosion.mjuicemediafile', mjpg: 'video/x-motion-jpeg', mlp: 'application/vnd.dolby.mlp', mm: [ 'application/base64', 'application/x-meme' ], mmd: 'application/vnd.chipnuts.karaoke-mmd', mme: 'application/base64', mmf: 'application/vnd.smaf', mmr: 'image/vnd.fujixerox.edmics-mmr', mny: 'application/x-msmoney', mod: [ 'audio/mod', 'audio/x-mod' ], mods: 'application/mods+xml', moov: 'video/quicktime', mov: 'video/quicktime', movie: 'video/x-sgi-movie', mp2: [ 'video/mpeg', 'audio/mpeg', 'video/x-mpeg', 'audio/x-mpeg', 'video/x-mpeq2a' ], mp3: [ 'audio/mpeg', 'audio/mpeg3', 'video/mpeg', 'audio/x-mpeg-3', 'video/x-mpeg' ], mp4: [ 'video/mp4', 'application/mp4' ], mp4a: 'audio/mp4', mpa: [ 'video/mpeg', 'audio/mpeg' ], mpc: [ 'application/vnd.mophun.certificate', 'application/x-project' ], mpe: 'video/mpeg', mpeg: 'video/mpeg', mpg: [ 'video/mpeg', 'audio/mpeg' ], mpga: 'audio/mpeg', mpkg: 'application/vnd.apple.installer+xml', mpm: 'application/vnd.blueice.multipass', mpn: 'application/vnd.mophun.application', mpp: 'application/vnd.ms-project', mpt: 'application/x-project', mpv: 'application/x-project', mpv2: 'video/mpeg', mpx: 'application/x-project', mpy: 'application/vnd.ibm.minipay', mqy: 'application/vnd.mobius.mqy', mrc: 'application/marc', mrcx: 'application/marcxml+xml', ms: 'application/x-troff-ms', mscml: 'application/mediaservercontrol+xml', mseq: 'application/vnd.mseq', msf: 'application/vnd.epson.msf', msg: 'application/vnd.ms-outlook', msh: 'model/mesh', msl: 'application/vnd.mobius.msl', msty: 'application/vnd.muvee.style', mts: 'model/vnd.mts', mus: 'application/vnd.musician', musicxml: 'application/vnd.recordare.musicxml+xml', mv: 'video/x-sgi-movie', mvb: 'application/x-msmediaview', mwf: 'application/vnd.mfer', mxf: 'application/mxf', mxl: 'application/vnd.recordare.musicxml', mxml: 'application/xv+xml', mxs: 'application/vnd.triscape.mxs', mxu: 'video/vnd.mpegurl', my: 'audio/make', mzz: 'application/x-vnd.audioexplosion.mzz', 'n-gage': 'application/vnd.nokia.n-gage.symbian.install', n3: 'text/n3', nap: 'image/naplps', naplps: 'image/naplps', nbp: 'application/vnd.wolfram.player', nc: 'application/x-netcdf', ncm: 'application/vnd.nokia.configuration-message', ncx: 'application/x-dtbncx+xml', ngdat: 'application/vnd.nokia.n-gage.data', nif: 'image/x-niff', niff: 'image/x-niff', nix: 'application/x-mix-transfer', nlu: 'application/vnd.neurolanguage.nlu', nml: 'application/vnd.enliven', nnd: 'application/vnd.noblenet-directory', nns: 'application/vnd.noblenet-sealer', nnw: 'application/vnd.noblenet-web', npx: 'image/vnd.net-fpx', nsc: 'application/x-conference', nsf: 'application/vnd.lotus-notes', nvd: 'application/x-navidoc', nws: 'message/rfc822', o: 'application/octet-stream', oa2: 'application/vnd.fujitsu.oasys2', oa3: 'application/vnd.fujitsu.oasys3', oas: 'application/vnd.fujitsu.oasys', obd: 'application/x-msbinder', 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', ogv: 'video/ogg', ogx: 'application/ogg', omc: 'application/x-omc', omcd: 'application/x-omcdatamaker', omcr: 'application/x-omcregerator', onetoc: 'application/onenote', opf: 'application/oebps-package+xml', org: 'application/vnd.lotus-organizer', osf: 'application/vnd.yamaha.openscoreformat', osfpvg: 'application/vnd.yamaha.openscoreformat.osfpvg+xml', otc: 'application/vnd.oasis.opendocument.chart-template', otf: 'application/x-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', oxt: 'application/vnd.openofficeorg.extension', p: 'text/x-pascal', p10: [ 'application/pkcs10', 'application/x-pkcs10' ], p12: [ 'application/pkcs-12', 'application/x-pkcs12' ], p7a: 'application/x-pkcs7-signature', p7b: 'application/x-pkcs7-certificates', p7c: [ 'application/pkcs7-mime', 'application/x-pkcs7-mime' ], p7m: [ 'application/pkcs7-mime', 'application/x-pkcs7-mime' ], p7r: 'application/x-pkcs7-certreqresp', p7s: [ 'application/pkcs7-signature', 'application/x-pkcs7-signature' ], p8: 'application/pkcs8', par: 'text/plain-bas', part: 'application/pro_eng', pas: 'text/pascal', paw: 'application/vnd.pawaafile', pbd: 'application/vnd.powerbuilder6', pbm: 'image/x-portable-bitmap', pcf: 'application/x-font-pcf', pcl: [ 'application/vnd.hp-pcl', 'application/x-pcl' ], pclxl: 'application/vnd.hp-pclxl', pct: 'image/x-pict', pcurl: 'application/vnd.curl.pcurl', pcx: 'image/x-pcx', pdb: [ 'application/vnd.palm', 'chemical/x-pdb' ], pdf: 'application/pdf', pfa: 'application/x-font-type1', pfr: 'application/font-tdpfr', pfunk: [ 'audio/make', 'audio/make.my.funk' ], pfx: 'application/x-pkcs12', pgm: [ 'image/x-portable-graymap', 'image/x-portable-greymap' ], pgn: 'application/x-chess-pgn', pgp: 'application/pgp-signature', pic: [ 'image/pict', 'image/x-pict' ], pict: 'image/pict', pkg: 'application/x-newton-compatible-pkg', pki: 'application/pkixcmp', pkipath: 'application/pkix-pkipath', pko: [ 'application/ynd.ms-pkipko', 'application/vnd.ms-pki.pko' ], pl: [ 'text/plain', 'text/x-script.perl' ], plb: 'application/vnd.3gpp.pic-bw-large', plc: 'application/vnd.mobius.plc', plf: 'application/vnd.pocketlearn', pls: 'application/pls+xml', plx: 'application/x-pixclscript', pm: [ 'text/x-script.perl-module', 'image/x-xpixmap' ], pm4: 'application/x-pagemaker', pm5: 'application/x-pagemaker', pma: 'application/x-perfmon', pmc: 'application/x-perfmon', pml: [ 'application/vnd.ctc-posml', 'application/x-perfmon' ], pmr: 'application/x-perfmon', pmw: 'application/x-perfmon', png: 'image/png', pnm: [ 'application/x-portable-anymap', 'image/x-portable-anymap' ], portpkg: 'application/vnd.macports.portpkg', pot: [ 'application/vnd.ms-powerpoint', 'application/mspowerpoint' ], potm: 'application/vnd.ms-powerpoint.template.macroenabled.12', potx: 'application/vnd.openxmlformats-officedocument.presentationml.template', pov: 'model/x-pov', ppa: 'application/vnd.ms-powerpoint', ppam: 'application/vnd.ms-powerpoint.addin.macroenabled.12', ppd: 'application/vnd.cups-ppd', ppm: 'image/x-portable-pixmap', pps: [ 'application/vnd.ms-powerpoint', 'application/mspowerpoint' ], ppsm: 'application/vnd.ms-powerpoint.slideshow.macroenabled.12', ppsx: 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', ppt: [ 'application/vnd.ms-powerpoint', 'application/mspowerpoint', 'application/powerpoint', 'application/x-mspowerpoint' ], pptm: 'application/vnd.ms-powerpoint.presentation.macroenabled.12', pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation', ppz: 'application/mspowerpoint', prc: 'application/x-mobipocket-ebook', pre: [ 'application/vnd.lotus-freelance', 'application/x-freelance' ], prf: 'application/pics-rules', prt: 'application/pro_eng', ps: 'application/postscript', psb: 'application/vnd.3gpp.pic-bw-small', psd: [ 'application/octet-stream', 'image/vnd.adobe.photoshop' ], psf: 'application/x-font-linux-psf', pskcxml: 'application/pskc+xml', ptid: 'application/vnd.pvi.ptid1', pub: 'application/x-mspublisher', pvb: 'application/vnd.3gpp.pic-bw-var', pvu: 'paleovu/x-pv', pwn: 'application/vnd.3m.post-it-notes', pwz: 'application/vnd.ms-powerpoint', py: 'text/x-script.phyton', pya: 'audio/vnd.ms-playready.media.pya', pyc: 'applicaiton/x-bytecode.python', pyv: 'video/vnd.ms-playready.media.pyv', qam: 'application/vnd.epson.quickanime', qbo: 'application/vnd.intu.qbo', qcp: 'audio/vnd.qcelp', qd3: 'x-world/x-3dmf', qd3d: 'x-world/x-3dmf', qfx: 'application/vnd.intu.qfx', qif: 'image/x-quicktime', qps: 'application/vnd.publishare-delta-tree', qt: 'video/quicktime', qtc: 'video/x-qtc', qti: 'image/x-quicktime', qtif: 'image/x-quicktime', qxd: 'application/vnd.quark.quarkxpress', ra: [ 'audio/x-realaudio', 'audio/x-pn-realaudio', 'audio/x-pn-realaudio-plugin' ], ram: 'audio/x-pn-realaudio', rar: 'application/x-rar-compressed', ras: [ 'image/cmu-raster', 'application/x-cmu-raster', 'image/x-cmu-raster' ], rast: 'image/cmu-raster', rcprofile: 'application/vnd.ipunplugged.rcprofile', rdf: 'application/rdf+xml', rdz: 'application/vnd.data-vision.rdz', rep: 'application/vnd.businessobjects', res: 'application/x-dtbresource+xml', rexx: 'text/x-script.rexx', rf: 'image/vnd.rn-realflash', rgb: 'image/x-rgb', rif: 'application/reginfo+xml', rip: 'audio/vnd.rip', 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/mid', rmm: 'audio/x-pn-realaudio', rmp: [ 'audio/x-pn-realaudio-plugin', 'audio/x-pn-realaudio' ], rms: 'application/vnd.jcp.javame.midlet-rms', rnc: 'application/relax-ng-compact-syntax', rng: [ 'application/ringing-tones', 'application/vnd.nokia.ringing-tone' ], rnx: 'application/vnd.rn-realplayer', roff: 'application/x-troff', rp: 'image/vnd.rn-realpix', rp9: 'application/vnd.cloanto.rp9', rpm: 'audio/x-pn-realaudio-plugin', rpss: 'application/vnd.nokia.radio-presets', rpst: 'application/vnd.nokia.radio-preset', rq: 'application/sparql-query', rs: 'application/rls-services+xml', rsd: 'application/rsd+xml', rt: [ 'text/richtext', 'text/vnd.rn-realtext' ], rtf: [ 'application/rtf', 'text/richtext', 'application/x-rtf' ], rtx: [ 'text/richtext', 'application/rtf' ], rv: 'video/vnd.rn-realvideo', s: 'text/x-asm', s3m: 'audio/s3m', saf: 'application/vnd.yamaha.smaf-audio', saveme: 'application/octet-stream', sbk: 'application/x-tbook', sbml: 'application/sbml+xml', sc: 'application/vnd.ibm.secure-container', scd: 'application/x-msschedule', scm: [ 'application/vnd.lotus-screencam', 'video/x-scm', 'text/x-script.guile', 'application/x-lotusscreencam', 'text/x-script.scheme' ], scq: 'application/scvp-cv-request', scs: 'application/scvp-cv-response', sct: 'text/scriptlet', scurl: 'text/vnd.curl.scurl', sda: 'application/vnd.stardivision.draw', sdc: 'application/vnd.stardivision.calc', sdd: 'application/vnd.stardivision.impress', sdkm: 'application/vnd.solent.sdkm+xml', sdml: 'text/plain', sdp: [ 'application/sdp', 'application/x-sdp' ], sdr: 'application/sounder', sdw: 'application/vnd.stardivision.writer', sea: [ 'application/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', set: 'application/set', setpay: 'application/set-payment-initiation', setreg: 'application/set-registration-initiation', 'sfd-hdstx': 'application/vnd.hydrostatix.sof-data', sfs: 'application/vnd.spotfire.sfs', sgl: 'application/vnd.stardivision.writer-global', sgm: [ 'text/sgml', 'text/x-sgml' ], sgml: [ 'text/sgml', 'text/x-sgml' ], sh: [ 'application/x-shar', 'application/x-bsh', 'application/x-sh', 'text/x-script.sh' ], shar: [ 'application/x-bsh', 'application/x-shar' ], shf: 'application/shf+xml', shtml: [ 'text/html', 'text/x-server-parsed-html' ], sid: 'audio/x-psid', sis: 'application/vnd.symbian.install', sit: [ 'application/x-stuffit', 'application/x-sit' ], sitx: 'application/x-stuffitx', skd: 'application/x-koan', skm: 'application/x-koan', skp: [ 'application/vnd.koan', 'application/x-koan' ], skt: 'application/x-koan', sl: 'application/x-seelogo', sldm: 'application/vnd.ms-powerpoint.slide.macroenabled.12', sldx: 'application/vnd.openxmlformats-officedocument.presentationml.slide', slt: 'application/vnd.epson.salt', sm: 'application/vnd.stepmania.stepchart', smf: 'application/vnd.stardivision.math', smi: [ 'application/smil', 'application/smil+xml' ], smil: 'application/smil', snd: [ 'audio/basic', 'audio/x-adpcm' ], snf: 'application/x-font-snf', sol: 'application/solids', spc: [ 'text/x-speech', 'application/x-pkcs7-certificates' ], spf: 'application/vnd.yamaha.smaf-phrase', spl: [ 'application/futuresplash', 'application/x-futuresplash' ], spot: 'text/vnd.in3d.spot', spp: 'application/scvp-vp-response', spq: 'application/scvp-vp-request', spr: 'application/x-sprite', sprite: 'application/x-sprite', src: 'application/x-wais-source', sru: 'application/sru+xml', srx: 'application/sparql-results+xml', sse: 'application/vnd.kodak-descriptor', ssf: 'application/vnd.epson.ssf', ssi: 'text/x-server-parsed-html', ssm: 'application/streamingmedia', ssml: 'application/ssml+xml', sst: [ 'application/vnd.ms-pkicertstore', 'application/vnd.ms-pki.certstore' ], st: 'application/vnd.sailingtracker.track', stc: 'application/vnd.sun.xml.calc.template', std: 'application/vnd.sun.xml.draw.template', step: 'application/step', stf: 'application/vnd.wt.stf', sti: 'application/vnd.sun.xml.impress.template', stk: 'application/hyperstudio', stl: [ 'application/vnd.ms-pkistl', 'application/sla', 'application/vnd.ms-pki.stl', 'application/x-navistyle' ], stm: 'text/html', stp: 'application/step', str: 'application/vnd.pg.format', stw: 'application/vnd.sun.xml.writer.template', sub: 'image/vnd.dvb.subtitle', sus: 'application/vnd.sus-calendar', sv4cpio: 'application/x-sv4cpio', sv4crc: 'application/x-sv4crc', svc: 'application/vnd.dvb.service', svd: 'application/vnd.svd', svf: [ 'image/vnd.dwg', 'image/x-dwg' ], svg: 'image/svg+xml', svr: [ 'x-world/x-svr', 'application/x-world' ], swf: 'application/x-shockwave-flash', swi: 'application/vnd.aristanetworks.swi', 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', t: [ 'text/troff', 'application/x-troff' ], talk: 'text/x-speech', tao: 'application/vnd.tao.intent-module-archive', tar: 'application/x-tar', tbk: [ 'application/toolbook', 'application/x-tbook' ], tcap: 'application/vnd.3gpp2.tcap', tcl: [ 'text/x-script.tcl', 'application/x-tcl' ], tcsh: 'text/x-script.tcsh', teacher: 'application/vnd.smart.teacher', tei: 'application/tei+xml', tex: 'application/x-tex', texi: 'application/x-texinfo', texinfo: 'application/x-texinfo', text: [ 'application/plain', 'text/plain' ], tfi: 'application/thraud+xml', tfm: 'application/x-tex-tfm', tgz: [ 'application/gnutar', 'application/x-compressed' ], thmx: 'application/vnd.ms-officetheme', tif: [ 'image/tiff', 'image/x-tiff' ], tiff: [ 'image/tiff', 'image/x-tiff' ], tmo: 'application/vnd.tmobile-livetv', torrent: 'application/x-bittorrent', tpl: 'application/vnd.groove-tool-template', tpt: 'application/vnd.trid.tpt', tr: 'application/x-troff', tra: 'application/vnd.trueapp', trm: 'application/x-msterminal', tsd: 'application/timestamped-data', tsi: 'audio/tsp-audio', tsp: [ 'application/dsptype', 'audio/tsplayer' ], tsv: 'text/tab-separated-values', ttf: 'application/x-font-ttf', ttl: 'text/turtle', turbot: 'image/florian', twd: 'application/vnd.simtech-mindmapper', txd: 'application/vnd.genomatix.tuxedo', txf: 'application/vnd.mobius.txf', txt: 'text/plain', ufd: 'application/vnd.ufdl', uil: 'text/x-uil', uls: 'text/iuls', umj: 'application/vnd.umajin', uni: 'text/uri-list', unis: 'text/uri-list', unityweb: 'application/vnd.unity', unv: 'application/i-deas', uoml: 'application/vnd.uoml+xml', uri: 'text/uri-list', uris: 'text/uri-list', ustar: [ 'application/x-ustar', 'multipart/x-ustar' ], utz: 'application/vnd.uiq.theme', uu: [ 'application/octet-stream', 'text/x-uuencode' ], uue: 'text/x-uuencode', uva: 'audio/vnd.dece.audio', 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', uvu: 'video/vnd.uvvu.mp4', uvv: 'video/vnd.dece.video', vcd: 'application/x-cdlink', vcf: 'text/x-vcard', vcg: 'application/vnd.groove-vcard', vcs: 'text/x-vcalendar', vcx: 'application/vnd.vcx', vda: 'application/vda', vdo: 'video/vdo', vew: 'application/groupwise', vis: 'application/vnd.visionary', viv: [ 'video/vivo', 'video/vnd.vivo' ], vivo: [ 'video/vivo', 'video/vnd.vivo' ], vmd: 'application/vocaltec-media-desc', vmf: 'application/vocaltec-media-file', voc: [ 'audio/voc', 'audio/x-voc' ], vos: 'video/vosaic', vox: 'audio/voxware', vqe: 'audio/x-twinvq-plugin', vqf: 'audio/x-twinvq', vql: 'audio/x-twinvq-plugin', vrml: [ 'model/vrml', 'x-world/x-vrml', 'application/x-vrml' ], vrt: 'x-world/x-vrt', vsd: [ 'application/vnd.visio', 'application/x-visio' ], vsf: 'application/vnd.vsf', vst: 'application/x-visio', vsw: 'application/x-visio', vtu: 'model/vnd.vtu', vxml: 'application/voicexml+xml', w60: 'application/wordperfect6.0', w61: 'application/wordperfect6.1', w6w: 'application/msword', wad: 'application/x-doom', wav: [ 'audio/wav', 'audio/x-wav' ], wax: 'audio/x-ms-wax', wb1: 'application/x-qpro', 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', web: 'application/vnd.xara', weba: 'audio/webm', webm: 'video/webm', webp: 'image/webp', wg: 'application/vnd.pmi.widget', wgt: 'application/widget', wiz: 'application/msword', wk1: 'application/x-123', wks: 'application/vnd.ms-works', wm: 'video/x-ms-wm', wma: 'audio/x-ms-wma', wmd: 'application/x-ms-wmd', wmf: [ 'windows/metafile', 'application/x-msmetafile' ], 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: 'video/x-ms-wmx', wmz: 'application/x-ms-wmz', woff: 'application/x-font-woff', word: 'application/msword', wp: 'application/wordperfect', wp5: [ 'application/wordperfect', 'application/wordperfect6.0' ], wp6: 'application/wordperfect', wpd: [ 'application/wordperfect', 'application/vnd.wordperfect', 'application/x-wpwin' ], wpl: 'application/vnd.ms-wpl', wps: 'application/vnd.ms-works', wq1: 'application/x-lotus', wqd: 'application/vnd.wqd', wri: [ 'application/mswrite', 'application/x-wri', 'application/x-mswrite' ], wrl: [ 'model/vrml', 'x-world/x-vrml', 'application/x-world' ], wrz: [ 'model/vrml', 'x-world/x-vrml' ], wsc: 'text/scriplet', wsdl: 'application/wsdl+xml', wspolicy: 'application/wspolicy+xml', wsrc: 'application/x-wais-source', wtb: 'application/vnd.webturbo', wtk: 'application/x-wintalk', wvx: 'video/x-ms-wvx', 'x-png': 'image/png', x3d: 'application/vnd.hzn-3d-crossword', xaf: 'x-world/x-vrml', xap: 'application/x-silverlight-app', xar: 'application/vnd.xara', xbap: 'application/x-ms-xbap', xbd: 'application/vnd.fujixerox.docuworks.binder', xbm: [ 'image/xbm', 'image/x-xbm', 'image/x-xbitmap' ], xdf: 'application/xcap-diff+xml', xdm: 'application/vnd.syncml.dm+xml', xdp: 'application/vnd.adobe.xdp+xml', xdr: 'video/x-amt-demorun', xdssc: 'application/dssc+xml', xdw: 'application/vnd.fujixerox.docuworks', xenc: 'application/xenc+xml', xer: 'application/patch-ops-error+xml', xfdf: 'application/vnd.adobe.xfdf', xfdl: 'application/vnd.xfdl', xgz: 'xgl/drawing', xhtml: 'application/xhtml+xml', xif: 'image/vnd.xiff', xl: 'application/excel', xla: [ 'application/vnd.ms-excel', 'application/excel', 'application/x-msexcel', 'application/x-excel' ], xlam: 'application/vnd.ms-excel.addin.macroenabled.12', xlb: [ 'application/excel', 'application/vnd.ms-excel', 'application/x-excel' ], xlc: [ 'application/vnd.ms-excel', 'application/excel', 'application/x-excel' ], xld: [ 'application/excel', 'application/x-excel' ], xlk: [ 'application/excel', 'application/x-excel' ], xll: [ 'application/excel', 'application/vnd.ms-excel', 'application/x-excel' ], xlm: [ 'application/vnd.ms-excel', 'application/excel', 'application/x-excel' ], xls: [ 'application/vnd.ms-excel', 'application/excel', 'application/x-msexcel', 'application/x-excel' ], 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/vnd.ms-excel', 'application/excel', 'application/x-excel' ], xltm: 'application/vnd.ms-excel.template.macroenabled.12', xltx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', xlv: [ 'application/excel', 'application/x-excel' ], xlw: [ 'application/vnd.ms-excel', 'application/excel', 'application/x-msexcel', 'application/x-excel' ], xm: 'audio/xm', xml: [ 'application/xml', 'text/xml', 'application/atom+xml', 'application/rss+xml' ], xmz: 'xgl/movie', xo: 'application/vnd.olpc-sugar', xof: 'x-world/x-vrml', xop: 'application/xop+xml', xpi: 'application/x-xpinstall', xpix: 'application/x-vnd.ls-xpix', xpm: [ 'image/xpm', 'image/x-xpixmap' ], xpr: 'application/vnd.is-xpr', xps: 'application/vnd.ms-xpsdocument', xpw: 'application/vnd.intercon.formnet', xslt: 'application/xslt+xml', xsm: 'application/vnd.syncml+xml', xspf: 'application/xspf+xml', xsr: 'video/x-amt-showrun', xul: 'application/vnd.mozilla.xul+xml', xwd: [ 'image/x-xwd', 'image/x-xwindowdump' ], xyz: [ 'chemical/x-xyz', 'chemical/x-pdb' ], yang: 'application/yang', yin: 'application/yin+xml', z: [ 'application/x-compressed', 'application/x-compress' ], zaz: 'application/vnd.zzazz.deck+xml', zip: [ 'application/zip', 'multipart/x-zip', 'application/x-zip-compressed', 'application/x-compressed' ], zir: 'application/vnd.zul', zmm: 'application/vnd.handheld-entertainment+xml', zoo: 'application/octet-stream', zsh: 'text/x-script.zsh' } }; }), "[project]/node_modules/libmime/lib/libmime.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { "use strict"; /* eslint no-control-regex: 0, no-div-regex: 0, quotes: 0 */ const { Buffer } = __turbopack_context__.r("[externals]/node:buffer [external] (node:buffer, cjs)"); const libcharset = __turbopack_context__.r("[project]/node_modules/libmime/lib/charset.js [app-route] (ecmascript)"); const libbase64 = __turbopack_context__.r("[project]/node_modules/libbase64/lib/libbase64.js [app-route] (ecmascript)"); const libqp = __turbopack_context__.r("[project]/node_modules/libqp/lib/libqp.js [app-route] (ecmascript)"); const mimetypes = __turbopack_context__.r("[project]/node_modules/libmime/lib/mimetypes.js [app-route] (ecmascript)"); const STAGE_KEY = 0x1001; const STAGE_VALUE = 0x1002; class Libmime { constructor(config){ this.config = config || {}; } /** * Checks if a value is plaintext string (uses only printable 7bit chars) * * @param {String} value String to be tested * @returns {Boolean} true if it is a plaintext string */ isPlainText(value) { if (typeof value !== 'string' || /[\x00-\x08\x0b\x0c\x0e-\x1f\u0080-\uFFFF]/.test(value)) { return false; } else { return true; } } /** * Checks if a multi line string containes lines longer than the selected value. * * Useful when detecting if a mail message needs any processing at all – * if only plaintext characters are used and lines are short, then there is * no need to encode the values in any way. If the value is plaintext but has * longer lines then allowed, then use format=flowed * * @param {String} str String to be tested * @param {Number} lineLength Max line length to check for * @returns {Boolean} Returns true if there is at least one line longer than lineLength chars */ hasLongerLines(str, lineLength) { return new RegExp('^.{' + (lineLength + 1) + ',}', 'm').test(str); } /** * Decodes a string from a format=flowed soft wrapping. * * @param {String} str Plaintext string with format=flowed to decode * @param {Boolean} [delSp] If true, delete leading spaces (delsp=yes) * @return {String} Mime decoded string */ decodeFlowed(str, delSp) { str = (str || '').toString(); let lines = str.split(/\r?\n/); let result = [], buffer = null; // remove soft linebreaks // soft linebreaks are added after space symbols for(let i = 0; i < lines.length; i++){ let line = lines[i]; let isSoftBreak = buffer !== null && / $/.test(buffer) && !/(^|\n)-- $/.test(buffer); if (isSoftBreak) { if (delSp) { // delsp adds space to text to be able to fold it // these spaces can be removed once the text is unfolded buffer = buffer.slice(0, -1) + line; } else { buffer += line; } } else { if (buffer !== null) { result.push(buffer); } buffer = line; } } if (buffer) { result.push(buffer); } // remove whitespace stuffing // http://tools.ietf.org/html/rfc3676#section-4.4 return result.join('\n').replace(/^ /gm, ''); } /** * Adds soft line breaks to content marked with format=flowed to * ensure that no line in the message is never longer than lineLength * * @param {String} str Plaintext string that requires wrapping * @param {Number} [lineLength=76] Maximum length of a line * @return {String} String with forced line breaks */ encodeFlowed(str, lineLength) { lineLength = lineLength || 76; let flowed = []; str.split(/\r?\n/).forEach((line)=>{ flowed.push(this.foldLines(line// space stuffing http://tools.ietf.org/html/rfc3676#section-4.2 .replace(/^( |From|>)/gim, ' $1'), lineLength, true)); }); return flowed.join('\r\n'); } /** * Encodes a string or an Buffer to an UTF-8 MIME Word (rfc2047) * * @param {String|Buffer} data String to be encoded * @param {String} mimeWordEncoding='Q' Encoding for the mime word, either Q or B * @param {Number} [maxLength=0] If set, split mime words into several chunks if needed * @return {String} Single or several mime words joined together */ encodeWord(data, mimeWordEncoding, maxLength) { mimeWordEncoding = (mimeWordEncoding || 'Q').toString().toUpperCase().trim().charAt(0); maxLength = maxLength || 0; let encodedStr; let toCharset = 'UTF-8'; if (maxLength && maxLength > 7 + toCharset.length) { maxLength -= 7 + toCharset.length; } if (mimeWordEncoding === 'Q') { // https://tools.ietf.org/html/rfc2047#section-5 rule (3) encodedStr = libqp.encode(data).replace(/[^a-z0-9!*+\-/=]/gi, (chr)=>{ let ord = chr.charCodeAt(0).toString(16).toUpperCase(); if (chr === ' ') { return '_'; } else { return '=' + (ord.length === 1 ? '0' + ord : ord); } }); } else if (mimeWordEncoding === 'B') { encodedStr = typeof data === 'string' ? data : libbase64.encode(data); maxLength = maxLength ? Math.max(3, (maxLength - maxLength % 4) / 4 * 3) : 0; } if (maxLength && (mimeWordEncoding !== 'B' ? encodedStr : libbase64.encode(data)).length > maxLength) { if (mimeWordEncoding === 'Q') { encodedStr = this.splitMimeEncodedString(encodedStr, maxLength).join('?= =?' + toCharset + '?' + mimeWordEncoding + '?'); } else { // RFC2047 6.3 (2) states that encoded-word must include an integral number of characters, so no chopping unicode sequences let parts = []; let lpart = ''; for(let i = 0, len = encodedStr.length; i < len; i++){ let chr = encodedStr.charAt(i); // check if we can add this character to the existing string // without breaking byte length limit if (/[\ud83c\ud83d\ud83e]/.test(chr) && i < len - 1) { // composite emoji byte, so add the next byte as well chr += encodedStr.charAt(++i); } if (Buffer.byteLength(lpart + chr) <= maxLength || i === 0) { lpart += chr; } else { // we hit the length limit, so push the existing string and start over parts.push(libbase64.encode(lpart)); lpart = chr; } } if (lpart) { parts.push(libbase64.encode(lpart)); } if (parts.length > 1) { encodedStr = parts.join('?= =?' + toCharset + '?' + mimeWordEncoding + '?'); } else { encodedStr = parts.join(''); } } } else if (mimeWordEncoding === 'B') { encodedStr = libbase64.encode(data); } return '=?' + toCharset + '?' + mimeWordEncoding + '?' + encodedStr + (encodedStr.substr(-2) === '?=' ? '' : '?='); } /** * Decodes the inner payload of a single mime encoded-word into a unicode string. * Expects the three components of `=?charset?encoding?text?=` already separated. * * @param {String} charset Charset name from the encoded-word (may include an RFC 2231 language tag, which is ignored) * @param {String} encoding Encoding indicator, either 'Q' or 'B' (case insensitive) * @param {String} str Encoded payload between the second `?` and the trailing `?=` * @return {String} Decoded unicode string */ decodeWord(charset, encoding, str) { // RFC2231 added language tag to the encoding // see: https://tools.ietf.org/html/rfc2231#section-5 // this implementation silently ignores this tag let splitPos = charset.indexOf('*'); if (splitPos >= 0) { charset = charset.substr(0, splitPos); } charset = libcharset.normalizeCharset(charset); encoding = encoding.toUpperCase(); if (encoding === 'Q') { str = str// remove spaces between = and hex char, this might indicate invalidly applied line splitting .replace(/=\s+([0-9a-fA-F])/g, '=$1')// convert all underscores to spaces .replace(/[_\s]/g, ' '); let buf = Buffer.from(str); let bytes = []; for(let i = 0, len = buf.length; i < len; i++){ let c = buf[i]; if (i <= len - 2 && c === 0x3d /* = */ ) { let c1 = this.getHex(buf[i + 1]); let c2 = this.getHex(buf[i + 2]); if (c1 && c2) { let c = parseInt(c1 + c2, 16); bytes.push(c); i += 2; continue; } } bytes.push(c); } str = Buffer.from(bytes); } else if (encoding === 'B') { str = Buffer.concat(str.split('=').filter((s)=>s !== '') // filter empty string .map((str)=>Buffer.from(str, 'base64'))); } else { // keep as is, convert Buffer to unicode string, assume utf8 str = Buffer.from(str); } return libcharset.decode(str, charset); } /** * Finds word sequences with non ascii text and converts these to mime words * * @param {String|Buffer} data String to be encoded * @param {String} mimeWordEncoding='Q' Encoding for the mime word, either Q or B * @param {Number} [maxLength=0] If set, split mime words into several chunks if needed * @param {String} [fromCharset='UTF-8'] Source character set * @return {String} String with possible mime words */ encodeWords(data, mimeWordEncoding, maxLength, fromCharset) { if (!fromCharset && typeof maxLength === 'string' && !maxLength.match(/^[0-9]+$/)) { fromCharset = maxLength; maxLength = undefined; } maxLength = maxLength || 0; let decodedValue = libcharset.decode(libcharset.convert(data || '', fromCharset)); let encodedValue; let firstMatch = decodedValue.match(/(?:^|\s)([^\s]*[\u0080-\uFFFF])/); if (!firstMatch) { return decodedValue; } let lastMatch = decodedValue.match(/([\u0080-\uFFFF][^\s]*)[^\u0080-\uFFFF]*$/); if (!lastMatch) { // should not happen return decodedValue; } let startIndex = firstMatch.index + (firstMatch[0].match(/[^\s]/) || { index: 0 }).index; let endIndex = lastMatch.index + (lastMatch[1] || '').length; encodedValue = (startIndex ? decodedValue.substr(0, startIndex) : '') + this.encodeWord(decodedValue.substring(startIndex, endIndex), mimeWordEncoding || 'Q', maxLength) + (endIndex < decodedValue.length ? decodedValue.substr(endIndex) : ''); return encodedValue; } /** * Decode a string that might include one or several mime words * * @param {String} str String including some mime words that will be decoded * @return {String} Decoded unicode string */ decodeWords(str) { return (str || '').toString()// find base64 words that can be joined .replace(/(=\?([^?]+)\?[Bb]\?[^?]*\?=)\s*(?==\?([^?]+)\?[Bb]\?[^?]*\?=)/g, (match, left, chLeft, chRight)=>{ // only mark b64 chunks to be joined if charsets match if (libcharset.normalizeCharset(chLeft || '') === libcharset.normalizeCharset(chRight || '')) { // set a joiner marker return left + '__\x00JOIN\x00__'; } return match; })// find QP words that can be joined .replace(/(=\?([^?]+)\?[Qq]\?[^?]*\?=)\s*(?==\?([^?]+)\?[Qq]\?[^?]*\?=)/g, (match, left, chLeft, chRight)=>{ // only mark QP chunks to be joined if charsets match if (libcharset.normalizeCharset(chLeft || '') === libcharset.normalizeCharset(chRight || '')) { // set a joiner marker return left + '__\x00JOIN\x00__'; } return match; })// join base64 encoded words .replace(/(\?=)?__\x00JOIN\x00__(=\?([^?]+)\?[QqBb]\?)?/g, '')// remove spaces between mime encoded words .replace(/(=\?[^?]+\?[QqBb]\?[^?]*\?=)\s+(?==\?[^?]+\?[QqBb]\?[^?]*\?=)/g, '$1')// decode words .replace(/=\?([\w_\-*]+)\?([QqBb])\?([^?]*)\?=/g, (m, charset, encoding, text)=>this.decodeWord(charset, encoding, text)); } getHex(c) { if (c >= 0x30 /* 0 */ && c <= 0x39 || c >= 0x61 /* a */ && c <= 0x66 || c >= 0x41 /* A */ && c <= 0x46) { return String.fromCharCode(c); } return false; } /** * Splits a string by : * The result is not mime word decoded, you need to do your own decoding based * on the rules for the specific header key * * @param {String} headerLine Single header line, might include linebreaks as well if folded * @return {Object} An object of {key, value} */ decodeHeader(headerLine) { let line = (headerLine || '').toString().replace(/(?:\r?\n|\r)[ \t]*/g, ' ').trim(), match = line.match(/^\s*([^:]+):(.*)$/), key = (match && match[1] || '').trim().toLowerCase(), value = (match && match[2] || '').trim(); return { key, value }; } /** * Parses a block of header lines. Does not decode mime words as every * header might have its own rules (eg. formatted email addresses and such) * * @param {String} headers Headers string * @return {Object} An object of headers, where header keys are object keys. NB! Several values with the same key make up an Array */ decodeHeaders(headers) { let lines = headers.split(/\r?\n|\r/), headersObj = {}, header, i, len; for(i = lines.length - 1; i >= 0; i--){ if (i && lines[i].match(/^\s/)) { lines[i - 1] += '\r\n' + lines[i]; lines.splice(i, 1); } } for(i = 0, len = lines.length; i < len; i++){ header = this.decodeHeader(lines[i]); if (!headersObj[header.key]) { headersObj[header.key] = [ header.value ]; } else { headersObj[header.key].push(header.value); } } return headersObj; } /** * Joins parsed header value together as 'value; param1=value1; param2=value2' * PS: We are following RFC 822 for the list of special characters that we need to keep in quotes. * Refer: https://www.w3.org/Protocols/rfc1341/4_Content-Type.html * @param {Object} structured Parsed header value * @return {String} joined header value */ buildHeaderValue(structured) { let paramsArray = []; Object.keys(structured.params || {}).forEach((param)=>{ // filename might include unicode characters so it is a special case let value = structured.params[param]; if (!this.isPlainText(value) || value.length >= 75) { this.buildHeaderParam(param, value, 50).forEach((encodedParam)=>{ if (!/[\s"\\;:/=(),<>@[\]?]|^[-']|'$/.test(encodedParam.value) || encodedParam.key.substr(-1) === '*') { paramsArray.push(encodedParam.key + '=' + encodedParam.value); } else { paramsArray.push(encodedParam.key + '=' + JSON.stringify(encodedParam.value)); } }); } else if (/[\s'"\\;:/=(),<>@[\]?]|^-/.test(value)) { paramsArray.push(param + '=' + JSON.stringify(value)); } else { paramsArray.push(param + '=' + value); } }); return structured.value + (paramsArray.length ? '; ' + paramsArray.join('; ') : ''); } /** * Parses a header value with key=value arguments into a structured * object. * * parseHeaderValue('content-type: text/plain; CHARSET='UTF-8'') -> * { * 'value': 'text/plain', * 'params': { * 'charset': 'UTF-8' * } * } * * @param {String} str Header value * @return {Object} Header value as a parsed structure */ parseHeaderValue(str) { let response = { value: false, params: {} }; let key = false; let value = ''; let stage = STAGE_VALUE; let quote = false; let escaped = false; let chr; for(let i = 0, len = str.length; i < len; i++){ chr = str.charAt(i); switch(stage){ case STAGE_KEY: if (chr === '=') { key = value.trim().toLowerCase(); stage = STAGE_VALUE; value = ''; break; } value += chr; break; case STAGE_VALUE: if (escaped) { value += chr; } else if (chr === '\\') { escaped = true; continue; } else if (quote && chr === quote) { quote = false; } else if (!quote && chr === '"') { quote = chr; } else if (!quote && chr === ';') { if (key === false) { response.value = value.trim(); } else { response.params[key] = value.trim(); } stage = STAGE_KEY; value = ''; } else { value += chr; } escaped = false; break; } } // finalize remainder value = value.trim(); if (stage === STAGE_VALUE) { if (key === false) { // default value response.value = value; } else { // subkey value response.params[key] = value; } } else if (value) { // treat as key without value, see emptykey: // Header-Key: somevalue; key=value; emptykey response.params[value.toLowerCase()] = ''; } // handle parameter value continuations // https://tools.ietf.org/html/rfc2231#section-3 // preprocess values Object.keys(response.params).forEach((key)=>{ let actualKey; let nr; let value; let match = key.match(/\*((\d+)\*?)?$/); if (!match) { // nothing to do here, does not seem like a continuation param return; } actualKey = key.substr(0, match.index).toLowerCase(); nr = Number(match[2]) || 0; if (!response.params[actualKey] || typeof response.params[actualKey] !== 'object') { response.params[actualKey] = { charset: false, values: [] }; } value = response.params[key]; if (nr === 0 && match[0].charAt(match[0].length - 1) === '*' && (match = value.match(/^([^']*)'[^']*'(.*)$/))) { response.params[actualKey].charset = match[1] || 'utf-8'; value = match[2]; } response.params[actualKey].values.push({ nr, value }); // remove the old reference delete response.params[key]; }); // concatenate split rfc2231 strings and convert encoded strings to mime encoded words Object.keys(response.params).forEach((key)=>{ let value; if (response.params[key] && Array.isArray(response.params[key].values)) { value = response.params[key].values.sort((a, b)=>a.nr - b.nr).map((val)=>val && val.value || '').join(''); if (response.params[key].charset) { // convert "%AB" to "=?charset?Q?=AB?=" and then to unicode response.params[key] = this.decodeWords('=?' + response.params[key].charset + '?Q?' + value// fix invalidly encoded chars .replace(/[=?_\s]/g, (s)=>{ let c = s.charCodeAt(0).toString(16); if (s === ' ') { return '_'; } else { return '%' + (c.length < 2 ? '0' : '') + c; } })// change from urlencoding to percent encoding .replace(/%/g, '=') + '?='); } else { response.params[key] = this.decodeWords(value); } } }); return response; } /** * Encodes a string or an Buffer to an UTF-8 Parameter Value Continuation encoding (rfc2231) * Useful for splitting long parameter values. * * For example * title="unicode string" * becomes * title*0*=utf-8''unicode * title*1*=%20string * * @param {String} key Parameter name (eg. 'filename') * @param {String|Buffer} data String to be encoded * @param {Number} [maxLength=50] Max length for generated chunks * @param {String} [fromCharset='UTF-8'] Source character set * @return {Array} A list of encoded keys and headers */ buildHeaderParam(key, data, maxLength, fromCharset) { let list = []; let encodedStr = typeof data === 'string' ? data : this.decode(data, fromCharset); let encodedStrArr; let chr, ord; let line; let startPos = 0; let isEncoded = false; let i, len; maxLength = maxLength || 50; // process ascii only text if (this.isPlainText(data)) { // check if conversion is even needed if (encodedStr.length <= maxLength) { return [ { key, value: encodedStr } ]; } encodedStr = encodedStr.replace(new RegExp('.{' + maxLength + '}', 'g'), (str)=>{ list.push({ line: str }); return ''; }); if (encodedStr) { list.push({ line: encodedStr }); } } else { if (/[\uD800-\uDBFF]/.test(encodedStr)) { // string containts surrogate pairs, so normalize it to an array of bytes encodedStrArr = []; for(i = 0, len = encodedStr.length; i < len; i++){ chr = encodedStr.charAt(i); ord = chr.charCodeAt(0); if (ord >= 0xd800 && ord <= 0xdbff && i < len - 1) { chr += encodedStr.charAt(i + 1); encodedStrArr.push(chr); i++; } else { encodedStrArr.push(chr); } } encodedStr = encodedStrArr; } // first line includes the charset and language info and needs to be encoded // even if it does not contain any unicode characters line = "utf-8''"; isEncoded = true; startPos = 0; // process text with unicode or special chars for(i = 0, len = encodedStr.length; i < len; i++){ chr = encodedStr[i]; if (isEncoded) { chr = this.safeEncodeURIComponent(chr); } else { // try to urlencode current char chr = chr === ' ' ? chr : this.safeEncodeURIComponent(chr); // By default it is not required to encode a line, the need // only appears when the string contains unicode or special chars // in this case we start processing the line over and encode all chars if (chr !== encodedStr[i]) { // Check if it is even possible to add the encoded char to the line // If not, there is no reason to use this line, just push it to the list // and start a new line with the char that needs encoding if ((this.safeEncodeURIComponent(line) + chr).length >= maxLength) { list.push({ line, encoded: isEncoded }); line = ''; startPos = i - 1; } else { isEncoded = true; i = startPos; line = ''; continue; } } } // if the line is already too long, push it to the list and start a new one if ((line + chr).length >= maxLength) { list.push({ line, encoded: isEncoded }); line = chr = encodedStr[i] === ' ' ? ' ' : this.safeEncodeURIComponent(encodedStr[i]); if (chr === encodedStr[i]) { isEncoded = false; startPos = i - 1; } else { isEncoded = true; } } else { line += chr; } } if (line) { list.push({ line, encoded: isEncoded }); } } return list.map((item, i)=>({ // encoded lines: {name}*{part}* // unencoded lines: {name}*{part} // if any line needs to be encoded then the first line (part==0) is always encoded key: key + '*' + i + (item.encoded ? '*' : ''), value: item.line })); } /** * Returns file extension for a content type string. If no suitable extensions * are found, 'bin' is used as the default extension * * @param {String} mimeType Content type to be checked for * @return {String} File extension */ detectExtension(mimeType) { mimeType = (mimeType || '').toString().toLowerCase().replace(/\s/g, ''); if (!(mimeType in mimetypes.list)) { return 'bin'; } if (typeof mimetypes.list[mimeType] === 'string') { return mimetypes.list[mimeType]; } let mimeParts = mimeType.split('/'); // search for name match for(let i = 0, len = mimetypes.list[mimeType].length; i < len; i++){ if (mimeParts[1] === mimetypes.list[mimeType][i]) { return mimetypes.list[mimeType][i]; } } // use the first one return mimetypes.list[mimeType][0] !== '*' ? mimetypes.list[mimeType][0] : 'bin'; } /** * Returns content type for a file extension. If no suitable content types * are found, 'application/octet-stream' is used as the default content type * * @param {String} extension Extension (or filename) to be checked for * @return {String} Content type */ detectMimeType(extension) { extension = (extension || '').toString().toLowerCase().replace(/\s/g, '').replace(/^\./g, '').split('.').pop(); if (!(extension in mimetypes.extensions)) { return 'application/octet-stream'; } if (typeof mimetypes.extensions[extension] === 'string') { return mimetypes.extensions[extension]; } let mimeParts; // search for name match for(let i = 0, len = mimetypes.extensions[extension].length; i < len; i++){ mimeParts = mimetypes.extensions[extension][i].split('/'); if (mimeParts[1] === extension) { return mimetypes.extensions[extension][i]; } } // use the first one return mimetypes.extensions[extension][0]; } /** * Folds long lines, useful for folding header lines (afterSpace=false) and * flowed text (afterSpace=true) * * @param {String} str String to be folded * @param {Number} [lineLength=76] Maximum length of a line * @param {Boolean} afterSpace If true, leave a space in the end of a line * @return {String} String with folded lines */ foldLines(str, lineLength, afterSpace) { str = (str || '').toString(); lineLength = lineLength || 76; let pos = 0, len = str.length, result = '', line, match; while(pos < len){ line = str.substr(pos, lineLength); if (line.length < lineLength) { result += line; break; } if (match = line.match(/^[^\n\r]*(\r?\n|\r)/)) { line = match[0]; result += line; pos += line.length; continue; } else if ((match = line.match(/(\s+)[^\s]*$/)) && match[0].length - (afterSpace ? (match[1] || '').length : 0) < line.length) { line = line.substr(0, line.length - (match[0].length - (afterSpace ? (match[1] || '').length : 0))); } else if (match = str.substr(pos + line.length).match(/^[^\s]+(\s*)/)) { line = line + match[0].substr(0, match[0].length - (!afterSpace ? (match[1] || '').length : 0)); } result += line; pos += line.length; if (pos < len) { result += '\r\n'; } } return result; } /** * Splits a mime encoded string. Needed for dividing mime words into smaller chunks * * @param {String} str Mime encoded string to be split up * @param {Number} maxlen Maximum length of characters for one part (minimum 12) * @return {Array} Split string */ splitMimeEncodedString(str, maxlen) { let curLine, match, chr, done, lines = []; // require at least 12 symbols to fit possible 4 octet UTF-8 sequences maxlen = Math.max(maxlen || 0, 12); while(str.length){ curLine = str.substr(0, maxlen); // move incomplete escaped char back to main if (match = curLine.match(/[=][0-9A-F]?$/i)) { curLine = curLine.substr(0, match.index); } done = false; while(!done){ done = true; // check if not middle of a unicode char sequence if (match = str.substr(curLine.length).match(/^[=]([0-9A-F]{2})/i)) { chr = parseInt(match[1], 16); // invalid sequence, move one char back anc recheck if (chr < 0xc2 && chr > 0x7f) { curLine = curLine.substr(0, curLine.length - 3); done = false; } } } if (curLine.length) { lines.push(curLine); } str = str.substr(curLine.length); } return lines; } encodeURICharComponent(chr) { let res = ''; let ord = chr.charCodeAt(0).toString(16).toUpperCase(); if (ord.length % 2) { ord = '0' + ord; } if (ord.length > 2) { for(let i = 0, len = ord.length / 2; i < len; i++){ res += '%' + ord.substr(i, 2); } } else { res += '%' + ord; } return res; } safeEncodeURIComponent(str) { str = (str || '').toString(); try { // might throw if we try to encode invalid sequences, eg. partial emoji str = encodeURIComponent(str); } catch (E) { // should never run return str.replace(/[^\x00-\x1F *'()<>@,;:\\"[\]?=\u007F-\uFFFF]+/g, ''); } // ensure chars that are not handled by encodeURICompent are converted as well return str.replace(/[\x00-\x1F *'()<>@,;:\\"[\]?=\u007F-\uFFFF]/g, (chr)=>this.encodeURICharComponent(chr)); } } module.exports = new Libmime(); module.exports.Libmime = Libmime; }), "[project]/node_modules/mailparser/node_modules/@zone-eu/mailsplit/node_modules/libmime/lib/charsets.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { "use strict"; /* eslint quote-props: 0*/ module.exports = { '866': 'IBM866', 'unicode-1-1-utf-8': 'UTF-8', 'utf-8': 'UTF-8', utf8: 'UTF-8', cp866: 'IBM866', csibm866: 'IBM866', ibm866: 'IBM866', csisolatin2: 'ISO-8859-2', 'iso-8859-2': 'ISO-8859-2', 'iso-ir-101': 'ISO-8859-2', 'iso8859-2': 'ISO-8859-2', iso88592: 'ISO-8859-2', 'iso_8859-2': 'ISO-8859-2', 'iso_8859-2:1987': 'ISO-8859-2', l2: 'ISO-8859-2', latin2: 'ISO-8859-2', csisolatin3: 'ISO-8859-3', 'iso-8859-3': 'ISO-8859-3', 'iso-ir-109': 'ISO-8859-3', 'iso8859-3': 'ISO-8859-3', iso88593: 'ISO-8859-3', 'iso_8859-3': 'ISO-8859-3', 'iso_8859-3:1988': 'ISO-8859-3', l3: 'ISO-8859-3', latin3: 'ISO-8859-3', csisolatin4: 'ISO-8859-4', 'iso-8859-4': 'ISO-8859-4', 'iso-ir-110': 'ISO-8859-4', 'iso8859-4': 'ISO-8859-4', iso88594: 'ISO-8859-4', 'iso_8859-4': 'ISO-8859-4', 'iso_8859-4:1988': 'ISO-8859-4', l4: 'ISO-8859-4', latin4: 'ISO-8859-4', csisolatincyrillic: 'ISO-8859-5', cyrillic: 'ISO-8859-5', 'iso-8859-5': 'ISO-8859-5', 'iso-ir-144': 'ISO-8859-5', 'iso8859-5': 'ISO-8859-5', iso88595: 'ISO-8859-5', 'iso_8859-5': 'ISO-8859-5', 'iso_8859-5:1988': 'ISO-8859-5', arabic: 'ISO-8859-6', 'asmo-708': 'ISO-8859-6', csiso88596e: 'ISO-8859-6', csiso88596i: 'ISO-8859-6', csisolatinarabic: 'ISO-8859-6', 'ecma-114': 'ISO-8859-6', 'iso-8859-6': 'ISO-8859-6', 'iso-8859-6-e': 'ISO-8859-6', 'iso-8859-6-i': 'ISO-8859-6', 'iso-ir-127': 'ISO-8859-6', 'iso8859-6': 'ISO-8859-6', iso88596: 'ISO-8859-6', 'iso_8859-6': 'ISO-8859-6', 'iso_8859-6:1987': 'ISO-8859-6', csisolatingreek: 'ISO-8859-7', 'ecma-118': 'ISO-8859-7', elot_928: 'ISO-8859-7', greek: 'ISO-8859-7', greek8: 'ISO-8859-7', 'iso-8859-7': 'ISO-8859-7', 'iso-ir-126': 'ISO-8859-7', 'iso8859-7': 'ISO-8859-7', iso88597: 'ISO-8859-7', 'iso_8859-7': 'ISO-8859-7', 'iso_8859-7:1987': 'ISO-8859-7', sun_eu_greek: 'ISO-8859-7', csiso88598e: 'ISO-8859-8', csisolatinhebrew: 'ISO-8859-8', hebrew: 'ISO-8859-8', 'iso-8859-8': 'ISO-8859-8', 'iso-8859-8-e': 'ISO-8859-8', 'iso-8859-8-i': 'ISO-8859-8', 'iso-ir-138': 'ISO-8859-8', 'iso8859-8': 'ISO-8859-8', iso88598: 'ISO-8859-8', 'iso_8859-8': 'ISO-8859-8', 'iso_8859-8:1988': 'ISO-8859-8', visual: 'ISO-8859-8', csisolatin6: 'ISO-8859-10', 'iso-8859-10': 'ISO-8859-10', 'iso-ir-157': 'ISO-8859-10', 'iso8859-10': 'ISO-8859-10', iso885910: 'ISO-8859-10', l6: 'ISO-8859-10', latin6: 'ISO-8859-10', 'iso-8859-13': 'ISO-8859-13', 'iso8859-13': 'ISO-8859-13', iso885913: 'ISO-8859-13', 'iso-8859-14': 'ISO-8859-14', 'iso8859-14': 'ISO-8859-14', iso885914: 'ISO-8859-14', csisolatin9: 'ISO-8859-15', 'iso-8859-15': 'ISO-8859-15', 'iso8859-15': 'ISO-8859-15', iso885915: 'ISO-8859-15', 'iso_8859-15': 'ISO-8859-15', l9: 'ISO-8859-15', 'iso-8859-16': 'ISO-8859-16', cskoi8r: 'KOI8-R', koi: 'KOI8-R', koi8: 'KOI8-R', 'koi8-r': 'KOI8-R', koi8_r: 'KOI8-R', 'koi8-ru': 'KOI8-U', 'koi8-u': 'KOI8-U', csmacintosh: 'macintosh', mac: 'macintosh', macintosh: 'macintosh', 'x-mac-roman': 'macintosh', 'dos-874': 'windows-874', 'iso-8859-11': 'windows-874', 'iso8859-11': 'windows-874', iso885911: 'windows-874', 'tis-620': 'windows-874', 'windows-874': 'windows-874', cp1250: 'windows-1250', 'windows-1250': 'windows-1250', 'x-cp1250': 'windows-1250', cp1251: 'windows-1251', 'windows-1251': 'windows-1251', 'x-cp1251': 'windows-1251', 'ansi_x3.4-1968': 'windows-1252', ascii: 'windows-1252', cp1252: 'windows-1252', cp819: 'windows-1252', csisolatin1: 'windows-1252', ibm819: 'windows-1252', 'iso-8859-1': 'windows-1252', 'iso-ir-100': 'windows-1252', 'iso8859-1': 'windows-1252', iso88591: 'windows-1252', 'iso_8859-1': 'windows-1252', 'iso_8859-1:1987': 'windows-1252', l1: 'windows-1252', latin1: 'windows-1252', 'us-ascii': 'windows-1252', 'windows-1252': 'windows-1252', 'x-cp1252': 'windows-1252', cp1253: 'windows-1253', 'windows-1253': 'windows-1253', 'x-cp1253': 'windows-1253', cp1254: 'windows-1254', csisolatin5: 'windows-1254', 'iso-8859-9': 'windows-1254', 'iso-ir-148': 'windows-1254', 'iso8859-9': 'windows-1254', iso88599: 'windows-1254', 'iso_8859-9': 'windows-1254', 'iso_8859-9:1989': 'windows-1254', l5: 'windows-1254', latin5: 'windows-1254', 'windows-1254': 'windows-1254', 'x-cp1254': 'windows-1254', cp1255: 'windows-1255', 'windows-1255': 'windows-1255', 'x-cp1255': 'windows-1255', cp1256: 'windows-1256', 'windows-1256': 'windows-1256', 'x-cp1256': 'windows-1256', cp1257: 'windows-1257', 'windows-1257': 'windows-1257', 'x-cp1257': 'windows-1257', cp1258: 'windows-1258', 'windows-1258': 'windows-1258', 'x-cp1258': 'windows-1258', chinese: 'GBK', csgb2312: 'GBK', csiso58gb231280: 'GBK', gb2312: 'GBK', gb_2312: 'GBK', 'gb_2312-80': 'GBK', gbk: 'GBK', 'iso-ir-58': 'GBK', 'x-gbk': 'GBK', gb18030: 'gb18030', big5: 'Big5', 'big5-hkscs': 'Big5', 'cn-big5': 'Big5', csbig5: 'Big5', 'x-x-big5': 'Big5', cseucpkdfmtjapanese: 'EUC-JP', 'euc-jp': 'EUC-JP', 'x-euc-jp': 'EUC-JP', csshiftjis: 'Shift_JIS', ms932: 'Shift_JIS', ms_kanji: 'Shift_JIS', 'shift-jis': 'Shift_JIS', shift_jis: 'Shift_JIS', sjis: 'Shift_JIS', 'windows-31j': 'Shift_JIS', 'x-sjis': 'Shift_JIS', cseuckr: 'EUC-KR', csksc56011987: 'EUC-KR', 'euc-kr': 'EUC-KR', 'iso-ir-149': 'EUC-KR', korean: 'EUC-KR', 'ks_c_5601-1987': 'EUC-KR', 'ks_c_5601-1989': 'EUC-KR', ksc5601: 'EUC-KR', ksc_5601: 'EUC-KR', 'windows-949': 'EUC-KR', 'utf-16be': 'UTF-16BE', 'utf-16': 'UTF-16LE', 'utf-16le': 'UTF-16LE' }; }), "[project]/node_modules/mailparser/node_modules/@zone-eu/mailsplit/node_modules/libmime/lib/charset.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { "use strict"; const { Buffer } = __turbopack_context__.r("[externals]/node:buffer [external] (node:buffer, cjs)"); const iconv = __turbopack_context__.r("[project]/node_modules/mailparser/node_modules/@zone-eu/mailsplit/node_modules/iconv-lite/lib/index.js [app-route] (ecmascript)"); const encodingJapanese = __turbopack_context__.r("[project]/node_modules/encoding-japanese/src/index.js [app-route] (ecmascript)"); const charsets = __turbopack_context__.r("[project]/node_modules/mailparser/node_modules/@zone-eu/mailsplit/node_modules/libmime/lib/charsets.js [app-route] (ecmascript)"); /** * Character set encoding and decoding functions */ const charset = module.exports = { /** * Encodes an unicode string into an Buffer object as UTF-8 * * We force UTF-8 here, no strange encodings allowed. * * @param {String} str String to be encoded * @return {Buffer} UTF-8 encoded typed array */ encode (str) { return Buffer.from(str, 'utf-8'); }, /** * Decodes a string from Buffer to an unicode string using specified encoding * NB! Throws if unknown charset is used * * @param {Buffer} buf Binary data to be decoded * @param {String} [fromCharset='UTF-8'] Binary data is decoded into string using this charset * @return {String} Decded string */ decode (buf, fromCharset) { fromCharset = charset.normalizeCharset(fromCharset || 'UTF-8'); if (/^(us-)?ascii|utf-8|7bit$/i.test(fromCharset)) { return buf.toString('utf-8'); } try { if (/^jis|^iso-?2022-?jp|^EUCJP/i.test(fromCharset)) { if (typeof buf === 'string') { buf = Buffer.from(buf); } try { let output = encodingJapanese.convert(buf, { to: 'UNICODE', from: fromCharset, type: 'string' }); if (typeof output === 'string') { output = Buffer.from(output); } return output; } catch (err) { // ignore, defaults to iconv-lite on error } } return iconv.decode(buf, fromCharset); } catch (err) { // enforce utf-8, data loss might occur return buf.toString(); } }, /** * Convert a string from specific encoding to UTF-8 Buffer * * @param {String|Buffer} str String to be encoded * @param {String} [fromCharset='UTF-8'] Source encoding for the string * @return {Buffer} UTF-8 encoded typed array */ convert (data, fromCharset) { fromCharset = charset.normalizeCharset(fromCharset || 'UTF-8'); let bufString; if (typeof data !== 'string') { if (/^(us-)?ascii|utf-8|7bit$/i.test(fromCharset)) { return data; } bufString = charset.decode(data, fromCharset); return charset.encode(bufString); } return charset.encode(data); }, /** * Converts well known invalid character set names to proper names. * eg. win-1257 will be converted to WINDOWS-1257 * * @param {String} charset Charset name to convert * @return {String} Canoninicalized charset name */ normalizeCharset (charset) { charset = charset.toLowerCase().trim(); // first pass if (charsets.hasOwnProperty(charset) && charsets[charset]) { return charsets[charset]; } charset = charset.replace(/^utf[-_]?(\d+)/, 'utf-$1').replace(/^(?:us[-_]?)ascii/, 'windows-1252').replace(/^win(?:dows)?[-_]?(\d+)/, 'windows-$1').replace(/^(?:latin|iso[-_]?8859)?[-_]?(\d+)/, 'iso-8859-$1').replace(/^l[-_]?(\d+)/, 'iso-8859-$1'); // updated pass if (charsets.hasOwnProperty(charset) && charsets[charset]) { return charsets[charset]; } return charset.toUpperCase(); } }; }), "[project]/node_modules/mailparser/node_modules/@zone-eu/mailsplit/node_modules/libmime/lib/mimetypes.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { "use strict"; /* eslint quote-props: 0 */ module.exports = { list: { 'application/acad': 'dwg', 'application/applixware': 'aw', 'application/arj': 'arj', 'application/atom+xml': 'xml', 'application/atomcat+xml': 'atomcat', 'application/atomsvc+xml': 'atomsvc', 'application/base64': [ 'mm', 'mme' ], 'application/binhex': 'hqx', 'application/binhex4': 'hqx', 'application/book': [ 'book', 'boo' ], 'application/ccxml+xml,': 'ccxml', 'application/cdf': 'cdf', 'application/cdmi-capability': 'cdmia', 'application/cdmi-container': 'cdmic', 'application/cdmi-domain': 'cdmid', 'application/cdmi-object': 'cdmio', 'application/cdmi-queue': 'cdmiq', 'application/clariscad': 'ccad', 'application/commonground': 'dp', 'application/cu-seeme': 'cu', 'application/davmount+xml': 'davmount', 'application/drafting': 'drw', 'application/dsptype': 'tsp', 'application/dssc+der': 'dssc', 'application/dssc+xml': 'xdssc', 'application/dxf': 'dxf', 'application/ecmascript': [ 'js', 'es' ], 'application/emma+xml': 'emma', 'application/envoy': 'evy', 'application/epub+zip': 'epub', 'application/excel': [ 'xls', 'xl', 'xla', 'xlb', 'xlc', 'xld', 'xlk', 'xll', 'xlm', 'xlt', 'xlv', 'xlw' ], 'application/exi': 'exi', 'application/font-tdpfr': 'pfr', 'application/fractals': 'fif', 'application/freeloader': 'frl', 'application/futuresplash': 'spl', 'application/gnutar': 'tgz', 'application/groupwise': 'vew', 'application/hlp': 'hlp', 'application/hta': 'hta', 'application/hyperstudio': 'stk', 'application/i-deas': 'unv', 'application/iges': [ 'iges', 'igs' ], 'application/inf': 'inf', 'application/internet-property-stream': 'acx', 'application/ipfix': 'ipfix', 'application/java': 'class', 'application/java-archive': 'jar', 'application/java-byte-code': 'class', 'application/java-serialized-object': 'ser', 'application/java-vm': 'class', 'application/javascript': 'js', 'application/json': 'json', 'application/lha': 'lha', 'application/lzx': 'lzx', 'application/mac-binary': 'bin', 'application/mac-binhex': 'hqx', 'application/mac-binhex40': 'hqx', 'application/mac-compactpro': 'cpt', 'application/macbinary': 'bin', 'application/mads+xml': 'mads', 'application/marc': 'mrc', 'application/marcxml+xml': 'mrcx', 'application/mathematica': 'ma', 'application/mathml+xml': 'mathml', 'application/mbedlet': 'mbd', 'application/mbox': 'mbox', 'application/mcad': 'mcd', 'application/mediaservercontrol+xml': 'mscml', 'application/metalink4+xml': 'meta4', 'application/mets+xml': 'mets', 'application/mime': 'aps', 'application/mods+xml': 'mods', 'application/mp21': 'm21', 'application/mp4': 'mp4', 'application/mspowerpoint': [ 'ppt', 'pot', 'pps', 'ppz' ], 'application/msword': [ 'doc', 'dot', 'w6w', 'wiz', 'word' ], 'application/mswrite': 'wri', 'application/mxf': 'mxf', 'application/netmc': 'mcp', 'application/octet-stream': [ '*' ], 'application/oda': 'oda', 'application/oebps-package+xml': 'opf', 'application/ogg': 'ogx', 'application/olescript': 'axs', 'application/onenote': 'onetoc', 'application/patch-ops-error+xml': 'xer', 'application/pdf': 'pdf', 'application/pgp-encrypted': 'asc', 'application/pgp-signature': 'pgp', 'application/pics-rules': 'prf', 'application/pkcs-12': 'p12', 'application/pkcs-crl': 'crl', 'application/pkcs10': 'p10', 'application/pkcs7-mime': [ 'p7c', 'p7m' ], 'application/pkcs7-signature': 'p7s', 'application/pkcs8': 'p8', 'application/pkix-attr-cert': 'ac', 'application/pkix-cert': [ 'cer', 'crt' ], 'application/pkix-crl': 'crl', 'application/pkix-pkipath': 'pkipath', 'application/pkixcmp': 'pki', 'application/plain': 'text', 'application/pls+xml': 'pls', 'application/postscript': [ 'ps', 'ai', 'eps' ], 'application/powerpoint': 'ppt', 'application/pro_eng': [ 'part', 'prt' ], 'application/prs.cww': 'cww', 'application/pskc+xml': 'pskcxml', 'application/rdf+xml': 'rdf', 'application/reginfo+xml': 'rif', 'application/relax-ng-compact-syntax': 'rnc', 'application/resource-lists+xml': 'rl', 'application/resource-lists-diff+xml': 'rld', 'application/ringing-tones': 'rng', 'application/rls-services+xml': 'rs', 'application/rsd+xml': 'rsd', 'application/rss+xml': 'xml', 'application/rtf': [ 'rtf', 'rtx' ], 'application/sbml+xml': 'sbml', 'application/scvp-cv-request': 'scq', 'application/scvp-cv-response': 'scs', 'application/scvp-vp-request': 'spq', 'application/scvp-vp-response': 'spp', 'application/sdp': 'sdp', 'application/sea': 'sea', 'application/set': 'set', 'application/set-payment-initiation': 'setpay', 'application/set-registration-initiation': 'setreg', 'application/shf+xml': 'shf', 'application/sla': 'stl', 'application/smil': [ 'smi', 'smil' ], 'application/smil+xml': 'smi', 'application/solids': 'sol', 'application/sounder': 'sdr', 'application/sparql-query': 'rq', 'application/sparql-results+xml': 'srx', 'application/srgs': 'gram', 'application/srgs+xml': 'grxml', 'application/sru+xml': 'sru', 'application/ssml+xml': 'ssml', 'application/step': [ 'step', 'stp' ], 'application/streamingmedia': 'ssm', 'application/tei+xml': 'tei', 'application/thraud+xml': 'tfi', 'application/timestamped-data': 'tsd', 'application/toolbook': 'tbk', 'application/vda': 'vda', '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', 'application/vnd.adobe.air-application-installer-package+zip': 'air', 'application/vnd.adobe.fxp': 'fxp', 'application/vnd.adobe.xdp+xml': 'xdp', 'application/vnd.adobe.xfdf': 'xfdf', 'application/vnd.ahead.space': 'ahead', 'application/vnd.airzip.filesecure.azf': 'azf', 'application/vnd.airzip.filesecure.azs': 'azs', 'application/vnd.amazon.ebook': 'azw', '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.apple.installer+xml': 'mpkg', 'application/vnd.apple.mpegurl': 'm3u8', 'application/vnd.aristanetworks.swi': 'swi', 'application/vnd.audiograph': 'aep', 'application/vnd.blueice.multipass': 'mpm', 'application/vnd.bmi': 'bmi', 'application/vnd.businessobjects': 'rep', 'application/vnd.chemdraw+xml': 'cdxml', 'application/vnd.chipnuts.karaoke-mmd': 'mmd', 'application/vnd.cinderella': 'cdy', 'application/vnd.claymore': 'cla', 'application/vnd.cloanto.rp9': 'rp9', 'application/vnd.clonk.c4group': 'c4g', 'application/vnd.cluetrust.cartomobile-config': 'c11amc', 'application/vnd.cluetrust.cartomobile-config-pkg': 'c11amz', 'application/vnd.commonspace': 'csp', 'application/vnd.contact.cmsg': 'cdbcmsg', '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.data-vision.rdz': 'rdz', '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.dvb.ait': 'ait', 'application/vnd.dvb.service': 'svc', 'application/vnd.dynageo': 'geo', 'application/vnd.ecowin.chart': 'mag', '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', 'application/vnd.ezpix-album': 'ez2', 'application/vnd.ezpix-package': 'ez3', 'application/vnd.fdf': 'fdf', 'application/vnd.fdsn.seed': 'seed', 'application/vnd.flographit': 'gph', 'application/vnd.fluxtime.clip': 'ftc', 'application/vnd.framemaker': 'fm', '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.geogebra.file': 'ggb', 'application/vnd.geogebra.tool': 'ggt', 'application/vnd.geometry-explorer': 'gex', 'application/vnd.geonext': 'gxt', 'application/vnd.geoplan': 'g2w', 'application/vnd.geospace': 'g3w', 'application/vnd.gmx': 'gmx', 'application/vnd.google-earth.kml+xml': 'kml', 'application/vnd.google-earth.kmz': 'kmz', 'application/vnd.grafeq': 'gqf', '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.hal+xml': 'hal', 'application/vnd.handheld-entertainment+xml': 'zmm', 'application/vnd.hbci': 'hbci', 'application/vnd.hhe.lesson-player': 'les', 'application/vnd.hp-hpgl': [ 'hgl', 'hpg', '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.hzn-3d-crossword': 'x3d', 'application/vnd.ibm.minipay': 'mpy', 'application/vnd.ibm.modcap': 'afp', 'application/vnd.ibm.rights-management': 'irm', 'application/vnd.ibm.secure-container': 'sc', 'application/vnd.iccprofile': 'icc', 'application/vnd.igloader': 'igl', 'application/vnd.immervision-ivp': 'ivp', 'application/vnd.immervision-ivu': 'ivu', 'application/vnd.insors.igm': 'igm', 'application/vnd.intercon.formnet': 'xpw', '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', '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', 'application/vnd.kde.kspread': 'ksp', 'application/vnd.kde.kword': 'kwd', 'application/vnd.kenameaapp': 'htke', 'application/vnd.kidspiration': 'kia', 'application/vnd.kinar': 'kne', 'application/vnd.koan': 'skp', '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', '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.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.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-artgalry': 'cil', 'application/vnd.ms-cab-compressed': 'cab', 'application/vnd.ms-excel': [ 'xls', 'xla', 'xlc', 'xlm', 'xlt', 'xlw', 'xlb', 'xll' ], '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.certstore': 'sst', 'application/vnd.ms-pki.pko': 'pko', 'application/vnd.ms-pki.seccat': 'cat', 'application/vnd.ms-pki.stl': 'stl', 'application/vnd.ms-pkicertstore': 'sst', 'application/vnd.ms-pkiseccat': 'cat', 'application/vnd.ms-pkistl': 'stl', 'application/vnd.ms-powerpoint': [ 'ppt', 'pot', 'pps', 'ppa', 'pwz' ], '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', 'application/vnd.ms-word.document.macroenabled.12': 'docm', 'application/vnd.ms-word.template.macroenabled.12': 'dotm', 'application/vnd.ms-works': [ 'wks', 'wcm', 'wdb', 'wps' ], 'application/vnd.ms-wpl': 'wpl', 'application/vnd.ms-xpsdocument': 'xps', 'application/vnd.mseq': 'mseq', 'application/vnd.musician': 'mus', 'application/vnd.muvee.style': 'msty', 'application/vnd.neurolanguage.nlu': 'nlu', 'application/vnd.noblenet-directory': 'nnd', 'application/vnd.noblenet-sealer': 'nns', 'application/vnd.noblenet-web': 'nnw', 'application/vnd.nokia.configuration-message': 'ncm', '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.nokia.ringing-tone': 'rng', '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', 'application/vnd.oasis.opendocument.graphics': 'odg', '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-template': 'otp', 'application/vnd.oasis.opendocument.spreadsheet': 'ods', 'application/vnd.oasis.opendocument.spreadsheet-template': 'ots', 'application/vnd.oasis.opendocument.text': 'odt', '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.openofficeorg.extension': 'oxt', '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.palm': 'pdb', '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', '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', 'application/vnd.rn-realplayer': 'rnx', 'application/vnd.route66.link66+xml': 'link66', 'application/vnd.sailingtracker.track': 'st', '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', 'application/vnd.smaf': 'mmf', 'application/vnd.smart.teacher': 'teacher', 'application/vnd.solent.sdkm+xml': 'sdkm', 'application/vnd.spotfire.dxp': 'dxp', 'application/vnd.spotfire.sfs': 'sfs', 'application/vnd.stardivision.calc': 'sdc', 'application/vnd.stardivision.draw': 'sda', 'application/vnd.stardivision.impress': 'sdd', 'application/vnd.stardivision.math': 'smf', 'application/vnd.stardivision.writer': 'sdw', 'application/vnd.stardivision.writer-global': 'sgl', 'application/vnd.stepmania.stepchart': 'sm', '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', 'application/vnd.svd': 'svd', 'application/vnd.symbian.install': 'sis', 'application/vnd.syncml+xml': 'xsm', 'application/vnd.syncml.dm+wbxml': 'bdm', 'application/vnd.syncml.dm+xml': 'xdm', 'application/vnd.tao.intent-module-archive': 'tao', 'application/vnd.tmobile-livetv': 'tmo', 'application/vnd.trid.tpt': 'tpt', 'application/vnd.triscape.mxs': 'mxs', 'application/vnd.trueapp': 'tra', 'application/vnd.ufdl': 'ufd', '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', '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', 'application/vnd.wqd': 'wqd', 'application/vnd.wt.stf': 'stf', 'application/vnd.xara': [ 'web', 'xar' ], '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.zul': 'zir', 'application/vnd.zzazz.deck+xml': 'zaz', 'application/vocaltec-media-desc': 'vmd', 'application/vocaltec-media-file': 'vmf', 'application/voicexml+xml': 'vxml', 'application/widget': 'wgt', 'application/winhlp': 'hlp', 'application/wordperfect': [ 'wp', 'wp5', 'wp6', 'wpd' ], 'application/wordperfect6.0': [ 'w60', 'wp5' ], 'application/wordperfect6.1': 'w61', 'application/wsdl+xml': 'wsdl', 'application/wspolicy+xml': 'wspolicy', 'application/x-123': 'wk1', 'application/x-7z-compressed': '7z', 'application/x-abiword': 'abw', 'application/x-ace-compressed': 'ace', 'application/x-aim': 'aim', 'application/x-authorware-bin': 'aab', 'application/x-authorware-map': 'aam', 'application/x-authorware-seg': 'aas', 'application/x-bcpio': 'bcpio', 'application/x-binary': 'bin', 'application/x-binhex40': 'hqx', 'application/x-bittorrent': 'torrent', 'application/x-bsh': [ 'bsh', 'sh', 'shar' ], 'application/x-bytecode.elisp': 'elc', 'applicaiton/x-bytecode.python': 'pyc', 'application/x-bzip': 'bz', 'application/x-bzip2': [ 'boz', 'bz2' ], 'application/x-cdf': 'cdf', 'application/x-cdlink': 'vcd', 'application/x-chat': [ 'cha', 'chat' ], 'application/x-chess-pgn': 'pgn', 'application/x-cmu-raster': 'ras', 'application/x-cocoa': 'cco', 'application/x-compactpro': 'cpt', 'application/x-compress': 'z', 'application/x-compressed': [ 'tgz', 'gz', 'z', 'zip' ], 'application/x-conference': 'nsc', 'application/x-cpio': 'cpio', 'application/x-cpt': 'cpt', 'application/x-csh': 'csh', 'application/x-debian-package': 'deb', 'application/x-deepv': 'deepv', 'application/x-director': [ 'dir', 'dcr', 'dxr' ], 'application/x-doom': 'wad', 'application/x-dtbncx+xml': 'ncx', 'application/x-dtbook+xml': 'dtb', 'application/x-dtbresource+xml': 'res', 'application/x-dvi': 'dvi', 'application/x-elc': 'elc', 'application/x-envoy': [ 'env', 'evy' ], 'application/x-esrehber': 'es', 'application/x-excel': [ 'xls', 'xla', 'xlb', 'xlc', 'xld', 'xlk', 'xll', 'xlm', 'xlt', 'xlv', 'xlw' ], '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', 'application/x-font-snf': 'snf', 'application/x-font-ttf': 'ttf', 'application/x-font-type1': 'pfa', 'application/x-font-woff': 'woff', 'application/x-frame': 'mif', 'application/x-freelance': 'pre', 'application/x-futuresplash': 'spl', 'application/x-gnumeric': 'gnumeric', 'application/x-gsp': 'gsp', 'application/x-gss': 'gss', 'application/x-gtar': 'gtar', 'application/x-gzip': [ 'gz', 'gzip' ], 'application/x-hdf': 'hdf', 'application/x-helpfile': [ 'help', 'hlp' ], 'application/x-httpd-imap': 'imap', 'application/x-ima': 'ima', 'application/x-internet-signup': [ 'ins', 'isp' ], 'application/x-internett-signup': 'ins', 'application/x-inventor': 'iv', 'application/x-ip2': 'ip', 'application/x-iphone': 'iii', 'application/x-java-class': 'class', 'application/x-java-commerce': 'jcm', 'application/x-java-jnlp-file': 'jnlp', 'application/x-javascript': 'js', 'application/x-koan': [ 'skd', 'skm', 'skp', 'skt' ], 'application/x-ksh': 'ksh', 'application/x-latex': [ 'latex', 'ltx' ], 'application/x-lha': 'lha', 'application/x-lisp': 'lsp', 'application/x-livescreen': 'ivy', 'application/x-lotus': 'wq1', 'application/x-lotusscreencam': 'scm', 'application/x-lzh': 'lzh', 'application/x-lzx': 'lzx', 'application/x-mac-binhex40': 'hqx', 'application/x-macbinary': 'bin', 'application/x-magic-cap-package-1.0': 'mc$', 'application/x-mathcad': 'mcd', 'application/x-meme': 'mm', 'application/x-midi': [ 'mid', 'midi' ], 'application/x-mif': 'mif', 'application/x-mix-transfer': 'nix', 'application/x-mobipocket-ebook': 'prc', 'application/x-mplayer2': 'asx', 'application/x-ms-application': 'application', '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' ], 'application/x-msexcel': [ 'xls', 'xla', 'xlw' ], 'application/x-msmediaview': [ 'mvb', 'm13', 'm14' ], 'application/x-msmetafile': 'wmf', 'application/x-msmoney': 'mny', 'application/x-mspowerpoint': 'ppt', 'application/x-mspublisher': 'pub', 'application/x-msschedule': 'scd', 'application/x-msterminal': 'trm', 'application/x-mswrite': 'wri', 'application/x-navi-animation': 'ani', 'application/x-navidoc': 'nvd', 'application/x-navimap': 'map', 'application/x-navistyle': 'stl', 'application/x-netcdf': [ 'cdf', 'nc' ], 'application/x-newton-compatible-pkg': 'pkg', 'application/x-nokia-9000-communicator-add-on-software': 'aos', 'application/x-omc': 'omc', 'application/x-omcdatamaker': 'omcd', 'application/x-omcregerator': 'omcr', 'application/x-pagemaker': [ 'pm4', 'pm5' ], 'application/x-pcl': 'pcl', 'application/x-perfmon': [ 'pma', 'pmc', 'pml', 'pmr', 'pmw' ], 'application/x-pixclscript': 'plx', 'application/x-pkcs10': 'p10', 'application/x-pkcs12': [ 'p12', 'pfx' ], 'application/x-pkcs7-certificates': [ 'p7b', 'spc' ], 'application/x-pkcs7-certreqresp': 'p7r', 'application/x-pkcs7-mime': [ 'p7m', 'p7c' ], 'application/x-pkcs7-signature': [ 'p7s', 'p7a' ], 'application/x-pointplus': 'css', 'application/x-portable-anymap': 'pnm', 'application/x-project': [ 'mpc', 'mpt', 'mpv', 'mpx' ], 'application/x-qpro': 'wb1', 'application/x-rar-compressed': 'rar', 'application/x-rtf': 'rtf', 'application/x-sdp': 'sdp', 'application/x-sea': 'sea', 'application/x-seelogo': 'sl', 'application/x-sh': 'sh', 'application/x-shar': [ 'shar', 'sh' ], 'application/x-shockwave-flash': 'swf', 'application/x-silverlight-app': 'xap', 'application/x-sit': 'sit', 'application/x-sprite': [ 'spr', 'sprite' ], 'application/x-stuffit': 'sit', 'application/x-stuffitx': 'sitx', 'application/x-sv4cpio': 'sv4cpio', 'application/x-sv4crc': 'sv4crc', 'application/x-tar': 'tar', 'application/x-tbook': [ 'sbk', 'tbk' ], 'application/x-tcl': 'tcl', 'application/x-tex': 'tex', 'application/x-tex-tfm': 'tfm', 'application/x-texinfo': [ 'texi', 'texinfo' ], 'application/x-troff': [ 'roff', 't', 'tr' ], 'application/x-troff-man': 'man', 'application/x-troff-me': 'me', 'application/x-troff-ms': 'ms', 'application/x-troff-msvideo': 'avi', 'application/x-ustar': 'ustar', 'application/x-visio': [ 'vsd', 'vst', 'vsw' ], 'application/x-vnd.audioexplosion.mzz': 'mzz', 'application/x-vnd.ls-xpix': 'xpix', 'application/x-vrml': 'vrml', 'application/x-wais-source': [ 'src', 'wsrc' ], 'application/x-winhelp': 'hlp', 'application/x-wintalk': 'wtk', 'application/x-world': [ 'wrl', 'svr' ], 'application/x-wpwin': 'wpd', 'application/x-wri': 'wri', 'application/x-x509-ca-cert': [ 'cer', 'crt', 'der' ], 'application/x-x509-user-cert': 'crt', 'application/x-xfig': 'fig', 'application/x-xpinstall': 'xpi', 'application/x-zip-compressed': 'zip', 'application/xcap-diff+xml': 'xdf', 'application/xenc+xml': 'xenc', 'application/xhtml+xml': 'xhtml', 'application/xml': 'xml', 'application/xml-dtd': 'dtd', 'application/xop+xml': 'xop', 'application/xslt+xml': 'xslt', 'application/xspf+xml': 'xspf', 'application/xv+xml': 'mxml', 'application/yang': 'yang', 'application/yin+xml': 'yin', 'application/ynd.ms-pkipko': 'pko', 'application/zip': 'zip', 'audio/adpcm': 'adp', 'audio/aiff': [ 'aiff', 'aif', 'aifc' ], 'audio/basic': [ 'snd', 'au' ], 'audio/it': 'it', 'audio/make': [ 'funk', 'my', 'pfunk' ], 'audio/make.my.funk': 'pfunk', 'audio/mid': [ 'mid', 'rmi' ], 'audio/midi': [ 'midi', 'kar', 'mid' ], 'audio/mod': 'mod', 'audio/mp4': 'mp4a', 'audio/mpeg': [ 'mpga', 'mp3', 'm2a', 'mp2', 'mpa', 'mpg' ], 'audio/mpeg3': 'mp3', 'audio/nspaudio': [ 'la', 'lma' ], 'audio/ogg': 'oga', 'audio/s3m': 's3m', 'audio/tsp-audio': 'tsi', 'audio/tsplayer': 'tsp', 'audio/vnd.dece.audio': 'uva', '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.qcelp': 'qcp', 'audio/vnd.rip': 'rip', 'audio/voc': 'voc', 'audio/voxware': 'vox', 'audio/wav': 'wav', 'audio/webm': 'weba', 'audio/x-aac': 'aac', 'audio/x-adpcm': 'snd', 'audio/x-aiff': [ 'aiff', 'aif', 'aifc' ], 'audio/x-au': 'au', 'audio/x-gsm': [ 'gsd', 'gsm' ], 'audio/x-jam': 'jam', 'audio/x-liveaudio': 'lam', 'audio/x-mid': [ 'mid', 'midi' ], 'audio/x-midi': [ 'midi', 'mid' ], 'audio/x-mod': 'mod', 'audio/x-mpeg': 'mp2', 'audio/x-mpeg-3': 'mp3', 'audio/x-mpegurl': 'm3u', 'audio/x-mpequrl': 'm3u', 'audio/x-ms-wax': 'wax', 'audio/x-ms-wma': 'wma', 'audio/x-nspaudio': [ 'la', 'lma' ], 'audio/x-pn-realaudio': [ 'ra', 'ram', 'rm', 'rmm', 'rmp' ], 'audio/x-pn-realaudio-plugin': [ 'ra', 'rmp', 'rpm' ], 'audio/x-psid': 'sid', 'audio/x-realaudio': 'ra', 'audio/x-twinvq': 'vqf', 'audio/x-twinvq-plugin': [ 'vqe', 'vql' ], 'audio/x-vnd.audioexplosion.mjuicemediafile': 'mjf', 'audio/x-voc': 'voc', 'audio/x-wav': 'wav', 'audio/xm': 'xm', 'chemical/x-cdx': 'cdx', 'chemical/x-cif': 'cif', 'chemical/x-cmdf': 'cmdf', 'chemical/x-cml': 'cml', 'chemical/x-csml': 'csml', 'chemical/x-pdb': [ 'pdb', 'xyz' ], 'chemical/x-xyz': 'xyz', 'drawing/x-dwf': 'dwf', 'i-world/i-vrml': 'ivr', 'image/bmp': [ 'bmp', 'bm' ], 'image/cgm': 'cgm', 'image/cis-cod': 'cod', 'image/cmu-raster': [ 'ras', 'rast' ], 'image/fif': 'fif', 'image/florian': [ 'flo', 'turbot' ], 'image/g3fax': 'g3', 'image/gif': 'gif', 'image/ief': [ 'ief', 'iefs' ], 'image/jpeg': [ 'jpeg', 'jpe', 'jpg', 'jfif', 'jfif-tbnl' ], 'image/jutvision': 'jut', 'image/ktx': 'ktx', 'image/naplps': [ 'nap', 'naplps' ], 'image/pict': [ 'pic', 'pict' ], 'image/pipeg': 'jfif', 'image/pjpeg': [ 'jfif', 'jpe', 'jpeg', 'jpg' ], 'image/png': [ 'png', 'x-png' ], 'image/prs.btif': 'btif', 'image/svg+xml': 'svg', 'image/tiff': [ 'tif', 'tiff' ], 'image/vasa': 'mcf', 'image/vnd.adobe.photoshop': 'psd', 'image/vnd.dece.graphic': 'uvi', 'image/vnd.djvu': 'djvu', 'image/vnd.dvb.subtitle': 'sub', 'image/vnd.dwg': [ 'dwg', 'dxf', 'svf' ], '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.ms-modi': 'mdi', 'image/vnd.net-fpx': [ 'fpx', 'npx' ], 'image/vnd.rn-realflash': 'rf', 'image/vnd.rn-realpix': 'rp', 'image/vnd.wap.wbmp': 'wbmp', 'image/vnd.xiff': 'xif', 'image/webp': 'webp', 'image/x-cmu-raster': 'ras', 'image/x-cmx': 'cmx', 'image/x-dwg': [ 'dwg', 'dxf', 'svf' ], 'image/x-freehand': 'fh', 'image/x-icon': 'ico', 'image/x-jg': 'art', 'image/x-jps': 'jps', 'image/x-niff': [ 'niff', 'nif' ], 'image/x-pcx': 'pcx', 'image/x-pict': [ 'pct', 'pic' ], 'image/x-portable-anymap': 'pnm', 'image/x-portable-bitmap': 'pbm', 'image/x-portable-graymap': 'pgm', 'image/x-portable-greymap': 'pgm', 'image/x-portable-pixmap': 'ppm', 'image/x-quicktime': [ 'qif', 'qti', 'qtif' ], 'image/x-rgb': 'rgb', 'image/x-tiff': [ 'tif', 'tiff' ], 'image/x-windows-bmp': 'bmp', 'image/x-xbitmap': 'xbm', 'image/x-xbm': 'xbm', 'image/x-xpixmap': [ 'xpm', 'pm' ], 'image/x-xwd': 'xwd', 'image/x-xwindowdump': 'xwd', 'image/xbm': 'xbm', 'image/xpm': 'xpm', 'message/rfc822': [ 'eml', 'mht', 'mhtml', 'nws', 'mime' ], 'model/iges': [ 'iges', 'igs' ], 'model/mesh': 'msh', 'model/vnd.collada+xml': 'dae', 'model/vnd.dwf': 'dwf', 'model/vnd.gdl': 'gdl', 'model/vnd.gtw': 'gtw', 'model/vnd.mts': 'mts', 'model/vnd.vtu': 'vtu', 'model/vrml': [ 'vrml', 'wrl', 'wrz' ], 'model/x-pov': 'pov', 'multipart/x-gzip': 'gzip', 'multipart/x-ustar': 'ustar', 'multipart/x-zip': 'zip', 'music/crescendo': [ 'mid', 'midi' ], 'music/x-karaoke': 'kar', 'paleovu/x-pv': 'pvu', 'text/asp': 'asp', 'text/calendar': 'ics', 'text/css': 'css', 'text/csv': 'csv', 'text/ecmascript': 'js', 'text/h323': '323', 'text/html': [ 'html', 'htm', 'stm', 'acgi', 'htmls', 'htx', 'shtml' ], 'text/iuls': 'uls', 'text/javascript': 'js', 'text/mcf': 'mcf', 'text/n3': 'n3', 'text/pascal': 'pas', 'text/plain': [ 'txt', 'bas', 'c', 'h', 'c++', 'cc', 'com', 'conf', 'cxx', 'def', 'f', 'f90', 'for', 'g', 'hh', 'idc', 'jav', 'java', 'list', 'log', 'lst', 'm', 'mar', 'pl', 'sdml', 'text' ], 'text/plain-bas': 'par', 'text/prs.lines.tag': 'dsc', 'text/richtext': [ 'rtx', 'rt', 'rtf' ], 'text/scriplet': 'wsc', 'text/scriptlet': 'sct', 'text/sgml': [ 'sgm', 'sgml' ], 'text/tab-separated-values': 'tsv', 'text/troff': 't', 'text/turtle': 'ttl', 'text/uri-list': [ 'uni', 'unis', 'uri', 'uris' ], 'text/vnd.abc': 'abc', 'text/vnd.curl': 'curl', 'text/vnd.curl.dcurl': 'dcurl', 'text/vnd.curl.mcurl': 'mcurl', 'text/vnd.curl.scurl': 'scurl', '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.rn-realtext': 'rt', 'text/vnd.sun.j2me.app-descriptor': 'jad', 'text/vnd.wap.wml': 'wml', 'text/vnd.wap.wmlscript': 'wmls', 'text/webviewhtml': 'htt', 'text/x-asm': [ 'asm', 's' ], 'text/x-audiosoft-intra': 'aip', 'text/x-c': [ 'c', 'cc', 'cpp' ], 'text/x-component': 'htc', 'text/x-fortran': [ 'for', 'f', 'f77', 'f90' ], 'text/x-h': [ 'h', 'hh' ], 'text/x-java-source': [ 'java', 'jav' ], 'text/x-java-source,java': 'java', 'text/x-la-asf': 'lsx', 'text/x-m': 'm', 'text/x-pascal': 'p', 'text/x-script': 'hlb', 'text/x-script.csh': 'csh', 'text/x-script.elisp': 'el', 'text/x-script.guile': 'scm', 'text/x-script.ksh': 'ksh', 'text/x-script.lisp': 'lsp', 'text/x-script.perl': 'pl', 'text/x-script.perl-module': 'pm', 'text/x-script.phyton': 'py', 'text/x-script.rexx': 'rexx', 'text/x-script.scheme': 'scm', 'text/x-script.sh': 'sh', 'text/x-script.tcl': 'tcl', 'text/x-script.tcsh': 'tcsh', 'text/x-script.zsh': 'zsh', 'text/x-server-parsed-html': [ 'shtml', 'ssi' ], 'text/x-setext': 'etx', 'text/x-sgml': [ 'sgm', 'sgml' ], 'text/x-speech': [ 'spc', 'talk' ], 'text/x-uil': 'uil', 'text/x-uuencode': [ 'uu', 'uue' ], 'text/x-vcalendar': 'vcs', 'text/x-vcard': 'vcf', 'text/xml': 'xml', 'video/3gpp': '3gp', 'video/3gpp2': '3g2', 'video/animaflex': 'afl', 'video/avi': 'avi', 'video/avs-video': 'avs', 'video/dl': 'dl', 'video/fli': 'fli', 'video/gl': 'gl', 'video/h261': 'h261', 'video/h263': 'h263', 'video/h264': 'h264', 'video/jpeg': 'jpgv', 'video/jpm': 'jpm', 'video/mj2': 'mj2', 'video/mp4': 'mp4', 'video/mpeg': [ 'mpeg', 'mp2', 'mpa', 'mpe', 'mpg', 'mpv2', 'm1v', 'm2v', 'mp3' ], 'video/msvideo': 'avi', 'video/ogg': 'ogv', 'video/quicktime': [ 'mov', 'qt', 'moov' ], 'video/vdo': 'vdo', 'video/vivo': [ 'viv', 'vivo' ], 'video/vnd.dece.hd': 'uvh', 'video/vnd.dece.mobile': 'uvm', 'video/vnd.dece.pd': 'uvp', 'video/vnd.dece.sd': 'uvs', 'video/vnd.dece.video': 'uvv', 'video/vnd.fvt': 'fvt', 'video/vnd.mpegurl': 'mxu', 'video/vnd.ms-playready.media.pyv': 'pyv', 'video/vnd.rn-realvideo': 'rv', 'video/vnd.uvvu.mp4': 'uvu', 'video/vnd.vivo': [ 'viv', 'vivo' ], 'video/vosaic': 'vos', 'video/webm': 'webm', 'video/x-amt-demorun': 'xdr', 'video/x-amt-showrun': 'xsr', 'video/x-atomic3d-feature': 'fmf', 'video/x-dl': 'dl', 'video/x-dv': [ 'dif', 'dv' ], 'video/x-f4v': 'f4v', 'video/x-fli': 'fli', 'video/x-flv': 'flv', 'video/x-gl': 'gl', 'video/x-isvideo': 'isu', 'video/x-la-asf': [ 'lsf', 'lsx' ], 'video/x-m4v': 'm4v', 'video/x-motion-jpeg': 'mjpg', 'video/x-mpeg': [ 'mp3', 'mp2' ], 'video/x-mpeq2a': 'mp2', 'video/x-ms-asf': [ 'asf', 'asr', 'asx' ], 'video/x-ms-asf-plugin': 'asx', '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-qtc': 'qtc', 'video/x-scm': 'scm', 'video/x-sgi-movie': [ 'movie', 'mv' ], 'windows/metafile': 'wmf', 'www/mime': 'mime', 'x-conference/x-cooltalk': 'ice', 'x-music/x-midi': [ 'mid', 'midi' ], 'x-world/x-3dmf': [ '3dm', '3dmf', 'qd3', 'qd3d' ], 'x-world/x-svr': 'svr', 'x-world/x-vrml': [ 'flr', 'vrml', 'wrl', 'wrz', 'xaf', 'xof' ], 'x-world/x-vrt': 'vrt', 'xgl/drawing': 'xgz', 'xgl/movie': 'xmz' }, extensions: { '*': 'application/octet-stream', '123': 'application/vnd.lotus-1-2-3', '323': 'text/h323', '3dm': 'x-world/x-3dmf', '3dmf': 'x-world/x-3dmf', '3dml': 'text/vnd.in3d.3dml', '3g2': 'video/3gpp2', '3gp': 'video/3gpp', '7z': 'application/x-7z-compressed', a: 'application/octet-stream', aab: 'application/x-authorware-bin', aac: 'audio/x-aac', aam: 'application/x-authorware-map', aas: 'application/x-authorware-seg', abc: 'text/vnd.abc', abw: 'application/x-abiword', ac: 'application/pkix-attr-cert', acc: 'application/vnd.americandynamics.acc', ace: 'application/x-ace-compressed', acgi: 'text/html', acu: 'application/vnd.acucobol', acx: 'application/internet-property-stream', adp: 'audio/adpcm', aep: 'application/vnd.audiograph', afl: 'video/animaflex', afp: 'application/vnd.ibm.modcap', ahead: 'application/vnd.ahead.space', ai: 'application/postscript', aif: [ 'audio/aiff', 'audio/x-aiff' ], aifc: [ 'audio/aiff', 'audio/x-aiff' ], aiff: [ 'audio/aiff', 'audio/x-aiff' ], aim: 'application/x-aim', aip: 'text/x-audiosoft-intra', air: 'application/vnd.adobe.air-application-installer-package+zip', ait: 'application/vnd.dvb.ait', ami: 'application/vnd.amiga.ami', ani: 'application/x-navi-animation', aos: 'application/x-nokia-9000-communicator-add-on-software', apk: 'application/vnd.android.package-archive', application: 'application/x-ms-application', apr: 'application/vnd.lotus-approach', aps: 'application/mime', arc: 'application/octet-stream', arj: [ 'application/arj', 'application/octet-stream' ], art: 'image/x-jg', asf: 'video/x-ms-asf', asm: 'text/x-asm', aso: 'application/vnd.accpac.simply.aso', asp: 'text/asp', asr: 'video/x-ms-asf', asx: [ 'video/x-ms-asf', 'application/x-mplayer2', 'video/x-ms-asf-plugin' ], atc: 'application/vnd.acucorp', atomcat: 'application/atomcat+xml', atomsvc: 'application/atomsvc+xml', atx: 'application/vnd.antix.game-component', au: [ 'audio/basic', 'audio/x-au' ], avi: [ 'video/avi', 'video/msvideo', 'application/x-troff-msvideo', 'video/x-msvideo' ], avs: 'video/avs-video', aw: 'application/applixware', axs: 'application/olescript', azf: 'application/vnd.airzip.filesecure.azf', azs: 'application/vnd.airzip.filesecure.azs', azw: 'application/vnd.amazon.ebook', bas: 'text/plain', bcpio: 'application/x-bcpio', bdf: 'application/x-font-bdf', bdm: 'application/vnd.syncml.dm+wbxml', bed: 'application/vnd.realvnc.bed', bh2: 'application/vnd.fujitsu.oasysprs', bin: [ 'application/octet-stream', 'application/mac-binary', 'application/macbinary', 'application/x-macbinary', 'application/x-binary' ], bm: 'image/bmp', bmi: 'application/vnd.bmi', bmp: [ 'image/bmp', 'image/x-windows-bmp' ], boo: 'application/book', book: 'application/book', box: 'application/vnd.previewsystems.box', boz: 'application/x-bzip2', bsh: 'application/x-bsh', btif: 'image/prs.btif', bz: 'application/x-bzip', bz2: 'application/x-bzip2', c: [ 'text/plain', 'text/x-c' ], 'c++': 'text/plain', c11amc: 'application/vnd.cluetrust.cartomobile-config', c11amz: 'application/vnd.cluetrust.cartomobile-config-pkg', c4g: 'application/vnd.clonk.c4group', cab: 'application/vnd.ms-cab-compressed', car: 'application/vnd.curl.car', cat: [ 'application/vnd.ms-pkiseccat', 'application/vnd.ms-pki.seccat' ], cc: [ 'text/plain', 'text/x-c' ], ccad: 'application/clariscad', cco: 'application/x-cocoa', ccxml: 'application/ccxml+xml,', cdbcmsg: 'application/vnd.contact.cmsg', cdf: [ 'application/cdf', 'application/x-cdf', 'application/x-netcdf' ], 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', cdx: 'chemical/x-cdx', cdxml: 'application/vnd.chemdraw+xml', cdy: 'application/vnd.cinderella', cer: [ 'application/pkix-cert', 'application/x-x509-ca-cert' ], cgm: 'image/cgm', cha: 'application/x-chat', chat: 'application/x-chat', chm: 'application/vnd.ms-htmlhelp', chrt: 'application/vnd.kde.kchart', cif: 'chemical/x-cif', cii: 'application/vnd.anser-web-certificate-issue-initiation', cil: 'application/vnd.ms-artgalry', cla: 'application/vnd.claymore', class: [ 'application/octet-stream', 'application/java', 'application/java-byte-code', 'application/java-vm', 'application/x-java-class' ], 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', cmc: 'application/vnd.cosmocaller', cmdf: 'chemical/x-cmdf', cml: 'chemical/x-cml', cmp: 'application/vnd.yellowriver-custom-menu', cmx: 'image/x-cmx', cod: [ 'image/cis-cod', 'application/vnd.rim.cod' ], com: [ 'application/octet-stream', 'text/plain' ], conf: 'text/plain', cpio: 'application/x-cpio', cpp: 'text/x-c', cpt: [ 'application/mac-compactpro', 'application/x-compactpro', 'application/x-cpt' ], crd: 'application/x-mscardfile', crl: [ 'application/pkix-crl', 'application/pkcs-crl' ], crt: [ 'application/pkix-cert', 'application/x-x509-user-cert', 'application/x-x509-ca-cert' ], cryptonote: 'application/vnd.rig.cryptonote', csh: [ 'text/x-script.csh', 'application/x-csh' ], csml: 'chemical/x-csml', csp: 'application/vnd.commonspace', css: [ 'text/css', 'application/x-pointplus' ], csv: 'text/csv', cu: 'application/cu-seeme', curl: 'text/vnd.curl', cww: 'application/prs.cww', cxx: 'text/plain', dae: 'model/vnd.collada+xml', daf: 'application/vnd.mobius.daf', davmount: 'application/davmount+xml', dcr: 'application/x-director', dcurl: 'text/vnd.curl.dcurl', dd2: 'application/vnd.oma.dd2+xml', ddd: 'application/vnd.fujixerox.ddd', deb: 'application/x-debian-package', deepv: 'application/x-deepv', def: 'text/plain', der: 'application/x-x509-ca-cert', dfac: 'application/vnd.dreamfactory', dif: 'video/x-dv', dir: 'application/x-director', dis: 'application/vnd.mobius.dis', djvu: 'image/vnd.djvu', dl: [ 'video/dl', 'video/x-dl' ], dll: 'application/x-msdownload', dms: 'application/octet-stream', dna: 'application/vnd.dna', doc: 'application/msword', docm: 'application/vnd.ms-word.document.macroenabled.12', docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', dot: 'application/msword', dotm: 'application/vnd.ms-word.template.macroenabled.12', dotx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', dp: [ 'application/commonground', 'application/vnd.osgi.dp' ], dpg: 'application/vnd.dpgraph', dra: 'audio/vnd.dra', drw: 'application/drafting', dsc: 'text/prs.lines.tag', dssc: 'application/dssc+der', dtb: 'application/x-dtbook+xml', dtd: 'application/xml-dtd', dts: 'audio/vnd.dts', dtshd: 'audio/vnd.dts.hd', dump: 'application/octet-stream', dv: 'video/x-dv', dvi: 'application/x-dvi', dwf: [ 'model/vnd.dwf', 'drawing/x-dwf' ], dwg: [ 'application/acad', 'image/vnd.dwg', 'image/x-dwg' ], dxf: [ 'application/dxf', 'image/vnd.dwg', 'image/vnd.dxf', 'image/x-dwg' ], dxp: 'application/vnd.spotfire.dxp', dxr: 'application/x-director', ecelp4800: 'audio/vnd.nuera.ecelp4800', ecelp7470: 'audio/vnd.nuera.ecelp7470', ecelp9600: 'audio/vnd.nuera.ecelp9600', edm: 'application/vnd.novadigm.edm', edx: 'application/vnd.novadigm.edx', efif: 'application/vnd.picsel', ei6: 'application/vnd.pg.osasli', el: 'text/x-script.elisp', elc: [ 'application/x-elc', 'application/x-bytecode.elisp' ], eml: 'message/rfc822', emma: 'application/emma+xml', env: 'application/x-envoy', eol: 'audio/vnd.digital-winds', eot: 'application/vnd.ms-fontobject', eps: 'application/postscript', epub: 'application/epub+zip', es: [ 'application/ecmascript', 'application/x-esrehber' ], es3: 'application/vnd.eszigno3+xml', esf: 'application/vnd.epson.esf', etx: 'text/x-setext', evy: [ 'application/envoy', 'application/x-envoy' ], exe: [ 'application/octet-stream', 'application/x-msdownload' ], exi: 'application/exi', ext: 'application/vnd.novadigm.ext', ez2: 'application/vnd.ezpix-album', ez3: 'application/vnd.ezpix-package', f: [ 'text/plain', 'text/x-fortran' ], f4v: 'video/x-f4v', f77: 'text/x-fortran', f90: [ 'text/plain', 'text/x-fortran' ], fbs: 'image/vnd.fastbidsheet', fcs: 'application/vnd.isac.fcs', fdf: 'application/vnd.fdf', fe_launch: 'application/vnd.denovo.fcselayout-link', fg5: 'application/vnd.fujitsu.oasysgp', fh: 'image/x-freehand', fif: [ 'application/fractals', 'image/fif' ], fig: 'application/x-xfig', fli: [ 'video/fli', 'video/x-fli' ], flo: [ 'image/florian', 'application/vnd.micrografx.flo' ], flr: 'x-world/x-vrml', flv: 'video/x-flv', flw: 'application/vnd.kde.kivio', flx: 'text/vnd.fmi.flexstor', fly: 'text/vnd.fly', fm: 'application/vnd.framemaker', fmf: 'video/x-atomic3d-feature', fnc: 'application/vnd.frogans.fnc', for: [ 'text/plain', 'text/x-fortran' ], fpx: [ 'image/vnd.fpx', 'image/vnd.net-fpx' ], frl: 'application/freeloader', fsc: 'application/vnd.fsc.weblaunch', fst: 'image/vnd.fst', ftc: 'application/vnd.fluxtime.clip', fti: 'application/vnd.anser-web-funds-transfer-initiation', funk: 'audio/make', fvt: 'video/vnd.fvt', fxp: 'application/vnd.adobe.fxp', fzs: 'application/vnd.fuzzysheet', g: 'text/plain', g2w: 'application/vnd.geoplan', g3: 'image/g3fax', g3w: 'application/vnd.geospace', gac: 'application/vnd.groove-account', gdl: 'model/vnd.gdl', geo: 'application/vnd.dynageo', gex: 'application/vnd.geometry-explorer', ggb: 'application/vnd.geogebra.file', ggt: 'application/vnd.geogebra.tool', ghf: 'application/vnd.groove-help', gif: 'image/gif', gim: 'application/vnd.groove-identity-message', gl: [ 'video/gl', 'video/x-gl' ], gmx: 'application/vnd.gmx', gnumeric: 'application/x-gnumeric', gph: 'application/vnd.flographit', gqf: 'application/vnd.grafeq', gram: 'application/srgs', grv: 'application/vnd.groove-injector', grxml: 'application/srgs+xml', gsd: 'audio/x-gsm', gsf: 'application/x-font-ghostscript', gsm: 'audio/x-gsm', gsp: 'application/x-gsp', gss: 'application/x-gss', gtar: 'application/x-gtar', gtm: 'application/vnd.groove-tool-message', gtw: 'model/vnd.gtw', gv: 'text/vnd.graphviz', gxt: 'application/vnd.geonext', gz: [ 'application/x-gzip', 'application/x-compressed' ], gzip: [ 'multipart/x-gzip', 'application/x-gzip' ], h: [ 'text/plain', 'text/x-h' ], h261: 'video/h261', h263: 'video/h263', h264: 'video/h264', hal: 'application/vnd.hal+xml', hbci: 'application/vnd.hbci', hdf: 'application/x-hdf', help: 'application/x-helpfile', hgl: 'application/vnd.hp-hpgl', hh: [ 'text/plain', 'text/x-h' ], hlb: 'text/x-script', hlp: [ 'application/winhlp', 'application/hlp', 'application/x-helpfile', 'application/x-winhelp' ], hpg: 'application/vnd.hp-hpgl', hpgl: 'application/vnd.hp-hpgl', hpid: 'application/vnd.hp-hpid', hps: 'application/vnd.hp-hps', hqx: [ 'application/mac-binhex40', 'application/binhex', 'application/binhex4', 'application/mac-binhex', 'application/x-binhex40', 'application/x-mac-binhex40' ], hta: 'application/hta', htc: 'text/x-component', htke: 'application/vnd.kenameaapp', htm: 'text/html', html: 'text/html', htmls: 'text/html', htt: 'text/webviewhtml', htx: 'text/html', hvd: 'application/vnd.yamaha.hv-dic', hvp: 'application/vnd.yamaha.hv-voice', hvs: 'application/vnd.yamaha.hv-script', i2g: 'application/vnd.intergeo', icc: 'application/vnd.iccprofile', ice: 'x-conference/x-cooltalk', ico: 'image/x-icon', ics: 'text/calendar', idc: 'text/plain', ief: 'image/ief', iefs: 'image/ief', ifm: 'application/vnd.shana.informed.formdata', iges: [ 'application/iges', 'model/iges' ], igl: 'application/vnd.igloader', igm: 'application/vnd.insors.igm', igs: [ 'application/iges', 'model/iges' ], igx: 'application/vnd.micrografx.igx', iif: 'application/vnd.shana.informed.interchange', iii: 'application/x-iphone', ima: 'application/x-ima', imap: 'application/x-httpd-imap', imp: 'application/vnd.accpac.simply.imp', ims: 'application/vnd.ms-ims', inf: 'application/inf', ins: [ 'application/x-internet-signup', 'application/x-internett-signup' ], ip: 'application/x-ip2', ipfix: 'application/ipfix', ipk: 'application/vnd.shana.informed.package', irm: 'application/vnd.ibm.rights-management', irp: 'application/vnd.irepository.package+xml', isp: 'application/x-internet-signup', isu: 'video/x-isvideo', it: 'audio/it', itp: 'application/vnd.shana.informed.formtemplate', iv: 'application/x-inventor', ivp: 'application/vnd.immervision-ivp', ivr: 'i-world/i-vrml', ivu: 'application/vnd.immervision-ivu', ivy: 'application/x-livescreen', jad: 'text/vnd.sun.j2me.app-descriptor', jam: [ 'application/vnd.jam', 'audio/x-jam' ], jar: 'application/java-archive', jav: [ 'text/plain', 'text/x-java-source' ], java: [ 'text/plain', 'text/x-java-source,java', 'text/x-java-source' ], jcm: 'application/x-java-commerce', jfif: [ 'image/pipeg', 'image/jpeg', 'image/pjpeg' ], 'jfif-tbnl': 'image/jpeg', jisp: 'application/vnd.jisp', jlt: 'application/vnd.hp-jlyt', jnlp: 'application/x-java-jnlp-file', joda: 'application/vnd.joost.joda-archive', jpe: [ 'image/jpeg', 'image/pjpeg' ], jpeg: [ 'image/jpeg', 'image/pjpeg' ], jpg: [ 'image/jpeg', 'image/pjpeg' ], jpgv: 'video/jpeg', jpm: 'video/jpm', jps: 'image/x-jps', js: [ 'application/javascript', 'application/ecmascript', 'text/javascript', 'text/ecmascript', 'application/x-javascript' ], json: 'application/json', jut: 'image/jutvision', kar: [ 'audio/midi', 'music/x-karaoke' ], karbon: 'application/vnd.kde.karbon', kfo: 'application/vnd.kde.kformula', kia: 'application/vnd.kidspiration', kml: 'application/vnd.google-earth.kml+xml', kmz: 'application/vnd.google-earth.kmz', kne: 'application/vnd.kinar', kon: 'application/vnd.kde.kontour', kpr: 'application/vnd.kde.kpresenter', ksh: [ 'application/x-ksh', 'text/x-script.ksh' ], ksp: 'application/vnd.kde.kspread', ktx: 'image/ktx', ktz: 'application/vnd.kahootz', kwd: 'application/vnd.kde.kword', la: [ 'audio/nspaudio', 'audio/x-nspaudio' ], lam: 'audio/x-liveaudio', lasxml: 'application/vnd.las.las+xml', latex: 'application/x-latex', lbd: 'application/vnd.llamagraphics.life-balance.desktop', lbe: 'application/vnd.llamagraphics.life-balance.exchange+xml', les: 'application/vnd.hhe.lesson-player', lha: [ 'application/octet-stream', 'application/lha', 'application/x-lha' ], lhx: 'application/octet-stream', link66: 'application/vnd.route66.link66+xml', list: 'text/plain', lma: [ 'audio/nspaudio', 'audio/x-nspaudio' ], log: 'text/plain', lrm: 'application/vnd.ms-lrm', lsf: 'video/x-la-asf', lsp: [ 'application/x-lisp', 'text/x-script.lisp' ], lst: 'text/plain', lsx: [ 'video/x-la-asf', 'text/x-la-asf' ], ltf: 'application/vnd.frogans.ltf', ltx: 'application/x-latex', lvp: 'audio/vnd.lucent.voice', lwp: 'application/vnd.lotus-wordpro', lzh: [ 'application/octet-stream', 'application/x-lzh' ], lzx: [ 'application/lzx', 'application/octet-stream', 'application/x-lzx' ], m: [ 'text/plain', 'text/x-m' ], m13: 'application/x-msmediaview', m14: 'application/x-msmediaview', m1v: 'video/mpeg', m21: 'application/mp21', m2a: 'audio/mpeg', m2v: 'video/mpeg', m3u: [ 'audio/x-mpegurl', 'audio/x-mpequrl' ], m3u8: 'application/vnd.apple.mpegurl', m4v: 'video/x-m4v', ma: 'application/mathematica', mads: 'application/mads+xml', mag: 'application/vnd.ecowin.chart', man: 'application/x-troff-man', map: 'application/x-navimap', mar: 'text/plain', mathml: 'application/mathml+xml', mbd: 'application/mbedlet', mbk: 'application/vnd.mobius.mbk', mbox: 'application/mbox', mc$: 'application/x-magic-cap-package-1.0', mc1: 'application/vnd.medcalcdata', mcd: [ 'application/mcad', 'application/vnd.mcd', 'application/x-mathcad' ], mcf: [ 'image/vasa', 'text/mcf' ], mcp: 'application/netmc', mcurl: 'text/vnd.curl.mcurl', mdb: 'application/x-msaccess', mdi: 'image/vnd.ms-modi', me: 'application/x-troff-me', meta4: 'application/metalink4+xml', mets: 'application/mets+xml', mfm: 'application/vnd.mfmp', mgp: 'application/vnd.osgeo.mapguide.package', mgz: 'application/vnd.proteus.magazine', mht: 'message/rfc822', mhtml: 'message/rfc822', mid: [ 'audio/mid', 'audio/midi', 'music/crescendo', 'x-music/x-midi', 'audio/x-midi', 'application/x-midi', 'audio/x-mid' ], midi: [ 'audio/midi', 'music/crescendo', 'x-music/x-midi', 'audio/x-midi', 'application/x-midi', 'audio/x-mid' ], mif: [ 'application/vnd.mif', 'application/x-mif', 'application/x-frame' ], mime: [ 'message/rfc822', 'www/mime' ], mj2: 'video/mj2', mjf: 'audio/x-vnd.audioexplosion.mjuicemediafile', mjpg: 'video/x-motion-jpeg', mlp: 'application/vnd.dolby.mlp', mm: [ 'application/base64', 'application/x-meme' ], mmd: 'application/vnd.chipnuts.karaoke-mmd', mme: 'application/base64', mmf: 'application/vnd.smaf', mmr: 'image/vnd.fujixerox.edmics-mmr', mny: 'application/x-msmoney', mod: [ 'audio/mod', 'audio/x-mod' ], mods: 'application/mods+xml', moov: 'video/quicktime', mov: 'video/quicktime', movie: 'video/x-sgi-movie', mp2: [ 'video/mpeg', 'audio/mpeg', 'video/x-mpeg', 'audio/x-mpeg', 'video/x-mpeq2a' ], mp3: [ 'audio/mpeg', 'audio/mpeg3', 'video/mpeg', 'audio/x-mpeg-3', 'video/x-mpeg' ], mp4: [ 'video/mp4', 'application/mp4' ], mp4a: 'audio/mp4', mpa: [ 'video/mpeg', 'audio/mpeg' ], mpc: [ 'application/vnd.mophun.certificate', 'application/x-project' ], mpe: 'video/mpeg', mpeg: 'video/mpeg', mpg: [ 'video/mpeg', 'audio/mpeg' ], mpga: 'audio/mpeg', mpkg: 'application/vnd.apple.installer+xml', mpm: 'application/vnd.blueice.multipass', mpn: 'application/vnd.mophun.application', mpp: 'application/vnd.ms-project', mpt: 'application/x-project', mpv: 'application/x-project', mpv2: 'video/mpeg', mpx: 'application/x-project', mpy: 'application/vnd.ibm.minipay', mqy: 'application/vnd.mobius.mqy', mrc: 'application/marc', mrcx: 'application/marcxml+xml', ms: 'application/x-troff-ms', mscml: 'application/mediaservercontrol+xml', mseq: 'application/vnd.mseq', msf: 'application/vnd.epson.msf', msg: 'application/vnd.ms-outlook', msh: 'model/mesh', msl: 'application/vnd.mobius.msl', msty: 'application/vnd.muvee.style', mts: 'model/vnd.mts', mus: 'application/vnd.musician', musicxml: 'application/vnd.recordare.musicxml+xml', mv: 'video/x-sgi-movie', mvb: 'application/x-msmediaview', mwf: 'application/vnd.mfer', mxf: 'application/mxf', mxl: 'application/vnd.recordare.musicxml', mxml: 'application/xv+xml', mxs: 'application/vnd.triscape.mxs', mxu: 'video/vnd.mpegurl', my: 'audio/make', mzz: 'application/x-vnd.audioexplosion.mzz', 'n-gage': 'application/vnd.nokia.n-gage.symbian.install', n3: 'text/n3', nap: 'image/naplps', naplps: 'image/naplps', nbp: 'application/vnd.wolfram.player', nc: 'application/x-netcdf', ncm: 'application/vnd.nokia.configuration-message', ncx: 'application/x-dtbncx+xml', ngdat: 'application/vnd.nokia.n-gage.data', nif: 'image/x-niff', niff: 'image/x-niff', nix: 'application/x-mix-transfer', nlu: 'application/vnd.neurolanguage.nlu', nml: 'application/vnd.enliven', nnd: 'application/vnd.noblenet-directory', nns: 'application/vnd.noblenet-sealer', nnw: 'application/vnd.noblenet-web', npx: 'image/vnd.net-fpx', nsc: 'application/x-conference', nsf: 'application/vnd.lotus-notes', nvd: 'application/x-navidoc', nws: 'message/rfc822', o: 'application/octet-stream', oa2: 'application/vnd.fujitsu.oasys2', oa3: 'application/vnd.fujitsu.oasys3', oas: 'application/vnd.fujitsu.oasys', obd: 'application/x-msbinder', 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', ogv: 'video/ogg', ogx: 'application/ogg', omc: 'application/x-omc', omcd: 'application/x-omcdatamaker', omcr: 'application/x-omcregerator', onetoc: 'application/onenote', opf: 'application/oebps-package+xml', org: 'application/vnd.lotus-organizer', osf: 'application/vnd.yamaha.openscoreformat', osfpvg: 'application/vnd.yamaha.openscoreformat.osfpvg+xml', otc: 'application/vnd.oasis.opendocument.chart-template', otf: 'application/x-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', oxt: 'application/vnd.openofficeorg.extension', p: 'text/x-pascal', p10: [ 'application/pkcs10', 'application/x-pkcs10' ], p12: [ 'application/pkcs-12', 'application/x-pkcs12' ], p7a: 'application/x-pkcs7-signature', p7b: 'application/x-pkcs7-certificates', p7c: [ 'application/pkcs7-mime', 'application/x-pkcs7-mime' ], p7m: [ 'application/pkcs7-mime', 'application/x-pkcs7-mime' ], p7r: 'application/x-pkcs7-certreqresp', p7s: [ 'application/pkcs7-signature', 'application/x-pkcs7-signature' ], p8: 'application/pkcs8', par: 'text/plain-bas', part: 'application/pro_eng', pas: 'text/pascal', paw: 'application/vnd.pawaafile', pbd: 'application/vnd.powerbuilder6', pbm: 'image/x-portable-bitmap', pcf: 'application/x-font-pcf', pcl: [ 'application/vnd.hp-pcl', 'application/x-pcl' ], pclxl: 'application/vnd.hp-pclxl', pct: 'image/x-pict', pcurl: 'application/vnd.curl.pcurl', pcx: 'image/x-pcx', pdb: [ 'application/vnd.palm', 'chemical/x-pdb' ], pdf: 'application/pdf', pfa: 'application/x-font-type1', pfr: 'application/font-tdpfr', pfunk: [ 'audio/make', 'audio/make.my.funk' ], pfx: 'application/x-pkcs12', pgm: [ 'image/x-portable-graymap', 'image/x-portable-greymap' ], pgn: 'application/x-chess-pgn', pgp: 'application/pgp-signature', pic: [ 'image/pict', 'image/x-pict' ], pict: 'image/pict', pkg: 'application/x-newton-compatible-pkg', pki: 'application/pkixcmp', pkipath: 'application/pkix-pkipath', pko: [ 'application/ynd.ms-pkipko', 'application/vnd.ms-pki.pko' ], pl: [ 'text/plain', 'text/x-script.perl' ], plb: 'application/vnd.3gpp.pic-bw-large', plc: 'application/vnd.mobius.plc', plf: 'application/vnd.pocketlearn', pls: 'application/pls+xml', plx: 'application/x-pixclscript', pm: [ 'text/x-script.perl-module', 'image/x-xpixmap' ], pm4: 'application/x-pagemaker', pm5: 'application/x-pagemaker', pma: 'application/x-perfmon', pmc: 'application/x-perfmon', pml: [ 'application/vnd.ctc-posml', 'application/x-perfmon' ], pmr: 'application/x-perfmon', pmw: 'application/x-perfmon', png: 'image/png', pnm: [ 'application/x-portable-anymap', 'image/x-portable-anymap' ], portpkg: 'application/vnd.macports.portpkg', pot: [ 'application/vnd.ms-powerpoint', 'application/mspowerpoint' ], potm: 'application/vnd.ms-powerpoint.template.macroenabled.12', potx: 'application/vnd.openxmlformats-officedocument.presentationml.template', pov: 'model/x-pov', ppa: 'application/vnd.ms-powerpoint', ppam: 'application/vnd.ms-powerpoint.addin.macroenabled.12', ppd: 'application/vnd.cups-ppd', ppm: 'image/x-portable-pixmap', pps: [ 'application/vnd.ms-powerpoint', 'application/mspowerpoint' ], ppsm: 'application/vnd.ms-powerpoint.slideshow.macroenabled.12', ppsx: 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', ppt: [ 'application/vnd.ms-powerpoint', 'application/mspowerpoint', 'application/powerpoint', 'application/x-mspowerpoint' ], pptm: 'application/vnd.ms-powerpoint.presentation.macroenabled.12', pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation', ppz: 'application/mspowerpoint', prc: 'application/x-mobipocket-ebook', pre: [ 'application/vnd.lotus-freelance', 'application/x-freelance' ], prf: 'application/pics-rules', prt: 'application/pro_eng', ps: 'application/postscript', psb: 'application/vnd.3gpp.pic-bw-small', psd: [ 'application/octet-stream', 'image/vnd.adobe.photoshop' ], psf: 'application/x-font-linux-psf', pskcxml: 'application/pskc+xml', ptid: 'application/vnd.pvi.ptid1', pub: 'application/x-mspublisher', pvb: 'application/vnd.3gpp.pic-bw-var', pvu: 'paleovu/x-pv', pwn: 'application/vnd.3m.post-it-notes', pwz: 'application/vnd.ms-powerpoint', py: 'text/x-script.phyton', pya: 'audio/vnd.ms-playready.media.pya', pyc: 'applicaiton/x-bytecode.python', pyv: 'video/vnd.ms-playready.media.pyv', qam: 'application/vnd.epson.quickanime', qbo: 'application/vnd.intu.qbo', qcp: 'audio/vnd.qcelp', qd3: 'x-world/x-3dmf', qd3d: 'x-world/x-3dmf', qfx: 'application/vnd.intu.qfx', qif: 'image/x-quicktime', qps: 'application/vnd.publishare-delta-tree', qt: 'video/quicktime', qtc: 'video/x-qtc', qti: 'image/x-quicktime', qtif: 'image/x-quicktime', qxd: 'application/vnd.quark.quarkxpress', ra: [ 'audio/x-realaudio', 'audio/x-pn-realaudio', 'audio/x-pn-realaudio-plugin' ], ram: 'audio/x-pn-realaudio', rar: 'application/x-rar-compressed', ras: [ 'image/cmu-raster', 'application/x-cmu-raster', 'image/x-cmu-raster' ], rast: 'image/cmu-raster', rcprofile: 'application/vnd.ipunplugged.rcprofile', rdf: 'application/rdf+xml', rdz: 'application/vnd.data-vision.rdz', rep: 'application/vnd.businessobjects', res: 'application/x-dtbresource+xml', rexx: 'text/x-script.rexx', rf: 'image/vnd.rn-realflash', rgb: 'image/x-rgb', rif: 'application/reginfo+xml', rip: 'audio/vnd.rip', 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/mid', rmm: 'audio/x-pn-realaudio', rmp: [ 'audio/x-pn-realaudio-plugin', 'audio/x-pn-realaudio' ], rms: 'application/vnd.jcp.javame.midlet-rms', rnc: 'application/relax-ng-compact-syntax', rng: [ 'application/ringing-tones', 'application/vnd.nokia.ringing-tone' ], rnx: 'application/vnd.rn-realplayer', roff: 'application/x-troff', rp: 'image/vnd.rn-realpix', rp9: 'application/vnd.cloanto.rp9', rpm: 'audio/x-pn-realaudio-plugin', rpss: 'application/vnd.nokia.radio-presets', rpst: 'application/vnd.nokia.radio-preset', rq: 'application/sparql-query', rs: 'application/rls-services+xml', rsd: 'application/rsd+xml', rt: [ 'text/richtext', 'text/vnd.rn-realtext' ], rtf: [ 'application/rtf', 'text/richtext', 'application/x-rtf' ], rtx: [ 'text/richtext', 'application/rtf' ], rv: 'video/vnd.rn-realvideo', s: 'text/x-asm', s3m: 'audio/s3m', saf: 'application/vnd.yamaha.smaf-audio', saveme: 'application/octet-stream', sbk: 'application/x-tbook', sbml: 'application/sbml+xml', sc: 'application/vnd.ibm.secure-container', scd: 'application/x-msschedule', scm: [ 'application/vnd.lotus-screencam', 'video/x-scm', 'text/x-script.guile', 'application/x-lotusscreencam', 'text/x-script.scheme' ], scq: 'application/scvp-cv-request', scs: 'application/scvp-cv-response', sct: 'text/scriptlet', scurl: 'text/vnd.curl.scurl', sda: 'application/vnd.stardivision.draw', sdc: 'application/vnd.stardivision.calc', sdd: 'application/vnd.stardivision.impress', sdkm: 'application/vnd.solent.sdkm+xml', sdml: 'text/plain', sdp: [ 'application/sdp', 'application/x-sdp' ], sdr: 'application/sounder', sdw: 'application/vnd.stardivision.writer', sea: [ 'application/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', set: 'application/set', setpay: 'application/set-payment-initiation', setreg: 'application/set-registration-initiation', 'sfd-hdstx': 'application/vnd.hydrostatix.sof-data', sfs: 'application/vnd.spotfire.sfs', sgl: 'application/vnd.stardivision.writer-global', sgm: [ 'text/sgml', 'text/x-sgml' ], sgml: [ 'text/sgml', 'text/x-sgml' ], sh: [ 'application/x-shar', 'application/x-bsh', 'application/x-sh', 'text/x-script.sh' ], shar: [ 'application/x-bsh', 'application/x-shar' ], shf: 'application/shf+xml', shtml: [ 'text/html', 'text/x-server-parsed-html' ], sid: 'audio/x-psid', sis: 'application/vnd.symbian.install', sit: [ 'application/x-stuffit', 'application/x-sit' ], sitx: 'application/x-stuffitx', skd: 'application/x-koan', skm: 'application/x-koan', skp: [ 'application/vnd.koan', 'application/x-koan' ], skt: 'application/x-koan', sl: 'application/x-seelogo', sldm: 'application/vnd.ms-powerpoint.slide.macroenabled.12', sldx: 'application/vnd.openxmlformats-officedocument.presentationml.slide', slt: 'application/vnd.epson.salt', sm: 'application/vnd.stepmania.stepchart', smf: 'application/vnd.stardivision.math', smi: [ 'application/smil', 'application/smil+xml' ], smil: 'application/smil', snd: [ 'audio/basic', 'audio/x-adpcm' ], snf: 'application/x-font-snf', sol: 'application/solids', spc: [ 'text/x-speech', 'application/x-pkcs7-certificates' ], spf: 'application/vnd.yamaha.smaf-phrase', spl: [ 'application/futuresplash', 'application/x-futuresplash' ], spot: 'text/vnd.in3d.spot', spp: 'application/scvp-vp-response', spq: 'application/scvp-vp-request', spr: 'application/x-sprite', sprite: 'application/x-sprite', src: 'application/x-wais-source', sru: 'application/sru+xml', srx: 'application/sparql-results+xml', sse: 'application/vnd.kodak-descriptor', ssf: 'application/vnd.epson.ssf', ssi: 'text/x-server-parsed-html', ssm: 'application/streamingmedia', ssml: 'application/ssml+xml', sst: [ 'application/vnd.ms-pkicertstore', 'application/vnd.ms-pki.certstore' ], st: 'application/vnd.sailingtracker.track', stc: 'application/vnd.sun.xml.calc.template', std: 'application/vnd.sun.xml.draw.template', step: 'application/step', stf: 'application/vnd.wt.stf', sti: 'application/vnd.sun.xml.impress.template', stk: 'application/hyperstudio', stl: [ 'application/vnd.ms-pkistl', 'application/sla', 'application/vnd.ms-pki.stl', 'application/x-navistyle' ], stm: 'text/html', stp: 'application/step', str: 'application/vnd.pg.format', stw: 'application/vnd.sun.xml.writer.template', sub: 'image/vnd.dvb.subtitle', sus: 'application/vnd.sus-calendar', sv4cpio: 'application/x-sv4cpio', sv4crc: 'application/x-sv4crc', svc: 'application/vnd.dvb.service', svd: 'application/vnd.svd', svf: [ 'image/vnd.dwg', 'image/x-dwg' ], svg: 'image/svg+xml', svr: [ 'x-world/x-svr', 'application/x-world' ], swf: 'application/x-shockwave-flash', swi: 'application/vnd.aristanetworks.swi', 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', t: [ 'text/troff', 'application/x-troff' ], talk: 'text/x-speech', tao: 'application/vnd.tao.intent-module-archive', tar: 'application/x-tar', tbk: [ 'application/toolbook', 'application/x-tbook' ], tcap: 'application/vnd.3gpp2.tcap', tcl: [ 'text/x-script.tcl', 'application/x-tcl' ], tcsh: 'text/x-script.tcsh', teacher: 'application/vnd.smart.teacher', tei: 'application/tei+xml', tex: 'application/x-tex', texi: 'application/x-texinfo', texinfo: 'application/x-texinfo', text: [ 'application/plain', 'text/plain' ], tfi: 'application/thraud+xml', tfm: 'application/x-tex-tfm', tgz: [ 'application/gnutar', 'application/x-compressed' ], thmx: 'application/vnd.ms-officetheme', tif: [ 'image/tiff', 'image/x-tiff' ], tiff: [ 'image/tiff', 'image/x-tiff' ], tmo: 'application/vnd.tmobile-livetv', torrent: 'application/x-bittorrent', tpl: 'application/vnd.groove-tool-template', tpt: 'application/vnd.trid.tpt', tr: 'application/x-troff', tra: 'application/vnd.trueapp', trm: 'application/x-msterminal', tsd: 'application/timestamped-data', tsi: 'audio/tsp-audio', tsp: [ 'application/dsptype', 'audio/tsplayer' ], tsv: 'text/tab-separated-values', ttf: 'application/x-font-ttf', ttl: 'text/turtle', turbot: 'image/florian', twd: 'application/vnd.simtech-mindmapper', txd: 'application/vnd.genomatix.tuxedo', txf: 'application/vnd.mobius.txf', txt: 'text/plain', ufd: 'application/vnd.ufdl', uil: 'text/x-uil', uls: 'text/iuls', umj: 'application/vnd.umajin', uni: 'text/uri-list', unis: 'text/uri-list', unityweb: 'application/vnd.unity', unv: 'application/i-deas', uoml: 'application/vnd.uoml+xml', uri: 'text/uri-list', uris: 'text/uri-list', ustar: [ 'application/x-ustar', 'multipart/x-ustar' ], utz: 'application/vnd.uiq.theme', uu: [ 'application/octet-stream', 'text/x-uuencode' ], uue: 'text/x-uuencode', uva: 'audio/vnd.dece.audio', 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', uvu: 'video/vnd.uvvu.mp4', uvv: 'video/vnd.dece.video', vcd: 'application/x-cdlink', vcf: 'text/x-vcard', vcg: 'application/vnd.groove-vcard', vcs: 'text/x-vcalendar', vcx: 'application/vnd.vcx', vda: 'application/vda', vdo: 'video/vdo', vew: 'application/groupwise', vis: 'application/vnd.visionary', viv: [ 'video/vivo', 'video/vnd.vivo' ], vivo: [ 'video/vivo', 'video/vnd.vivo' ], vmd: 'application/vocaltec-media-desc', vmf: 'application/vocaltec-media-file', voc: [ 'audio/voc', 'audio/x-voc' ], vos: 'video/vosaic', vox: 'audio/voxware', vqe: 'audio/x-twinvq-plugin', vqf: 'audio/x-twinvq', vql: 'audio/x-twinvq-plugin', vrml: [ 'model/vrml', 'x-world/x-vrml', 'application/x-vrml' ], vrt: 'x-world/x-vrt', vsd: [ 'application/vnd.visio', 'application/x-visio' ], vsf: 'application/vnd.vsf', vst: 'application/x-visio', vsw: 'application/x-visio', vtu: 'model/vnd.vtu', vxml: 'application/voicexml+xml', w60: 'application/wordperfect6.0', w61: 'application/wordperfect6.1', w6w: 'application/msword', wad: 'application/x-doom', wav: [ 'audio/wav', 'audio/x-wav' ], wax: 'audio/x-ms-wax', wb1: 'application/x-qpro', 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', web: 'application/vnd.xara', weba: 'audio/webm', webm: 'video/webm', webp: 'image/webp', wg: 'application/vnd.pmi.widget', wgt: 'application/widget', wiz: 'application/msword', wk1: 'application/x-123', wks: 'application/vnd.ms-works', wm: 'video/x-ms-wm', wma: 'audio/x-ms-wma', wmd: 'application/x-ms-wmd', wmf: [ 'windows/metafile', 'application/x-msmetafile' ], 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: 'video/x-ms-wmx', wmz: 'application/x-ms-wmz', woff: 'application/x-font-woff', word: 'application/msword', wp: 'application/wordperfect', wp5: [ 'application/wordperfect', 'application/wordperfect6.0' ], wp6: 'application/wordperfect', wpd: [ 'application/wordperfect', 'application/vnd.wordperfect', 'application/x-wpwin' ], wpl: 'application/vnd.ms-wpl', wps: 'application/vnd.ms-works', wq1: 'application/x-lotus', wqd: 'application/vnd.wqd', wri: [ 'application/mswrite', 'application/x-wri', 'application/x-mswrite' ], wrl: [ 'model/vrml', 'x-world/x-vrml', 'application/x-world' ], wrz: [ 'model/vrml', 'x-world/x-vrml' ], wsc: 'text/scriplet', wsdl: 'application/wsdl+xml', wspolicy: 'application/wspolicy+xml', wsrc: 'application/x-wais-source', wtb: 'application/vnd.webturbo', wtk: 'application/x-wintalk', wvx: 'video/x-ms-wvx', 'x-png': 'image/png', x3d: 'application/vnd.hzn-3d-crossword', xaf: 'x-world/x-vrml', xap: 'application/x-silverlight-app', xar: 'application/vnd.xara', xbap: 'application/x-ms-xbap', xbd: 'application/vnd.fujixerox.docuworks.binder', xbm: [ 'image/xbm', 'image/x-xbm', 'image/x-xbitmap' ], xdf: 'application/xcap-diff+xml', xdm: 'application/vnd.syncml.dm+xml', xdp: 'application/vnd.adobe.xdp+xml', xdr: 'video/x-amt-demorun', xdssc: 'application/dssc+xml', xdw: 'application/vnd.fujixerox.docuworks', xenc: 'application/xenc+xml', xer: 'application/patch-ops-error+xml', xfdf: 'application/vnd.adobe.xfdf', xfdl: 'application/vnd.xfdl', xgz: 'xgl/drawing', xhtml: 'application/xhtml+xml', xif: 'image/vnd.xiff', xl: 'application/excel', xla: [ 'application/vnd.ms-excel', 'application/excel', 'application/x-msexcel', 'application/x-excel' ], xlam: 'application/vnd.ms-excel.addin.macroenabled.12', xlb: [ 'application/excel', 'application/vnd.ms-excel', 'application/x-excel' ], xlc: [ 'application/vnd.ms-excel', 'application/excel', 'application/x-excel' ], xld: [ 'application/excel', 'application/x-excel' ], xlk: [ 'application/excel', 'application/x-excel' ], xll: [ 'application/excel', 'application/vnd.ms-excel', 'application/x-excel' ], xlm: [ 'application/vnd.ms-excel', 'application/excel', 'application/x-excel' ], xls: [ 'application/vnd.ms-excel', 'application/excel', 'application/x-msexcel', 'application/x-excel' ], 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/vnd.ms-excel', 'application/excel', 'application/x-excel' ], xltm: 'application/vnd.ms-excel.template.macroenabled.12', xltx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', xlv: [ 'application/excel', 'application/x-excel' ], xlw: [ 'application/vnd.ms-excel', 'application/excel', 'application/x-msexcel', 'application/x-excel' ], xm: 'audio/xm', xml: [ 'application/xml', 'text/xml', 'application/atom+xml', 'application/rss+xml' ], xmz: 'xgl/movie', xo: 'application/vnd.olpc-sugar', xof: 'x-world/x-vrml', xop: 'application/xop+xml', xpi: 'application/x-xpinstall', xpix: 'application/x-vnd.ls-xpix', xpm: [ 'image/xpm', 'image/x-xpixmap' ], xpr: 'application/vnd.is-xpr', xps: 'application/vnd.ms-xpsdocument', xpw: 'application/vnd.intercon.formnet', xslt: 'application/xslt+xml', xsm: 'application/vnd.syncml+xml', xspf: 'application/xspf+xml', xsr: 'video/x-amt-showrun', xul: 'application/vnd.mozilla.xul+xml', xwd: [ 'image/x-xwd', 'image/x-xwindowdump' ], xyz: [ 'chemical/x-xyz', 'chemical/x-pdb' ], yang: 'application/yang', yin: 'application/yin+xml', z: [ 'application/x-compressed', 'application/x-compress' ], zaz: 'application/vnd.zzazz.deck+xml', zip: [ 'application/zip', 'multipart/x-zip', 'application/x-zip-compressed', 'application/x-compressed' ], zir: 'application/vnd.zul', zmm: 'application/vnd.handheld-entertainment+xml', zoo: 'application/octet-stream', zsh: 'text/x-script.zsh' } }; }), "[project]/node_modules/mailparser/node_modules/@zone-eu/mailsplit/node_modules/libmime/lib/libmime.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { "use strict"; /* eslint no-control-regex: 0, no-div-regex: 0, quotes: 0 */ const { Buffer } = __turbopack_context__.r("[externals]/node:buffer [external] (node:buffer, cjs)"); const libcharset = __turbopack_context__.r("[project]/node_modules/mailparser/node_modules/@zone-eu/mailsplit/node_modules/libmime/lib/charset.js [app-route] (ecmascript)"); const libbase64 = __turbopack_context__.r("[project]/node_modules/libbase64/lib/libbase64.js [app-route] (ecmascript)"); const libqp = __turbopack_context__.r("[project]/node_modules/libqp/lib/libqp.js [app-route] (ecmascript)"); const mimetypes = __turbopack_context__.r("[project]/node_modules/mailparser/node_modules/@zone-eu/mailsplit/node_modules/libmime/lib/mimetypes.js [app-route] (ecmascript)"); const STAGE_KEY = 0x1001; const STAGE_VALUE = 0x1002; class Libmime { constructor(config){ this.config = config || {}; } /** * Checks if a value is plaintext string (uses only printable 7bit chars) * * @param {String} value String to be tested * @returns {Boolean} true if it is a plaintext string */ isPlainText(value) { if (typeof value !== 'string' || /[\x00-\x08\x0b\x0c\x0e-\x1f\u0080-\uFFFF]/.test(value)) { return false; } else { return true; } } /** * Checks if a multi line string containes lines longer than the selected value. * * Useful when detecting if a mail message needs any processing at all – * if only plaintext characters are used and lines are short, then there is * no need to encode the values in any way. If the value is plaintext but has * longer lines then allowed, then use format=flowed * * @param {Number} lineLength Max line length to check for * @returns {Boolean} Returns true if there is at least one line longer than lineLength chars */ hasLongerLines(str, lineLength) { return new RegExp('^.{' + (lineLength + 1) + ',}', 'm').test(str); } /** * Decodes a string from a format=flowed soft wrapping. * * @param {String} str Plaintext string with format=flowed to decode * @param {Boolean} [delSp] If true, delete leading spaces (delsp=yes) * @return {String} Mime decoded string */ decodeFlowed(str, delSp) { str = (str || '').toString(); let lines = str.split(/\r?\n/); let result = [], buffer = null; // remove soft linebreaks // soft linebreaks are added after space symbols for(let i = 0; i < lines.length; i++){ let line = lines[i]; let isSoftBreak = buffer !== null && / $/.test(buffer) && !/(^|\n)-- $/.test(buffer); if (isSoftBreak) { if (delSp) { // delsp adds space to text to be able to fold it // these spaces can be removed once the text is unfolded buffer = buffer.slice(0, -1) + line; } else { buffer += line; } } else { if (buffer !== null) { result.push(buffer); } buffer = line; } } if (buffer) { result.push(buffer); } // remove whitespace stuffing // http://tools.ietf.org/html/rfc3676#section-4.4 return result.join('\n').replace(/^ /gm, ''); } /** * Adds soft line breaks to content marked with format=flowed to * ensure that no line in the message is never longer than lineLength * * @param {String} str Plaintext string that requires wrapping * @param {Number} [lineLength=76] Maximum length of a line * @return {String} String with forced line breaks */ encodeFlowed(str, lineLength) { lineLength = lineLength || 76; let flowed = []; str.split(/\r?\n/).forEach((line)=>{ flowed.push(this.foldLines(line// space stuffing http://tools.ietf.org/html/rfc3676#section-4.2 .replace(/^( |From|>)/gim, ' $1'), lineLength, true)); }); return flowed.join('\r\n'); } /** * Encodes a string or an Buffer to an UTF-8 MIME Word (rfc2047) * * @param {String|Buffer} data String to be encoded * @param {String} mimeWordEncoding='Q' Encoding for the mime word, either Q or B * @param {Number} [maxLength=0] If set, split mime words into several chunks if needed * @return {String} Single or several mime words joined together */ encodeWord(data, mimeWordEncoding, maxLength) { mimeWordEncoding = (mimeWordEncoding || 'Q').toString().toUpperCase().trim().charAt(0); maxLength = maxLength || 0; let encodedStr; let toCharset = 'UTF-8'; if (maxLength && maxLength > 7 + toCharset.length) { maxLength -= 7 + toCharset.length; } if (mimeWordEncoding === 'Q') { // https://tools.ietf.org/html/rfc2047#section-5 rule (3) encodedStr = libqp.encode(data).replace(/[^a-z0-9!*+\-/=]/gi, (chr)=>{ let ord = chr.charCodeAt(0).toString(16).toUpperCase(); if (chr === ' ') { return '_'; } else { return '=' + (ord.length === 1 ? '0' + ord : ord); } }); } else if (mimeWordEncoding === 'B') { encodedStr = typeof data === 'string' ? data : libbase64.encode(data); maxLength = maxLength ? Math.max(3, (maxLength - maxLength % 4) / 4 * 3) : 0; } if (maxLength && (mimeWordEncoding !== 'B' ? encodedStr : libbase64.encode(data)).length > maxLength) { if (mimeWordEncoding === 'Q') { encodedStr = this.splitMimeEncodedString(encodedStr, maxLength).join('?= =?' + toCharset + '?' + mimeWordEncoding + '?'); } else { // RFC2047 6.3 (2) states that encoded-word must include an integral number of characters, so no chopping unicode sequences let parts = []; let lpart = ''; for(let i = 0, len = encodedStr.length; i < len; i++){ let chr = encodedStr.charAt(i); // check if we can add this character to the existing string // without breaking byte length limit if (/[\ud83c\ud83d\ud83e]/.test(chr) && i < len - 1) { // composite emoji byte, so add the next byte as well chr += encodedStr.charAt(++i); } if (Buffer.byteLength(lpart + chr) <= maxLength || i === 0) { lpart += chr; } else { // we hit the length limit, so push the existing string and start over parts.push(libbase64.encode(lpart)); lpart = chr; } } if (lpart) { parts.push(libbase64.encode(lpart)); } if (parts.length > 1) { encodedStr = parts.join('?= =?' + toCharset + '?' + mimeWordEncoding + '?'); } else { encodedStr = parts.join(''); } } } else if (mimeWordEncoding === 'B') { encodedStr = libbase64.encode(data); } return '=?' + toCharset + '?' + mimeWordEncoding + '?' + encodedStr + (encodedStr.substr(-2) === '?=' ? '' : '?='); } /** * Decode a complete mime word encoded string * * @param {String} str Mime word encoded string * @return {String} Decoded unicode string */ decodeWord(charset, encoding, str) { // RFC2231 added language tag to the encoding // see: https://tools.ietf.org/html/rfc2231#section-5 // this implementation silently ignores this tag let splitPos = charset.indexOf('*'); if (splitPos >= 0) { charset = charset.substr(0, splitPos); } charset = libcharset.normalizeCharset(charset); encoding = encoding.toUpperCase(); if (encoding === 'Q') { str = str// remove spaces between = and hex char, this might indicate invalidly applied line splitting .replace(/=\s+([0-9a-fA-F])/g, '=$1')// convert all underscores to spaces .replace(/[_\s]/g, ' '); let buf = Buffer.from(str); let bytes = []; for(let i = 0, len = buf.length; i < len; i++){ let c = buf[i]; if (i <= len - 2 && c === 0x3d /* = */ ) { let c1 = this.getHex(buf[i + 1]); let c2 = this.getHex(buf[i + 2]); if (c1 && c2) { let c = parseInt(c1 + c2, 16); bytes.push(c); i += 2; continue; } } bytes.push(c); } str = Buffer.from(bytes); } else if (encoding === 'B') { str = Buffer.concat(str.split('=').filter((s)=>s !== '') // filter empty string .map((str)=>Buffer.from(str, 'base64'))); } else { // keep as is, convert Buffer to unicode string, assume utf8 str = Buffer.from(str); } return libcharset.decode(str, charset); } /** * Finds word sequences with non ascii text and converts these to mime words * * @param {String|Buffer} data String to be encoded * @param {String} mimeWordEncoding='Q' Encoding for the mime word, either Q or B * @param {Number} [maxLength=0] If set, split mime words into several chunks if needed * @param {String} [fromCharset='UTF-8'] Source sharacter set * @return {String} String with possible mime words */ encodeWords(data, mimeWordEncoding, maxLength, fromCharset) { if (!fromCharset && typeof maxLength === 'string' && !maxLength.match(/^[0-9]+$/)) { fromCharset = maxLength; maxLength = undefined; } maxLength = maxLength || 0; let decodedValue = libcharset.decode(libcharset.convert(data || '', fromCharset)); let encodedValue; let firstMatch = decodedValue.match(/(?:^|\s)([^\s]*[\u0080-\uFFFF])/); if (!firstMatch) { return decodedValue; } let lastMatch = decodedValue.match(/([\u0080-\uFFFF][^\s]*)[^\u0080-\uFFFF]*$/); if (!lastMatch) { // should not happen return decodedValue; } let startIndex = firstMatch.index + (firstMatch[0].match(/[^\s]/) || { index: 0 }).index; let endIndex = lastMatch.index + (lastMatch[1] || '').length; encodedValue = (startIndex ? decodedValue.substr(0, startIndex) : '') + this.encodeWord(decodedValue.substring(startIndex, endIndex), mimeWordEncoding || 'Q', maxLength) + (endIndex < decodedValue.length ? decodedValue.substr(endIndex) : ''); return encodedValue; } /** * Decode a string that might include one or several mime words * * @param {String} str String including some mime words that will be encoded * @return {String} Decoded unicode string */ decodeWords(str) { return (str || '').toString()// find base64 words that can be joined .replace(/(=\?([^?]+)\?[Bb]\?[^?]*\?=)\s*(?==\?([^?]+)\?[Bb]\?[^?]*\?=)/g, (match, left, chLeft, chRight)=>{ // only mark b64 chunks to be joined if charsets match if (libcharset.normalizeCharset(chLeft || '') === libcharset.normalizeCharset(chRight || '')) { // set a joiner marker return left + '__\x00JOIN\x00__'; } return match; })// find QP words that can be joined .replace(/(=\?([^?]+)\?[Qq]\?[^?]*\?=)\s*(?==\?([^?]+)\?[Qq]\?[^?]*\?=)/g, (match, left, chLeft, chRight)=>{ // only mark QP chunks to be joined if charsets match if (libcharset.normalizeCharset(chLeft || '') === libcharset.normalizeCharset(chRight || '')) { // set a joiner marker return left + '__\x00JOIN\x00__'; } return match; })// join base64 encoded words .replace(/(\?=)?__\x00JOIN\x00__(=\?([^?]+)\?[QqBb]\?)?/g, '')// remove spaces between mime encoded words .replace(/(=\?[^?]+\?[QqBb]\?[^?]*\?=)\s+(?==\?[^?]+\?[QqBb]\?[^?]*\?=)/g, '$1')// decode words .replace(/=\?([\w_\-*]+)\?([QqBb])\?([^?]*)\?=/g, (m, charset, encoding, text)=>this.decodeWord(charset, encoding, text)); } getHex(c) { if (c >= 0x30 /* 0 */ && c <= 0x39 || c >= 0x61 /* a */ && c <= 0x66 || c >= 0x41 /* A */ && c <= 0x46) { return String.fromCharCode(c); } return false; } /** * Splits a string by : * The result is not mime word decoded, you need to do your own decoding based * on the rules for the specific header key * * @param {String} headerLine Single header line, might include linebreaks as well if folded * @return {Object} And object of {key, value} */ decodeHeader(headerLine) { let line = (headerLine || '').toString().replace(/(?:\r?\n|\r)[ \t]*/g, ' ').trim(), match = line.match(/^\s*([^:]+):(.*)$/), key = (match && match[1] || '').trim().toLowerCase(), value = (match && match[2] || '').trim(); return { key, value }; } /** * Parses a block of header lines. Does not decode mime words as every * header might have its own rules (eg. formatted email addresses and such) * * @param {String} headers Headers string * @return {Object} An object of headers, where header keys are object keys. NB! Several values with the same key make up an Array */ decodeHeaders(headers) { let lines = headers.split(/\r?\n|\r/), headersObj = {}, header, i, len; for(i = lines.length - 1; i >= 0; i--){ if (i && lines[i].match(/^\s/)) { lines[i - 1] += '\r\n' + lines[i]; lines.splice(i, 1); } } for(i = 0, len = lines.length; i < len; i++){ header = this.decodeHeader(lines[i]); if (!headersObj[header.key]) { headersObj[header.key] = [ header.value ]; } else { headersObj[header.key].push(header.value); } } return headersObj; } /** * Joins parsed header value together as 'value; param1=value1; param2=value2' * PS: We are following RFC 822 for the list of special characters that we need to keep in quotes. * Refer: https://www.w3.org/Protocols/rfc1341/4_Content-Type.html * @param {Object} structured Parsed header value * @return {String} joined header value */ buildHeaderValue(structured) { let paramsArray = []; Object.keys(structured.params || {}).forEach((param)=>{ // filename might include unicode characters so it is a special case let value = structured.params[param]; if (!this.isPlainText(value) || value.length >= 75) { this.buildHeaderParam(param, value, 50).forEach((encodedParam)=>{ if (!/[\s"\\;:/=(),<>@[\]?]|^[-']|'$/.test(encodedParam.value) || encodedParam.key.substr(-1) === '*') { paramsArray.push(encodedParam.key + '=' + encodedParam.value); } else { paramsArray.push(encodedParam.key + '=' + JSON.stringify(encodedParam.value)); } }); } else if (/[\s'"\\;:/=(),<>@[\]?]|^-/.test(value)) { paramsArray.push(param + '=' + JSON.stringify(value)); } else { paramsArray.push(param + '=' + value); } }); return structured.value + (paramsArray.length ? '; ' + paramsArray.join('; ') : ''); } /** * Parses a header value with key=value arguments into a structured * object. * * parseHeaderValue('content-type: text/plain; CHARSET='UTF-8'') -> * { * 'value': 'text/plain', * 'params': { * 'charset': 'UTF-8' * } * } * * @param {String} str Header value * @return {Object} Header value as a parsed structure */ parseHeaderValue(str) { let response = { value: false, params: {} }; let key = false; let value = ''; let stage = STAGE_VALUE; let quote = false; let escaped = false; let chr; for(let i = 0, len = str.length; i < len; i++){ chr = str.charAt(i); switch(stage){ case STAGE_KEY: if (chr === '=') { key = value.trim().toLowerCase(); stage = STAGE_VALUE; value = ''; break; } value += chr; break; case STAGE_VALUE: if (escaped) { value += chr; } else if (chr === '\\') { escaped = true; continue; } else if (quote && chr === quote) { quote = false; } else if (!quote && chr === '"') { quote = chr; } else if (!quote && chr === ';') { if (key === false) { response.value = value.trim(); } else { response.params[key] = value.trim(); } stage = STAGE_KEY; value = ''; } else { value += chr; } escaped = false; break; } } // finalize remainder value = value.trim(); if (stage === STAGE_VALUE) { if (key === false) { // default value response.value = value; } else { // subkey value response.params[key] = value; } } else if (value) { // treat as key without value, see emptykey: // Header-Key: somevalue; key=value; emptykey response.params[value.toLowerCase()] = ''; } // handle parameter value continuations // https://tools.ietf.org/html/rfc2231#section-3 // preprocess values Object.keys(response.params).forEach((key)=>{ let actualKey; let nr; let value; let match = key.match(/\*((\d+)\*?)?$/); if (!match) { // nothing to do here, does not seem like a continuation param return; } actualKey = key.substr(0, match.index).toLowerCase(); nr = Number(match[2]) || 0; if (!response.params[actualKey] || typeof response.params[actualKey] !== 'object') { response.params[actualKey] = { charset: false, values: [] }; } value = response.params[key]; if (nr === 0 && match[0].charAt(match[0].length - 1) === '*' && (match = value.match(/^([^']*)'[^']*'(.*)$/))) { response.params[actualKey].charset = match[1] || 'utf-8'; value = match[2]; } response.params[actualKey].values.push({ nr, value }); // remove the old reference delete response.params[key]; }); // concatenate split rfc2231 strings and convert encoded strings to mime encoded words Object.keys(response.params).forEach((key)=>{ let value; if (response.params[key] && Array.isArray(response.params[key].values)) { value = response.params[key].values.sort((a, b)=>a.nr - b.nr).map((val)=>val && val.value || '').join(''); if (response.params[key].charset) { // convert "%AB" to "=?charset?Q?=AB?=" and then to unicode response.params[key] = this.decodeWords('=?' + response.params[key].charset + '?Q?' + value// fix invalidly encoded chars .replace(/[=?_\s]/g, (s)=>{ let c = s.charCodeAt(0).toString(16); if (s === ' ') { return '_'; } else { return '%' + (c.length < 2 ? '0' : '') + c; } })// change from urlencoding to percent encoding .replace(/%/g, '=') + '?='); } else { response.params[key] = this.decodeWords(value); } } }); return response; } /** * Encodes a string or an Buffer to an UTF-8 Parameter Value Continuation encoding (rfc2231) * Useful for splitting long parameter values. * * For example * title="unicode string" * becomes * title*0*=utf-8''unicode * title*1*=%20string * * @param {String|Buffer} data String to be encoded * @param {Number} [maxLength=50] Max length for generated chunks * @param {String} [fromCharset='UTF-8'] Source sharacter set * @return {Array} A list of encoded keys and headers */ buildHeaderParam(key, data, maxLength, fromCharset) { let list = []; let encodedStr = typeof data === 'string' ? data : this.decode(data, fromCharset); let encodedStrArr; let chr, ord; let line; let startPos = 0; let isEncoded = false; let i, len; maxLength = maxLength || 50; // process ascii only text if (this.isPlainText(data)) { // check if conversion is even needed if (encodedStr.length <= maxLength) { return [ { key, value: encodedStr } ]; } encodedStr = encodedStr.replace(new RegExp('.{' + maxLength + '}', 'g'), (str)=>{ list.push({ line: str }); return ''; }); if (encodedStr) { list.push({ line: encodedStr }); } } else { if (/[\uD800-\uDBFF]/.test(encodedStr)) { // string containts surrogate pairs, so normalize it to an array of bytes encodedStrArr = []; for(i = 0, len = encodedStr.length; i < len; i++){ chr = encodedStr.charAt(i); ord = chr.charCodeAt(0); if (ord >= 0xd800 && ord <= 0xdbff && i < len - 1) { chr += encodedStr.charAt(i + 1); encodedStrArr.push(chr); i++; } else { encodedStrArr.push(chr); } } encodedStr = encodedStrArr; } // first line includes the charset and language info and needs to be encoded // even if it does not contain any unicode characters line = "utf-8''"; isEncoded = true; startPos = 0; // process text with unicode or special chars for(i = 0, len = encodedStr.length; i < len; i++){ chr = encodedStr[i]; if (isEncoded) { chr = this.safeEncodeURIComponent(chr); } else { // try to urlencode current char chr = chr === ' ' ? chr : this.safeEncodeURIComponent(chr); // By default it is not required to encode a line, the need // only appears when the string contains unicode or special chars // in this case we start processing the line over and encode all chars if (chr !== encodedStr[i]) { // Check if it is even possible to add the encoded char to the line // If not, there is no reason to use this line, just push it to the list // and start a new line with the char that needs encoding if ((this.safeEncodeURIComponent(line) + chr).length >= maxLength) { list.push({ line, encoded: isEncoded }); line = ''; startPos = i - 1; } else { isEncoded = true; i = startPos; line = ''; continue; } } } // if the line is already too long, push it to the list and start a new one if ((line + chr).length >= maxLength) { list.push({ line, encoded: isEncoded }); line = chr = encodedStr[i] === ' ' ? ' ' : this.safeEncodeURIComponent(encodedStr[i]); if (chr === encodedStr[i]) { isEncoded = false; startPos = i - 1; } else { isEncoded = true; } } else { line += chr; } } if (line) { list.push({ line, encoded: isEncoded }); } } return list.map((item, i)=>({ // encoded lines: {name}*{part}* // unencoded lines: {name}*{part} // if any line needs to be encoded then the first line (part==0) is always encoded key: key + '*' + i + (item.encoded ? '*' : ''), value: item.line })); } /** * Returns file extension for a content type string. If no suitable extensions * are found, 'bin' is used as the default extension * * @param {String} mimeType Content type to be checked for * @return {String} File extension */ detectExtension(mimeType) { mimeType = (mimeType || '').toString().toLowerCase().replace(/\s/g, ''); if (!(mimeType in mimetypes.list)) { return 'bin'; } if (typeof mimetypes.list[mimeType] === 'string') { return mimetypes.list[mimeType]; } let mimeParts = mimeType.split('/'); // search for name match for(let i = 0, len = mimetypes.list[mimeType].length; i < len; i++){ if (mimeParts[1] === mimetypes.list[mimeType][i]) { return mimetypes.list[mimeType][i]; } } // use the first one return mimetypes.list[mimeType][0] !== '*' ? mimetypes.list[mimeType][0] : 'bin'; } /** * Returns content type for a file extension. If no suitable content types * are found, 'application/octet-stream' is used as the default content type * * @param {String} extension Extension to be checked for * @return {String} File extension */ detectMimeType(extension) { extension = (extension || '').toString().toLowerCase().replace(/\s/g, '').replace(/^\./g, '').split('.').pop(); if (!(extension in mimetypes.extensions)) { return 'application/octet-stream'; } if (typeof mimetypes.extensions[extension] === 'string') { return mimetypes.extensions[extension]; } let mimeParts; // search for name match for(let i = 0, len = mimetypes.extensions[extension].length; i < len; i++){ mimeParts = mimetypes.extensions[extension][i].split('/'); if (mimeParts[1] === extension) { return mimetypes.extensions[extension][i]; } } // use the first one return mimetypes.extensions[extension][0]; } /** * Folds long lines, useful for folding header lines (afterSpace=false) and * flowed text (afterSpace=true) * * @param {String} str String to be folded * @param {Number} [lineLength=76] Maximum length of a line * @param {Boolean} afterSpace If true, leave a space in th end of a line * @return {String} String with folded lines */ foldLines(str, lineLength, afterSpace) { str = (str || '').toString(); lineLength = lineLength || 76; let pos = 0, len = str.length, result = '', line, match; while(pos < len){ line = str.substr(pos, lineLength); if (line.length < lineLength) { result += line; break; } if (match = line.match(/^[^\n\r]*(\r?\n|\r)/)) { line = match[0]; result += line; pos += line.length; continue; } else if ((match = line.match(/(\s+)[^\s]*$/)) && match[0].length - (afterSpace ? (match[1] || '').length : 0) < line.length) { line = line.substr(0, line.length - (match[0].length - (afterSpace ? (match[1] || '').length : 0))); } else if (match = str.substr(pos + line.length).match(/^[^\s]+(\s*)/)) { line = line + match[0].substr(0, match[0].length - (!afterSpace ? (match[1] || '').length : 0)); } result += line; pos += line.length; if (pos < len) { result += '\r\n'; } } return result; } /** * Splits a mime encoded string. Needed for dividing mime words into smaller chunks * * @param {String} str Mime encoded string to be split up * @param {Number} maxlen Maximum length of characters for one part (minimum 12) * @return {Array} Split string */ splitMimeEncodedString(str, maxlen) { let curLine, match, chr, done, lines = []; // require at least 12 symbols to fit possible 4 octet UTF-8 sequences maxlen = Math.max(maxlen || 0, 12); while(str.length){ curLine = str.substr(0, maxlen); // move incomplete escaped char back to main if (match = curLine.match(/[=][0-9A-F]?$/i)) { curLine = curLine.substr(0, match.index); } done = false; while(!done){ done = true; // check if not middle of a unicode char sequence if (match = str.substr(curLine.length).match(/^[=]([0-9A-F]{2})/i)) { chr = parseInt(match[1], 16); // invalid sequence, move one char back anc recheck if (chr < 0xc2 && chr > 0x7f) { curLine = curLine.substr(0, curLine.length - 3); done = false; } } } if (curLine.length) { lines.push(curLine); } str = str.substr(curLine.length); } return lines; } encodeURICharComponent(chr) { let res = ''; let ord = chr.charCodeAt(0).toString(16).toUpperCase(); if (ord.length % 2) { ord = '0' + ord; } if (ord.length > 2) { for(let i = 0, len = ord.length / 2; i < len; i++){ res += '%' + ord.substr(i, 2); } } else { res += '%' + ord; } return res; } safeEncodeURIComponent(str) { str = (str || '').toString(); try { // might throw if we try to encode invalid sequences, eg. partial emoji str = encodeURIComponent(str); } catch (E) { // should never run return str.replace(/[^\x00-\x1F *'()<>@,;:\\"[\]?=\u007F-\uFFFF]+/g, ''); } // ensure chars that are not handled by encodeURICompent are converted as well return str.replace(/[\x00-\x1F *'()<>@,;:\\"[\]?=\u007F-\uFFFF]/g, (chr)=>this.encodeURICharComponent(chr)); } } module.exports = new Libmime(); module.exports.Libmime = Libmime; }), ]; //# sourceMappingURL=node_modules_09pvdqh._.js.map