#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

# This file controls what Internet media types are sent to the client for
# given file extension(s). Sending the correct media type to the client
# is important so they know how to handle the content of the file.
# Extra types can either be added here or by using an AddType directive
# in your config files. For more information about Internet media types,
# please read RFC 2045, 2046, 2047, 2048, and 2077. The Internet media type
# registry is at <http://www.iana.org/assignments/media-types/>.

# MIME type                              Extensions

application/andrew-inset                 ez
application/atom+xml                     atom
application/java-archive                 jar
application/mac-binhex40                 hqx
application/mac-compactpro               cpt
application/mathml+xml                   mathml
application/msword                       doc
application/octet-stream                 bin dms lha lzh exe class so dll dmg
application/oda                          oda
application/ogg                          ogg
application/pdf                          pdf
application/pgp-encrypted                pgp
application/postscript                   ai eps ps
application/rdf+xml                      rdf
application/smil                         smi smil
application/srgs                         gram
application/srgs+xml                     grxml
application/vnd.mif                      mif
application/vnd.mozilla.xul+xml          xul
application/vnd.ms-excel                 xls
application/vnd.ms-powerpoint            ppt
application/vnd.rn-realmedia             rm
application/vnd.wap.wbxml                wbxml
application/vnd.wap.wmlc                 wmlc
application/vnd.wap.wmlscriptc           wmlsc
application/voicexml+xml                 vxml
application/x-bcpio                      bcpio
application/x-cdlink                     vcd
application/x-chess-pgn                  pgn
application/x-cpio                       cpio
application/x-csh                        csh
application/x-director                   dcr dir dxr
application/x-dvi                        dvi
application/x-futuresplash               spl
application/x-gtar                       gtar
application/x-hdf                        hdf
application/x-java-jnlp-file             jnlp
application/x-javascript                 js
application/x-koan                       skp skd skt skm
application/x-latex                      latex
application/x-netcdf                     nc cdf
application/x-sh                         sh
application/x-shar                       shar
application/x-shockwave-flash            swf
application/x-stuffit                    sit
application/x-sv4cpio                    sv4cpio
application/x-sv4crc                     sv4crc
application/x-tar                        tar
application/x-tcl                        tcl
application/x-tex                        tex
application/x-texinfo                    texinfo texi
application/x-troff                      t tr roff
application/x-troff-man                  man
application/x-troff-me                   me
application/x-troff-ms                   ms
application/x-ustar                      ustar
application/x-wais-source                src
application/xhtml+xml                    xhtml xht
application/xml                          xml xsl pom
application/xml-dtd                      dtd
application/xslt+xml                     xslt
application/zip                          zip
audio/basic                              au snd
audio/midi                               mid midi kar
audio/mpeg                               mpga mp2 mp3
audio/x-aiff                             aif aiff aifc
audio/x-mpegurl                          m3u
audio/x-pn-realaudio                     ram ra
audio/x-wav                              wav
chemical/x-pdb                           pdb
chemical/x-xyz                           xyz
image/bmp                                bmp
image/cgm                                cgm
image/gif                                gif
image/ief                                ief
image/jp2                                jp2
image/jpeg                               jpeg jpg jpe
image/pict                               pict pic pct
image/png                                png
image/svg+xml                            svg
image/tiff                               tiff tif
image/vnd.djvu                           djvu djv
image/vnd.wap.wbmp                       wbmp
image/x-cmu-raster                       ras
image/x-icon                             ico
image/x-macpaint                         pntg pnt mac
image/x-portable-anymap                  pnm
image/x-portable-bitmap                  pbm
image/x-portable-graymap                 pgm
image/x-portable-pixmap                  ppm
image/x-quicktime                        qtif qti
image/x-rgb                              rgb
image/x-xbitmap                          xbm
image/x-xpixmap                          xpm
image/x-xwindowdump                      xwd
model/iges                               igs iges
model/mesh                               msh mesh silo
model/vrml                               wrl vrml
text/calendar                            ics ifb
text/css                                 css
text/html                                html htm
text/plain                               asc txt sha1 md5
text/richtext                            rtx
text/rtf                                 rtf
text/sgml                                sgml sgm
text/tab-separated-values                tsv
text/vnd.wap.wml                         wml
text/vnd.wap.wmlscript                   wmls
text/x-setext                            etx
video/mp4                                mp4
video/mpeg                               mpeg mpg mpe
video/quicktime                          qt mov
video/vnd.mpegurl                        mxu m4u
video/x-dv                               dv dif
video/x-msvideo                          avi
video/x-sgi-movie                        movie
x-conference/x-cooltalk                  ice
