Fossil

Hex Artifact Content
Login

Artifact 7ae998e9b479f762019a8f584f70f0029000eb96:


0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20  /*.** Copyright 
0010: 28 63 29 20 32 30 30 37 20 44 2e 20 52 69 63 68  (c) 2007 D. Rich
0020: 61 72 64 20 48 69 70 70 0a 2a 2a 0a 2a 2a 20 54  ard Hipp.**.** T
0030: 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66  his program is f
0040: 72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f  ree software; yo
0050: 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75  u can redistribu
0060: 74 65 20 69 74 20 61 6e 64 2f 6f 72 0a 2a 2a 20  te it and/or.** 
0070: 6d 6f 64 69 66 79 20 69 74 20 75 6e 64 65 72 20  modify it under 
0080: 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65  the terms of the
0090: 20 53 69 6d 70 6c 69 66 69 65 64 20 42 53 44 20   Simplified BSD 
00a0: 4c 69 63 65 6e 73 65 20 28 61 6c 73 6f 0a 2a 2a  License (also.**
00b0: 20 6b 6e 6f 77 6e 20 61 73 20 74 68 65 20 22 32   known as the "2
00c0: 2d 43 6c 61 75 73 65 20 4c 69 63 65 6e 73 65 22  -Clause License"
00d0: 20 6f 72 20 22 46 72 65 65 42 53 44 20 4c 69 63   or "FreeBSD Lic
00e0: 65 6e 73 65 22 2e 29 0a 0a 2a 2a 20 54 68 69 73  ense".)..** This
00f0: 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 74   program is dist
0100: 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20 68  ributed in the h
0110: 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c 6c  ope that it will
0120: 20 62 65 20 75 73 65 66 75 6c 2c 0a 2a 2a 20 62   be useful,.** b
0130: 75 74 20 77 69 74 68 6f 75 74 20 61 6e 79 20 77  ut without any w
0140: 61 72 72 61 6e 74 79 3b 20 77 69 74 68 6f 75 74  arranty; without
0150: 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 65   even the implie
0160: 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 2a 2a  d warranty of.**
0170: 20 6d 65 72 63 68 61 6e 74 61 62 69 6c 69 74 79   merchantability
0180: 20 6f 72 20 66 69 74 6e 65 73 73 20 66 6f 72 20   or fitness for 
0190: 61 20 70 61 72 74 69 63 75 6c 61 72 20 70 75 72  a particular pur
01a0: 70 6f 73 65 2e 0a 2a 2a 0a 2a 2a 20 41 75 74 68  pose..**.** Auth
01b0: 6f 72 20 63 6f 6e 74 61 63 74 20 69 6e 66 6f 72  or contact infor
01c0: 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 20 20 64 72 68  mation:.**   drh
01d0: 40 68 77 61 63 69 2e 63 6f 6d 0a 2a 2a 20 20 20  @hwaci.com.**   
01e0: 68 74 74 70 3a 2f 2f 77 77 77 2e 68 77 61 63 69  http://www.hwaci
01f0: 2e 63 6f 6d 2f 64 72 68 2f 0a 2a 2a 0a 2a 2a 2a  .com/drh/.**.***
0200: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0210: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0220: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0230: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0240: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 0a  ************.**.
0250: 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63 6f 6e  ** This file con
0260: 74 61 69 6e 73 20 63 6f 64 65 20 74 6f 20 69 6d  tains code to im
0270: 70 6c 65 6d 65 6e 74 20 74 68 65 20 22 2f 64 6f  plement the "/do
0280: 63 22 20 77 65 62 20 70 61 67 65 20 61 6e 64 20  c" web page and 
0290: 72 65 6c 61 74 65 64 0a 2a 2a 20 70 61 67 65 73  related.** pages
02a0: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 63  ..*/.#include "c
02b0: 6f 6e 66 69 67 2e 68 22 0a 23 69 6e 63 6c 75 64  onfig.h".#includ
02c0: 65 20 22 64 6f 63 2e 68 22 0a 23 69 6e 63 6c 75  e "doc.h".#inclu
02d0: 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 0a 2f  de <assert.h>../
02e0: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 67 75 65 73  *.** Try to gues
02f0: 73 20 74 68 65 20 6d 69 6d 65 74 79 70 65 20 66  s the mimetype f
0300: 72 6f 6d 20 63 6f 6e 74 65 6e 74 2e 0a 2a 2a 0a  rom content..**.
0310: 2a 2a 20 49 66 20 74 68 65 20 63 6f 6e 74 65 6e  ** If the conten
0320: 74 20 69 73 20 70 75 72 65 20 74 65 78 74 2c 20  t is pure text, 
0330: 72 65 74 75 72 6e 20 4e 55 4c 4c 2e 0a 2a 2a 0a  return NULL..**.
0340: 2a 2a 20 46 6f 72 20 69 6d 61 67 65 20 74 79 70  ** For image typ
0350: 65 73 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 72  es, attempt to r
0360: 65 74 75 72 6e 20 61 6e 20 61 70 70 72 6f 70 72  eturn an appropr
0370: 69 61 74 65 20 6d 69 6d 65 74 79 70 65 0a 2a 2a  iate mimetype.**
0380: 20 6e 61 6d 65 20 6c 69 6b 65 20 22 69 6d 61 67   name like "imag
0390: 65 2f 67 69 66 22 20 6f 72 20 22 69 6d 61 67 65  e/gif" or "image
03a0: 2f 6a 70 65 67 22 2e 20 20 0a 2a 2a 0a 2a 2a 20  /jpeg".  .**.** 
03b0: 46 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 62 69  For any other bi
03c0: 6e 61 72 79 20 74 79 70 65 2c 20 72 65 74 75 72  nary type, retur
03d0: 6e 20 22 75 6e 6b 6e 6f 77 6e 2f 75 6e 6b 6e 6f  n "unknown/unkno
03e0: 77 6e 22 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68  wn"..*/.const ch
03f0: 61 72 20 2a 6d 69 6d 65 74 79 70 65 5f 66 72 6f  ar *mimetype_fro
0400: 6d 5f 63 6f 6e 74 65 6e 74 28 42 6c 6f 62 20 2a  m_content(Blob *
0410: 70 42 6c 6f 62 29 7b 0a 20 20 69 6e 74 20 69 3b  pBlob){.  int i;
0420: 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 63 6f 6e 73  .  int n;.  cons
0430: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
0440: 2a 78 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f  *x;..  static co
0450: 6e 73 74 20 63 68 61 72 20 69 73 42 69 6e 61 72  nst char isBinar
0460: 79 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 31 2c 20  y[] = {.     1, 
0470: 31 2c 20 31 2c 20 31 2c 20 20 31 2c 20 31 2c 20  1, 1, 1,  1, 1, 
0480: 31 2c 20 31 2c 20 20 20 20 31 2c 20 30 2c 20 30  1, 1,    1, 0, 0
0490: 2c 20 31 2c 20 20 30 2c 20 30 2c 20 31 2c 20 31  , 1,  0, 0, 1, 1
04a0: 2c 0a 20 20 20 20 20 31 2c 20 31 2c 20 31 2c 20  ,.     1, 1, 1, 
04b0: 31 2c 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20  1,  1, 1, 1, 1, 
04c0: 20 20 20 31 2c 20 31 2c 20 31 2c 20 30 2c 20 20     1, 1, 1, 0,  
04d0: 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20 20 7d 3b  1, 1, 1, 1,.  };
04e0: 0a 0a 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 6f  ..  /* A table o
04f0: 66 20 6d 69 6d 65 74 79 70 65 73 20 62 61 73 65  f mimetypes base
0500: 64 20 6f 6e 20 66 69 6c 65 20 63 6f 6e 74 65 6e  d on file conten
0510: 74 20 70 72 65 66 69 78 65 73 0a 20 20 2a 2f 0a  t prefixes.  */.
0520: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73    static const s
0530: 74 72 75 63 74 20 7b 0a 20 20 20 20 63 6f 6e 73  truct {.    cons
0540: 74 20 63 68 61 72 20 2a 7a 50 72 65 66 69 78 3b  t char *zPrefix;
0550: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69         /* The fi
0560: 6c 65 20 70 72 65 66 69 78 20 2a 2f 0a 20 20 20  le prefix */.   
0570: 20 69 6e 74 20 73 69 7a 65 3b 20 20 20 20 20 20   int size;      
0580: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
0590: 65 6e 67 74 68 20 6f 66 20 74 68 65 20 70 72 65  ength of the pre
05a0: 66 69 78 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74  fix */.    const
05b0: 20 63 68 61 72 20 2a 7a 4d 69 6d 65 74 79 70 65   char *zMimetype
05c0: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 72  ;     /* The cor
05d0: 72 65 73 70 6f 6e 64 69 6e 67 20 6d 69 6d 65 74  responding mimet
05e0: 79 70 65 20 2a 2f 0a 20 20 7d 20 61 4d 69 6d 65  ype */.  } aMime
05f0: 5b 5d 20 3d 20 7b 0a 20 20 20 20 7b 20 22 47 49  [] = {.    { "GI
0600: 46 38 37 61 22 2c 20 20 20 20 20 20 20 20 20 20  F87a",          
0610: 20 20 20 20 20 20 20 20 36 2c 20 22 69 6d 61 67          6, "imag
0620: 65 2f 67 69 66 22 20 20 7d 2c 0a 20 20 20 20 7b  e/gif"  },.    {
0630: 20 22 47 49 46 38 39 61 22 2c 20 20 20 20 20 20   "GIF89a",      
0640: 20 20 20 20 20 20 20 20 20 20 20 20 36 2c 20 22              6, "
0650: 69 6d 61 67 65 2f 67 69 66 22 20 20 7d 2c 0a 20  image/gif"  },. 
0660: 20 20 20 7b 20 22 5c 32 31 31 50 4e 47 5c 72 5c     { "\211PNG\r\
0670: 6e 5c 30 33 32 5c 6e 22 2c 20 20 20 20 20 20 20  n\032\n",       
0680: 38 2c 20 22 69 6d 61 67 65 2f 70 6e 67 22 20 20  8, "image/png"  
0690: 7d 2c 0a 20 20 20 20 7b 20 22 5c 33 37 37 5c 33  },.    { "\377\3
06a0: 33 32 5c 33 37 37 22 2c 20 20 20 20 20 20 20 20  32\377",        
06b0: 20 20 20 20 33 2c 20 22 69 6d 61 67 65 2f 6a 70      3, "image/jp
06c0: 65 67 22 20 7d 2c 0a 20 20 20 20 7b 20 22 5c 33  eg" },.    { "\3
06d0: 37 37 5c 33 33 30 5c 33 37 37 22 2c 20 20 20 20  77\330\377",    
06e0: 20 20 20 20 20 20 20 20 33 2c 20 22 69 6d 61 67          3, "imag
06f0: 65 2f 6a 70 65 67 22 20 7d 2c 0a 20 20 7d 3b 0a  e/jpeg" },.  };.
0700: 0a 20 20 78 20 3d 20 28 63 6f 6e 73 74 20 75 6e  .  x = (const un
0710: 73 69 67 6e 65 64 20 63 68 61 72 2a 29 62 6c 6f  signed char*)blo
0720: 62 5f 62 75 66 66 65 72 28 70 42 6c 6f 62 29 3b  b_buffer(pBlob);
0730: 0a 20 20 6e 20 3d 20 62 6c 6f 62 5f 73 69 7a 65  .  n = blob_size
0740: 28 70 42 6c 6f 62 29 3b 0a 20 20 66 6f 72 28 69  (pBlob);.  for(i
0750: 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20  =0; i<n; i++){. 
0760: 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72     unsigned char
0770: 20 63 20 3d 20 78 5b 69 5d 3b 0a 20 20 20 20 69   c = x[i];.    i
0780: 66 28 20 63 3c 3d 30 78 31 66 20 26 26 20 69 73  f( c<=0x1f && is
0790: 42 69 6e 61 72 79 5b 63 5d 20 29 7b 0a 20 20 20  Binary[c] ){.   
07a0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
07b0: 20 20 7d 0a 20 20 69 66 28 20 69 3e 3d 6e 20 29    }.  if( i>=n )
07c0: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 20  {.    return 0; 
07d0: 20 20 2f 2a 20 50 6c 61 69 6e 20 74 65 78 74 20    /* Plain text 
07e0: 2a 2f 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30  */.  }.  for(i=0
07f0: 3b 20 69 3c 73 69 7a 65 6f 66 28 61 4d 69 6d 65  ; i<sizeof(aMime
0800: 29 2f 73 69 7a 65 6f 66 28 61 4d 69 6d 65 5b 30  )/sizeof(aMime[0
0810: 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  ]); i++){.    if
0820: 28 20 6e 3e 3d 61 4d 69 6d 65 5b 69 5d 2e 73 69  ( n>=aMime[i].si
0830: 7a 65 20 26 26 20 6d 65 6d 63 6d 70 28 78 2c 20  ze && memcmp(x, 
0840: 61 4d 69 6d 65 5b 69 5d 2e 7a 50 72 65 66 69 78  aMime[i].zPrefix
0850: 2c 20 61 4d 69 6d 65 5b 69 5d 2e 73 69 7a 65 29  , aMime[i].size)
0860: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ==0 ){.      ret
0870: 75 72 6e 20 61 4d 69 6d 65 5b 69 5d 2e 7a 4d 69  urn aMime[i].zMi
0880: 6d 65 74 79 70 65 3b 0a 20 20 20 20 7d 0a 20 20  metype;.    }.  
0890: 7d 0a 20 20 72 65 74 75 72 6e 20 22 75 6e 6b 6e  }.  return "unkn
08a0: 6f 77 6e 2f 75 6e 6b 6e 6f 77 6e 22 3b 0a 7d 0a  own/unknown";.}.
08b0: 0a 2f 2a 0a 2a 2a 20 47 75 65 73 73 20 74 68 65  ./*.** Guess the
08c0: 20 6d 69 6d 65 2d 74 79 70 65 20 6f 66 20 61 20   mime-type of a 
08d0: 64 6f 63 75 6d 65 6e 74 20 62 61 73 65 64 20 6f  document based o
08e0: 6e 20 69 74 73 20 6e 61 6d 65 2e 0a 2a 2f 0a 63  n its name..*/.c
08f0: 6f 6e 73 74 20 63 68 61 72 20 2a 6d 69 6d 65 74  onst char *mimet
0900: 79 70 65 5f 66 72 6f 6d 5f 6e 61 6d 65 28 63 6f  ype_from_name(co
0910: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29  nst char *zName)
0920: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
0930: 7a 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  z;.  int i;.  in
0940: 74 20 66 69 72 73 74 2c 20 6c 61 73 74 3b 0a 20  t first, last;. 
0950: 20 69 6e 74 20 6c 65 6e 3b 0a 20 20 63 68 61 72   int len;.  char
0960: 20 7a 53 75 66 66 69 78 5b 32 30 5d 3b 0a 0a 20   zSuffix[20];.. 
0970: 20 2f 2a 20 41 20 74 61 62 6c 65 20 6f 66 20 6d   /* A table of m
0980: 69 6d 65 74 79 70 65 73 20 62 61 73 65 64 20 6f  imetypes based o
0990: 6e 20 66 69 6c 65 20 73 75 66 66 69 78 65 73 2e  n file suffixes.
09a0: 20 0a 20 20 2a 2a 20 53 75 66 66 69 78 65 73 20   .  ** Suffixes 
09b0: 6d 75 73 74 20 62 65 20 69 6e 20 73 6f 72 74 65  must be in sorte
09c0: 64 20 6f 72 64 65 72 20 73 6f 20 74 68 61 74 20  d order so that 
09d0: 77 65 20 63 61 6e 20 64 6f 20 61 20 62 69 6e 61  we can do a bina
09e0: 72 79 0a 20 20 2a 2a 20 73 65 61 72 63 68 20 74  ry.  ** search t
09f0: 6f 20 66 69 6e 64 20 74 68 65 20 6d 69 6d 65 2d  o find the mime-
0a00: 74 79 70 65 0a 20 20 2a 2f 0a 20 20 73 74 61 74  type.  */.  stat
0a10: 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20  ic const struct 
0a20: 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
0a30: 20 2a 7a 53 75 66 66 69 78 3b 20 20 20 20 20 20   *zSuffix;      
0a40: 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 73 75 66   /* The file suf
0a50: 66 69 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 73  fix */.    int s
0a60: 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ize;            
0a70: 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
0a80: 6f 66 20 74 68 65 20 73 75 66 66 69 78 20 2a 2f  of the suffix */
0a90: 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
0aa0: 2a 7a 4d 69 6d 65 74 79 70 65 3b 20 20 20 20 20  *zMimetype;     
0ab0: 2f 2a 20 54 68 65 20 63 6f 72 72 65 73 70 6f 6e  /* The correspon
0ac0: 64 69 6e 67 20 6d 69 6d 65 74 79 70 65 20 2a 2f  ding mimetype */
0ad0: 0a 20 20 7d 20 61 4d 69 6d 65 5b 5d 20 3d 20 7b  .  } aMime[] = {
0ae0: 0a 20 20 20 20 7b 20 22 61 69 22 2c 20 20 20 20  .    { "ai",    
0af0: 20 20 20 20 20 32 2c 20 22 61 70 70 6c 69 63 61       2, "applica
0b00: 74 69 6f 6e 2f 70 6f 73 74 73 63 72 69 70 74 22  tion/postscript"
0b10: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
0b20: 20 20 20 7b 20 22 61 69 66 22 2c 20 20 20 20 20     { "aif",     
0b30: 20 20 20 33 2c 20 22 61 75 64 69 6f 2f 78 2d 61     3, "audio/x-a
0b40: 69 66 66 22 20 20 20 20 20 20 20 20 20 20 20 20  iff"            
0b50: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
0b60: 20 7b 20 22 61 69 66 63 22 2c 20 20 20 20 20 20   { "aifc",      
0b70: 20 34 2c 20 22 61 75 64 69 6f 2f 78 2d 61 69 66   4, "audio/x-aif
0b80: 66 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f"              
0b90: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b          },.    {
0ba0: 20 22 61 69 66 66 22 2c 20 20 20 20 20 20 20 34   "aiff",       4
0bb0: 2c 20 22 61 75 64 69 6f 2f 78 2d 61 69 66 66 22  , "audio/x-aiff"
0bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0bd0: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
0be0: 61 72 6a 22 2c 20 20 20 20 20 20 20 20 33 2c 20  arj",        3, 
0bf0: 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 61  "application/x-a
0c00: 72 6a 2d 63 6f 6d 70 72 65 73 73 65 64 22 20 20  rj-compressed"  
0c10: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 61 73      },.    { "as
0c20: 63 22 2c 20 20 20 20 20 20 20 20 33 2c 20 22 74  c",        3, "t
0c30: 65 78 74 2f 70 6c 61 69 6e 22 20 20 20 20 20 20  ext/plain"      
0c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c50: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 61 73 66 22    },.    { "asf"
0c60: 2c 20 20 20 20 20 20 20 20 33 2c 20 22 76 69 64  ,        3, "vid
0c70: 65 6f 2f 78 2d 6d 73 2d 61 73 66 22 20 20 20 20  eo/x-ms-asf"    
0c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c90: 7d 2c 0a 20 20 20 20 7b 20 22 61 73 78 22 2c 20  },.    { "asx", 
0ca0: 20 20 20 20 20 20 20 33 2c 20 22 76 69 64 65 6f         3, "video
0cb0: 2f 78 2d 6d 73 2d 61 73 78 22 20 20 20 20 20 20  /x-ms-asx"      
0cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
0cd0: 0a 20 20 20 20 7b 20 22 61 75 22 2c 20 20 20 20  .    { "au",    
0ce0: 20 20 20 20 20 32 2c 20 22 61 75 64 69 6f 2f 75       2, "audio/u
0cf0: 6c 61 77 22 20 20 20 20 20 20 20 20 20 20 20 20  law"            
0d00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
0d10: 20 20 20 7b 20 22 61 76 69 22 2c 20 20 20 20 20     { "avi",     
0d20: 20 20 20 33 2c 20 22 76 69 64 65 6f 2f 78 2d 6d     3, "video/x-m
0d30: 73 76 69 64 65 6f 22 20 20 20 20 20 20 20 20 20  svideo"         
0d40: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
0d50: 20 7b 20 22 62 61 74 22 2c 20 20 20 20 20 20 20   { "bat",       
0d60: 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e   3, "application
0d70: 2f 78 2d 6d 73 64 6f 73 2d 70 72 6f 67 72 61 6d  /x-msdos-program
0d80: 22 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b  "       },.    {
0d90: 20 22 62 63 70 69 6f 22 2c 20 20 20 20 20 20 35   "bcpio",      5
0da0: 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78  , "application/x
0db0: 2d 62 63 70 69 6f 22 20 20 20 20 20 20 20 20 20  -bcpio"         
0dc0: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
0dd0: 62 69 6e 22 2c 20 20 20 20 20 20 20 20 33 2c 20  bin",        3, 
0de0: 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6f 63 74  "application/oct
0df0: 65 74 2d 73 74 72 65 61 6d 22 20 20 20 20 20 20  et-stream"      
0e00: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 63 22      },.    { "c"
0e10: 2c 20 20 20 20 20 20 20 20 20 20 31 2c 20 22 74  ,          1, "t
0e20: 65 78 74 2f 70 6c 61 69 6e 22 20 20 20 20 20 20  ext/plain"      
0e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e40: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 63 63 22 2c    },.    { "cc",
0e50: 20 20 20 20 20 20 20 20 20 32 2c 20 22 74 65 78           2, "tex
0e60: 74 2f 70 6c 61 69 6e 22 20 20 20 20 20 20 20 20  t/plain"        
0e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e80: 7d 2c 0a 20 20 20 20 7b 20 22 63 63 61 64 22 2c  },.    { "ccad",
0e90: 20 20 20 20 20 20 20 34 2c 20 22 61 70 70 6c 69         4, "appli
0ea0: 63 61 74 69 6f 6e 2f 63 6c 61 72 69 73 63 61 64  cation/clariscad
0eb0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c  "             },
0ec0: 0a 20 20 20 20 7b 20 22 63 64 66 22 2c 20 20 20  .    { "cdf",   
0ed0: 20 20 20 20 20 33 2c 20 22 61 70 70 6c 69 63 61       3, "applica
0ee0: 74 69 6f 6e 2f 78 2d 6e 65 74 63 64 66 22 20 20  tion/x-netcdf"  
0ef0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
0f00: 20 20 20 7b 20 22 63 6c 61 73 73 22 2c 20 20 20     { "class",   
0f10: 20 20 20 35 2c 20 22 61 70 70 6c 69 63 61 74 69     5, "applicati
0f20: 6f 6e 2f 6f 63 74 65 74 2d 73 74 72 65 61 6d 22  on/octet-stream"
0f30: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
0f40: 20 7b 20 22 63 6f 64 22 2c 20 20 20 20 20 20 20   { "cod",       
0f50: 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e   3, "application
0f60: 2f 76 6e 64 2e 72 69 6d 2e 63 6f 64 22 20 20 20  /vnd.rim.cod"   
0f70: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b          },.    {
0f80: 20 22 63 6f 6d 22 2c 20 20 20 20 20 20 20 20 33   "com",        3
0f90: 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78  , "application/x
0fa0: 2d 6d 73 64 6f 73 2d 70 72 6f 67 72 61 6d 22 20  -msdos-program" 
0fb0: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
0fc0: 63 70 69 6f 22 2c 20 20 20 20 20 20 20 34 2c 20  cpio",       4, 
0fd0: 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 63  "application/x-c
0fe0: 70 69 6f 22 20 20 20 20 20 20 20 20 20 20 20 20  pio"            
0ff0: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 63 70      },.    { "cp
1000: 74 22 2c 20 20 20 20 20 20 20 20 33 2c 20 22 61  t",        3, "a
1010: 70 70 6c 69 63 61 74 69 6f 6e 2f 6d 61 63 2d 63  pplication/mac-c
1020: 6f 6d 70 61 63 74 70 72 6f 22 20 20 20 20 20 20  ompactpro"      
1030: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 63 73 68 22    },.    { "csh"
1040: 2c 20 20 20 20 20 20 20 20 33 2c 20 22 61 70 70  ,        3, "app
1050: 6c 69 63 61 74 69 6f 6e 2f 78 2d 63 73 68 22 20  lication/x-csh" 
1060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1070: 7d 2c 0a 20 20 20 20 7b 20 22 63 73 73 22 2c 20  },.    { "css", 
1080: 20 20 20 20 20 20 20 33 2c 20 22 74 65 78 74 2f         3, "text/
1090: 63 73 73 22 20 20 20 20 20 20 20 20 20 20 20 20  css"            
10a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
10b0: 0a 20 20 20 20 7b 20 22 64 63 72 22 2c 20 20 20  .    { "dcr",   
10c0: 20 20 20 20 20 33 2c 20 22 61 70 70 6c 69 63 61       3, "applica
10d0: 74 69 6f 6e 2f 78 2d 64 69 72 65 63 74 6f 72 22  tion/x-director"
10e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
10f0: 20 20 20 7b 20 22 64 65 62 22 2c 20 20 20 20 20     { "deb",     
1100: 20 20 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69     3, "applicati
1110: 6f 6e 2f 78 2d 64 65 62 69 61 6e 2d 70 61 63 6b  on/x-debian-pack
1120: 61 67 65 22 20 20 20 20 20 20 7d 2c 0a 20 20 20  age"      },.   
1130: 20 7b 20 22 64 69 72 22 2c 20 20 20 20 20 20 20   { "dir",       
1140: 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e   3, "application
1150: 2f 78 2d 64 69 72 65 63 74 6f 72 22 20 20 20 20  /x-director"    
1160: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b          },.    {
1170: 20 22 64 6c 22 2c 20 20 20 20 20 20 20 20 20 32   "dl",         2
1180: 2c 20 22 76 69 64 65 6f 2f 64 6c 22 20 20 20 20  , "video/dl"    
1190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a0: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
11b0: 64 6d 73 22 2c 20 20 20 20 20 20 20 20 33 2c 20  dms",        3, 
11c0: 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6f 63 74  "application/oct
11d0: 65 74 2d 73 74 72 65 61 6d 22 20 20 20 20 20 20  et-stream"      
11e0: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 64 6f      },.    { "do
11f0: 63 22 2c 20 20 20 20 20 20 20 20 33 2c 20 22 61  c",        3, "a
1200: 70 70 6c 69 63 61 74 69 6f 6e 2f 6d 73 77 6f 72  pplication/mswor
1210: 64 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d"              
1220: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 64 72 77 22    },.    { "drw"
1230: 2c 20 20 20 20 20 20 20 20 33 2c 20 22 61 70 70  ,        3, "app
1240: 6c 69 63 61 74 69 6f 6e 2f 64 72 61 66 74 69 6e  lication/draftin
1250: 67 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g"              
1260: 7d 2c 0a 20 20 20 20 7b 20 22 64 76 69 22 2c 20  },.    { "dvi", 
1270: 20 20 20 20 20 20 20 33 2c 20 22 61 70 70 6c 69         3, "appli
1280: 63 61 74 69 6f 6e 2f 78 2d 64 76 69 22 20 20 20  cation/x-dvi"   
1290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
12a0: 0a 20 20 20 20 7b 20 22 64 77 67 22 2c 20 20 20  .    { "dwg",   
12b0: 20 20 20 20 20 33 2c 20 22 61 70 70 6c 69 63 61       3, "applica
12c0: 74 69 6f 6e 2f 61 63 61 64 22 20 20 20 20 20 20  tion/acad"      
12d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
12e0: 20 20 20 7b 20 22 64 78 66 22 2c 20 20 20 20 20     { "dxf",     
12f0: 20 20 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69     3, "applicati
1300: 6f 6e 2f 64 78 66 22 20 20 20 20 20 20 20 20 20  on/dxf"         
1310: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
1320: 20 7b 20 22 64 78 72 22 2c 20 20 20 20 20 20 20   { "dxr",       
1330: 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e   3, "application
1340: 2f 78 2d 64 69 72 65 63 74 6f 72 22 20 20 20 20  /x-director"    
1350: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b          },.    {
1360: 20 22 65 70 73 22 2c 20 20 20 20 20 20 20 20 33   "eps",        3
1370: 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 70  , "application/p
1380: 6f 73 74 73 63 72 69 70 74 22 20 20 20 20 20 20  ostscript"      
1390: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
13a0: 65 74 78 22 2c 20 20 20 20 20 20 20 20 33 2c 20  etx",        3, 
13b0: 22 74 65 78 74 2f 78 2d 73 65 74 65 78 74 22 20  "text/x-setext" 
13c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d0: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 65 78      },.    { "ex
13e0: 65 22 2c 20 20 20 20 20 20 20 20 33 2c 20 22 61  e",        3, "a
13f0: 70 70 6c 69 63 61 74 69 6f 6e 2f 6f 63 74 65 74  pplication/octet
1400: 2d 73 74 72 65 61 6d 22 20 20 20 20 20 20 20 20  -stream"        
1410: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 65 7a 22 2c    },.    { "ez",
1420: 20 20 20 20 20 20 20 20 20 32 2c 20 22 61 70 70           2, "app
1430: 6c 69 63 61 74 69 6f 6e 2f 61 6e 64 72 65 77 2d  lication/andrew-
1440: 69 6e 73 65 74 22 20 20 20 20 20 20 20 20 20 20  inset"          
1450: 7d 2c 0a 20 20 20 20 7b 20 22 66 22 2c 20 20 20  },.    { "f",   
1460: 20 20 20 20 20 20 20 31 2c 20 22 74 65 78 74 2f         1, "text/
1470: 70 6c 61 69 6e 22 20 20 20 20 20 20 20 20 20 20  plain"          
1480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
1490: 0a 20 20 20 20 7b 20 22 66 39 30 22 2c 20 20 20  .    { "f90",   
14a0: 20 20 20 20 20 33 2c 20 22 74 65 78 74 2f 70 6c       3, "text/pl
14b0: 61 69 6e 22 20 20 20 20 20 20 20 20 20 20 20 20  ain"            
14c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
14d0: 20 20 20 7b 20 22 66 6c 69 22 2c 20 20 20 20 20     { "fli",     
14e0: 20 20 20 33 2c 20 22 76 69 64 65 6f 2f 66 6c 69     3, "video/fli
14f0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
1500: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
1510: 20 7b 20 22 66 6c 76 22 2c 20 20 20 20 20 20 20   { "flv",       
1520: 20 33 2c 20 22 76 69 64 65 6f 2f 66 6c 76 22 20   3, "video/flv" 
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b          },.    {
1550: 20 22 67 69 66 22 2c 20 20 20 20 20 20 20 20 33   "gif",        3
1560: 2c 20 22 69 6d 61 67 65 2f 67 69 66 22 20 20 20  , "image/gif"   
1570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1580: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
1590: 67 6c 22 2c 20 20 20 20 20 20 20 20 20 32 2c 20  gl",         2, 
15a0: 22 76 69 64 65 6f 2f 67 6c 22 20 20 20 20 20 20  "video/gl"      
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c0: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 67 74      },.    { "gt
15d0: 61 72 22 2c 20 20 20 20 20 20 20 34 2c 20 22 61  ar",       4, "a
15e0: 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 67 74 61  pplication/x-gta
15f0: 72 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r"              
1600: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 67 7a 22 2c    },.    { "gz",
1610: 20 20 20 20 20 20 20 20 20 32 2c 20 22 61 70 70           2, "app
1620: 6c 69 63 61 74 69 6f 6e 2f 78 2d 67 7a 69 70 22  lication/x-gzip"
1630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1640: 7d 2c 0a 20 20 20 20 7b 20 22 68 22 2c 20 20 20  },.    { "h",   
1650: 20 20 20 20 20 20 20 31 2c 20 22 74 65 78 74 2f         1, "text/
1660: 70 6c 61 69 6e 22 20 20 20 20 20 20 20 20 20 20  plain"          
1670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
1680: 0a 20 20 20 20 7b 20 22 68 64 66 22 2c 20 20 20  .    { "hdf",   
1690: 20 20 20 20 20 33 2c 20 22 61 70 70 6c 69 63 61       3, "applica
16a0: 74 69 6f 6e 2f 78 2d 68 64 66 22 20 20 20 20 20  tion/x-hdf"     
16b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
16c0: 20 20 20 7b 20 22 68 68 22 2c 20 20 20 20 20 20     { "hh",      
16d0: 20 20 20 32 2c 20 22 74 65 78 74 2f 70 6c 61 69     2, "text/plai
16e0: 6e 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n"              
16f0: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
1700: 20 7b 20 22 68 71 78 22 2c 20 20 20 20 20 20 20   { "hqx",       
1710: 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e   3, "application
1720: 2f 6d 61 63 2d 62 69 6e 68 65 78 34 30 22 20 20  /mac-binhex40"  
1730: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b          },.    {
1740: 20 22 68 74 6d 22 2c 20 20 20 20 20 20 20 20 33   "htm",        3
1750: 2c 20 22 74 65 78 74 2f 68 74 6d 6c 22 20 20 20  , "text/html"   
1760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1770: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
1780: 68 74 6d 6c 22 2c 20 20 20 20 20 20 20 34 2c 20  html",       4, 
1790: 22 74 65 78 74 2f 68 74 6d 6c 22 20 20 20 20 20  "text/html"     
17a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b0: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 69 63      },.    { "ic
17c0: 65 22 2c 20 20 20 20 20 20 20 20 33 2c 20 22 78  e",        3, "x
17d0: 2d 63 6f 6e 66 65 72 65 6e 63 65 2f 78 2d 63 6f  -conference/x-co
17e0: 6f 6c 74 61 6c 6b 22 20 20 20 20 20 20 20 20 20  oltalk"         
17f0: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 69 65 66 22    },.    { "ief"
1800: 2c 20 20 20 20 20 20 20 20 33 2c 20 22 69 6d 61  ,        3, "ima
1810: 67 65 2f 69 65 66 22 20 20 20 20 20 20 20 20 20  ge/ief"         
1820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1830: 7d 2c 0a 20 20 20 20 7b 20 22 69 67 65 73 22 2c  },.    { "iges",
1840: 20 20 20 20 20 20 20 34 2c 20 22 6d 6f 64 65 6c         4, "model
1850: 2f 69 67 65 73 22 20 20 20 20 20 20 20 20 20 20  /iges"          
1860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
1870: 0a 20 20 20 20 7b 20 22 69 67 73 22 2c 20 20 20  .    { "igs",   
1880: 20 20 20 20 20 33 2c 20 22 6d 6f 64 65 6c 2f 69       3, "model/i
1890: 67 65 73 22 20 20 20 20 20 20 20 20 20 20 20 20  ges"            
18a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
18b0: 20 20 20 7b 20 22 69 70 73 22 2c 20 20 20 20 20     { "ips",     
18c0: 20 20 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69     3, "applicati
18d0: 6f 6e 2f 78 2d 69 70 73 63 72 69 70 74 22 20 20  on/x-ipscript"  
18e0: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
18f0: 20 7b 20 22 69 70 78 22 2c 20 20 20 20 20 20 20   { "ipx",       
1900: 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e   3, "application
1910: 2f 78 2d 69 70 69 78 22 20 20 20 20 20 20 20 20  /x-ipix"        
1920: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b          },.    {
1930: 20 22 6a 61 64 22 2c 20 20 20 20 20 20 20 20 33   "jad",        3
1940: 2c 20 22 74 65 78 74 2f 76 6e 64 2e 73 75 6e 2e  , "text/vnd.sun.
1950: 6a 32 6d 65 2e 61 70 70 2d 64 65 73 63 72 69 70  j2me.app-descrip
1960: 74 6f 72 22 20 20 7d 2c 0a 20 20 20 20 7b 20 22  tor"  },.    { "
1970: 6a 61 72 22 2c 20 20 20 20 20 20 20 20 33 2c 20  jar",        3, 
1980: 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6a 61 76  "application/jav
1990: 61 2d 61 72 63 68 69 76 65 22 20 20 20 20 20 20  a-archive"      
19a0: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 6a 70      },.    { "jp
19b0: 65 22 2c 20 20 20 20 20 20 20 20 33 2c 20 22 69  e",        3, "i
19c0: 6d 61 67 65 2f 6a 70 65 67 22 20 20 20 20 20 20  mage/jpeg"      
19d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e0: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 6a 70 65 67    },.    { "jpeg
19f0: 22 2c 20 20 20 20 20 20 20 34 2c 20 22 69 6d 61  ",       4, "ima
1a00: 67 65 2f 6a 70 65 67 22 20 20 20 20 20 20 20 20  ge/jpeg"        
1a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a20: 7d 2c 0a 20 20 20 20 7b 20 22 6a 70 67 22 2c 20  },.    { "jpg", 
1a30: 20 20 20 20 20 20 20 33 2c 20 22 69 6d 61 67 65         3, "image
1a40: 2f 6a 70 65 67 22 20 20 20 20 20 20 20 20 20 20  /jpeg"          
1a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
1a60: 0a 20 20 20 20 7b 20 22 6a 73 22 2c 20 20 20 20  .    { "js",    
1a70: 20 20 20 20 20 32 2c 20 22 61 70 70 6c 69 63 61       2, "applica
1a80: 74 69 6f 6e 2f 78 2d 6a 61 76 61 73 63 72 69 70  tion/x-javascrip
1a90: 74 22 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20  t"          },. 
1aa0: 20 20 20 7b 20 22 6b 61 72 22 2c 20 20 20 20 20     { "kar",     
1ab0: 20 20 20 33 2c 20 22 61 75 64 69 6f 2f 6d 69 64     3, "audio/mid
1ac0: 69 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i"              
1ad0: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
1ae0: 20 7b 20 22 6c 61 74 65 78 22 2c 20 20 20 20 20   { "latex",     
1af0: 20 35 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e   5, "application
1b00: 2f 78 2d 6c 61 74 65 78 22 20 20 20 20 20 20 20  /x-latex"       
1b10: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b          },.    {
1b20: 20 22 6c 68 61 22 2c 20 20 20 20 20 20 20 20 33   "lha",        3
1b30: 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6f  , "application/o
1b40: 63 74 65 74 2d 73 74 72 65 61 6d 22 20 20 20 20  ctet-stream"    
1b50: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
1b60: 6c 73 70 22 2c 20 20 20 20 20 20 20 20 33 2c 20  lsp",        3, 
1b70: 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 6c  "application/x-l
1b80: 69 73 70 22 20 20 20 20 20 20 20 20 20 20 20 20  isp"            
1b90: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 6c 7a      },.    { "lz
1ba0: 68 22 2c 20 20 20 20 20 20 20 20 33 2c 20 22 61  h",        3, "a
1bb0: 70 70 6c 69 63 61 74 69 6f 6e 2f 6f 63 74 65 74  pplication/octet
1bc0: 2d 73 74 72 65 61 6d 22 20 20 20 20 20 20 20 20  -stream"        
1bd0: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 6d 22 2c 20    },.    { "m", 
1be0: 20 20 20 20 20 20 20 20 20 31 2c 20 22 74 65 78           1, "tex
1bf0: 74 2f 70 6c 61 69 6e 22 20 20 20 20 20 20 20 20  t/plain"        
1c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c10: 7d 2c 0a 20 20 20 20 7b 20 22 6d 33 75 22 2c 20  },.    { "m3u", 
1c20: 20 20 20 20 20 20 20 33 2c 20 22 61 75 64 69 6f         3, "audio
1c30: 2f 78 2d 6d 70 65 67 75 72 6c 22 20 20 20 20 20  /x-mpegurl"     
1c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
1c50: 0a 20 20 20 20 7b 20 22 6d 61 6e 22 2c 20 20 20  .    { "man",   
1c60: 20 20 20 20 20 33 2c 20 22 61 70 70 6c 69 63 61       3, "applica
1c70: 74 69 6f 6e 2f 78 2d 74 72 6f 66 66 2d 6d 61 6e  tion/x-troff-man
1c80: 22 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20  "           },. 
1c90: 20 20 20 7b 20 22 6d 65 22 2c 20 20 20 20 20 20     { "me",      
1ca0: 20 20 20 32 2c 20 22 61 70 70 6c 69 63 61 74 69     2, "applicati
1cb0: 6f 6e 2f 78 2d 74 72 6f 66 66 2d 6d 65 22 20 20  on/x-troff-me"  
1cc0: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
1cd0: 20 7b 20 22 6d 65 73 68 22 2c 20 20 20 20 20 20   { "mesh",      
1ce0: 20 34 2c 20 22 6d 6f 64 65 6c 2f 6d 65 73 68 22   4, "model/mesh"
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d00: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b          },.    {
1d10: 20 22 6d 69 64 22 2c 20 20 20 20 20 20 20 20 33   "mid",        3
1d20: 2c 20 22 61 75 64 69 6f 2f 6d 69 64 69 22 20 20  , "audio/midi"  
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d40: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
1d50: 6d 69 64 69 22 2c 20 20 20 20 20 20 20 34 2c 20  midi",       4, 
1d60: 22 61 75 64 69 6f 2f 6d 69 64 69 22 20 20 20 20  "audio/midi"    
1d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d80: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 6d 69      },.    { "mi
1d90: 66 22 2c 20 20 20 20 20 20 20 20 33 2c 20 22 61  f",        3, "a
1da0: 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 6d 69 66  pplication/x-mif
1db0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
1dc0: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 6d 69 6d 65    },.    { "mime
1dd0: 22 2c 20 20 20 20 20 20 20 34 2c 20 22 77 77 77  ",       4, "www
1de0: 2f 6d 69 6d 65 22 20 20 20 20 20 20 20 20 20 20  /mime"          
1df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e00: 7d 2c 0a 20 20 20 20 7b 20 22 6d 6f 76 22 2c 20  },.    { "mov", 
1e10: 20 20 20 20 20 20 20 33 2c 20 22 76 69 64 65 6f         3, "video
1e20: 2f 71 75 69 63 6b 74 69 6d 65 22 20 20 20 20 20  /quicktime"     
1e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
1e40: 0a 20 20 20 20 7b 20 22 6d 6f 76 69 65 22 2c 20  .    { "movie", 
1e50: 20 20 20 20 20 35 2c 20 22 76 69 64 65 6f 2f 78       5, "video/x
1e60: 2d 73 67 69 2d 6d 6f 76 69 65 22 20 20 20 20 20  -sgi-movie"     
1e70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
1e80: 20 20 20 7b 20 22 6d 70 32 22 2c 20 20 20 20 20     { "mp2",     
1e90: 20 20 20 33 2c 20 22 61 75 64 69 6f 2f 6d 70 65     3, "audio/mpe
1ea0: 67 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g"              
1eb0: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
1ec0: 20 7b 20 22 6d 70 33 22 2c 20 20 20 20 20 20 20   { "mp3",       
1ed0: 20 33 2c 20 22 61 75 64 69 6f 2f 6d 70 65 67 22   3, "audio/mpeg"
1ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef0: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b          },.    {
1f00: 20 22 6d 70 65 22 2c 20 20 20 20 20 20 20 20 33   "mpe",        3
1f10: 2c 20 22 76 69 64 65 6f 2f 6d 70 65 67 22 20 20  , "video/mpeg"  
1f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f30: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
1f40: 6d 70 65 67 22 2c 20 20 20 20 20 20 20 34 2c 20  mpeg",       4, 
1f50: 22 76 69 64 65 6f 2f 6d 70 65 67 22 20 20 20 20  "video/mpeg"    
1f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f70: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 6d 70      },.    { "mp
1f80: 67 22 2c 20 20 20 20 20 20 20 20 33 2c 20 22 76  g",        3, "v
1f90: 69 64 65 6f 2f 6d 70 65 67 22 20 20 20 20 20 20  ideo/mpeg"      
1fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb0: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 6d 70 67 61    },.    { "mpga
1fc0: 22 2c 20 20 20 20 20 20 20 34 2c 20 22 61 75 64  ",       4, "aud
1fd0: 69 6f 2f 6d 70 65 67 22 20 20 20 20 20 20 20 20  io/mpeg"        
1fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff0: 7d 2c 0a 20 20 20 20 7b 20 22 6d 73 22 2c 20 20  },.    { "ms",  
2000: 20 20 20 20 20 20 20 32 2c 20 22 61 70 70 6c 69         2, "appli
2010: 63 61 74 69 6f 6e 2f 78 2d 74 72 6f 66 66 2d 6d  cation/x-troff-m
2020: 73 22 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c  s"            },
2030: 0a 20 20 20 20 7b 20 22 6d 73 68 22 2c 20 20 20  .    { "msh",   
2040: 20 20 20 20 20 33 2c 20 22 6d 6f 64 65 6c 2f 6d       3, "model/m
2050: 65 73 68 22 20 20 20 20 20 20 20 20 20 20 20 20  esh"            
2060: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
2070: 20 20 20 7b 20 22 6e 63 22 2c 20 20 20 20 20 20     { "nc",      
2080: 20 20 20 32 2c 20 22 61 70 70 6c 69 63 61 74 69     2, "applicati
2090: 6f 6e 2f 78 2d 6e 65 74 63 64 66 22 20 20 20 20  on/x-netcdf"    
20a0: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
20b0: 20 7b 20 22 6f 64 61 22 2c 20 20 20 20 20 20 20   { "oda",       
20c0: 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e   3, "application
20d0: 2f 6f 64 61 22 20 20 20 20 20 20 20 20 20 20 20  /oda"           
20e0: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b          },.    {
20f0: 20 22 6f 67 67 22 2c 20 20 20 20 20 20 20 20 33   "ogg",        3
2100: 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6f  , "application/o
2110: 67 67 22 20 20 20 20 20 20 20 20 20 20 20 20 20  gg"             
2120: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
2130: 6f 67 6d 22 2c 20 20 20 20 20 20 20 20 33 2c 20  ogm",        3, 
2140: 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6f 67 67  "application/ogg
2150: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
2160: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 70 62      },.    { "pb
2170: 6d 22 2c 20 20 20 20 20 20 20 20 33 2c 20 22 69  m",        3, "i
2180: 6d 61 67 65 2f 78 2d 70 6f 72 74 61 62 6c 65 2d  mage/x-portable-
2190: 62 69 74 6d 61 70 22 20 20 20 20 20 20 20 20 20  bitmap"         
21a0: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 70 64 62 22    },.    { "pdb"
21b0: 2c 20 20 20 20 20 20 20 20 33 2c 20 22 63 68 65  ,        3, "che
21c0: 6d 69 63 61 6c 2f 78 2d 70 64 62 22 20 20 20 20  mical/x-pdb"    
21d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e0: 7d 2c 0a 20 20 20 20 7b 20 22 70 64 66 22 2c 20  },.    { "pdf", 
21f0: 20 20 20 20 20 20 20 33 2c 20 22 61 70 70 6c 69         3, "appli
2200: 63 61 74 69 6f 6e 2f 70 64 66 22 20 20 20 20 20  cation/pdf"     
2210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
2220: 0a 20 20 20 20 7b 20 22 70 67 6d 22 2c 20 20 20  .    { "pgm",   
2230: 20 20 20 20 20 33 2c 20 22 69 6d 61 67 65 2f 78       3, "image/x
2240: 2d 70 6f 72 74 61 62 6c 65 2d 67 72 61 79 6d 61  -portable-grayma
2250: 70 22 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20  p"          },. 
2260: 20 20 20 7b 20 22 70 67 6e 22 2c 20 20 20 20 20     { "pgn",     
2270: 20 20 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69     3, "applicati
2280: 6f 6e 2f 78 2d 63 68 65 73 73 2d 70 67 6e 22 20  on/x-chess-pgn" 
2290: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
22a0: 20 7b 20 22 70 67 70 22 2c 20 20 20 20 20 20 20   { "pgp",       
22b0: 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e   3, "application
22c0: 2f 70 67 70 22 20 20 20 20 20 20 20 20 20 20 20  /pgp"           
22d0: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b          },.    {
22e0: 20 22 70 6c 22 2c 20 20 20 20 20 20 20 20 20 32   "pl",         2
22f0: 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78  , "application/x
2300: 2d 70 65 72 6c 22 20 20 20 20 20 20 20 20 20 20  -perl"          
2310: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
2320: 70 6d 22 2c 20 20 20 20 20 20 20 20 20 32 2c 20  pm",         2, 
2330: 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 70  "application/x-p
2340: 65 72 6c 22 20 20 20 20 20 20 20 20 20 20 20 20  erl"            
2350: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 70 6e      },.    { "pn
2360: 67 22 2c 20 20 20 20 20 20 20 20 33 2c 20 22 69  g",        3, "i
2370: 6d 61 67 65 2f 70 6e 67 22 20 20 20 20 20 20 20  mage/png"       
2380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2390: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 70 6e 6d 22    },.    { "pnm"
23a0: 2c 20 20 20 20 20 20 20 20 33 2c 20 22 69 6d 61  ,        3, "ima
23b0: 67 65 2f 78 2d 70 6f 72 74 61 62 6c 65 2d 61 6e  ge/x-portable-an
23c0: 79 6d 61 70 22 20 20 20 20 20 20 20 20 20 20 20  ymap"           
23d0: 7d 2c 0a 20 20 20 20 7b 20 22 70 6f 74 22 2c 20  },.    { "pot", 
23e0: 20 20 20 20 20 20 20 33 2c 20 22 61 70 70 6c 69         3, "appli
23f0: 63 61 74 69 6f 6e 2f 6d 73 70 6f 77 65 72 70 6f  cation/mspowerpo
2400: 69 6e 74 22 20 20 20 20 20 20 20 20 20 20 7d 2c  int"          },
2410: 0a 20 20 20 20 7b 20 22 70 70 6d 22 2c 20 20 20  .    { "ppm",   
2420: 20 20 20 20 20 33 2c 20 22 69 6d 61 67 65 2f 78       3, "image/x
2430: 2d 70 6f 72 74 61 62 6c 65 2d 70 69 78 6d 61 70  -portable-pixmap
2440: 22 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20  "           },. 
2450: 20 20 20 7b 20 22 70 70 73 22 2c 20 20 20 20 20     { "pps",     
2460: 20 20 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69     3, "applicati
2470: 6f 6e 2f 6d 73 70 6f 77 65 72 70 6f 69 6e 74 22  on/mspowerpoint"
2480: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
2490: 20 7b 20 22 70 70 74 22 2c 20 20 20 20 20 20 20   { "ppt",       
24a0: 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e   3, "application
24b0: 2f 6d 73 70 6f 77 65 72 70 6f 69 6e 74 22 20 20  /mspowerpoint"  
24c0: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b          },.    {
24d0: 20 22 70 70 7a 22 2c 20 20 20 20 20 20 20 20 33   "ppz",        3
24e0: 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6d  , "application/m
24f0: 73 70 6f 77 65 72 70 6f 69 6e 74 22 20 20 20 20  spowerpoint"    
2500: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
2510: 70 72 65 22 2c 20 20 20 20 20 20 20 20 33 2c 20  pre",        3, 
2520: 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 66  "application/x-f
2530: 72 65 65 6c 61 6e 63 65 22 20 20 20 20 20 20 20  reelance"       
2540: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 70 72      },.    { "pr
2550: 74 22 2c 20 20 20 20 20 20 20 20 33 2c 20 22 61  t",        3, "a
2560: 70 70 6c 69 63 61 74 69 6f 6e 2f 70 72 6f 5f 65  pplication/pro_e
2570: 6e 67 22 20 20 20 20 20 20 20 20 20 20 20 20 20  ng"             
2580: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 70 73 22 2c    },.    { "ps",
2590: 20 20 20 20 20 20 20 20 20 32 2c 20 22 61 70 70           2, "app
25a0: 6c 69 63 61 74 69 6f 6e 2f 70 6f 73 74 73 63 72  lication/postscr
25b0: 69 70 74 22 20 20 20 20 20 20 20 20 20 20 20 20  ipt"            
25c0: 7d 2c 0a 20 20 20 20 7b 20 22 71 74 22 2c 20 20  },.    { "qt",  
25d0: 20 20 20 20 20 20 20 32 2c 20 22 76 69 64 65 6f         2, "video
25e0: 2f 71 75 69 63 6b 74 69 6d 65 22 20 20 20 20 20  /quicktime"     
25f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
2600: 0a 20 20 20 20 7b 20 22 72 61 22 2c 20 20 20 20  .    { "ra",    
2610: 20 20 20 20 20 32 2c 20 22 61 75 64 69 6f 2f 78       2, "audio/x
2620: 2d 72 65 61 6c 61 75 64 69 6f 22 20 20 20 20 20  -realaudio"     
2630: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
2640: 20 20 20 7b 20 22 72 61 6d 22 2c 20 20 20 20 20     { "ram",     
2650: 20 20 20 33 2c 20 22 61 75 64 69 6f 2f 78 2d 70     3, "audio/x-p
2660: 6e 2d 72 65 61 6c 61 75 64 69 6f 22 20 20 20 20  n-realaudio"    
2670: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
2680: 20 7b 20 22 72 61 72 22 2c 20 20 20 20 20 20 20   { "rar",       
2690: 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e   3, "application
26a0: 2f 78 2d 72 61 72 2d 63 6f 6d 70 72 65 73 73 65  /x-rar-compresse
26b0: 64 22 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b  d"      },.    {
26c0: 20 22 72 61 73 22 2c 20 20 20 20 20 20 20 20 33   "ras",        3
26d0: 2c 20 22 69 6d 61 67 65 2f 63 6d 75 2d 72 61 73  , "image/cmu-ras
26e0: 74 65 72 22 20 20 20 20 20 20 20 20 20 20 20 20  ter"            
26f0: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
2700: 72 67 62 22 2c 20 20 20 20 20 20 20 20 33 2c 20  rgb",        3, 
2710: 22 69 6d 61 67 65 2f 78 2d 72 67 62 22 20 20 20  "image/x-rgb"   
2720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2730: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 72 6d      },.    { "rm
2740: 22 2c 20 20 20 20 20 20 20 20 20 32 2c 20 22 61  ",         2, "a
2750: 75 64 69 6f 2f 78 2d 70 6e 2d 72 65 61 6c 61 75  udio/x-pn-realau
2760: 64 69 6f 22 20 20 20 20 20 20 20 20 20 20 20 20  dio"            
2770: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 72 6f 66 66    },.    { "roff
2780: 22 2c 20 20 20 20 20 20 20 34 2c 20 22 61 70 70  ",       4, "app
2790: 6c 69 63 61 74 69 6f 6e 2f 78 2d 74 72 6f 66 66  lication/x-troff
27a0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
27b0: 7d 2c 0a 20 20 20 20 7b 20 22 72 70 6d 22 2c 20  },.    { "rpm", 
27c0: 20 20 20 20 20 20 20 33 2c 20 22 61 75 64 69 6f         3, "audio
27d0: 2f 78 2d 70 6e 2d 72 65 61 6c 61 75 64 69 6f 2d  /x-pn-realaudio-
27e0: 70 6c 75 67 69 6e 22 20 20 20 20 20 20 20 7d 2c  plugin"       },
27f0: 0a 20 20 20 20 7b 20 22 72 74 66 22 2c 20 20 20  .    { "rtf",   
2800: 20 20 20 20 20 33 2c 20 22 74 65 78 74 2f 72 74       3, "text/rt
2810: 66 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f"              
2820: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
2830: 20 20 20 7b 20 22 72 74 78 22 2c 20 20 20 20 20     { "rtx",     
2840: 20 20 20 33 2c 20 22 74 65 78 74 2f 72 69 63 68     3, "text/rich
2850: 74 65 78 74 22 20 20 20 20 20 20 20 20 20 20 20  text"           
2860: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
2870: 20 7b 20 22 73 63 6d 22 2c 20 20 20 20 20 20 20   { "scm",       
2880: 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e   3, "application
2890: 2f 78 2d 6c 6f 74 75 73 73 63 72 65 65 6e 63 61  /x-lotusscreenca
28a0: 6d 22 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b  m"      },.    {
28b0: 20 22 73 65 74 22 2c 20 20 20 20 20 20 20 20 33   "set",        3
28c0: 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 73  , "application/s
28d0: 65 74 22 20 20 20 20 20 20 20 20 20 20 20 20 20  et"             
28e0: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
28f0: 73 67 6d 22 2c 20 20 20 20 20 20 20 20 33 2c 20  sgm",        3, 
2900: 22 74 65 78 74 2f 73 67 6d 6c 22 20 20 20 20 20  "text/sgml"     
2910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2920: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 73 67      },.    { "sg
2930: 6d 6c 22 2c 20 20 20 20 20 20 20 34 2c 20 22 74  ml",       4, "t
2940: 65 78 74 2f 73 67 6d 6c 22 20 20 20 20 20 20 20  ext/sgml"       
2950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2960: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 73 68 22 2c    },.    { "sh",
2970: 20 20 20 20 20 20 20 20 20 32 2c 20 22 61 70 70           2, "app
2980: 6c 69 63 61 74 69 6f 6e 2f 78 2d 73 68 22 20 20  lication/x-sh"  
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a0: 7d 2c 0a 20 20 20 20 7b 20 22 73 68 61 72 22 2c  },.    { "shar",
29b0: 20 20 20 20 20 20 20 34 2c 20 22 61 70 70 6c 69         4, "appli
29c0: 63 61 74 69 6f 6e 2f 78 2d 73 68 61 72 22 20 20  cation/x-shar"  
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
29e0: 0a 20 20 20 20 7b 20 22 73 69 6c 6f 22 2c 20 20  .    { "silo",  
29f0: 20 20 20 20 20 34 2c 20 22 6d 6f 64 65 6c 2f 6d       4, "model/m
2a00: 65 73 68 22 20 20 20 20 20 20 20 20 20 20 20 20  esh"            
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
2a20: 20 20 20 7b 20 22 73 69 74 22 2c 20 20 20 20 20     { "sit",     
2a30: 20 20 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69     3, "applicati
2a40: 6f 6e 2f 78 2d 73 74 75 66 66 69 74 22 20 20 20  on/x-stuffit"   
2a50: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
2a60: 20 7b 20 22 73 6b 64 22 2c 20 20 20 20 20 20 20   { "skd",       
2a70: 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e   3, "application
2a80: 2f 78 2d 6b 6f 61 6e 22 20 20 20 20 20 20 20 20  /x-koan"        
2a90: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b          },.    {
2aa0: 20 22 73 6b 6d 22 2c 20 20 20 20 20 20 20 20 33   "skm",        3
2ab0: 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78  , "application/x
2ac0: 2d 6b 6f 61 6e 22 20 20 20 20 20 20 20 20 20 20  -koan"          
2ad0: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
2ae0: 73 6b 70 22 2c 20 20 20 20 20 20 20 20 33 2c 20  skp",        3, 
2af0: 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 6b  "application/x-k
2b00: 6f 61 6e 22 20 20 20 20 20 20 20 20 20 20 20 20  oan"            
2b10: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 73 6b      },.    { "sk
2b20: 74 22 2c 20 20 20 20 20 20 20 20 33 2c 20 22 61  t",        3, "a
2b30: 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 6b 6f 61  pplication/x-koa
2b40: 6e 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n"              
2b50: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 73 6d 69 22    },.    { "smi"
2b60: 2c 20 20 20 20 20 20 20 20 33 2c 20 22 61 70 70  ,        3, "app
2b70: 6c 69 63 61 74 69 6f 6e 2f 73 6d 69 6c 22 20 20  lication/smil"  
2b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b90: 7d 2c 0a 20 20 20 20 7b 20 22 73 6d 69 6c 22 2c  },.    { "smil",
2ba0: 20 20 20 20 20 20 20 34 2c 20 22 61 70 70 6c 69         4, "appli
2bb0: 63 61 74 69 6f 6e 2f 73 6d 69 6c 22 20 20 20 20  cation/smil"    
2bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
2bd0: 0a 20 20 20 20 7b 20 22 73 6e 64 22 2c 20 20 20  .    { "snd",   
2be0: 20 20 20 20 20 33 2c 20 22 61 75 64 69 6f 2f 62       3, "audio/b
2bf0: 61 73 69 63 22 20 20 20 20 20 20 20 20 20 20 20  asic"           
2c00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
2c10: 20 20 20 7b 20 22 73 6f 6c 22 2c 20 20 20 20 20     { "sol",     
2c20: 20 20 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69     3, "applicati
2c30: 6f 6e 2f 73 6f 6c 69 64 73 22 20 20 20 20 20 20  on/solids"      
2c40: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
2c50: 20 7b 20 22 73 70 6c 22 2c 20 20 20 20 20 20 20   { "spl",       
2c60: 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e   3, "application
2c70: 2f 78 2d 66 75 74 75 72 65 73 70 6c 61 73 68 22  /x-futuresplash"
2c80: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b          },.    {
2c90: 20 22 73 72 63 22 2c 20 20 20 20 20 20 20 20 33   "src",        3
2ca0: 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78  , "application/x
2cb0: 2d 77 61 69 73 2d 73 6f 75 72 63 65 22 20 20 20  -wais-source"   
2cc0: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
2cd0: 73 74 65 70 22 2c 20 20 20 20 20 20 20 34 2c 20  step",       4, 
2ce0: 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 53 54 45  "application/STE
2cf0: 50 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  P"              
2d00: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 73 74      },.    { "st
2d10: 6c 22 2c 20 20 20 20 20 20 20 20 33 2c 20 22 61  l",        3, "a
2d20: 70 70 6c 69 63 61 74 69 6f 6e 2f 53 4c 41 22 20  pplication/SLA" 
2d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d40: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 73 74 70 22    },.    { "stp"
2d50: 2c 20 20 20 20 20 20 20 20 33 2c 20 22 61 70 70  ,        3, "app
2d60: 6c 69 63 61 74 69 6f 6e 2f 53 54 45 50 22 20 20  lication/STEP"  
2d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d80: 7d 2c 0a 20 20 20 20 7b 20 22 73 76 34 63 70 69  },.    { "sv4cpi
2d90: 6f 22 2c 20 20 20 20 37 2c 20 22 61 70 70 6c 69  o",    7, "appli
2da0: 63 61 74 69 6f 6e 2f 78 2d 73 76 34 63 70 69 6f  cation/x-sv4cpio
2db0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c  "             },
2dc0: 0a 20 20 20 20 7b 20 22 73 76 34 63 72 63 22 2c  .    { "sv4crc",
2dd0: 20 20 20 20 20 36 2c 20 22 61 70 70 6c 69 63 61       6, "applica
2de0: 74 69 6f 6e 2f 78 2d 73 76 34 63 72 63 22 20 20  tion/x-sv4crc"  
2df0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
2e00: 20 20 20 7b 20 22 73 76 67 22 2c 20 20 20 20 20     { "svg",     
2e10: 20 20 20 33 2c 20 22 69 6d 61 67 65 2f 73 76 67     3, "image/svg
2e20: 2b 78 6d 6c 22 20 20 20 20 20 20 20 20 20 20 20  +xml"           
2e30: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
2e40: 20 7b 20 22 73 77 66 22 2c 20 20 20 20 20 20 20   { "swf",       
2e50: 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e   3, "application
2e60: 2f 78 2d 73 68 6f 63 6b 77 61 76 65 2d 66 6c 61  /x-shockwave-fla
2e70: 73 68 22 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b  sh"     },.    {
2e80: 20 22 74 22 2c 20 20 20 20 20 20 20 20 20 20 31   "t",          1
2e90: 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78  , "application/x
2ea0: 2d 74 72 6f 66 66 22 20 20 20 20 20 20 20 20 20  -troff"         
2eb0: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
2ec0: 74 61 72 22 2c 20 20 20 20 20 20 20 20 33 2c 20  tar",        3, 
2ed0: 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 74  "application/x-t
2ee0: 61 72 22 20 20 20 20 20 20 20 20 20 20 20 20 20  ar"             
2ef0: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 74 63      },.    { "tc
2f00: 6c 22 2c 20 20 20 20 20 20 20 20 33 2c 20 22 61  l",        3, "a
2f10: 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 74 63 6c  pplication/x-tcl
2f20: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
2f30: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 74 65 78 22    },.    { "tex"
2f40: 2c 20 20 20 20 20 20 20 20 33 2c 20 22 61 70 70  ,        3, "app
2f50: 6c 69 63 61 74 69 6f 6e 2f 78 2d 74 65 78 22 20  lication/x-tex" 
2f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f70: 7d 2c 0a 20 20 20 20 7b 20 22 74 65 78 69 22 2c  },.    { "texi",
2f80: 20 20 20 20 20 20 20 34 2c 20 22 61 70 70 6c 69         4, "appli
2f90: 63 61 74 69 6f 6e 2f 78 2d 74 65 78 69 6e 66 6f  cation/x-texinfo
2fa0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c  "             },
2fb0: 0a 20 20 20 20 7b 20 22 74 65 78 69 6e 66 6f 22  .    { "texinfo"
2fc0: 2c 20 20 20 20 37 2c 20 22 61 70 70 6c 69 63 61  ,    7, "applica
2fd0: 74 69 6f 6e 2f 78 2d 74 65 78 69 6e 66 6f 22 20  tion/x-texinfo" 
2fe0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
2ff0: 20 20 20 7b 20 22 74 67 7a 22 2c 20 20 20 20 20     { "tgz",     
3000: 20 20 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69     3, "applicati
3010: 6f 6e 2f 78 2d 74 61 72 2d 67 7a 22 20 20 20 20  on/x-tar-gz"    
3020: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
3030: 20 7b 20 22 74 69 66 22 2c 20 20 20 20 20 20 20   { "tif",       
3040: 20 33 2c 20 22 69 6d 61 67 65 2f 74 69 66 66 22   3, "image/tiff"
3050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3060: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b          },.    {
3070: 20 22 74 69 66 66 22 2c 20 20 20 20 20 20 20 34   "tiff",       4
3080: 2c 20 22 69 6d 61 67 65 2f 74 69 66 66 22 20 20  , "image/tiff"  
3090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a0: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
30b0: 74 72 22 2c 20 20 20 20 20 20 20 20 20 32 2c 20  tr",         2, 
30c0: 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 74  "application/x-t
30d0: 72 6f 66 66 22 20 20 20 20 20 20 20 20 20 20 20  roff"           
30e0: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 74 73      },.    { "ts
30f0: 69 22 2c 20 20 20 20 20 20 20 20 33 2c 20 22 61  i",        3, "a
3100: 75 64 69 6f 2f 54 53 50 2d 61 75 64 69 6f 22 20  udio/TSP-audio" 
3110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3120: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 74 73 70 22    },.    { "tsp"
3130: 2c 20 20 20 20 20 20 20 20 33 2c 20 22 61 70 70  ,        3, "app
3140: 6c 69 63 61 74 69 6f 6e 2f 64 73 70 74 79 70 65  lication/dsptype
3150: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
3160: 7d 2c 0a 20 20 20 20 7b 20 22 74 73 76 22 2c 20  },.    { "tsv", 
3170: 20 20 20 20 20 20 20 33 2c 20 22 74 65 78 74 2f         3, "text/
3180: 74 61 62 2d 73 65 70 61 72 61 74 65 64 2d 76 61  tab-separated-va
3190: 6c 75 65 73 22 20 20 20 20 20 20 20 20 20 7d 2c  lues"         },
31a0: 0a 20 20 20 20 7b 20 22 74 78 74 22 2c 20 20 20  .    { "txt",   
31b0: 20 20 20 20 20 33 2c 20 22 74 65 78 74 2f 70 6c       3, "text/pl
31c0: 61 69 6e 22 20 20 20 20 20 20 20 20 20 20 20 20  ain"            
31d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
31e0: 20 20 20 7b 20 22 75 6e 76 22 2c 20 20 20 20 20     { "unv",     
31f0: 20 20 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69     3, "applicati
3200: 6f 6e 2f 69 2d 64 65 61 73 22 20 20 20 20 20 20  on/i-deas"      
3210: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
3220: 20 7b 20 22 75 73 74 61 72 22 2c 20 20 20 20 20   { "ustar",     
3230: 20 35 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e   5, "application
3240: 2f 78 2d 75 73 74 61 72 22 20 20 20 20 20 20 20  /x-ustar"       
3250: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b          },.    {
3260: 20 22 76 63 64 22 2c 20 20 20 20 20 20 20 20 33   "vcd",        3
3270: 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78  , "application/x
3280: 2d 63 64 6c 69 6e 6b 22 20 20 20 20 20 20 20 20  -cdlink"        
3290: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
32a0: 76 64 61 22 2c 20 20 20 20 20 20 20 20 33 2c 20  vda",        3, 
32b0: 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 76 64 61  "application/vda
32c0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
32d0: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 76 69      },.    { "vi
32e0: 76 22 2c 20 20 20 20 20 20 20 20 33 2c 20 22 76  v",        3, "v
32f0: 69 64 65 6f 2f 76 6e 64 2e 76 69 76 6f 22 20 20  ideo/vnd.vivo"  
3300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3310: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 76 69 76 6f    },.    { "vivo
3320: 22 2c 20 20 20 20 20 20 20 34 2c 20 22 76 69 64  ",       4, "vid
3330: 65 6f 2f 76 6e 64 2e 76 69 76 6f 22 20 20 20 20  eo/vnd.vivo"    
3340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3350: 7d 2c 0a 20 20 20 20 7b 20 22 76 72 6d 6c 22 2c  },.    { "vrml",
3360: 20 20 20 20 20 20 20 34 2c 20 22 6d 6f 64 65 6c         4, "model
3370: 2f 76 72 6d 6c 22 20 20 20 20 20 20 20 20 20 20  /vrml"          
3380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
3390: 0a 20 20 20 20 7b 20 22 77 61 76 22 2c 20 20 20  .    { "wav",   
33a0: 20 20 20 20 20 33 2c 20 22 61 75 64 69 6f 2f 78       3, "audio/x
33b0: 2d 77 61 76 22 20 20 20 20 20 20 20 20 20 20 20  -wav"           
33c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
33d0: 20 20 20 7b 20 22 77 61 78 22 2c 20 20 20 20 20     { "wax",     
33e0: 20 20 20 33 2c 20 22 61 75 64 69 6f 2f 78 2d 6d     3, "audio/x-m
33f0: 73 2d 77 61 78 22 20 20 20 20 20 20 20 20 20 20  s-wax"          
3400: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
3410: 20 7b 20 22 77 69 6b 69 22 2c 20 20 20 20 20 20   { "wiki",      
3420: 20 34 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e   4, "application
3430: 2f 78 2d 66 6f 73 73 69 6c 2d 77 69 6b 69 22 20  /x-fossil-wiki" 
3440: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b          },.    {
3450: 20 22 77 6d 61 22 2c 20 20 20 20 20 20 20 20 33   "wma",        3
3460: 2c 20 22 61 75 64 69 6f 2f 78 2d 6d 73 2d 77 6d  , "audio/x-ms-wm
3470: 61 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a"              
3480: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
3490: 77 6d 76 22 2c 20 20 20 20 20 20 20 20 33 2c 20  wmv",        3, 
34a0: 22 76 69 64 65 6f 2f 78 2d 6d 73 2d 77 6d 76 22  "video/x-ms-wmv"
34b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c0: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 77 6d      },.    { "wm
34d0: 78 22 2c 20 20 20 20 20 20 20 20 33 2c 20 22 76  x",        3, "v
34e0: 69 64 65 6f 2f 78 2d 6d 73 2d 77 6d 78 22 20 20  ideo/x-ms-wmx"  
34f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3500: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 77 72 6c 22    },.    { "wrl"
3510: 2c 20 20 20 20 20 20 20 20 33 2c 20 22 6d 6f 64  ,        3, "mod
3520: 65 6c 2f 76 72 6d 6c 22 20 20 20 20 20 20 20 20  el/vrml"        
3530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3540: 7d 2c 0a 20 20 20 20 7b 20 22 77 76 78 22 2c 20  },.    { "wvx", 
3550: 20 20 20 20 20 20 20 33 2c 20 22 76 69 64 65 6f         3, "video
3560: 2f 78 2d 6d 73 2d 77 76 78 22 20 20 20 20 20 20  /x-ms-wvx"      
3570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
3580: 0a 20 20 20 20 7b 20 22 78 62 6d 22 2c 20 20 20  .    { "xbm",   
3590: 20 20 20 20 20 33 2c 20 22 69 6d 61 67 65 2f 78       3, "image/x
35a0: 2d 78 62 69 74 6d 61 70 22 20 20 20 20 20 20 20  -xbitmap"       
35b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
35c0: 20 20 20 7b 20 22 78 6c 63 22 2c 20 20 20 20 20     { "xlc",     
35d0: 20 20 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69     3, "applicati
35e0: 6f 6e 2f 76 6e 64 2e 6d 73 2d 65 78 63 65 6c 22  on/vnd.ms-excel"
35f0: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
3600: 20 7b 20 22 78 6c 6c 22 2c 20 20 20 20 20 20 20   { "xll",       
3610: 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e   3, "application
3620: 2f 76 6e 64 2e 6d 73 2d 65 78 63 65 6c 22 20 20  /vnd.ms-excel"  
3630: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b          },.    {
3640: 20 22 78 6c 6d 22 2c 20 20 20 20 20 20 20 20 33   "xlm",        3
3650: 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 76  , "application/v
3660: 6e 64 2e 6d 73 2d 65 78 63 65 6c 22 20 20 20 20  nd.ms-excel"    
3670: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
3680: 78 6c 73 22 2c 20 20 20 20 20 20 20 20 33 2c 20  xls",        3, 
3690: 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 76 6e 64  "application/vnd
36a0: 2e 6d 73 2d 65 78 63 65 6c 22 20 20 20 20 20 20  .ms-excel"      
36b0: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 78 6c      },.    { "xl
36c0: 77 22 2c 20 20 20 20 20 20 20 20 33 2c 20 22 61  w",        3, "a
36d0: 70 70 6c 69 63 61 74 69 6f 6e 2f 76 6e 64 2e 6d  pplication/vnd.m
36e0: 73 2d 65 78 63 65 6c 22 20 20 20 20 20 20 20 20  s-excel"        
36f0: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 78 6d 6c 22    },.    { "xml"
3700: 2c 20 20 20 20 20 20 20 20 33 2c 20 22 74 65 78  ,        3, "tex
3710: 74 2f 78 6d 6c 22 20 20 20 20 20 20 20 20 20 20  t/xml"          
3720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3730: 7d 2c 0a 20 20 20 20 7b 20 22 78 70 6d 22 2c 20  },.    { "xpm", 
3740: 20 20 20 20 20 20 20 33 2c 20 22 69 6d 61 67 65         3, "image
3750: 2f 78 2d 78 70 69 78 6d 61 70 22 20 20 20 20 20  /x-xpixmap"     
3760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
3770: 0a 20 20 20 20 7b 20 22 78 77 64 22 2c 20 20 20  .    { "xwd",   
3780: 20 20 20 20 20 33 2c 20 22 69 6d 61 67 65 2f 78       3, "image/x
3790: 2d 78 77 69 6e 64 6f 77 64 75 6d 70 22 20 20 20  -xwindowdump"   
37a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
37b0: 20 20 20 7b 20 22 78 79 7a 22 2c 20 20 20 20 20     { "xyz",     
37c0: 20 20 20 33 2c 20 22 63 68 65 6d 69 63 61 6c 2f     3, "chemical/
37d0: 78 2d 70 64 62 22 20 20 20 20 20 20 20 20 20 20  x-pdb"          
37e0: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
37f0: 20 7b 20 22 7a 69 70 22 2c 20 20 20 20 20 20 20   { "zip",       
3800: 20 33 2c 20 22 61 70 70 6c 69 63 61 74 69 6f 6e   3, "application
3810: 2f 7a 69 70 22 20 20 20 20 20 20 20 20 20 20 20  /zip"           
3820: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 7d 3b 0a          },.  };.
3830: 0a 23 69 66 64 65 66 20 46 4f 53 53 49 4c 5f 44  .#ifdef FOSSIL_D
3840: 45 42 55 47 0a 20 20 2f 2a 20 54 68 69 73 20 69  EBUG.  /* This i
3850: 73 20 74 65 73 74 20 63 6f 64 65 20 74 6f 20 6d  s test code to m
3860: 61 6b 65 20 73 75 72 65 20 74 68 65 20 74 61 62  ake sure the tab
3870: 6c 65 20 61 62 6f 76 65 20 69 73 20 69 6e 20 74  le above is in t
3880: 68 65 20 63 6f 72 72 65 63 74 0a 20 20 2a 2a 20  he correct.  ** 
3890: 6f 72 64 65 72 0a 20 20 2a 2f 0a 20 20 69 66 28  order.  */.  if(
38a0: 20 66 6f 73 73 69 6c 5f 73 74 72 63 6d 70 28 7a   fossil_strcmp(z
38b0: 4e 61 6d 65 2c 20 22 6d 69 6d 65 74 79 70 65 2d  Name, "mimetype-
38c0: 74 65 73 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20  test")==0 ){.   
38d0: 20 66 6f 72 28 69 3d 31 3b 20 69 3c 73 69 7a 65   for(i=1; i<size
38e0: 6f 66 28 61 4d 69 6d 65 29 2f 73 69 7a 65 6f 66  of(aMime)/sizeof
38f0: 28 61 4d 69 6d 65 5b 30 5d 29 3b 20 69 2b 2b 29  (aMime[0]); i++)
3900: 7b 0a 20 20 20 20 20 20 69 66 28 20 66 6f 73 73  {.      if( foss
3910: 69 6c 5f 73 74 72 63 6d 70 28 61 4d 69 6d 65 5b  il_strcmp(aMime[
3920: 69 2d 31 5d 2e 7a 53 75 66 66 69 78 2c 61 4d 69  i-1].zSuffix,aMi
3930: 6d 65 5b 69 5d 2e 7a 53 75 66 66 69 78 29 3e 3d  me[i].zSuffix)>=
3940: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 73  0 ){.        fos
3950: 73 69 6c 5f 66 61 74 61 6c 28 22 6d 69 6d 65 74  sil_fatal("mimet
3960: 79 70 65 73 20 6f 75 74 20 6f 66 20 73 65 71 75  ypes out of sequ
3970: 65 6e 63 65 3a 20 25 73 20 62 65 66 6f 72 65 20  ence: %s before 
3980: 25 73 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  %s",.           
3990: 20 20 20 20 20 20 20 20 20 20 61 4d 69 6d 65 5b            aMime[
39a0: 69 2d 31 5d 2e 7a 53 75 66 66 69 78 2c 20 61 4d  i-1].zSuffix, aM
39b0: 69 6d 65 5b 69 5d 2e 7a 53 75 66 66 69 78 29 3b  ime[i].zSuffix);
39c0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
39d0: 20 20 20 72 65 74 75 72 6e 20 22 6f 6b 22 3b 0a     return "ok";.
39e0: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 7a 20    }.#endif..  z 
39f0: 3d 20 7a 4e 61 6d 65 3b 0a 20 20 66 6f 72 28 69  = zName;.  for(i
3a00: 3d 30 3b 20 7a 4e 61 6d 65 5b 69 5d 3b 20 69 2b  =0; zName[i]; i+
3a10: 2b 29 7b 0a 20 20 20 20 69 66 28 20 7a 4e 61 6d  +){.    if( zNam
3a20: 65 5b 69 5d 3d 3d 27 2e 27 20 29 20 7a 20 3d 20  e[i]=='.' ) z = 
3a30: 26 7a 4e 61 6d 65 5b 69 2b 31 5d 3b 0a 20 20 7d  &zName[i+1];.  }
3a40: 0a 20 20 6c 65 6e 20 3d 20 73 74 72 6c 65 6e 28  .  len = strlen(
3a50: 7a 29 3b 0a 20 20 69 66 28 20 6c 65 6e 3c 73 69  z);.  if( len<si
3a60: 7a 65 6f 66 28 7a 53 75 66 66 69 78 29 2d 31 20  zeof(zSuffix)-1 
3a70: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ){.    sqlite3_s
3a80: 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a  nprintf(sizeof(z
3a90: 53 75 66 66 69 78 29 2c 20 7a 53 75 66 66 69 78  Suffix), zSuffix
3aa0: 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20  , "%s", z);.    
3ab0: 66 6f 72 28 69 3d 30 3b 20 7a 53 75 66 66 69 78  for(i=0; zSuffix
3ac0: 5b 69 5d 3b 20 69 2b 2b 29 20 7a 53 75 66 66 69  [i]; i++) zSuffi
3ad0: 78 5b 69 5d 20 3d 20 66 6f 73 73 69 6c 5f 74 6f  x[i] = fossil_to
3ae0: 6c 6f 77 65 72 28 7a 53 75 66 66 69 78 5b 69 5d  lower(zSuffix[i]
3af0: 29 3b 0a 20 20 20 20 66 69 72 73 74 20 3d 20 30  );.    first = 0
3b00: 3b 0a 20 20 20 20 6c 61 73 74 20 3d 20 73 69 7a  ;.    last = siz
3b10: 65 6f 66 28 61 4d 69 6d 65 29 2f 73 69 7a 65 6f  eof(aMime)/sizeo
3b20: 66 28 61 4d 69 6d 65 5b 30 5d 29 3b 0a 20 20 20  f(aMime[0]);.   
3b30: 20 77 68 69 6c 65 28 20 66 69 72 73 74 3c 3d 6c   while( first<=l
3b40: 61 73 74 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  ast ){.      int
3b50: 20 63 3b 0a 20 20 20 20 20 20 69 20 3d 20 28 66   c;.      i = (f
3b60: 69 72 73 74 2b 6c 61 73 74 29 2f 32 3b 0a 20 20  irst+last)/2;.  
3b70: 20 20 20 20 63 20 3d 20 66 6f 73 73 69 6c 5f 73      c = fossil_s
3b80: 74 72 63 6d 70 28 7a 53 75 66 66 69 78 2c 20 61  trcmp(zSuffix, a
3b90: 4d 69 6d 65 5b 69 5d 2e 7a 53 75 66 66 69 78 29  Mime[i].zSuffix)
3ba0: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 30  ;.      if( c==0
3bb0: 20 29 20 72 65 74 75 72 6e 20 61 4d 69 6d 65 5b   ) return aMime[
3bc0: 69 5d 2e 7a 4d 69 6d 65 74 79 70 65 3b 0a 20 20  i].zMimetype;.  
3bd0: 20 20 20 20 69 66 28 20 63 3c 30 20 29 7b 0a 20      if( c<0 ){. 
3be0: 20 20 20 20 20 20 20 6c 61 73 74 20 3d 20 69 2d         last = i-
3bf0: 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  1;.      }else{.
3c00: 20 20 20 20 20 20 20 20 66 69 72 73 74 20 3d 20          first = 
3c10: 69 2b 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  i+1;.      }.   
3c20: 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20   }.  }.  return 
3c30: 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 66  "application/x-f
3c40: 6f 73 73 69 6c 2d 61 72 74 69 66 61 63 74 22 3b  ossil-artifact";
3c50: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 4f 4d 4d 41 4e  .}../*.** COMMAN
3c60: 44 3a 20 20 74 65 73 74 2d 6d 69 6d 65 74 79 70  D:  test-mimetyp
3c70: 65 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 25  e.**.** Usage: %
3c80: 66 6f 73 73 69 6c 20 74 65 73 74 2d 6d 69 6d 65  fossil test-mime
3c90: 74 79 70 65 20 46 49 4c 45 4e 41 4d 45 2e 2e 2e  type FILENAME...
3ca0: 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  .**.** Return th
3cb0: 65 20 64 65 64 75 63 65 64 20 6d 69 6d 65 74 79  e deduced mimety
3cc0: 70 65 20 66 6f 72 20 65 61 63 68 20 66 69 6c 65  pe for each file
3cd0: 20 6c 69 73 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49   listed..**.** I
3ce0: 66 20 46 6f 73 73 69 6c 20 69 73 20 63 6f 6d 70  f Fossil is comp
3cf0: 69 6c 65 64 20 77 69 74 68 20 2d 44 46 4f 53 53  iled with -DFOSS
3d00: 49 4c 5f 44 45 42 55 47 20 74 68 65 6e 20 74 68  IL_DEBUG then th
3d10: 65 20 22 6d 69 6d 65 74 79 70 65 2d 74 65 73 74  e "mimetype-test
3d20: 22 0a 2a 2a 20 66 69 6c 65 6e 61 6d 65 20 69 73  ".** filename is
3d30: 20 73 70 65 63 69 61 6c 20 61 6e 64 20 76 65 72   special and ver
3d40: 69 66 69 65 73 20 74 68 65 20 69 6e 74 65 67 72  ifies the integr
3d50: 69 74 79 20 6f 66 20 74 68 65 20 6d 69 6d 65 74  ity of the mimet
3d60: 79 70 65 20 74 61 62 6c 65 2e 0a 2a 2a 20 49 74  ype table..** It
3d70: 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 22   should return "
3d80: 6f 6b 22 2e 0a 2a 2f 0a 76 6f 69 64 20 6d 69 6d  ok"..*/.void mim
3d90: 65 74 79 70 65 5f 74 65 73 74 5f 63 6d 64 28 76  etype_test_cmd(v
3da0: 6f 69 64 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  oid){.  int i;. 
3db0: 20 66 6f 72 28 69 3d 32 3b 20 69 3c 67 2e 61 72   for(i=2; i<g.ar
3dc0: 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 66 6f  gc; i++){.    fo
3dd0: 73 73 69 6c 5f 70 72 69 6e 74 28 22 25 2d 32 30  ssil_print("%-20
3de0: 73 20 2d 3e 20 25 73 5c 6e 22 2c 20 67 2e 61 72  s -> %s\n", g.ar
3df0: 67 76 5b 69 5d 2c 20 6d 69 6d 65 74 79 70 65 5f  gv[i], mimetype_
3e00: 66 72 6f 6d 5f 6e 61 6d 65 28 67 2e 61 72 67 76  from_name(g.argv
3e10: 5b 69 5d 29 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a  [i]));.  }.}../*
3e20: 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 64 6f 63  .** WEBPAGE: doc
3e30: 0a 2a 2a 20 55 52 4c 3a 20 2f 64 6f 63 3f 6e 61  .** URL: /doc?na
3e40: 6d 65 3d 42 41 53 45 4c 49 4e 45 2f 50 41 54 48  me=BASELINE/PATH
3e50: 0a 2a 2a 20 55 52 4c 3a 20 2f 64 6f 63 2f 42 41  .** URL: /doc/BA
3e60: 53 45 4c 49 4e 45 2f 50 41 54 48 0a 2a 2a 0a 2a  SELINE/PATH.**.*
3e70: 2a 20 42 41 53 45 4c 49 4e 45 20 63 61 6e 20 62  * BASELINE can b
3e80: 65 20 65 69 74 68 65 72 20 61 20 62 61 73 65 6c  e either a basel
3e90: 69 6e 65 20 75 75 69 64 20 70 72 65 66 69 78 20  ine uuid prefix 
3ea0: 6f 72 20 6d 61 67 69 63 20 77 6f 72 64 73 20 22  or magic words "
3eb0: 74 69 70 22 0a 2a 2a 20 74 6f 20 6d 65 61 6e 20  tip".** to mean 
3ec0: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c  the most recentl
3ed0: 79 20 63 68 65 63 6b 65 64 20 69 6e 20 62 61 73  y checked in bas
3ee0: 65 6c 69 6e 65 20 6f 72 20 22 63 6b 6f 75 74 22  eline or "ckout"
3ef0: 20 74 6f 20 6d 65 61 6e 20 74 68 65 0a 2a 2a 20   to mean the.** 
3f00: 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 6c  content of the l
3f10: 6f 63 61 6c 20 63 68 65 63 6b 6f 75 74 2c 20 69  ocal checkout, i
3f20: 66 20 61 6e 79 2e 20 20 50 41 54 48 20 69 73 20  f any.  PATH is 
3f30: 74 68 65 20 72 65 6c 61 74 69 76 65 20 70 61 74  the relative pat
3f40: 68 6e 61 6d 65 0a 2a 2a 20 6f 66 20 73 6f 6d 65  hname.** of some
3f50: 20 66 69 6c 65 2e 20 20 54 68 69 73 20 6d 65 74   file.  This met
3f60: 68 6f 64 20 72 65 74 75 72 6e 73 20 74 68 65 20  hod returns the 
3f70: 66 69 6c 65 20 63 6f 6e 74 65 6e 74 2e 0a 2a 2a  file content..**
3f80: 0a 2a 2a 20 49 66 20 50 41 54 48 20 6d 61 74 63  .** If PATH matc
3f90: 68 65 73 20 74 68 65 20 70 61 74 74 65 72 6e 73  hes the patterns
3fa0: 20 2a 2e 77 69 6b 69 20 6f 72 20 2a 2e 74 78 74   *.wiki or *.txt
3fb0: 20 74 68 65 6e 20 66 6f 72 6d 61 74 74 69 6e 67   then formatting
3fc0: 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 69 73 20 61   content.** is a
3fd0: 64 64 65 64 20 62 65 66 6f 72 65 20 72 65 74 75  dded before retu
3fe0: 72 6e 69 6e 67 20 74 68 65 20 66 69 6c 65 2e 20  rning the file. 
3ff0: 20 46 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20 6e   For all other n
4000: 61 6d 65 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e  ames, the conten
4010: 74 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  t.** is returned
4020: 20 73 74 72 61 69 67 68 74 20 77 69 74 68 6f 75   straight withou
4030: 74 20 61 6e 79 20 69 6e 74 65 72 70 72 65 74 61  t any interpreta
4040: 74 69 6f 6e 20 6f 72 20 70 72 6f 63 65 73 73 69  tion or processi
4050: 6e 67 2e 0a 2a 2f 0a 76 6f 69 64 20 64 6f 63 5f  ng..*/.void doc_
4060: 70 61 67 65 28 76 6f 69 64 29 7b 0a 20 20 63 6f  page(void){.  co
4070: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  nst char *zName;
4080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4090: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74  /* Argument to t
40a0: 68 65 20 2f 64 6f 63 20 70 61 67 65 20 2a 2f 0a  he /doc page */.
40b0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d    const char *zM
40c0: 69 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ime;            
40d0: 20 20 20 20 2f 2a 20 44 6f 63 75 6d 65 6e 74 20      /* Document 
40e0: 4d 49 4d 45 20 74 79 70 65 20 2a 2f 0a 20 20 69  MIME type */.  i
40f0: 6e 74 20 76 69 64 20 3d 20 30 3b 20 20 20 20 20  nt vid = 0;     
4100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4110: 20 2f 2a 20 41 72 74 69 66 61 63 74 20 6f 66 20   /* Artifact of 
4120: 62 61 73 65 6c 69 6e 65 20 2a 2f 0a 20 20 69 6e  baseline */.  in
4130: 74 20 72 69 64 20 3d 20 30 3b 20 20 20 20 20 20  t rid = 0;      
4140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4150: 2f 2a 20 41 72 74 69 66 61 63 74 20 6f 66 20 66  /* Artifact of f
4160: 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20  ile */.  int i; 
4170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4180: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
4190: 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
41a0: 42 6c 6f 62 20 66 69 6c 65 62 6f 64 79 3b 20 20  Blob filebody;  
41b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41c0: 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 6f 66 20    /* Content of 
41d0: 74 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  the documentatio
41e0: 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 63 68 61 72  n file */.  char
41f0: 20 7a 42 61 73 65 6c 69 6e 65 5b 55 55 49 44 5f   zBaseline[UUID_
4200: 53 49 5a 45 2b 31 5d 3b 20 20 20 20 20 20 2f 2a  SIZE+1];      /*
4210: 20 42 61 73 65 6c 69 6e 65 20 55 55 49 44 20 2a   Baseline UUID *
4220: 2f 0a 0a 20 20 6c 6f 67 69 6e 5f 63 68 65 63 6b  /..  login_check
4230: 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 29 3b 0a  _credentials();.
4240: 20 20 69 66 28 20 21 67 2e 70 65 72 6d 2e 52 65    if( !g.perm.Re
4250: 61 64 20 29 7b 20 6c 6f 67 69 6e 5f 6e 65 65 64  ad ){ login_need
4260: 65 64 28 29 3b 20 72 65 74 75 72 6e 3b 20 7d 0a  ed(); return; }.
4270: 20 20 7a 4e 61 6d 65 20 3d 20 50 44 28 22 6e 61    zName = PD("na
4280: 6d 65 22 2c 20 22 74 69 70 2f 69 6e 64 65 78 2e  me", "tip/index.
4290: 77 69 6b 69 22 29 3b 0a 20 20 66 6f 72 28 69 3d  wiki");.  for(i=
42a0: 30 3b 20 7a 4e 61 6d 65 5b 69 5d 20 26 26 20 7a  0; zName[i] && z
42b0: 4e 61 6d 65 5b 69 5d 21 3d 27 2f 27 3b 20 69 2b  Name[i]!='/'; i+
42c0: 2b 29 7b 7d 0a 20 20 69 66 28 20 7a 4e 61 6d 65  +){}.  if( zName
42d0: 5b 69 5d 3d 3d 30 20 7c 7c 20 69 3e 55 55 49 44  [i]==0 || i>UUID
42e0: 5f 53 49 5a 45 20 29 7b 0a 20 20 20 20 7a 4e 61  _SIZE ){.    zNa
42f0: 6d 65 20 3d 20 22 69 6e 64 65 78 2e 68 74 6d 6c  me = "index.html
4300: 22 3b 0a 20 20 20 20 67 6f 74 6f 20 64 6f 63 5f  ";.    goto doc_
4310: 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 7d 0a 20  not_found;.  }. 
4320: 20 67 2e 7a 50 61 74 68 20 3d 20 6d 70 72 69 6e   g.zPath = mprin
4330: 74 66 28 22 25 73 2f 25 73 22 2c 20 67 2e 7a 50  tf("%s/%s", g.zP
4340: 61 74 68 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 6d  ath, zName);.  m
4350: 65 6d 63 70 79 28 7a 42 61 73 65 6c 69 6e 65 2c  emcpy(zBaseline,
4360: 20 7a 4e 61 6d 65 2c 20 69 29 3b 0a 20 20 7a 42   zName, i);.  zB
4370: 61 73 65 6c 69 6e 65 5b 69 5d 20 3d 20 30 3b 0a  aseline[i] = 0;.
4380: 20 20 7a 4e 61 6d 65 20 2b 3d 20 69 3b 0a 20 20    zName += i;.  
4390: 77 68 69 6c 65 28 20 7a 4e 61 6d 65 5b 30 5d 3d  while( zName[0]=
43a0: 3d 27 2f 27 20 29 7b 20 7a 4e 61 6d 65 2b 2b 3b  ='/' ){ zName++;
43b0: 20 7d 0a 20 20 69 66 28 20 21 66 69 6c 65 5f 69   }.  if( !file_i
43c0: 73 5f 73 69 6d 70 6c 65 5f 70 61 74 68 6e 61 6d  s_simple_pathnam
43d0: 65 28 7a 4e 61 6d 65 29 20 29 7b 0a 20 20 20 20  e(zName) ){.    
43e0: 69 6e 74 20 6e 20 3d 20 73 74 72 6c 65 6e 28 7a  int n = strlen(z
43f0: 4e 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 6e  Name);.    if( n
4400: 3e 30 20 26 26 20 7a 4e 61 6d 65 5b 6e 2d 31 5d  >0 && zName[n-1]
4410: 3d 3d 27 2f 27 20 29 7b 0a 20 20 20 20 20 20 7a  =='/' ){.      z
4420: 4e 61 6d 65 20 3d 20 6d 70 72 69 6e 74 66 28 22  Name = mprintf("
4430: 25 73 69 6e 64 65 78 2e 68 74 6d 6c 22 2c 20 7a  %sindex.html", z
4440: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28  Name);.      if(
4450: 20 21 66 69 6c 65 5f 69 73 5f 73 69 6d 70 6c 65   !file_is_simple
4460: 5f 70 61 74 68 6e 61 6d 65 28 7a 4e 61 6d 65 29  _pathname(zName)
4470: 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
4480: 20 64 6f 63 5f 6e 6f 74 5f 66 6f 75 6e 64 3b 0a   doc_not_found;.
4490: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
44a0: 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 64 6f  e{.      goto do
44b0: 63 5f 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20  c_not_found;.   
44c0: 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 66 6f 73   }.  }.  if( fos
44d0: 73 69 6c 5f 73 74 72 63 6d 70 28 7a 42 61 73 65  sil_strcmp(zBase
44e0: 6c 69 6e 65 2c 22 63 6b 6f 75 74 22 29 3d 3d 30  line,"ckout")==0
44f0: 20 26 26 20 64 62 5f 6f 70 65 6e 5f 6c 6f 63 61   && db_open_loca
4500: 6c 28 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  l()==0 ){.    sq
4510: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
4520: 69 7a 65 6f 66 28 7a 42 61 73 65 6c 69 6e 65 29  izeof(zBaseline)
4530: 2c 20 7a 42 61 73 65 6c 69 6e 65 2c 20 22 74 69  , zBaseline, "ti
4540: 70 22 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 66  p");.  }.  if( f
4550: 6f 73 73 69 6c 5f 73 74 72 63 6d 70 28 7a 42 61  ossil_strcmp(zBa
4560: 73 65 6c 69 6e 65 2c 22 63 6b 6f 75 74 22 29 3d  seline,"ckout")=
4570: 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 61  =0 ){.    /* Rea
4580: 64 20 66 72 6f 6d 20 74 68 65 20 6c 6f 63 61 6c  d from the local
4590: 20 63 68 65 63 6b 6f 75 74 20 2a 2f 0a 20 20 20   checkout */.   
45a0: 20 63 68 61 72 20 2a 7a 46 75 6c 6c 70 61 74 68   char *zFullpath
45b0: 3b 0a 20 20 20 20 64 62 5f 6d 75 73 74 5f 62 65  ;.    db_must_be
45c0: 5f 77 69 74 68 69 6e 5f 74 72 65 65 28 29 3b 0a  _within_tree();.
45d0: 20 20 20 20 7a 46 75 6c 6c 70 61 74 68 20 3d 20      zFullpath = 
45e0: 6d 70 72 69 6e 74 66 28 22 25 73 2f 25 73 22 2c  mprintf("%s/%s",
45f0: 20 67 2e 7a 4c 6f 63 61 6c 52 6f 6f 74 2c 20 7a   g.zLocalRoot, z
4600: 4e 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 21  Name);.    if( !
4610: 66 69 6c 65 5f 69 73 66 69 6c 65 28 7a 46 75 6c  file_isfile(zFul
4620: 6c 70 61 74 68 29 20 29 7b 0a 20 20 20 20 20 20  lpath) ){.      
4630: 67 6f 74 6f 20 64 6f 63 5f 6e 6f 74 5f 66 6f 75  goto doc_not_fou
4640: 6e 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  nd;.    }.    if
4650: 28 20 62 6c 6f 62 5f 72 65 61 64 5f 66 72 6f 6d  ( blob_read_from
4660: 5f 66 69 6c 65 28 26 66 69 6c 65 62 6f 64 79 2c  _file(&filebody,
4670: 20 7a 46 75 6c 6c 70 61 74 68 29 3c 30 20 29 7b   zFullpath)<0 ){
4680: 0a 20 20 20 20 20 20 67 6f 74 6f 20 64 6f 63 5f  .      goto doc_
4690: 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20 20 7d  not_found;.    }
46a0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 64 62  .  }else{.    db
46b0: 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69  _begin_transacti
46c0: 6f 6e 28 29 3b 0a 20 20 20 20 69 66 28 20 66 6f  on();.    if( fo
46d0: 73 73 69 6c 5f 73 74 72 63 6d 70 28 7a 42 61 73  ssil_strcmp(zBas
46e0: 65 6c 69 6e 65 2c 22 74 69 70 22 29 3d 3d 30 20  eline,"tip")==0 
46f0: 29 7b 0a 20 20 20 20 20 20 76 69 64 20 3d 20 64  ){.      vid = d
4700: 62 5f 69 6e 74 28 30 2c 20 22 53 45 4c 45 43 54  b_int(0, "SELECT
4710: 20 6f 62 6a 69 64 20 46 52 4f 4d 20 65 76 65 6e   objid FROM even
4720: 74 20 57 48 45 52 45 20 74 79 70 65 3d 27 63 69  t WHERE type='ci
4730: 27 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  '".             
4740: 20 20 20 20 20 20 20 20 20 22 20 4f 52 44 45 52           " ORDER
4750: 20 42 59 20 6d 74 69 6d 65 20 44 45 53 43 20 4c   BY mtime DESC L
4760: 49 4d 49 54 20 31 22 29 3b 0a 20 20 20 20 7d 65  IMIT 1");.    }e
4770: 6c 73 65 7b 0a 20 20 20 20 20 20 76 69 64 20 3d  lse{.      vid =
4780: 20 6e 61 6d 65 5f 74 6f 5f 74 79 70 65 64 5f 72   name_to_typed_r
4790: 69 64 28 7a 42 61 73 65 6c 69 6e 65 2c 20 22 63  id(zBaseline, "c
47a0: 69 22 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  i");.    }..    
47b0: 2f 2a 20 43 72 65 61 74 65 20 74 68 65 20 62 61  /* Create the ba
47c0: 73 65 6c 69 6e 65 20 63 61 63 68 65 20 69 66 20  seline cache if 
47d0: 69 74 20 64 6f 65 73 20 6e 6f 74 20 61 6c 72 65  it does not alre
47e0: 61 64 79 20 65 78 69 73 74 20 2a 2f 0a 20 20 20  ady exist */.   
47f0: 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 0a   db_multi_exec(.
4800: 20 20 20 20 20 20 22 43 52 45 41 54 45 20 54 41        "CREATE TA
4810: 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54  BLE IF NOT EXIST
4820: 53 20 76 63 61 63 68 65 28 5c 6e 22 0a 20 20 20  S vcache(\n".   
4830: 20 20 20 22 20 20 76 69 64 20 49 4e 54 45 47 45     "  vid INTEGE
4840: 52 2c 20 20 20 20 20 20 20 20 20 2d 2d 20 62 61  R,         -- ba
4850: 73 65 6c 69 6e 65 20 49 44 5c 6e 22 0a 20 20 20  seline ID\n".   
4860: 20 20 20 22 20 20 66 6e 61 6d 65 20 54 45 58 54     "  fname TEXT
4870: 2c 20 20 20 20 20 20 20 20 20 20 2d 2d 20 66 69  ,          -- fi
4880: 6c 65 6e 61 6d 65 5c 6e 22 0a 20 20 20 20 20 20  lename\n".      
4890: 22 20 20 72 69 64 20 49 4e 54 45 47 45 52 2c 20  "  rid INTEGER, 
48a0: 20 20 20 20 20 20 20 20 2d 2d 20 61 72 74 69 66          -- artif
48b0: 61 63 74 20 49 44 5c 6e 22 0a 20 20 20 20 20 20  act ID\n".      
48c0: 22 20 20 55 4e 49 51 55 45 28 76 69 64 2c 66 6e  "  UNIQUE(vid,fn
48d0: 61 6d 65 2c 72 69 64 29 5c 6e 22 0a 20 20 20 20  ame,rid)\n".    
48e0: 20 20 22 29 22 0a 20 20 20 20 29 3b 0a 0a 0a 0a    ")".    );....
48f0: 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20      /* Check to 
4900: 73 65 65 20 69 66 20 74 68 65 20 64 6f 63 75 6d  see if the docum
4910: 65 6e 74 61 74 69 6f 6e 20 66 69 6c 65 20 61 72  entation file ar
4920: 74 69 66 61 63 74 20 49 44 20 69 73 20 63 6f 6e  tifact ID is con
4930: 74 61 69 6e 65 64 0a 20 20 20 20 2a 2a 20 69 6e  tained.    ** in
4940: 20 74 68 65 20 62 61 73 65 6c 69 6e 65 20 63 61   the baseline ca
4950: 63 68 65 20 2a 2f 0a 20 20 20 20 72 69 64 20 3d  che */.    rid =
4960: 20 64 62 5f 69 6e 74 28 30 2c 20 22 53 45 4c 45   db_int(0, "SELE
4970: 43 54 20 72 69 64 20 46 52 4f 4d 20 76 63 61 63  CT rid FROM vcac
4980: 68 65 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  he".            
4990: 20 20 20 20 20 20 20 20 22 20 57 48 45 52 45 20          " WHERE 
49a0: 76 69 64 3d 25 64 20 41 4e 44 20 66 6e 61 6d 65  vid=%d AND fname
49b0: 3d 25 51 22 2c 20 76 69 64 2c 20 7a 4e 61 6d 65  =%Q", vid, zName
49c0: 29 3b 0a 20 20 20 20 69 66 28 20 72 69 64 3d 3d  );.    if( rid==
49d0: 30 20 26 26 20 64 62 5f 65 78 69 73 74 73 28 22  0 && db_exists("
49e0: 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 76 63  SELECT 1 FROM vc
49f0: 61 63 68 65 20 57 48 45 52 45 20 76 69 64 3d 25  ache WHERE vid=%
4a00: 64 22 2c 20 76 69 64 29 20 29 7b 0a 20 20 20 20  d", vid) ){.    
4a10: 20 20 67 6f 74 6f 20 64 6f 63 5f 6e 6f 74 5f 66    goto doc_not_f
4a20: 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  ound;.    }..   
4a30: 20 69 66 28 20 72 69 64 3d 3d 30 20 29 7b 0a 20   if( rid==0 ){. 
4a40: 20 20 20 20 20 53 74 6d 74 20 73 3b 0a 20 20 20       Stmt s;.   
4a50: 20 20 20 4d 61 6e 69 66 65 73 74 20 2a 70 4d 3b     Manifest *pM;
4a60: 0a 20 20 20 20 20 20 4d 61 6e 69 66 65 73 74 46  .      ManifestF
4a70: 69 6c 65 20 2a 70 46 69 6c 65 3b 0a 0a 20 20 20  ile *pFile;..   
4a80: 20 20 20 2f 2a 20 41 64 64 20 74 68 65 20 76 69     /* Add the vi
4a90: 64 20 62 61 73 65 6c 69 6e 65 20 74 6f 20 74 68  d baseline to th
4aa0: 65 20 63 61 63 68 65 20 2a 2f 0a 20 20 20 20 20  e cache */.     
4ab0: 20 69 66 28 20 64 62 5f 69 6e 74 28 30 2c 20 22   if( db_int(0, "
4ac0: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
4ad0: 46 52 4f 4d 20 76 63 61 63 68 65 22 29 3e 31 30  FROM vcache")>10
4ae0: 30 30 30 20 29 7b 0a 20 20 20 20 20 20 20 20 64  000 ){.        d
4af0: 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22 44 45  b_multi_exec("DE
4b00: 4c 45 54 45 20 46 52 4f 4d 20 76 63 61 63 68 65  LETE FROM vcache
4b10: 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ");.      }.    
4b20: 20 20 70 4d 20 3d 20 6d 61 6e 69 66 65 73 74 5f    pM = manifest_
4b30: 67 65 74 28 76 69 64 2c 20 43 46 54 59 50 45 5f  get(vid, CFTYPE_
4b40: 4d 41 4e 49 46 45 53 54 29 3b 0a 20 20 20 20 20  MANIFEST);.     
4b50: 20 69 66 28 20 70 4d 3d 3d 30 20 29 7b 0a 20 20   if( pM==0 ){.  
4b60: 20 20 20 20 20 20 67 6f 74 6f 20 64 6f 63 5f 6e        goto doc_n
4b70: 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20 20 20 20  ot_found;.      
4b80: 7d 0a 20 20 20 20 20 20 64 62 5f 70 72 65 70 61  }.      db_prepa
4b90: 72 65 28 26 73 2c 0a 20 20 20 20 20 20 20 20 22  re(&s,.        "
4ba0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 76 63 61 63  INSERT INTO vcac
4bb0: 68 65 28 76 69 64 2c 66 6e 61 6d 65 2c 72 69 64  he(vid,fname,rid
4bc0: 29 22 0a 20 20 20 20 20 20 20 20 22 20 53 45 4c  )".        " SEL
4bd0: 45 43 54 20 25 64 2c 20 3a 66 6e 61 6d 65 2c 20  ECT %d, :fname, 
4be0: 72 69 64 20 46 52 4f 4d 20 62 6c 6f 62 22 0a 20  rid FROM blob". 
4bf0: 20 20 20 20 20 20 20 22 20 20 57 48 45 52 45 20         "  WHERE 
4c00: 75 75 69 64 3d 3a 75 75 69 64 22 2c 0a 20 20 20  uuid=:uuid",.   
4c10: 20 20 20 20 20 76 69 64 0a 20 20 20 20 20 20 29       vid.      )
4c20: 3b 0a 20 20 20 20 20 20 6d 61 6e 69 66 65 73 74  ;.      manifest
4c30: 5f 66 69 6c 65 5f 72 65 77 69 6e 64 28 70 4d 29  _file_rewind(pM)
4c40: 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 28  ;.      while( (
4c50: 70 46 69 6c 65 20 3d 20 6d 61 6e 69 66 65 73 74  pFile = manifest
4c60: 5f 66 69 6c 65 5f 6e 65 78 74 28 70 4d 2c 30 29  _file_next(pM,0)
4c70: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
4c80: 64 62 5f 62 69 6e 64 5f 74 65 78 74 28 26 73 2c  db_bind_text(&s,
4c90: 20 22 3a 66 6e 61 6d 65 22 2c 20 70 46 69 6c 65   ":fname", pFile
4ca0: 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ->zName);.      
4cb0: 20 20 64 62 5f 62 69 6e 64 5f 74 65 78 74 28 26    db_bind_text(&
4cc0: 73 2c 20 22 3a 75 75 69 64 22 2c 20 70 46 69 6c  s, ":uuid", pFil
4cd0: 65 2d 3e 7a 55 75 69 64 29 3b 0a 20 20 20 20 20  e->zUuid);.     
4ce0: 20 20 20 64 62 5f 73 74 65 70 28 26 73 29 3b 0a     db_step(&s);.
4cf0: 20 20 20 20 20 20 20 20 64 62 5f 72 65 73 65 74          db_reset
4d00: 28 26 73 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  (&s);.      }.  
4d10: 20 20 20 20 64 62 5f 66 69 6e 61 6c 69 7a 65 28      db_finalize(
4d20: 26 73 29 3b 0a 20 20 20 20 20 20 6d 61 6e 69 66  &s);.      manif
4d30: 65 73 74 5f 64 65 73 74 72 6f 79 28 70 4d 29 3b  est_destroy(pM);
4d40: 0a 0a 20 20 20 20 20 20 2f 2a 20 54 72 79 20 61  ..      /* Try a
4d50: 67 61 69 6e 20 74 6f 20 66 69 6e 64 20 74 68 65  gain to find the
4d60: 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20 72   file */.      r
4d70: 69 64 20 3d 20 64 62 5f 69 6e 74 28 30 2c 20 22  id = db_int(0, "
4d80: 53 45 4c 45 43 54 20 72 69 64 20 46 52 4f 4d 20  SELECT rid FROM 
4d90: 76 63 61 63 68 65 22 0a 20 20 20 20 20 20 20 20  vcache".        
4da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                " 
4db0: 57 48 45 52 45 20 76 69 64 3d 25 64 20 41 4e 44  WHERE vid=%d AND
4dc0: 20 66 6e 61 6d 65 3d 25 51 22 2c 20 76 69 64 2c   fname=%Q", vid,
4dd0: 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 0a 20   zName);.    }. 
4de0: 20 20 20 69 66 28 20 72 69 64 3d 3d 30 20 29 7b     if( rid==0 ){
4df0: 0a 20 20 20 20 20 20 67 6f 74 6f 20 64 6f 63 5f  .      goto doc_
4e00: 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20 20 7d  not_found;.    }
4e10: 0a 0a 20 20 20 20 2f 2a 20 47 65 74 20 74 68 65  ..    /* Get the
4e20: 20 66 69 6c 65 20 63 6f 6e 74 65 6e 74 20 2a 2f   file content */
4e30: 0a 20 20 20 20 69 66 28 20 63 6f 6e 74 65 6e 74  .    if( content
4e40: 5f 67 65 74 28 72 69 64 2c 20 26 66 69 6c 65 62  _get(rid, &fileb
4e50: 6f 64 79 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ody)==0 ){.     
4e60: 20 67 6f 74 6f 20 64 6f 63 5f 6e 6f 74 5f 66 6f   goto doc_not_fo
4e70: 75 6e 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64  und;.    }.    d
4e80: 62 5f 65 6e 64 5f 74 72 61 6e 73 61 63 74 69 6f  b_end_transactio
4e90: 6e 28 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  n(0);.  }..  /* 
4ea0: 54 68 65 20 66 69 6c 65 20 69 73 20 6e 6f 77 20  The file is now 
4eb0: 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
4ec0: 20 66 69 6c 65 62 6f 64 79 20 62 6c 6f 62 2e 20   filebody blob. 
4ed0: 20 44 65 6c 69 76 65 72 20 74 68 65 0a 20 20 2a   Deliver the.  *
4ee0: 2a 20 66 69 6c 65 20 74 6f 20 74 68 65 20 75 73  * file to the us
4ef0: 65 72 20 0a 20 20 2a 2f 0a 20 20 7a 4d 69 6d 65  er .  */.  zMime
4f00: 20 3d 20 50 28 22 6d 69 6d 65 74 79 70 65 22 29   = P("mimetype")
4f10: 3b 0a 20 20 69 66 28 20 7a 4d 69 6d 65 3d 3d 30  ;.  if( zMime==0
4f20: 20 29 7b 0a 20 20 20 20 7a 4d 69 6d 65 20 3d 20   ){.    zMime = 
4f30: 6d 69 6d 65 74 79 70 65 5f 66 72 6f 6d 5f 6e 61  mimetype_from_na
4f40: 6d 65 28 7a 4e 61 6d 65 29 3b 0a 20 20 7d 0a 20  me(zName);.  }. 
4f50: 20 54 68 5f 53 74 6f 72 65 28 22 64 6f 63 5f 6e   Th_Store("doc_n
4f60: 61 6d 65 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20  ame", zName);.  
4f70: 54 68 5f 53 74 6f 72 65 28 22 64 6f 63 5f 76 65  Th_Store("doc_ve
4f80: 72 73 69 6f 6e 22 2c 20 64 62 5f 74 65 78 74 28  rsion", db_text(
4f90: 30 2c 20 22 53 45 4c 45 43 54 20 27 5b 27 20 7c  0, "SELECT '[' |
4fa0: 7c 20 73 75 62 73 74 72 28 75 75 69 64 2c 31 2c  | substr(uuid,1,
4fb0: 31 30 29 20 7c 7c 20 27 5d 27 22 0a 20 20 20 20  10) || ']'".    
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fe0: 20 22 20 20 46 52 4f 4d 20 62 6c 6f 62 20 57 48   "  FROM blob WH
4ff0: 45 52 45 20 72 69 64 3d 25 64 22 2c 20 76 69 64  ERE rid=%d", vid
5000: 29 29 3b 0a 20 20 54 68 5f 53 74 6f 72 65 28 22  ));.  Th_Store("
5010: 64 6f 63 5f 64 61 74 65 22 2c 20 64 62 5f 74 65  doc_date", db_te
5020: 78 74 28 30 2c 20 22 53 45 4c 45 43 54 20 64 61  xt(0, "SELECT da
5030: 74 65 74 69 6d 65 28 6d 74 69 6d 65 29 20 46 52  tetime(mtime) FR
5040: 4f 4d 20 65 76 65 6e 74 22 0a 20 20 20 20 20 20  OM event".      
5050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5060: 20 20 20 20 20 20 20 20 20 20 20 20 22 20 57 48              " WH
5070: 45 52 45 20 6f 62 6a 69 64 3d 25 64 20 41 4e 44  ERE objid=%d AND
5080: 20 74 79 70 65 3d 27 63 69 27 22 2c 20 76 69 64   type='ci'", vid
5090: 29 29 3b 0a 20 20 69 66 28 20 66 6f 73 73 69 6c  ));.  if( fossil
50a0: 5f 73 74 72 63 6d 70 28 7a 4d 69 6d 65 2c 20 22  _strcmp(zMime, "
50b0: 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 66 6f  application/x-fo
50c0: 73 73 69 6c 2d 77 69 6b 69 22 29 3d 3d 30 20 29  ssil-wiki")==0 )
50d0: 7b 0a 20 20 20 20 42 6c 6f 62 20 74 69 74 6c 65  {.    Blob title
50e0: 2c 20 74 61 69 6c 3b 0a 20 20 20 20 69 66 28 20  , tail;.    if( 
50f0: 77 69 6b 69 5f 66 69 6e 64 5f 74 69 74 6c 65 28  wiki_find_title(
5100: 26 66 69 6c 65 62 6f 64 79 2c 20 26 74 69 74 6c  &filebody, &titl
5110: 65 2c 20 26 74 61 69 6c 29 20 29 7b 0a 20 20 20  e, &tail) ){.   
5120: 20 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28     style_header(
5130: 62 6c 6f 62 5f 73 74 72 28 26 74 69 74 6c 65 29  blob_str(&title)
5140: 29 3b 0a 20 20 20 20 20 20 77 69 6b 69 5f 63 6f  );.      wiki_co
5150: 6e 76 65 72 74 28 26 74 61 69 6c 2c 20 30 2c 20  nvert(&tail, 0, 
5160: 57 49 4b 49 5f 42 55 54 54 4f 4e 53 29 3b 0a 20  WIKI_BUTTONS);. 
5170: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
5180: 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22 44 6f  style_header("Do
5190: 63 75 6d 65 6e 74 61 74 69 6f 6e 22 29 3b 0a 20  cumentation");. 
51a0: 20 20 20 20 20 77 69 6b 69 5f 63 6f 6e 76 65 72       wiki_conver
51b0: 74 28 26 66 69 6c 65 62 6f 64 79 2c 20 30 2c 20  t(&filebody, 0, 
51c0: 57 49 4b 49 5f 42 55 54 54 4f 4e 53 29 3b 0a 20  WIKI_BUTTONS);. 
51d0: 20 20 20 7d 0a 20 20 20 20 73 74 79 6c 65 5f 66     }.    style_f
51e0: 6f 6f 74 65 72 28 29 3b 0a 20 20 7d 65 6c 73 65  ooter();.  }else
51f0: 20 69 66 28 20 66 6f 73 73 69 6c 5f 73 74 72 63   if( fossil_strc
5200: 6d 70 28 7a 4d 69 6d 65 2c 20 22 74 65 78 74 2f  mp(zMime, "text/
5210: 70 6c 61 69 6e 22 29 3d 3d 30 20 29 7b 0a 20 20  plain")==0 ){.  
5220: 20 20 73 74 79 6c 65 5f 68 65 61 64 65 72 28 22    style_header("
5230: 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 22 29 3b  Documentation");
5240: 0a 20 20 20 20 40 20 3c 62 6c 6f 63 6b 71 75 6f  .    @ <blockquo
5250: 74 65 3e 3c 70 72 65 3e 0a 20 20 20 20 40 20 25  te><pre>.    @ %
5260: 68 28 62 6c 6f 62 5f 73 74 72 28 26 66 69 6c 65  h(blob_str(&file
5270: 62 6f 64 79 29 29 0a 20 20 20 20 40 20 3c 2f 70  body)).    @ </p
5280: 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
5290: 0a 20 20 20 20 73 74 79 6c 65 5f 66 6f 6f 74 65  .    style_foote
52a0: 72 28 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  r();.  }else{.  
52b0: 20 20 63 67 69 5f 73 65 74 5f 63 6f 6e 74 65 6e    cgi_set_conten
52c0: 74 5f 74 79 70 65 28 7a 4d 69 6d 65 29 3b 0a 20  t_type(zMime);. 
52d0: 20 20 20 63 67 69 5f 73 65 74 5f 63 6f 6e 74 65     cgi_set_conte
52e0: 6e 74 28 26 66 69 6c 65 62 6f 64 79 29 3b 0a 20  nt(&filebody);. 
52f0: 20 7d 0a 20 20 72 65 74 75 72 6e 3b 0a 0a 64 6f   }.  return;..do
5300: 63 5f 6e 6f 74 5f 66 6f 75 6e 64 3a 0a 20 20 2f  c_not_found:.  /
5310: 2a 20 4a 75 6d 70 20 68 65 72 65 20 77 68 65 6e  * Jump here when
5320: 20 75 6e 61 62 6c 65 20 74 6f 20 6c 6f 63 61 74   unable to locat
5330: 65 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 20 2a  e the document *
5340: 2f 0a 20 20 64 62 5f 65 6e 64 5f 74 72 61 6e 73  /.  db_end_trans
5350: 61 63 74 69 6f 6e 28 30 29 3b 0a 20 20 73 74 79  action(0);.  sty
5360: 6c 65 5f 68 65 61 64 65 72 28 22 44 6f 63 75 6d  le_header("Docum
5370: 65 6e 74 20 4e 6f 74 20 46 6f 75 6e 64 22 29 3b  ent Not Found");
5380: 0a 20 20 40 20 3c 70 3e 4e 6f 20 73 75 63 68 20  .  @ <p>No such 
5390: 64 6f 63 75 6d 65 6e 74 3a 20 25 68 28 7a 4e 61  document: %h(zNa
53a0: 6d 65 29 3c 2f 70 3e 0a 20 20 73 74 79 6c 65 5f  me)</p>.  style_
53b0: 66 6f 6f 74 65 72 28 29 3b 0a 20 20 72 65 74 75  footer();.  retu
53c0: 72 6e 3b 20 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  rn;  .}../*.** T
53d0: 68 65 20 64 65 66 61 75 6c 74 20 6c 6f 67 6f 2e  he default logo.
53e0: 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73 74  .*/.static const
53f0: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61   unsigned char a
5400: 4c 6f 67 6f 5b 5d 20 3d 20 7b 0a 20 20 20 20 37  Logo[] = {.    7
5410: 31 2c 20 20 37 33 2c 20 20 37 30 2c 20 20 35 36  1,  73,  70,  56
5420: 2c 20 20 35 35 2c 20 20 39 37 2c 20 20 36 32 2c  ,  55,  97,  62,
5430: 20 20 20 30 2c 20 20 37 31 2c 20 20 20 30 2c 20     0,  71,   0, 
5440: 32 34 34 2c 20 20 20 30 2c 20 20 20 30 2c 20 20  244,   0,   0,  
5450: 38 35 2c 20 0a 20 20 20 31 32 39 2c 20 31 34 39  85, .   129, 149
5460: 2c 20 20 39 35 2c 20 31 33 36 2c 20 31 35 35 2c  ,  95, 136, 155,
5470: 20 20 39 39 2c 20 31 33 39 2c 20 31 35 37 2c 20    99, 139, 157, 
5480: 31 30 36 2c 20 31 34 34 2c 20 31 36 32 2c 20 31  106, 144, 162, 1
5490: 31 33 2c 20 31 35 30 2c 20 31 36 36 2c 20 0a 20  13, 150, 166, . 
54a0: 20 20 31 31 36 2c 20 31 35 32 2c 20 31 36 38 2c    116, 152, 168,
54b0: 20 31 32 37 2c 20 31 36 30 2c 20 31 37 35 2c 20   127, 160, 175, 
54c0: 31 33 38 2c 20 31 36 38 2c 20 31 38 32 2c 20 31  138, 168, 182, 1
54d0: 34 38 2c 20 31 37 36 2c 20 31 38 38 2c 20 31 35  48, 176, 188, 15
54e0: 39 2c 20 31 38 34 2c 20 0a 20 20 20 31 39 35 2c  9, 184, .   195,
54f0: 20 31 37 30 2c 20 31 39 32 2c 20 32 30 32 2c 20   170, 192, 202, 
5500: 31 38 30 2c 20 31 39 39 2c 20 32 30 38 2c 20 31  180, 199, 208, 1
5510: 38 34 2c 20 32 30 32 2c 20 32 31 30 2c 20 31 39  84, 202, 210, 19
5520: 31 2c 20 32 30 37 2c 20 32 31 35 2c 20 32 30 31  1, 207, 215, 201
5530: 2c 20 0a 20 20 20 32 31 35 2c 20 32 32 31 2c 20  , .   215, 221, 
5540: 32 31 32 2c 20 32 32 33 2c 20 32 32 38 2c 20 32  212, 223, 228, 2
5550: 32 33 2c 20 32 33 31 2c 20 32 33 35 2c 20 32 32  23, 231, 235, 22
5560: 36 2c 20 32 32 37 2c 20 32 32 36 2c 20 32 32 36  6, 227, 226, 226
5570: 2c 20 32 33 34 2c 20 32 33 37 2c 20 0a 20 20 20  , 234, 237, .   
5580: 32 33 33 2c 20 32 33 39 2c 20 32 34 31 2c 20 32  233, 239, 241, 2
5590: 34 30 2c 20 32 34 34 2c 20 32 34 36 2c 20 32 34  40, 244, 246, 24
55a0: 34 2c 20 32 34 37 2c 20 32 34 38 2c 20 32 35 35  4, 247, 248, 255
55b0: 2c 20 32 35 35 2c 20 32 35 35 2c 20 20 20 30 2c  , 255, 255,   0,
55c0: 20 20 20 30 2c 20 0a 20 20 20 20 20 30 2c 20 20     0, .     0,  
55d0: 20 30 2c 20 20 20 30 2c 20 20 20 30 2c 20 20 20   0,   0,   0,   
55e0: 30 2c 20 20 20 30 2c 20 20 20 30 2c 20 20 20 30  0,   0,   0,   0
55f0: 2c 20 20 20 30 2c 20 20 20 30 2c 20 20 20 30 2c  ,   0,   0,   0,
5600: 20 20 20 30 2c 20 20 20 30 2c 20 20 20 30 2c 20     0,   0,   0, 
5610: 0a 20 20 20 20 20 30 2c 20 20 20 30 2c 20 20 20  .     0,   0,   
5620: 30 2c 20 20 20 30 2c 20 20 20 30 2c 20 20 20 30  0,   0,   0,   0
5630: 2c 20 20 20 30 2c 20 20 20 30 2c 20 20 20 30 2c  ,   0,   0,   0,
5640: 20 20 20 30 2c 20 20 20 30 2c 20 20 34 34 2c 20     0,   0,  44, 
5650: 20 20 30 2c 20 20 20 30 2c 20 0a 20 20 20 20 20    0,   0, .     
5660: 30 2c 20 20 20 30 2c 20 20 36 32 2c 20 20 20 30  0,   0,  62,   0
5670: 2c 20 20 37 31 2c 20 20 20 30 2c 20 20 20 30 2c  ,  71,   0,   0,
5680: 20 20 20 35 2c 20 32 35 35 2c 20 20 39 36 2c 20     5, 255,  96, 
5690: 31 30 30 2c 20 31 34 31 2c 20 31 30 30 2c 20 31  100, 141, 100, 1
56a0: 30 35 2c 20 0a 20 20 20 31 35 38 2c 20 31 36 38  05, .   158, 168
56b0: 2c 20 20 33 37 2c 20 20 34 31 2c 20 31 33 32 2c  ,  37,  41, 132,
56c0: 20 31 39 32 2c 20 31 36 34 2c 20 31 31 32 2c 20   192, 164, 112, 
56d0: 20 34 34 2c 20 32 30 37 2c 20 31 30 32 2c 20 20   44, 207, 102,  
56e0: 39 39 2c 20 20 20 30 2c 20 20 35 36 2c 20 0a 20  99,   0,  56, . 
56f0: 20 20 20 31 36 2c 20 20 38 34 2c 20 31 31 36 2c     16,  84, 116,
5700: 20 32 33 39 2c 20 31 39 39 2c 20 31 34 31 2c 20   239, 199, 141, 
5710: 20 36 35 2c 20 31 31 30 2c 20 32 33 32 2c 20 32   65, 110, 232, 2
5720: 34 38 2c 20 20 32 35 2c 20 31 34 31 2c 20 31 39  48,  25, 141, 19
5730: 33 2c 20 31 36 31 2c 20 0a 20 20 20 20 38 32 2c  3, 161, .    82,
5740: 20 31 31 33 2c 20 31 30 38 2c 20 32 30 32 2c 20   113, 108, 202, 
5750: 20 33 32 2c 20 20 35 35 2c 20 32 32 39 2c 20 32   32,  55, 229, 2
5760: 31 30 2c 20 20 37 33 2c 20 20 36 31 2c 20 20 34  10,  73,  61,  4
5770: 31 2c 20 31 36 34 2c 20 20 38 38 2c 20 31 30 32  1, 164,  88, 102
5780: 2c 20 0a 20 20 20 31 38 31 2c 20 20 31 30 2c 20  , .   181,  10, 
5790: 20 34 31 2c 20 20 39 36 2c 20 31 37 39 2c 20 20   41,  96, 179,  
57a0: 39 31 2c 20 31 30 36 2c 20 20 33 35 2c 20 32 34  91, 106,  35, 24
57b0: 30 2c 20 20 20 35 2c 20 31 33 35 2c 20 31 34 33  0,   5, 135, 143
57c0: 2c 20 31 33 37 2c 20 32 34 32 2c 20 0a 20 20 20  , 137, 242, .   
57d0: 20 38 37 2c 20 31 32 33 2c 20 32 34 36 2c 20 20   87, 123, 246,  
57e0: 33 33 2c 20 31 39 30 2c 20 20 38 31 2c 20 31 30  33, 190,  81, 10
57f0: 38 2c 20 31 36 33 2c 20 32 33 37 2c 20 31 39 38  8, 163, 237, 198
5800: 2c 20 20 31 34 2c 20 20 33 30 2c 20 31 31 33 2c  ,  14,  30, 113,
5810: 20 32 33 33 2c 20 0a 20 20 20 31 33 31 2c 20 20   233, .   131,  
5820: 37 38 2c 20 31 31 35 2c 20 20 37 32 2c 20 20 31  78, 115,  72,  1
5830: 31 2c 20 31 31 35 2c 20 20 38 37 2c 20 31 30 31  1, 115,  87, 101
5840: 2c 20 20 31 39 2c 20 31 32 34 2c 20 20 35 31 2c  ,  19, 124,  51,
5850: 20 20 36 36 2c 20 20 37 34 2c 20 20 20 38 2c 20    66,  74,   8, 
5860: 0a 20 20 20 20 31 39 2c 20 20 31 36 2c 20 20 36  .    19,  16,  6
5870: 37 2c 20 31 30 30 2c 20 20 37 34 2c 20 31 33 33  7, 100,  74, 133
5880: 2c 20 20 35 30 2c 20 20 31 35 2c 20 31 30 31 2c  ,  50,  15, 101,
5890: 20 31 33 35 2c 20 20 35 36 2c 20 20 31 31 2c 20   135,  56,  11, 
58a0: 20 37 34 2c 20 20 20 36 2c 20 0a 20 20 20 31 34   74,   6, .   14
58b0: 33 2c 20 20 34 39 2c 20 31 32 36 2c 20 31 30 36  3,  49, 126, 106
58c0: 2c 20 20 35 36 2c 20 20 20 38 2c 20 31 34 35 2c  ,  56,   8, 145,
58d0: 20 20 36 37 2c 20 20 20 39 2c 20 31 35 32 2c 20    67,   9, 152, 
58e0: 20 34 38 2c 20 31 33 39 2c 20 31 35 35 2c 20 20   48, 139, 155,  
58f0: 20 35 2c 20 0a 20 20 20 20 32 32 2c 20 20 31 33   5, .    22,  13
5900: 2c 20 20 37 34 2c 20 31 31 35 2c 20 31 36 31 2c  ,  74, 115, 161,
5910: 20 20 34 31 2c 20 31 34 37 2c 20 31 30 31 2c 20    41, 147, 101, 
5920: 20 31 33 2c 20 31 33 30 2c 20 20 35 37 2c 20 31   13, 130,  57, 1
5930: 33 32 2c 20 31 37 30 2c 20 20 34 30 2c 20 0a 20  32, 170,  40, . 
5940: 20 20 31 36 37 2c 20 31 35 35 2c 20 20 20 30 2c    167, 155,   0,
5950: 20 20 39 34 2c 20 20 35 37 2c 20 20 20 33 2c 20    94,  57,   3, 
5960: 31 37 38 2c 20 20 34 38 2c 20 31 38 33 2c 20 31  178,  48, 183, 1
5970: 38 31 2c 20 20 35 37 2c 20 31 36 30 2c 20 31 38  81,  57, 160, 18
5980: 36 2c 20 20 34 30 2c 20 0a 20 20 20 20 31 39 2c  6,  40, .    19,
5990: 20 31 34 31 2c 20 31 38 39 2c 20 20 20 30 2c 20   141, 189,   0, 
59a0: 20 36 39 2c 20 31 39 32 2c 20 20 34 30 2c 20 20   69, 192,  40,  
59b0: 31 36 2c 20 31 39 35 2c 20 31 35 35 2c 20 31 38  16, 195, 155, 18
59c0: 35 2c 20 31 39 39 2c 20 20 34 31 2c 20 32 30 31  5, 199,  41, 201
59d0: 2c 20 0a 20 20 20 31 38 39 2c 20 31 39 31 2c 20  , .   189, 191, 
59e0: 32 30 35 2c 20 31 39 33 2c 20 31 38 38 2c 20 31  205, 193, 188, 1
59f0: 33 31 2c 20 32 31 30 2c 20 20 34 39 2c 20 31 37  31, 210,  49, 17
5a00: 35 2c 20 20 38 38 2c 20 32 30 39 2c 20 32 31 34  5,  88, 209, 214
5a10: 2c 20 20 33 38 2c 20 20 31 39 2c 20 0a 20 20 20  ,  38,  19, .   
5a20: 20 20 33 2c 20 20 31 31 2c 20 20 31 39 2c 20 31    3,  11,  19, 1
5a30: 31 31 2c 20 31 32 37 2c 20 20 36 30 2c 20 32 31  11, 127,  60, 21
5a40: 39 2c 20 20 33 39 2c 20 20 35 35 2c 20 32 30 34  9,  39,  55, 204
5a50: 2c 20 20 31 39 2c 20 20 31 31 2c 20 20 20 36 2c  ,  19,  11,   6,
5a60: 20 31 30 30 2c 20 0a 20 20 20 20 20 35 2c 20 20   100, .     5,  
5a70: 31 30 2c 20 32 32 37 2c 20 32 32 38 2c 20 20 33  10, 227, 228,  3
5a80: 37 2c 20 31 36 33 2c 20 20 20 30 2c 20 32 33 39  7, 163,   0, 239
5a90: 2c 20 31 31 37 2c 20 20 35 36 2c 20 32 33 38 2c  , 117,  56, 238,
5aa0: 20 32 34 33 2c 20 20 34 39 2c 20 31 39 35 2c 20   243,  49, 195, 
5ab0: 0a 20 20 20 31 37 37 2c 20 32 34 37 2c 20 20 34  .   177, 247,  4
5ac0: 38 2c 20 31 35 38 2c 20 20 35 36 2c 20 32 35 31  8, 158,  56, 251
5ad0: 2c 20 20 35 30 2c 20 32 31 36 2c 20 32 35 34 2c  ,  50, 216, 254,
5ae0: 20 31 39 37 2c 20 20 35 36 2c 20 31 32 38 2c 20   197,  56, 128, 
5af0: 31 30 37 2c 20 31 35 38 2c 20 0a 20 20 20 20 20  107, 158, .     
5b00: 32 2c 20 31 32 35 2c 20 31 37 31 2c 20 31 31 34  2, 125, 171, 114
5b10: 2c 20 20 39 32 2c 20 32 31 38 2c 20 32 34 36 2c  ,  92, 218, 246,
5b20: 20 20 39 36 2c 20 20 36 36 2c 20 20 20 33 2c 20    96,  66,   3, 
5b30: 20 20 34 2c 20 20 35 30 2c 20 31 33 34 2c 20 31    4,  50, 134, 1
5b40: 37 36 2c 20 0a 20 20 20 31 34 35 2c 20 20 20 36  76, .   145,   6
5b50: 2c 20 20 39 37 2c 20 20 36 34 2c 20 31 34 34 2c  ,  97,  64, 144,
5b60: 20 20 32 34 2c 20 20 31 39 2c 20 31 33 36 2c 20    24,  19, 136, 
5b70: 31 30 38 2c 20 20 39 31 2c 20 31 37 37 2c 20 31  108,  91, 177, 1
5b80: 36 30 2c 20 20 20 30 2c 20 31 39 34 2c 20 0a 20  60,   0, 194, . 
5b90: 20 20 20 31 39 2c 20 32 35 33 2c 20 20 20 30 2c     19, 253,   0,
5ba0: 20 32 31 36 2c 20 31 30 37 2c 20 32 31 34 2c 20   216, 107, 214, 
5bb0: 32 32 34 2c 20 31 39 32 2c 20 31 32 39 2c 20 20  224, 192, 129,  
5bc0: 20 35 2c 20 20 31 36 2c 20 20 38 33 2c 20 32 35   5,  16,  83, 25
5bd0: 35 2c 20 32 34 34 2c 20 0a 20 20 20 20 34 33 2c  5, 244, .    43,
5be0: 20 32 31 33 2c 20 31 39 35 2c 20 20 32 34 2c 20   213, 195,  24, 
5bf0: 31 35 39 2c 20 20 32 37 2c 20 31 36 39 2c 20 20  159,  27, 169,  
5c00: 36 34 2c 20 32 33 30 2c 20 20 38 38 2c 20 32 30  64, 230,  88, 20
5c10: 38 2c 20 32 32 37 2c 20 31 32 39 2c 20 31 38 32  8, 227, 129, 182
5c20: 2c 20 0a 20 20 20 20 35 34 2c 20 20 20 34 2c 20  , .    54,   4, 
5c30: 20 38 39 2c 20 31 35 38 2c 20 20 32 34 2c 20 31   89, 158,  24, 1
5c40: 38 31 2c 20 31 36 33 2c 20 31 39 39 2c 20 20 20  81, 163, 199,   
5c50: 31 2c 20 31 35 35 2c 20 20 35 32 2c 20 32 33 33  1, 155,  52, 233
5c60: 2c 20 20 20 38 2c 20 31 33 30 2c 20 0a 20 20 20  ,   8, 130, .   
5c70: 31 37 36 2c 20 20 38 33 2c 20 20 32 34 2c 20 31  176,  83,  24, 1
5c80: 32 38 2c 20 31 33 37 2c 20 20 35 30 2c 20 20 31  28, 137,  50,  1
5c90: 38 2c 20 20 33 32 2c 20 20 34 38 2c 20 20 34 38  8,  32,  48,  48
5ca0: 2c 20 31 31 34 2c 20 20 31 31 2c 20 31 37 33 2c  , 114,  11, 173,
5cb0: 20 31 33 37 2c 20 0a 20 20 20 20 31 39 2c 20 31   137, .    19, 1
5cc0: 31 30 2c 20 20 20 34 2c 20 20 36 34 2c 20 31 30  10,   4,  64, 10
5cd0: 35 2c 20 20 20 31 2c 20 31 39 34 2c 20 20 33 30  5,   1, 194,  30
5ce0: 2c 20 31 34 30 2c 20 20 36 38 2c 20 20 31 35 2c  , 140,  68,  15,
5cf0: 20 20 32 34 2c 20 20 32 34 2c 20 32 32 34 2c 20    24,  24, 224, 
5d00: 0a 20 20 20 20 35 30 2c 20 20 37 36 2c 20 20 37  .    50,  76,  7
5d10: 30 2c 20 20 20 30 2c 20 20 31 31 2c 20 31 37 31  0,   0,  11, 171
5d20: 2c 20 20 35 34 2c 20 20 32 36 2c 20 31 36 30 2c  ,  54,  26, 160,
5d30: 20 31 38 31 2c 20 31 39 34 2c 20 31 34 39 2c 20   181, 194, 149, 
5d40: 31 34 38 2c 20 20 34 30 2c 20 0a 20 20 20 31 37  148,  40, .   17
5d50: 34 2c 20 31 34 38 2c 20 31 32 32 2c 20 20 36 34  4, 148, 122,  64
5d60: 2c 20 31 38 30 2c 20 32 30 38 2c 20 31 36 31 2c  , 180, 208, 161,
5d70: 20 20 31 37 2c 20 32 30 37 2c 20 31 31 32 2c 20    17, 207, 112, 
5d80: 31 36 34 2c 20 20 20 31 2c 20 31 32 38 2c 20 20  164,   1, 128,  
5d90: 39 36 2c 20 0a 20 20 20 31 34 38 2c 20 20 37 38  96, .   148,  78
5da0: 2c 20 20 31 38 2c 20 20 32 31 2c 20 31 39 34 2c  ,  18,  21, 194,
5db0: 20 20 33 33 2c 20 32 32 39 2c 20 20 35 31 2c 20    33, 229,  51, 
5dc0: 32 34 37 2c 20 20 36 35 2c 20 31 33 33 2c 20 20  247,  65, 133,  
5dd0: 39 37 2c 20 20 20 35 2c 20 32 35 30 2c 20 0a 20  97,   5, 250, . 
5de0: 20 20 20 36 39 2c 20 32 32 39 2c 20 31 30 30 2c     69, 229, 100,
5df0: 20 20 33 34 2c 20 32 32 30 2c 20 31 32 38 2c 20    34, 220, 128, 
5e00: 31 36 36 2c 20 31 31 36 2c 20 31 39 30 2c 20 20  166, 116, 190,  
5e10: 36 32 2c 20 20 20 38 2c 20 31 36 37 2c 20 31 39  62,   8, 167, 19
5e20: 35 2c 20 31 37 30 2c 20 0a 20 20 20 20 34 37 2c  5, 170, .    47,
5e30: 20 31 36 33 2c 20 20 20 30 2c 20 31 33 30 2c 20   163,   0, 130, 
5e40: 20 39 30 2c 20 31 35 32 2c 20 20 31 31 2c 20 31   90, 152,  11, 1
5e50: 36 30 2c 20 31 37 33 2c 20 31 37 30 2c 20 20 32  60, 173, 170,  2
5e60: 37 2c 20 31 35 34 2c 20 20 32 36 2c 20 20 39 31  7, 154,  26,  91
5e70: 2c 20 0a 20 20 20 32 33 32 2c 20 31 35 31 2c 20  , .   232, 151, 
5e80: 31 37 31 2c 20 20 31 38 2c 20 20 31 34 2c 20 31  171,  18,  14, 1
5e90: 36 32 2c 20 32 35 33 2c 20 20 39 38 2c 20 31 37  62, 253,  98, 17
5ea0: 30 2c 20 20 31 38 2c 20 20 37 30 2c 20 31 37 31  0,  18,  70, 171
5eb0: 2c 20 20 36 34 2c 20 32 31 39 2c 20 0a 20 20 20  ,  64, 219, .   
5ec0: 20 31 30 2c 20 20 36 37 2c 20 31 33 36 2c 20 31   10,  67, 136, 1
5ed0: 33 34 2c 20 31 38 37 2c 20 31 31 36 2c 20 20 37  34, 187, 116,  7
5ee0: 35 2c 20 31 38 30 2c 20 20 34 36 2c 20 31 37 39  5, 180,  46, 179
5ef0: 2c 20 31 37 34 2c 20 31 33 35 2c 20 20 20 34 2c  , 174, 135,   4,
5f00: 20 31 38 39 2c 20 0a 20 20 20 32 32 39 2c 20 32   189, .   229, 2
5f10: 33 31 2c 20 20 37 38 2c 20 20 34 30 2c 20 20 31  31,  78,  40,  1
5f20: 30 2c 20 20 36 32 2c 20 32 32 36 2c 20 31 36 34  0,  62, 226, 164
5f30: 2c 20 31 37 32 2c 20 20 36 34 2c 20 32 34 30 2c  , 172,  64, 240,
5f40: 20 31 36 37 2c 20 31 37 30 2c 20 20 31 30 2c 20   167, 170,  10, 
5f50: 0a 20 20 20 20 31 38 2c 20 31 32 34 2c 20 31 38  .    18, 124, 18
5f60: 38 2c 20 20 31 30 2c 20 31 30 37 2c 20 20 36 35  8,  10, 107,  65
5f70: 2c 20 31 39 33 2c 20 20 39 34 2c 20 20 31 31 2c  , 193,  94,  11,
5f80: 20 20 39 33 2c 20 31 37 31 2c 20 20 32 38 2c 20    93, 171,  28, 
5f90: 32 34 38 2c 20 20 31 37 2c 20 0a 20 20 20 32 33  248,  17, .   23
5fa0: 39 2c 20 20 34 36 2c 20 31 34 30 2c 20 20 37 38  9,  46, 140,  78
5fb0: 2c 20 20 39 37 2c 20 20 33 34 2c 20 20 32 35 2c  ,  97,  34,  25,
5fc0: 20 31 35 33 2c 20 20 33 36 2c 20 20 39 39 2c 20   153,  36,  99, 
5fd0: 20 36 35 2c 20 31 33 30 2c 20 20 20 37 2c 20 32   65, 130,   7, 2
5fe0: 30 33 2c 20 0a 20 20 20 31 38 33 2c 20 31 36 38  03, .   183, 168
5ff0: 2c 20 20 35 31 2c 20 20 33 34 2c 20 31 33 36 2c  ,  51,  34, 136,
6000: 20 20 32 35 2c 20 31 34 30 2c 20 20 31 30 2c 20    25, 140,  10, 
6010: 20 20 36 2c 20 20 31 36 2c 20 20 32 38 2c 20 32    6,  16,  28, 2
6020: 35 35 2c 20 31 34 35 2c 20 32 34 31 2c 20 0a 20  55, 145, 241, . 
6030: 20 20 32 33 30 2c 20 31 34 30 2c 20 20 31 30 2c    230, 140,  10,
6040: 20 20 36 36 2c 20 31 37 38 2c 20 31 36 37 2c 20    66, 178, 167, 
6050: 31 31 32 2c 20 20 34 38 2c 20 31 39 32 2c 20 31  112,  48, 192, 1
6060: 32 38 2c 20 31 32 39 2c 20 20 20 39 2c 20 20 33  28, 129,   9,  3
6070: 31 2c 20 31 34 31 2c 20 0a 20 20 20 20 38 34 2c  1, 141, .    84,
6080: 20 31 33 38 2c 20 20 36 33 2c 20 31 36 33 2c 20   138,  63, 163, 
6090: 31 36 32 2c 20 20 20 32 2c 20 32 30 33 2c 20 32  162,   2, 203, 2
60a0: 30 36 2c 20 32 34 30 2c 20 20 35 36 2c 20 20 35  06, 240,  56,  5
60b0: 35 2c 20 20 39 38 2c 20 31 39 32 2c 20 31 38 38  5,  98, 192, 188
60c0: 2c 20 0a 20 20 20 20 31 35 2c 20 31 38 35 2c 20  , .    15, 185, 
60d0: 20 35 30 2c 20 31 36 30 2c 20 20 20 36 2c 20 20   50, 160,   6,  
60e0: 20 30 2c 20 31 32 35 2c 20 20 36 32 2c 20 20 33   0, 125,  62,  3
60f0: 33 2c 20 32 31 34 2c 20 31 39 35 2c 20 20 33 33  3, 214, 195,  33
6100: 2c 20 20 20 35 2c 20 20 32 34 2c 20 0a 20 20 20  ,   5,  24, .   
6110: 31 38 34 2c 20 20 32 35 2c 20 32 33 31 2c 20 20  184,  25, 231,  
6120: 31 34 2c 20 32 30 31 2c 20 32 34 35 2c 20 31 34  14, 201, 245, 14
6130: 34 2c 20 20 32 33 2c 20 31 32 36 2c 20 31 30 34  4,  23, 126, 104
6140: 2c 20 32 32 38 2c 20 20 20 30 2c 20 31 34 35 2c  , 228,   0, 145,
6150: 20 20 20 32 2c 20 0a 20 20 20 20 31 33 2c 20 31     2, .    13, 1
6160: 34 30 2c 20 32 34 34 2c 20 32 31 32 2c 20 20 31  40, 244, 212,  1
6170: 37 2c 20 20 32 31 2c 20 20 32 30 2c 20 31 37 36  7,  21,  20, 176
6180: 2c 20 31 35 39 2c 20 20 31 37 2c 20 20 39 35 2c  , 159,  17,  95,
6190: 20 32 32 35 2c 20 31 36 30 2c 20 31 32 38 2c 20   225, 160, 128, 
61a0: 0a 20 20 20 20 31 36 2c 20 20 20 31 2c 20 20 33  .    16,   1,  3
61b0: 32 2c 20 32 32 34 2c 20 31 34 32 2c 20 20 33 32  2, 224, 142,  32
61c0: 2c 20 32 32 37 2c 20 31 32 35 2c 20 20 38 37 2c  , 227, 125,  87,
61d0: 20 20 36 34 2c 20 20 20 30 2c 20 20 31 36 2c 20    64,   0,  16, 
61e0: 20 35 34 2c 20 31 32 39 2c 20 0a 20 20 20 32 30   54, 129, .   20
61f0: 35 2c 20 20 20 32 2c 20 31 34 31 2c 20 20 37 36  5,   2, 141,  76
6200: 2c 20 20 35 33 2c 20 31 33 30 2c 20 31 30 33 2c  ,  53, 130, 103,
6210: 20 20 33 37 2c 20 31 36 36 2c 20 20 36 34 2c 20    37, 166,  64, 
6220: 31 34 34 2c 20 31 30 37 2c 20 20 37 38 2c 20 31  144, 107,  78, 1
6230: 39 36 2c 20 0a 20 20 20 20 20 35 2c 20 31 39 32  96, .     5, 192
6240: 2c 20 20 20 30 2c 20 20 35 34 2c 20 20 35 30 2c  ,   0,  54,  50,
6250: 20 32 32 39 2c 20 20 20 39 2c 20 31 34 31 2c 20   229,   9, 141, 
6260: 20 34 39 2c 20 20 38 34 2c 20 31 39 34 2c 20 20   49,  84, 194,  
6270: 33 35 2c 20 20 31 32 2c 20 31 39 36 2c 20 0a 20  35,  12, 196, . 
6280: 20 20 31 35 33 2c 20 20 34 38 2c 20 31 39 32 2c    153,  48, 192,
6290: 20 31 33 37 2c 20 20 35 37 2c 20 20 38 34 2c 20   137,  57,  84, 
62a0: 20 32 34 2c 20 20 20 37 2c 20 20 38 37 2c 20 31   24,   7,  87, 1
62b0: 35 39 2c 20 32 34 39 2c 20 32 34 30 2c 20 32 31  59, 249, 240, 21
62c0: 35 2c 20 31 34 33 2c 20 0a 20 20 20 31 30 35 2c  5, 143, .   105,
62d0: 20 32 34 31 2c 20 31 31 38 2c 20 31 34 39 2c 20   241, 118, 149, 
62e0: 20 20 39 2c 20 31 33 39 2c 20 20 20 34 2c 20 20    9, 139,   4,  
62f0: 36 34 2c 20 32 30 33 2c 20 31 34 31 2c 20 20 33  64, 203, 141,  3
6300: 35 2c 20 31 34 30 2c 20 31 32 39 2c 20 31 33 31  5, 140, 129, 131
6310: 2c 20 0a 20 20 20 20 31 36 2c 20 32 32 32 2c 20  , .    16, 222, 
6320: 31 32 35 2c 20 32 33 31 2c 20 31 32 38 2c 20 20  125, 231, 128,  
6330: 20 32 2c 20 32 33 38 2c 20 20 31 37 2c 20 31 35   2, 238,  17, 15
6340: 32 2c 20 20 36 36 2c 20 20 20 33 2c 20 20 20 35  2,  66,   3,   5
6350: 2c 20 20 35 36 2c 20 32 32 34 2c 20 0a 20 20 20  ,  56, 224, .   
6360: 31 35 39 2c 20 31 30 33 2c 20 20 31 36 2c 20 20  159, 103,  16,  
6370: 37 36 2c 20 20 32 35 2c 20 20 37 35 2c 20 20 20  76,  25,  75,   
6380: 35 2c 20 20 31 31 2c 20 31 36 34 2c 20 32 31 35  5,  11, 164, 215
6390: 2c 20 20 39 36 2c 20 20 20 39 2c 20 20 31 34 2c  ,  96,   9,  14,
63a0: 20 20 31 36 2c 20 0a 20 20 20 20 33 36 2c 20 32    16, .    36, 2
63b0: 32 35 2c 20 20 31 35 2c 20 20 31 31 2c 20 20 34  25,  15,  11,  4
63c0: 30 2c 20 31 34 34 2c 20 31 39 32 2c 20 31 35 36  0, 144, 192, 156
63d0: 2c 20 20 34 31 2c 20 20 31 30 2c 20 31 37 38 2c  ,  41,  10, 178,
63e0: 20 31 39 39 2c 20 20 20 33 2c 20 20 36 36 2c 20   199,   3,  66, 
63f0: 0a 20 20 20 20 36 34 2c 20 20 38 30 2c 20 31 39  .    64,  80, 19
6400: 33 2c 20 20 20 33 2c 20 31 32 34 2c 20 20 39 30  3,   3, 124,  90
6410: 2c 20 20 34 38 2c 20 31 32 39 2c 20 31 32 39 2c  ,  48, 129, 129,
6420: 20 31 30 32 2c 20 31 37 37 2c 20 20 31 38 2c 20   102, 177,  18, 
6430: 31 39 32 2c 20 31 35 34 2c 20 0a 20 20 20 20 34  192, 154, .    4
6440: 39 2c 20 20 38 34 2c 20 32 34 30 2c 20 32 30 38  9,  84, 240, 208
6450: 2c 20 20 39 32 2c 20 20 32 32 2c 20 31 34 39 2c  ,  92,  22, 149,
6460: 20 20 39 36 2c 20 20 33 39 2c 20 20 20 39 2c 20    96,  39,   9, 
6470: 20 33 31 2c 20 20 37 34 2c 20 20 31 37 2c 20 20   31,  74,  17,  
6480: 39 34 2c 20 0a 20 20 20 20 20 33 2c 20 20 20 38  94, .     3,   8
6490: 2c 20 31 37 37 2c 20 31 39 39 2c 20 20 37 32 2c  , 177, 199,  72,
64a0: 20 20 35 39 2c 20 20 38 35 2c 20 20 37 36 2c 20    59,  85,  76, 
64b0: 20 32 35 2c 20 32 31 36 2c 20 20 20 38 2c 20 31   25, 216,   8, 1
64c0: 33 39 2c 20 31 39 34 2c 20 31 39 37 2c 20 0a 20  39, 194, 197, . 
64d0: 20 20 31 33 38 2c 20 31 36 33 2c 20 20 36 39 2c    138, 163,  69,
64e0: 20 20 39 36 2c 20 31 31 35 2c 20 20 20 30 2c 20    96, 115,   0, 
64f0: 31 34 37 2c 20 20 37 32 2c 20 20 37 32 2c 20 20  147,  72,  72,  
6500: 38 34 2c 20 20 32 38 2c 20 20 31 34 2c 20 20 37  84,  28,  14,  7
6510: 39 2c 20 20 38 36 2c 20 0a 20 20 20 32 33 33 2c  9,  86, .   233,
6520: 20 32 33 30 2c 20 20 32 33 2c 20 31 31 33 2c 20   230,  23, 113, 
6530: 20 32 36 2c 20 31 36 30 2c 20 31 32 38 2c 20 20   26, 160, 128,  
6540: 20 33 2c 20 20 31 30 2c 20 20 35 38 2c 20 31 32   3,  10,  58, 12
6550: 39 2c 20 31 30 33 2c 20 20 31 34 2c 20 31 35 39  9, 103,  14, 159
6560: 2c 20 0a 20 20 20 32 31 34 2c 20 31 36 33 2c 20  , .   214, 163, 
6570: 31 34 36 2c 20 31 31 37 2c 20 32 33 38 2c 20 32  146, 117, 238, 2
6580: 31 33 2c 20 31 35 34 2c 20 31 32 38 2c 20 31 35  13, 154, 128, 15
6590: 31 2c 20 31 30 39 2c 20 20 38 34 2c 20 20 36 34  1, 109,  84,  64
65a0: 2c 20 32 31 37 2c 20 20 31 33 2c 20 0a 20 20 20  , 217,  13, .   
65b0: 20 32 37 2c 20 20 31 30 2c 20 32 32 38 2c 20 20   27,  10, 228,  
65c0: 33 39 2c 20 20 20 32 2c 20 32 33 35 2c 20 31 36  39,   2, 235, 16
65d0: 34 2c 20 31 36 38 2c 20 20 37 34 2c 20 20 20 38  4, 168,  74,   8
65e0: 2c 20 20 20 30 2c 20 20 35 39 2c 20 0a 7d 3b 0a  ,   0,  59, .};.
65f0: 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20  ./*.** WEBPAGE: 
6600: 6c 6f 67 6f 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  logo.**.** Retur
6610: 6e 20 74 68 65 20 6c 6f 67 6f 20 69 6d 61 67 65  n the logo image
6620: 2e 20 20 54 68 69 73 20 69 6d 61 67 65 20 69 73  .  This image is
6630: 20 61 76 61 69 6c 61 62 6c 65 20 74 6f 20 61 6e   available to an
6640: 79 62 6f 64 79 20 77 68 6f 20 63 61 6e 20 73 65  ybody who can se
6650: 65 0a 2a 2a 20 74 68 65 20 6c 6f 67 69 6e 20 70  e.** the login p
6660: 61 67 65 2e 20 20 49 74 20 69 73 20 64 65 73 69  age.  It is desi
6670: 67 6e 65 64 20 66 6f 72 20 75 73 65 20 69 6e 20  gned for use in 
6680: 74 68 65 20 75 70 70 65 72 20 6c 65 66 74 2d 68  the upper left-h
6690: 61 6e 64 20 63 6f 72 6e 65 72 0a 2a 2a 20 6f 66  and corner.** of
66a0: 20 74 68 65 20 68 65 61 64 65 72 2e 0a 2a 2f 0a   the header..*/.
66b0: 76 6f 69 64 20 6c 6f 67 6f 5f 70 61 67 65 28 76  void logo_page(v
66c0: 6f 69 64 29 7b 0a 20 20 42 6c 6f 62 20 6c 6f 67  oid){.  Blob log
66d0: 6f 3b 0a 20 20 63 68 61 72 20 2a 7a 4d 69 6d 65  o;.  char *zMime
66e0: 3b 0a 0a 20 20 7a 4d 69 6d 65 20 3d 20 64 62 5f  ;..  zMime = db_
66f0: 67 65 74 28 22 6c 6f 67 6f 2d 6d 69 6d 65 74 79  get("logo-mimety
6700: 70 65 22 2c 20 22 69 6d 61 67 65 2f 67 69 66 22  pe", "image/gif"
6710: 29 3b 0a 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26  );.  blob_zero(&
6720: 6c 6f 67 6f 29 3b 0a 20 20 64 62 5f 62 6c 6f 62  logo);.  db_blob
6730: 28 26 6c 6f 67 6f 2c 20 22 53 45 4c 45 43 54 20  (&logo, "SELECT 
6740: 76 61 6c 75 65 20 46 52 4f 4d 20 63 6f 6e 66 69  value FROM confi
6750: 67 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 6c 6f  g WHERE name='lo
6760: 67 6f 2d 69 6d 61 67 65 27 22 29 3b 0a 20 20 69  go-image'");.  i
6770: 66 28 20 62 6c 6f 62 5f 73 69 7a 65 28 26 6c 6f  f( blob_size(&lo
6780: 67 6f 29 3d 3d 30 20 29 7b 0a 20 20 20 20 62 6c  go)==0 ){.    bl
6790: 6f 62 5f 69 6e 69 74 28 26 6c 6f 67 6f 2c 20 28  ob_init(&logo, (
67a0: 63 68 61 72 2a 29 61 4c 6f 67 6f 2c 20 73 69 7a  char*)aLogo, siz
67b0: 65 6f 66 28 61 4c 6f 67 6f 29 29 3b 0a 20 20 7d  eof(aLogo));.  }
67c0: 0a 20 20 63 67 69 5f 73 65 74 5f 63 6f 6e 74 65  .  cgi_set_conte
67d0: 6e 74 5f 74 79 70 65 28 7a 4d 69 6d 65 29 3b 0a  nt_type(zMime);.
67e0: 20 20 63 67 69 5f 73 65 74 5f 63 6f 6e 74 65 6e    cgi_set_conten
67f0: 74 28 26 6c 6f 67 6f 29 3b 0a 20 20 67 2e 69 73  t(&logo);.  g.is
6800: 43 6f 6e 73 74 20 3d 20 31 3b 0a 7d 0a 0a 2f 2a  Const = 1;.}../*
6810: 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20  .** The default 
6820: 62 61 63 6b 67 72 6f 75 6e 64 20 69 6d 61 67 65  background image
6830: 3a 20 20 61 20 31 36 78 31 36 20 77 68 69 74 65  :  a 16x16 white
6840: 20 47 49 46 0a 2a 2f 0a 73 74 61 74 69 63 20 63   GIF.*/.static c
6850: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
6860: 61 72 20 61 42 61 63 6b 67 72 6f 75 6e 64 5b 5d  ar aBackground[]
6870: 20 3d 20 7b 0a 20 20 20 20 37 31 2c 20 20 37 33   = {.    71,  73
6880: 2c 20 20 37 30 2c 20 20 35 36 2c 20 20 35 37 2c  ,  70,  56,  57,
6890: 20 20 39 37 2c 20 20 31 36 2c 20 20 20 30 2c 20    97,  16,   0, 
68a0: 20 31 36 2c 20 20 20 30 2c 0a 20 20 20 32 34 30   16,   0,.   240
68b0: 2c 20 20 20 30 2c 20 20 20 30 2c 20 32 35 35 2c  ,   0,   0, 255,
68c0: 20 32 35 35 2c 20 32 35 35 2c 20 20 20 30 2c 20   255, 255,   0, 
68d0: 20 20 30 2c 20 20 20 30 2c 20 20 33 33 2c 0a 20    0,   0,  33,. 
68e0: 20 20 32 35 34 2c 20 20 20 34 2c 20 31 31 39 2c    254,   4, 119,
68f0: 20 31 30 35 2c 20 31 31 35 2c 20 31 30 34 2c 20   105, 115, 104, 
6900: 20 20 30 2c 20 20 34 34 2c 20 20 20 30 2c 20 20    0,  44,   0,  
6910: 20 30 2c 0a 20 20 20 20 20 30 2c 20 20 20 30 2c   0,.     0,   0,
6920: 20 20 31 36 2c 20 20 20 30 2c 20 20 31 36 2c 20    16,   0,  16, 
6930: 20 20 30 2c 20 20 20 30 2c 20 20 20 32 2c 20 20    0,   0,   2,  
6940: 31 34 2c 20 31 33 32 2c 0a 20 20 20 31 34 33 2c  14, 132,.   143,
6950: 20 31 36 39 2c 20 32 30 33 2c 20 32 33 37 2c 20   169, 203, 237, 
6960: 20 31 35 2c 20 31 36 33 2c 20 31 35 36 2c 20 31   15, 163, 156, 1
6970: 38 30 2c 20 32 31 38 2c 20 31 33 39 2c 0a 20 20  80, 218, 139,.  
6980: 20 31 37 39 2c 20 20 36 32 2c 20 20 20 35 2c 20   179,  62,   5, 
6990: 20 20 30 2c 20 20 35 39 2c 0a 7d 3b 0a 0a 0a 2f    0,  59,.};.../
69a0: 2a 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 62 61  *.** WEBPAGE: ba
69b0: 63 6b 67 72 6f 75 6e 64 0a 2a 2a 0a 2a 2a 20 52  ckground.**.** R
69c0: 65 74 75 72 6e 20 74 68 65 20 62 61 63 6b 67 72  eturn the backgr
69d0: 6f 75 6e 64 20 69 6d 61 67 65 2e 0a 2a 2f 0a 76  ound image..*/.v
69e0: 6f 69 64 20 62 61 63 6b 67 72 6f 75 6e 64 5f 70  oid background_p
69f0: 61 67 65 28 76 6f 69 64 29 7b 0a 20 20 42 6c 6f  age(void){.  Blo
6a00: 62 20 62 67 69 6d 67 3b 0a 20 20 63 68 61 72 20  b bgimg;.  char 
6a10: 2a 7a 4d 69 6d 65 3b 0a 0a 20 20 7a 4d 69 6d 65  *zMime;..  zMime
6a20: 20 3d 20 64 62 5f 67 65 74 28 22 62 61 63 6b 67   = db_get("backg
6a30: 72 6f 75 6e 64 2d 6d 69 6d 65 74 79 70 65 22 2c  round-mimetype",
6a40: 20 22 69 6d 61 67 65 2f 67 69 66 22 29 3b 0a 20   "image/gif");. 
6a50: 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 62 67 69 6d   blob_zero(&bgim
6a60: 67 29 3b 0a 20 20 64 62 5f 62 6c 6f 62 28 26 62  g);.  db_blob(&b
6a70: 67 69 6d 67 2c 20 22 53 45 4c 45 43 54 20 76 61  gimg, "SELECT va
6a80: 6c 75 65 20 46 52 4f 4d 20 63 6f 6e 66 69 67 20  lue FROM config 
6a90: 57 48 45 52 45 20 6e 61 6d 65 3d 27 62 61 63 6b  WHERE name='back
6aa0: 67 72 6f 75 6e 64 2d 69 6d 61 67 65 27 22 29 3b  ground-image'");
6ab0: 0a 20 20 69 66 28 20 62 6c 6f 62 5f 73 69 7a 65  .  if( blob_size
6ac0: 28 26 62 67 69 6d 67 29 3d 3d 30 20 29 7b 0a 20  (&bgimg)==0 ){. 
6ad0: 20 20 20 62 6c 6f 62 5f 69 6e 69 74 28 26 62 67     blob_init(&bg
6ae0: 69 6d 67 2c 20 28 63 68 61 72 2a 29 61 42 61 63  img, (char*)aBac
6af0: 6b 67 72 6f 75 6e 64 2c 20 73 69 7a 65 6f 66 28  kground, sizeof(
6b00: 61 42 61 63 6b 67 72 6f 75 6e 64 29 29 3b 0a 20  aBackground));. 
6b10: 20 7d 0a 20 20 63 67 69 5f 73 65 74 5f 63 6f 6e   }.  cgi_set_con
6b20: 74 65 6e 74 5f 74 79 70 65 28 7a 4d 69 6d 65 29  tent_type(zMime)
6b30: 3b 0a 20 20 63 67 69 5f 73 65 74 5f 63 6f 6e 74  ;.  cgi_set_cont
6b40: 65 6e 74 28 26 62 67 69 6d 67 29 3b 0a 20 20 67  ent(&bgimg);.  g
6b50: 2e 69 73 43 6f 6e 73 74 20 3d 20 31 3b 0a 7d 0a  .isConst = 1;.}.