ia64/xen-unstable

changeset 2743:df9ad701dbce

bitkeeper revision 1.1159.1.282 (417e5b60oXUOPTWl81d5zD6oq1tOTQ)

Clean up docs dir layout.
author kaf24@freefall.cl.cam.ac.uk
date Tue Oct 26 14:12:48 2004 +0000 (2004-10-26)
parents a45b99337155
children 2e17f118a8c2
files .rootkeys BitKeeper/etc/ignore docs/HOWTOs/XenDebugger-HOWTO docs/Makefile docs/blkif-drivers-explained.txt docs/eps/xenlogo.eps docs/figs/dummy docs/figs/xenlogo.eps docs/interface.tex docs/misc/XenDebugger-HOWTO docs/misc/blkif-drivers-explained.txt docs/misc/xen_config.html docs/src/interface.tex docs/src/user.tex docs/src/xend.tex docs/style.tex docs/user.tex docs/xen_config.html docs/xend.tex docs/xenstyle.cls
line diff
     1.1 --- a/.rootkeys	Tue Oct 26 13:20:54 2004 +0000
     1.2 +++ b/.rootkeys	Tue Oct 26 14:12:48 2004 +0000
     1.3 @@ -7,16 +7,14 @@ 3eb788d6Kleck_Cut0ouGneviGzliQ Makefile
     1.4  3f5ef5a24IaQasQE2tyMxrfxskMmvw README
     1.5  3f5ef5a2l4kfBYSQTUaOyyD76WROZQ README.CD
     1.6  3f69d8abYB1vMyD_QVDvzxy5Zscf1A TODO
     1.7 -4022a73cgxX1ryj1HgS-IwwB6NUi2A docs/HOWTOs/XenDebugger-HOWTO
     1.8  3f9e7d53iC47UnlfORp9iC1vai6kWw docs/Makefile
     1.9 -412f4bd9sm5mCQ8BkrgKcAKZGadq7Q docs/blkif-drivers-explained.txt
    1.10 -3f9e7d60PWZJeVh5xdnk0nLUdxlqEA docs/eps/xenlogo.eps
    1.11 -3f9e7d63lTwQbp2fnx7yY93epWS-eQ docs/figs/dummy
    1.12 -3f9e7d564bWFB-Czjv1qdmE6o0GqNg docs/interface.tex
    1.13 -3f9e7d58t7N6hjjBMxSn-NMxBphchA docs/style.tex
    1.14 -410144afnSd2Yw68AHGO5gXu2m3y6A docs/user.tex
    1.15 -40d6ccbfKKBq8jE0ula4eHEzBiQuDA docs/xen_config.html
    1.16 -410a4c2bAO_m_l4RsiiPHnZ4ixHWbQ docs/xend.tex
    1.17 +3f9e7d60PWZJeVh5xdnk0nLUdxlqEA docs/figs/xenlogo.eps
    1.18 +4022a73cgxX1ryj1HgS-IwwB6NUi2A docs/misc/XenDebugger-HOWTO
    1.19 +412f4bd9sm5mCQ8BkrgKcAKZGadq7Q docs/misc/blkif-drivers-explained.txt
    1.20 +40d6ccbfKKBq8jE0ula4eHEzBiQuDA docs/misc/xen_config.html
    1.21 +3f9e7d564bWFB-Czjv1qdmE6o0GqNg docs/src/interface.tex
    1.22 +410144afnSd2Yw68AHGO5gXu2m3y6A docs/src/user.tex
    1.23 +410a4c2bAO_m_l4RsiiPHnZ4ixHWbQ docs/src/xend.tex
    1.24  3f9e7d5bz8BwYkNuwyiPVu7JJG441A docs/xenstyle.cls
    1.25  3f815144d1vI2777JI-dO4wk49Iw7g extras/mini-os/Makefile
    1.26  3f815144zTnCV5591ulIJQrpe5b-5Q extras/mini-os/README
     2.1 --- a/BitKeeper/etc/ignore	Tue Oct 26 13:20:54 2004 +0000
     2.2 +++ b/BitKeeper/etc/ignore	Tue Oct 26 14:12:48 2004 +0000
     2.3 @@ -18,19 +18,12 @@ docs/*.pdf
     2.4  docs/*.ps
     2.5  docs/*.dvi
     2.6  docs/*.toc
     2.7 -docs/interface/*
     2.8 -docs/user/*
     2.9 -docs/xend/*
    2.10 +docs/html/*
    2.11  extras/mini-os/h/hypervisor-ifs
    2.12  install
    2.13  install/*
    2.14  linux-*-xen0/*
    2.15  linux-*-xenU/*
    2.16 -linux-2.4.26-xen0
    2.17 -linux-2.4.26-xenU
    2.18 -linux-2.4.26.tar.gz
    2.19 -linux-2.6.7-xenU
    2.20 -linux-2.6.7.tar.bz2
    2.21  linux-xen-sparse
    2.22  netbsd-*-xen0
    2.23  netbsd-*-xenU
     3.1 --- a/docs/HOWTOs/XenDebugger-HOWTO	Tue Oct 26 13:20:54 2004 +0000
     3.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.3 @@ -1,304 +0,0 @@
     3.4 -Pervasive Debugging 
     3.5 -===================
     3.6 -
     3.7 -Alex Ho (alex.ho at cl.cam.ac.uk)
     3.8 -
     3.9 -Introduction
    3.10 -------------
    3.11 -
    3.12 -The pervasive debugging project is leveraging Xen to 
    3.13 -debug distributed systems.  We have added a gdb stub
    3.14 -to Xen to allow for remote debugging of both Xen and
    3.15 -guest operating systems.  More information about the
    3.16 -pervasive debugger is available at: http://www.cl.cam.ac.uk/netos/pdb
    3.17 -
    3.18 -
    3.19 -Implementation
    3.20 ---------------
    3.21 -
    3.22 -The gdb stub communicates with gdb running over a serial line.
    3.23 -The main entry point is pdb_handle_exception() which is invoked
    3.24 -from:    pdb_key_pressed()    ('D' on the console)
    3.25 -         do_int3_exception()  (interrupt 3: breakpoint exception)
    3.26 -         do_debug()           (interrupt 1: debug exception)
    3.27 -
    3.28 -This accepts characters from the serial port and passes gdb
    3.29 -commands to pdb_process_command() which implements the gdb stub
    3.30 -interface.  This file draws heavily from the kgdb project and
    3.31 -sample gdbstub provided with gdb.
    3.32 -
    3.33 -The stub can examine registers, single step and continue, and
    3.34 -read and write memory (in Xen, a domain, or a Linux process'
    3.35 -address space).  The debugger does not currently trace the 
    3.36 -current process, so all bets are off if context switch occurs
    3.37 -in the domain.
    3.38 -
    3.39 -
    3.40 -Setup
    3.41 ------
    3.42 -
    3.43 - +-------+ telnet +-----------+ serial +-------+ 
    3.44 - |  GDB  |--------|  nsplitd  |--------|  Xen  |
    3.45 - +-------+        +-----------+        +-------+ 
    3.46 -
    3.47 -To run pdb, Xen must be appropriately configured and 
    3.48 -a suitable serial interface attached to the target machine.
    3.49 -GDB and nsplitd can run on the same machine.
    3.50 -
    3.51 -Xen Configuration
    3.52 -
    3.53 -  Add the "pdb=xxx" option to your Xen boot command line
    3.54 -  where xxx is one of the following values:
    3.55 -     com1    gdb stub should communicate on com1
    3.56 -     com1H   gdb stub should communicate on com1 (with high bit set)
    3.57 -     com2    gdb stub should communicate on com2
    3.58 -     com2H   gdb stub should communicate on com2 (with high bit set)
    3.59 -
    3.60 -  Symbolic debugging infomration is quite helpful too:
    3.61 -  xeno.bk/xen/arch/x86/Rules.mk
    3.62 -    add -g to CFLAGS to compile Xen with symbols
    3.63 -  xeno.bk/linux-2.4.27-xen-sparse/arch/xen/Makefile
    3.64 -    add -g to CFLAGS to compile Linux with symbols
    3.65 -
    3.66 -  You may also want to consider dedicating a register to the
    3.67 -  frame pointer (disable the -fomit-frame-pointer compile flag).
    3.68 -
    3.69 -  When booting Xen and domain 0, look for the console text 
    3.70 -  "pdb: pervasive debugger" just before DOM0 starts up.
    3.71 -
    3.72 -Serial Port Configuration
    3.73 -
    3.74 -  pdb expects to communicate with gdb using the serial port.  Since 
    3.75 -  this port is often shared with the machine's console output, pdb can
    3.76 -  discriminate its communication by setting the high bit of each byte.
    3.77 -
    3.78 -  A new tool has been added to the source tree which splits 
    3.79 -  the serial output from a remote machine into two streams: 
    3.80 -  one stream (without the high bit) is the console and 
    3.81 -  one stream (with the high bit stripped) is the pdb communication.
    3.82 -
    3.83 -  See:  xeno.bk/tools/misc/nsplitd
    3.84 -
    3.85 -  nsplitd configuration
    3.86 -  ---------------------
    3.87 -  hostname$ more /etc/xinetd.d/nsplit
    3.88 -  service nsplit1
    3.89 -  {
    3.90 -        socket_type             = stream
    3.91 -        protocol                = tcp
    3.92 -        wait                    = no
    3.93 -        user                    = wanda
    3.94 -        server                  = /usr/sbin/in.nsplitd
    3.95 -        server_args             = serial.cl.cam.ac.uk:wcons00
    3.96 -        disable                 = no
    3.97 -        only_from               = 128.232.0.0/17 127.0.0.1
    3.98 -  }
    3.99 -
   3.100 -  hostname$ egrep 'wcons00|nsplit1' /etc/services
   3.101 -  wcons00         9600/tcp        # Wanda remote console
   3.102 -  nsplit1         12010/tcp       # Nemesis console splitter ports.
   3.103 -
   3.104 -  Note: nsplitd was originally written for the Nemesis project
   3.105 -  at Cambridge.
   3.106 -
   3.107 -  After nsplitd accepts a connection on <port> (12010 in the above
   3.108 -  example), it starts listening on port <port + 1>.  Characters sent 
   3.109 -  to the <port + 1> will have the high bit set and vice versa for 
   3.110 -  characters received.
   3.111 -
   3.112 -  You can connect to the nsplitd using
   3.113 -  'tools/misc/xencons <host> <port>'
   3.114 -
   3.115 -GDB 6.0
   3.116 -  pdb has been tested with gdb 6.0.  It should also work with
   3.117 -  earlier versions.
   3.118 -
   3.119 -
   3.120 -Usage
   3.121 ------
   3.122 -
   3.123 -1. Boot Xen and Linux
   3.124 -2. Interrupt Xen by pressing 'D' at the console
   3.125 -   You should see the console message: 
   3.126 -   (XEN) pdb_handle_exception [0x88][0x101000:0xfc5e72ac]
   3.127 -   At this point Xen is frozen and the pdb stub is waiting for gdb commands 
   3.128 -   on the serial line.
   3.129 -3. Attach with gdb
   3.130 -   (gdb) file xeno.bk/xen/xen
   3.131 -   Reading symbols from xeno.bk/xen/xen...done.
   3.132 -   (gdb) target remote <hostname>:<port + 1>              /* contact nsplitd */
   3.133 -   Remote debugging using serial.srg:12131
   3.134 -   continue_cpu_idle_loop () at current.h:10
   3.135 -   warning: shared library handler failed to enable breakpoint
   3.136 -   (gdb) break __enter_scheduler
   3.137 -   Breakpoint 1 at 0xfc510a94: file schedule.c, line 330.
   3.138 -   (gdb) cont
   3.139 -   Continuing.
   3.140 -
   3.141 -   Program received signal SIGTRAP, Trace/breakpoint trap.
   3.142 -   __enter_scheduler () at schedule.c:330
   3.143 -   (gdb) step
   3.144 -   (gdb) step
   3.145 -   (gdb) print next            /* the variable prev has been optimized away! */
   3.146 -   $1 = (struct task_struct *) 0x0
   3.147 -   (gdb) delete
   3.148 -   Delete all breakpoints? (y or n) y
   3.149 -4. You can add additional symbols to gdb
   3.150 -   (gdb) add-sym xeno.bk/linux-2.4.27-xen0/vmlinux
   3.151 -   add symbol table from file "xeno.bk/linux-2.4.27-xen0/vmlinux" at
   3.152 -   (y or n) y
   3.153 -   Reading symbols from xeno.bk/linux-2.4.27-xen0/vmlinux...done.
   3.154 -   (gdb) x/s cpu_vendor_names[0]
   3.155 -   0xc01530d2 <cpdext+62898>:	 "Intel"
   3.156 -   (gdb) break free_uid
   3.157 -   Breakpoint 2 at 0xc0012250
   3.158 -   (gdb) cont
   3.159 -   Continuing.                                  /* run a command in domain 0 */
   3.160 -
   3.161 -   Program received signal SIGTRAP, Trace/breakpoint trap.
   3.162 -   free_uid (up=0xbffff738) at user.c:77
   3.163 -
   3.164 -   (gdb) print *up
   3.165 -   $2 = {__count = {counter = 0}, processes = {counter = 135190120}, files = {
   3.166 -       counter = 0}, next = 0x395, pprev = 0xbffff878, uid = 134701041}
   3.167 -   (gdb) finish
   3.168 -   Run till exit from #0  free_uid (up=0xbffff738) at user.c:77
   3.169 -
   3.170 -   Program received signal SIGTRAP, Trace/breakpoint trap.
   3.171 -   release_task (p=0xc2da0000) at exit.c:51
   3.172 -   (gdb) print *p
   3.173 -   $3 = {state = 4, flags = 4, sigpending = 0, addr_limit = {seg = 3221225472},
   3.174 -     exec_domain = 0xc016a040, need_resched = 0, ptrace = 0, lock_depth = -1, 
   3.175 -     counter = 1, nice = 0, policy = 0, mm = 0x0, processor = 0, 
   3.176 -     cpus_runnable = 1, cpus_allowed = 4294967295, run_list = {next = 0x0, 
   3.177 -       prev = 0x0}, sleep_time = 18995, next_task = 0xc017c000, 
   3.178 -     prev_task = 0xc2f94000, active_mm = 0x0, local_pages = {next = 0xc2da0054,
   3.179 -       prev = 0xc2da0054}, allocation_order = 0, nr_local_pages = 0, 
   3.180 -     ...
   3.181 -5. To resume Xen, enter the "continue" command to gdb.
   3.182 -   This sends the packet $c#63 along the serial channel.
   3.183 -
   3.184 -   (gdb) cont
   3.185 -   Continuing.
   3.186 -
   3.187 -Debugging Multiple Domains & Processes
   3.188 ---------------------------------------
   3.189 -
   3.190 -pdb supports debugging multiple domains & processes.  You can switch
   3.191 -between different domains and processes within domains and examine
   3.192 -variables in each.
   3.193 -
   3.194 -The pdb context identifies the current debug target.  It is stored
   3.195 -in the xen variable pdb_ctx and defaults to xen.
   3.196 -
   3.197 -   target    pdb_ctx.domain    pdb_ctx.process
   3.198 -   ------    --------------    ---------------
   3.199 -    xen           -1                 -1
   3.200 -  guest os      0,1,2,...            -1
   3.201 -   process      0,1,2,...          0,1,2,...
   3.202 -
   3.203 -Unfortunately, gdb doesn't understand debugging multiple process
   3.204 -simultaneously (we're working on it), so at present you are limited 
   3.205 -to just one set of symbols for symbolic debugging.  When debugging
   3.206 -processes, pdb currently supports just Linux 2.4.
   3.207 -
   3.208 -   define setup
   3.209 -      file xeno-clone/xeno.bk/xen/xen
   3.210 -      add-sym xeno-clone/xeno.bk/linux-2.4.27-xen0/vmlinux
   3.211 -      add-sym ~ach61/a.out
   3.212 -   end
   3.213 -
   3.214 -
   3.215 -1. Connect with gdb as before.  A couple of Linux-specific 
   3.216 -   symbols need to be defined.
   3.217 -
   3.218 -   (gdb) target remote <hostname>:<port + 1>              /* contact nsplitd */
   3.219 -   Remote debugging using serial.srg:12131
   3.220 -   continue_cpu_idle_loop () at current.h:10
   3.221 -   warning: shared library handler failed to enable breakpoint
   3.222 -   (gdb) set pdb_pidhash_addr = &pidhash
   3.223 -   (gdb) set pdb_init_task_union_addr = &init_task_union
   3.224 -
   3.225 -2. The pdb context defaults to Xen and we can read Xen's memory.
   3.226 -   An attempt to access domain 0 memory fails.
   3.227 -  
   3.228 -   (gdb) print pdb_ctx
   3.229 -   $1 = {valid = 0, domain = -1, process = -1, ptbr = 1052672}
   3.230 -   (gdb) print hexchars
   3.231 -   $2 = "0123456789abcdef"
   3.232 -   (gdb) print cpu_vendor_names
   3.233 -   Cannot access memory at address 0xc0191f80
   3.234 -
   3.235 -3. Now we change to domain 0.  In addition to changing pdb_ctx.domain,
   3.236 -   we need to change pdb_ctx.valid to signal pdb of the change.
   3.237 -   It is now possible to examine Xen and Linux memory.
   3.238 -
   3.239 -   (gdb) set pdb_ctx.domain=0
   3.240 -   (gdb) set pdb_ctx.valid=1
   3.241 -   (gdb) print hexchars
   3.242 -   $3 = "0123456789abcdef"
   3.243 -   (gdb) print cpu_vendor_names
   3.244 -   $4 = {0xc0158b46 "Intel", 0xc0158c37 "Cyrix", 0xc0158b55 "AMD", 
   3.245 -     0xc0158c3d "UMC", 0xc0158c41 "NexGen", 0xc0158c48 "Centaur", 
   3.246 -     0xc0158c50 "Rise", 0xc0158c55 "Transmeta"}
   3.247 -
   3.248 -4. Now change to a process within domain 0.  Again, we need to
   3.249 -   change pdb_ctx.valid in addition to pdb_ctx.process.
   3.250 -
   3.251 -   (gdb) set pdb_ctx.process=962
   3.252 -   (gdb) set pdb_ctx.valid =1
   3.253 -   (gdb) print pdb_ctx
   3.254 -   $1 = {valid = 0, domain = 0, process = 962, ptbr = 52998144}
   3.255 -   (gdb) print aho_a
   3.256 -   $2 = 20
   3.257 -
   3.258 -5. Now we can read the same variable from another process running
   3.259 -   the same executable in another domain.
   3.260 -
   3.261 -   (gdb) set pdb_ctx.domain=1
   3.262 -   (gdb) set pdb_ctx.process=1210
   3.263 -   (gdb) set pdb_ctx.valid=1
   3.264 -   (gdb) print pdb_ctx
   3.265 -   $3 = {valid = 0, domain = 1, process = 1210, ptbr = 70574080}
   3.266 -   (gdb) print aho_a
   3.267 -   $4 = 27
   3.268 -
   3.269 -
   3.270 -Some Helpful .gdbinit Commands
   3.271 -------------------------------
   3.272 -
   3.273 -define setup
   3.274 -  file    .../install/boot/xen-syms
   3.275 -  add-sym .../install/boot/vmlinux-syms-2.4.27-xen0
   3.276 -  add-sym /homes/aho/a.out
   3.277 -end
   3.278 -document setup
   3.279 -  load symbols for xen, xenolinux (dom 0), and "a.out"
   3.280 -end
   3.281 -
   3.282 -define setup-linux
   3.283 -  set pdb_pidhash_addr = &pidhash
   3.284 -  set pdb_init_task_union_addr = &init_task_union
   3.285 -
   3.286 -  set task_struct_mm_offset           = (void *)&(init_task_union.task.mm) - (void *)&(init_task_union.task)
   3.287 -  set task_struct_next_task_offset    = (void *)&(init_task_union.task.next_task) - (void *)&(init_task_union.task)
   3.288 -  set task_struct_pid_offset          = (void *)&(init_task_union.task.pid) - (void *)&(init_task_union.task)
   3.289 -  set task_struct_pidhash_next_offset = (void *)&(init_task_union.task.pidhash_next) - (void *)&(init_task_union.task)
   3.290 -  set task_struct_comm_offset         = (void *)&(init_task_union.task.comm) - (void *)&(init_task_union.task)
   3.291 -  set task_struct_comm_length         = sizeof (init_task_union.task.comm)
   3.292 -
   3.293 -  set mm_struct_pgd_offset            = sizeof (struct vm_area_struct *) * 2 + sizeof (rb_root_t)
   3.294 -end
   3.295 -document setup-linux
   3.296 -  define various xenolinux specific offsets and sizes in pdb
   3.297 -end
   3.298 -
   3.299 -
   3.300 -
   3.301 -
   3.302 -Changes
   3.303 --------
   3.304 -
   3.305 -04.07.15 aho .gdbinit
   3.306 -04.02.05 aho creation
   3.307 -04.03.31 aho add description on debugging multiple domains
     4.1 --- a/docs/Makefile	Tue Oct 26 13:20:54 2004 +0000
     4.2 +++ b/docs/Makefile	Tue Oct 26 14:12:48 2004 +0000
     4.3 @@ -1,40 +1,41 @@
     4.4  
     4.5 -# Generic LaTeX makefile.
     4.6 -#
     4.7 -# Xfig and tgif diagrams should be in the fig/ subdirectory.
     4.8 -# DOCUMENTS should be a list of the target Postscript files.
     4.9 -
    4.10 -DOCUMENTS = interface.ps interface.pdf interface.html user.ps \
    4.11 -	    user.pdf user.html xend.ps xend.pdf xend.html
    4.12 +DOC_TEX  := $(wildcard src/*.tex)
    4.13 +DOC_PS   := $(patsubst src/%.tex,ps/%.ps,$(DOC_TEX))
    4.14 +DOC_PDF  := $(patsubst src/%.tex,pdf/%.pdf,$(DOC_TEX))
    4.15 +DOC_HTML := $(patsubst src/%.tex,html/%/index.html,$(DOC_TEX))
    4.16  
    4.17  GFX  = $(patsubst %.obj, %.eps, $(wildcard figs/*.obj))
    4.18  GFX += $(patsubst %.fig, %.eps, $(wildcard figs/*.fig))
    4.19  
    4.20 -all: $(DOCUMENTS)
    4.21 +all: ps pdf html
    4.22 +	rm -f *.aux *.dvi *.bbl *.blg *.glo *.idx *.ilg *.log *.ind *.toc
    4.23  
    4.24 -pristine: clean
    4.25 -	rm -f $(DOCUMENTS)
    4.26 +ps: $(DOC_PS)
    4.27 +
    4.28 +pdf: $(DOC_PDF)
    4.29 +
    4.30 +html: $(DOC_HTML)
    4.31  
    4.32  clean:
    4.33 -	rm -f .word_count *.aux *.dvi *.bbl *.blg *.glo *.idx *~ 
    4.34 -	rm -f *.ilg *.log *.ind *.toc *.bak core
    4.35 -	rm -f figs/*.eps $(DOCUMENTS)
    4.36 -	rm -rf user/
    4.37 -	rm -rf interface/
    4.38 +	rm -rf .word_count *.aux *.dvi *.bbl *.blg *.glo *.idx *~ 
    4.39 +	rm -rf *.ilg *.log *.ind *.toc *.bak core
    4.40 +	rm -rf $(GFX) ps pdf html
    4.41  
    4.42 -install: $(DOCUMENTS)
    4.43 +install: all
    4.44  	mkdir -p $(prefix)/usr/share/doc/xen
    4.45 -	cp -a $(DOCUMENTS) VBD-HOWTO.txt Xen-HOWTO.txt $(prefix)/usr/share/doc/xen
    4.46 +	cp -a ps $(prefix)/usr/share/doc/xen
    4.47 +	cp -a pdf $(prefix)/usr/share/doc/xen
    4.48 +	cp -a html $(prefix)/usr/share/doc/xen
    4.49  
    4.50 -%.pdf: %.ps
    4.51 -	ps2pdf $< $@
    4.52 +pdf/%.pdf: ps/%.ps
    4.53 +	mkdir -p pdf ; ps2pdf $< $@
    4.54  
    4.55 -%.ps: %.dvi $(GFX)
    4.56 -	dvips -Ppdf -G0 -o $@ $<
    4.57 +ps/%.ps: %.dvi $(GFX)
    4.58 +	mkdir -p ps ; dvips -Ppdf -G0 -o $@ $<
    4.59  
    4.60 -%.dvi: %.tex
    4.61 -	latex $* >/dev/null
    4.62 -	if [ -e $*.toc ] ; then latex $* >/dev/null ; fi
    4.63 +%.dvi: src/%.tex
    4.64 +	latex $< >/dev/null
    4.65 +	if [ -e $*.toc ] ; then latex $< >/dev/null ; fi
    4.66  
    4.67  %.eps: %.fig
    4.68  	fig2dev -L eps $< $@
    4.69 @@ -42,5 +43,7 @@ install: $(DOCUMENTS)
    4.70  %.eps: %.obj
    4.71  	tgif -print -color -eps $<
    4.72  
    4.73 -%.html: %.tex
    4.74 -	latex2html --split 0 --nonavigation --noinfo --math $< 1>/dev/null 2>/dev/null
    4.75 +html/%/index.html: src/%.tex
    4.76 +	mkdir -p html/$*
    4.77 +	latex2html -split 0 -nonavigation -noinfo -math -dir html/$* $< \
    4.78 +	1>/dev/null 2>/dev/null
     5.1 --- a/docs/blkif-drivers-explained.txt	Tue Oct 26 13:20:54 2004 +0000
     5.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.3 @@ -1,477 +0,0 @@
     5.4 -=== How the Blkif Drivers Work ===
     5.5 -Andrew Warfield
     5.6 -andrew.warfield@cl.cam.ac.uk
     5.7 -
     5.8 -The intent of this is to explain at a fairly detailed level how the
     5.9 -split device drivers work in Xen 1.3 (aka 2.0beta).  The intended
    5.10 -audience for this, I suppose, is anyone who intends to work with the
    5.11 -existing blkif interfaces and wants something to help them get up to
    5.12 -speed with the code in a hurry.  Secondly though, I hope to break out
    5.13 -the general mechanisms that are used in the drivers that are likely to
    5.14 -be necessary to implement other drivers interfaces.
    5.15 -
    5.16 -As a point of warning before starting, it is worth mentioning that I
    5.17 -anticipate much of the specifics described here changing in the near
    5.18 -future.  There has been talk about making the blkif protocol
    5.19 -a bit more efficient than it currently is.  Keir's addition of grant
    5.20 -tables will change the current remapping code that is used when shared
    5.21 -pages are initially set up.
    5.22 -
    5.23 -Also, writing other control interface types will likely need support
    5.24 -from Xend, which at the moment has a steep learning curve... this
    5.25 -should be addressed in the future.
    5.26 -
    5.27 -For more information on the driver model as a whole, read the
    5.28 -"Reconstructing I/O" technical report
    5.29 -(http://www.cl.cam.ac.uk/Research/SRG/netos/papers/2004-xenngio.pdf).
    5.30 -
    5.31 -==== High-level structure of a split-driver interface ====
    5.32 -
    5.33 -Why would you want to write a split driver in the first place?  As Xen
    5.34 -is a virtual machine manager and focuses on isolation as an initial
    5.35 -design principle, it is generally considered unwise to share physical
    5.36 -access to devices across domains.  The reasons for this are obvious:
    5.37 -when device resources are shared, misbehaving code or hardware can
    5.38 -result in the failure of all of the client applications.  Moreover, as
    5.39 -virtual machines in Xen are entire OSs, standard device drives that
    5.40 -they might use cannot have multiple instantiations for a single piece
    5.41 -of hardware.  In light of all this, the general approach in Xen is to
    5.42 -give a single virtual machine hardware access to a device, and where
    5.43 -other VMs want to share the device, export a higher-level interface to
    5.44 -facilitate that sharing.  If you don't want to share, that's fine.
    5.45 -There are currently Xen users actively exploring running two
    5.46 -completely isolated X-Servers on a Xen host, each with it's own video
    5.47 -card, keyboard, and mouse.  In these situations, the guests need only
    5.48 -be given physical access to the necessary devices and left to go on
    5.49 -their own.  However, for devices such as disks and network interfaces,
    5.50 -where sharing is required, the split driver approach is a good
    5.51 -solution.
    5.52 -
    5.53 -The structure is like this:
    5.54 -
    5.55 -   +--------------------------+  +--------------------------+
    5.56 -   | Domain 0 (privileged)    |  | Domain 1 (unprivileged) |
    5.57 -   |                          |  |                          |
    5.58 -   | Xend ( Application )     |  |                          |
    5.59 -   | Blkif Backend Driver     |  | Blkif Frontend Driver    |
    5.60 -   | Physical Device Driver   |  |                          |
    5.61 -   +--------------------------+  +--------------------------+
    5.62 -   +--------------------------------------------------------+
    5.63 -   |                X       E       N                       |
    5.64 -   +--------------------------------------------------------+
    5.65 -
    5.66 -
    5.67 -The Blkif driver is in two parts, which we refer to as frontend (FE)
    5.68 -and a backend (BE).  Together, they serve to proxy device requests
    5.69 -between the guest operating system in an unprivileged domain, and the
    5.70 -physical device driver in the physical domain.  An additional benefit
    5.71 -to this approach is that the FE driver can provide a single interface
    5.72 -for a whole class of physical devices.  The blkif interface mounts
    5.73 -IDE, SCSI, and our own VBD-structured disks, independent of the
    5.74 -physical driver underneath.  Moreover, supporting additional OSs only
    5.75 -requires that a new FE driver be written to connect to the existing
    5.76 -backend.
    5.77 -
    5.78 -==== Inter-Domain Communication Mechanisms ====
    5.79 -
    5.80 -===== Event Channels =====
    5.81 -
    5.82 -Before getting into the specifics of the block interface driver, it is
    5.83 -worth discussing the mechanisms that are used to communicate between
    5.84 -domains.  Two mechanisms are used to allow the construction of
    5.85 -high-performance drivers: event channels and shared-memory rings.
    5.86 -
    5.87 -Event channels are an asynchronous interdomain notification
    5.88 -mechanism.  Xen allows channels to be instantiated between two
    5.89 -domains, and domains can request that a virtual irq be attached to
    5.90 -notifications on a given channel.  The result of this is that the
    5.91 -frontend domain can send a notification on an event channel, resulting
    5.92 -in an interrupt entry into the backend at a later time.
    5.93 -
    5.94 -The event channel between two domains is instantiated in the Xend code
    5.95 -during driver startup (described later).  Xend's channel.py
    5.96 -(tools/python/xen/xend/server/channel.py) defines the function
    5.97 -
    5.98 -
    5.99 -def eventChannel(dom1, dom2):
   5.100 -    return xc.evtchn_bind_interdomain(dom1=dom1, dom2=dom2)
   5.101 -
   5.102 -
   5.103 -which maps to xc_evtchn_bind_interdomain() in tools/libxc/xc_evtchn.c,
   5.104 -which in turn generates a hypercall to Xen to patch the event channel
   5.105 -between the domains.  Only a privileged domain can request the
   5.106 -creation of an event channel.
   5.107 -
   5.108 -Once the event channel is created in Xend, its ends are passed to both the
   5.109 -front and backend domains over the control channel.  The end that is
   5.110 -passed to a domain is just an integer "port" uniquely identifying the
   5.111 -event channel's local connection to that domain.  An example of this
   5.112 -setup code is in linux-2.6.x/drivers/xen/blkfront/blkfront.c in
   5.113 -blkif_status_change, which receives several status change events as
   5.114 -the driver starts up.  It is passed an event channel end in a
   5.115 -BLKIF_INTERFACE_STATUS_CONNECTED message, and patches it in like this:
   5.116 -
   5.117 -
   5.118 -   blkif_evtchn = status->evtchn;
   5.119 -   blkif_irq    = bind_evtchn_to_irq(blkif_evtchn);
   5.120 -   if ( (rc = request_irq(blkif_irq, blkif_int, 
   5.121 -                          SA_SAMPLE_RANDOM, "blkif", NULL)) )
   5.122 -       printk(KERN_ALERT"blkfront request_irq failed (%ld)\n",rc);
   5.123 -
   5.124 -
   5.125 -This code associates a virtual irq with the event channel, and
   5.126 -attaches the function blkif_int() as an interrupt handler for that
   5.127 -irq.  blkif_int() simply handles the notification and returns, it does
   5.128 -not need to interact with the channel at all.
   5.129 -
   5.130 -An example of generating a notification can also be seen in blkfront.c:
   5.131 -
   5.132 -
   5.133 -static inline void flush_requests(void)
   5.134 -{
   5.135 -    DISABLE_SCATTERGATHER();
   5.136 -    wmb(); /* Ensure that the frontend can see the requests. */
   5.137 -    blk_ring->req_prod = req_prod;
   5.138 -    notify_via_evtchn(blkif_evtchn);
   5.139 -}
   5.140 -}}}
   5.141 -
   5.142 -notify_via_evtchn issues a hypercall to set the event waiting flag on
   5.143 -the other domain's end of the channel.
   5.144 -
   5.145 -===== Communication Rings =====
   5.146 -
   5.147 -Event channels are strictly a notification mechanism between domains.
   5.148 -To move large chunks of data back and forth, Xen allows domains to
   5.149 -share pages of memory.  We use communication rings as a means of
   5.150 -managing access to a shared memory page for message passing between
   5.151 -domains.  These rings are not explicitly a mechanism of Xen, which is
   5.152 -only concerned with the actual sharing of the page and not how it is
   5.153 -used, they are however worth discussing as they are used in many
   5.154 -places in the current code and are a useful model for communicating
   5.155 -across a shared page.
   5.156 -
   5.157 -A shared page is set up by a guest first allocating and passing the
   5.158 -address of a page in its own address space to the backend driver.  
   5.159 -
   5.160 -
   5.161 -   blk_ring = (blkif_ring_t *)__get_free_page(GFP_KERNEL);
   5.162 -   blk_ring->req_prod = blk_ring->resp_prod = resp_cons = req_prod = 0;
   5.163 -   ...
   5.164 -   /* Construct an interface-CONNECT message for the domain controller. */
   5.165 -   cmsg.type      = CMSG_BLKIF_FE;
   5.166 -   cmsg.subtype   = CMSG_BLKIF_FE_INTERFACE_CONNECT;
   5.167 -   cmsg.length    = sizeof(blkif_fe_interface_connect_t);
   5.168 -   up.handle      = 0;
   5.169 -   up.shmem_frame = virt_to_machine(blk_ring) >> PAGE_SHIFT;
   5.170 -   memcpy(cmsg.msg, &up, sizeof(up));  
   5.171 -
   5.172 -
   5.173 -blk_ring will be the shared page.  The producer and consumer pointers
   5.174 -are then initialised (these will be discussed soon), and then the
   5.175 -machine address of the page is send to the backend via a control
   5.176 -channel to Xend.  This control channel itself uses the notification
   5.177 -and shared memory mechanisms described here, but is set up for each
   5.178 -domain automatically at startup.
   5.179 -
   5.180 -The backend, which is a privileged domain then takes the page address
   5.181 -and maps it into its own address space (in
   5.182 -linux26/drivers/xen/blkback/interface.c:blkif_connect()):
   5.183 -
   5.184 -
   5.185 -void blkif_connect(blkif_be_connect_t *connect)
   5.186 -
   5.187 -   ...
   5.188 -   unsigned long shmem_frame = connect->shmem_frame;
   5.189 -   ...
   5.190 -
   5.191 -   if ( (vma = get_vm_area(PAGE_SIZE, VM_IOREMAP)) == NULL )
   5.192 -   {
   5.193 -      connect->status = BLKIF_BE_STATUS_OUT_OF_MEMORY;
   5.194 -      return;
   5.195 -   }
   5.196 -
   5.197 -   prot = __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED);
   5.198 -   error = direct_remap_area_pages(&init_mm, VMALLOC_VMADDR(vma->addr),
   5.199 -                                   shmem_frame<<PAGE_SHIFT, PAGE_SIZE,
   5.200 -                                   prot, domid);
   5.201 -
   5.202 -   ...
   5.203 -
   5.204 -   blkif->blk_ring_base = (blkif_ring_t *)vma->addr
   5.205 -}}}
   5.206 -
   5.207 -The machine address of the page is passed in the shmem_frame field of
   5.208 -the connect message.  This is then mapped into the virtual address
   5.209 -space of the backend domain, and saved in the blkif structure
   5.210 -representing this particular backend connection.
   5.211 -
   5.212 -NOTE:  New mechanisms will be added very shortly to allow domains to
   5.213 -explicitly grant access to their pages to other domains.  This "grant
   5.214 -table" support is in the process of being added to the tree, and will
   5.215 -change the way a shared page is set up.  In particular, it will remove
   5.216 -the need of the remapping domain to be privileged.
   5.217 -
   5.218 -Sending data across shared rings:
   5.219 -
   5.220 -Shared rings avoid the potential for write interference between
   5.221 -domains in a very cunning way.  A ring is partitioned into a request
   5.222 -and a response region, and domains only work within their own space.
   5.223 -This can be thought of as a double producer-consumer ring -- the ring
   5.224 -is described by four pointers into a circular buffer of fixed-size
   5.225 -records.  Pointers may only advance, and may not pass one another.
   5.226 -
   5.227 -
   5.228 -                          rsp_cons----+
   5.229 -                                      V
   5.230 -           +----+----+----+----+----+----+----+
   5.231 -           |    |    |    free      |RSP1|RSP2|
   5.232 -           +----+----+----+----+----+----+----+
   5.233 - req_prod->|    |       -------->        |RSP3|
   5.234 -           +----+                        +----+
   5.235 -           |REQ8|                        |    |<-rsp_prod
   5.236 -           +----+                        +----+
   5.237 -           |REQ7|                        |    |
   5.238 -           +----+                        +----+
   5.239 -           |REQ6|       <--------        |    |
   5.240 -           +----+----+----+----+----+----+----+
   5.241 -           |REQ5|REQ4|    free      |    |    |
   5.242 -           +----+----+----+----+----+----+----+
   5.243 -  req_cons---------^
   5.244 -
   5.245 -
   5.246 -
   5.247 -By adopting the convention that every request will receive a response,
   5.248 -not all four pointers need be shared and flow control on the ring
   5.249 -becomes very easy to manage.  Each domain manages its own
   5.250 -consumer pointer, and the two producer pointers are visible to both (Xen/include/hypervisor-ifs/io/blkif.h):
   5.251 -
   5.252 -
   5.253 -
   5.254 -/* NB. Ring size must be small enough for sizeof(blkif_ring_t) <=PAGE_SIZE.*/
   5.255 -  #define BLKIF_RING_SIZE        64
   5.256 -
   5.257 -  ...
   5.258 -
   5.259 -/*
   5.260 - * We use a special capitalised type name because it is _essential_ that all
   5.261 - * arithmetic on indexes is done on an integer type of the correct size.
   5.262 - */
   5.263 -typedef u32 BLKIF_RING_IDX;
   5.264 -
   5.265 -/*
   5.266 - * Ring indexes are 'free running'. That is, they are not stored modulo the
   5.267 - * size of the ring buffer. The following macro converts a free-running counter
   5.268 - * into a value that can directly index a ring-buffer array.
   5.269 - */
   5.270 -#define MASK_BLKIF_IDX(_i) ((_i)&(BLKIF_RING_SIZE-1))
   5.271 -
   5.272 -typedef struct {
   5.273 -    BLKIF_RING_IDX req_prod;  /*  0: Request producer. Updated by front-end. */
   5.274 -    BLKIF_RING_IDX resp_prod; /*  4: Response producer. Updated by back-end. */
   5.275 -    union {                   /*  8 */
   5.276 -        blkif_request_t  req;
   5.277 -        blkif_response_t resp;
   5.278 -    } PACKED ring[BLKIF_RING_SIZE];
   5.279 -} PACKED blkif_ring_t;
   5.280 -
   5.281 -
   5.282 -
   5.283 -As shown in the diagram above, the rules for using a shared memory
   5.284 -ring are simple.  
   5.285 -
   5.286 - 1. A ring is full when a domain's producer and consumer pointers are
   5.287 -    equal (e.g. req_prod == resp_cons).  In this situation, the
   5.288 -    consumer pointer must be advanced.  Furthermore, if the consumer
   5.289 -    pointer is equal to the other domain's producer pointer,
   5.290 -    (e.g. resp_cons = resp_prod), then the other domain has all the
   5.291 -    buffers.
   5.292 -
   5.293 -2. Producer pointers point to the next buffer that will be written to.
   5.294 -   (So blk_ring[MASK_BLKIF_IDX(req_prod)] should not be consumed.)
   5.295 -
   5.296 -3. Consumer pointers point to a valid message, so long as they are not
   5.297 -   equal to the associated producer pointer.
   5.298 -
   5.299 -4. A domain should only ever write to the message pointed
   5.300 -   to by its producer index, and read from the message at it's
   5.301 -   consumer.  More generally, the domain may be thought of to have
   5.302 -   exclusive access to the messages between its consumer and producer,
   5.303 -   and should absolutely not read or write outside this region.
   5.304 -
   5.305 -In general, drivers keep a private copy of their producer pointer and
   5.306 -then set the shared version when they are ready for the other end to
   5.307 -process a set of messages.  Additionally, it is worth paying attention
   5.308 -to the use of memory barriers (rmb/wmb) in the code, to ensure that
   5.309 -rings that are shared across processors behave as expected.
   5.310 -
   5.311 -==== Structure of the Blkif Drivers ====
   5.312 -
   5.313 -Now that the communications primitives have been discussed, I'll
   5.314 -quickly cover the general structure of the blkif driver.  This is
   5.315 -intended to give a high-level idea of what is going on, in an effort
   5.316 -to make reading the code a more approachable task.
   5.317 -
   5.318 -There are three key software components that are involved in the blkif
   5.319 -drivers (not counting Xen itself).  The frontend and backend driver,
   5.320 -and Xend, which coordinates their initial connection.  Xend may also
   5.321 -be involved in control-channel signalling in some cases after startup,
   5.322 -for instance to manage reconnection if the backend is restarted.
   5.323 -
   5.324 -===== Frontend Driver Structure =====
   5.325 -
   5.326 -The frontend domain uses a single event channel and a shared memory
   5.327 -ring to trade control messages with the backend.  These are both setup
   5.328 -during domain startup, which will be discussed shortly.  The shared
   5.329 -memory ring is called blkif_ring, and the private ring indexes are
   5.330 -resp_cons, and req_prod.  The ring is protected by blkif_io_lock.
   5.331 -Additionally, the frontend keeps a list of outstanding requests in
   5.332 -rec_ring[].  These are uniquely identified by a guest-local id number,
   5.333 -which is associated with each request sent to the backend, and
   5.334 -returned with the matching responses.  Information about the actual
   5.335 -disks are stored in major_info[], of which only the first nr_vbds
   5.336 -entries are valid.  Finally, the global 'recovery' indicates that the
   5.337 -connection between the backend and frontend drivers has been broken
   5.338 -(possibly due to a backend driver crash) and that the frontend is in
   5.339 -recovery mode, in which case it will attempt to reconnect and reissue
   5.340 -outstanding requests.
   5.341 -
   5.342 -The frontend driver is single-threaded and after setup is entered only
   5.343 -through three points:  (1) read/write requests from the XenLinux guest
   5.344 -that it is a part of, (2) interrupts from the backend driver on its
   5.345 -event channel (blkif_int()), and (3) control messages from Xend
   5.346 -(blkif_ctrlif_rx).
   5.347 -
   5.348 -===== Backend Driver Structure =====
   5.349 -
   5.350 -The backend driver is slightly more complex as it must manage any
   5.351 -number of concurrent frontend connections.  For each domain it
   5.352 -manages, the backend driver maintains a blkif structure, which
   5.353 -describes all the connection and disk information associated with that
   5.354 -particular domain.  This structure is associated with the interrupt
   5.355 -registration, and allows the backend driver to have immediate context
   5.356 -when it takes a notification from some domain.
   5.357 -
   5.358 -All of the blkif structures are stored in a hash table (blkif_hash),
   5.359 -which is indexed by a hash of the domain id, and a "handle", really a
   5.360 -per-domain blkif identifier, in case it wants to have multiple connections.
   5.361 -
   5.362 -The per-connection blkif structure is of type blkif_t.  It contains
   5.363 -all of the communication details (event channel, irq, shared memory
   5.364 -ring and indexes), and blk_ring_lock, which is the backend mutex on
   5.365 -the shared ring.  The structure also contains vbd_rb, which is a
   5.366 -red-black tree, containing an entry for each device/partition that is
   5.367 -assigned to that domain.  This structure is filled by xend passing
   5.368 -disk information to the backend at startup, and is protected by
   5.369 -vbd_lock.  Finally, the blkif struct contains a status field, which
   5.370 -describes the state of the connection.
   5.371 -
   5.372 -The backend driver spawns a kernel thread at startup
   5.373 -(blkio_schedule()), which handles requests to and from the actual disk
   5.374 -device drivers.  This scheduler thread maintains a list of blkif
   5.375 -structures that have pending requests, and services them round-robin
   5.376 -with a maximum per-round request limit.  blkifs are added to the list
   5.377 -in the interrupt handler (blkif_be_int()) using
   5.378 -add_to_blkdev_list_tail(), and removed in the scheduler loop after
   5.379 -calling do_block_io_op(), which processes a batch of requests.  The
   5.380 -scheduler thread is explicitly activated at several points in the code
   5.381 -using maybe_trigger_blkio_schedule().
   5.382 -
   5.383 -Pending requests between the backend driver and the physical device
   5.384 -drivers use another ring, pending_ring.  Requests are placed in this
   5.385 -ring in the scheduler thread and issued to the device.  A completion
   5.386 -callback, end_block_io_op, indicates that requests have been serviced
   5.387 -and generates a response on the appropriate blkif ring.  pending
   5.388 -reqs[] stores a list of outstanding requests with the physical drivers.
   5.389 -
   5.390 -So, control entries to the backend are (1) the blkio scheduler thread,
   5.391 -which sends requests to the real device drivers, (2) end_block_io_op,
   5.392 -which is called as serviced requests complete, (3) blkif_be_int()
   5.393 -handles notifications from the frontend drivers in other domains, and
   5.394 -(4) blkif_ctrlif_rx() handles control messages from xend.
   5.395 -
   5.396 -==== Driver Startup ====
   5.397 -
   5.398 -Prior to starting a new guest using the frontend driver, the backend
   5.399 -will have been started in a privileged domain.  The backend
   5.400 -initialisation code initialises all of its data structures, such as
   5.401 -the blkif hash table, and starts the scheduler thread as a kernel
   5.402 -thread. It then sends a driver status up message to let xend know it
   5.403 -is ready to take frontend connections.
   5.404 -
   5.405 -When a new domain that uses the blkif frontend driver is started,
   5.406 -there are a series of interactions between it, xend, and the specified
   5.407 -backend driver.  These interactions are as follows:
   5.408 -
   5.409 -The domain configuration given to xend will specify the backend domain
   5.410 -and disks that the new guest is to use.  Prior to actually running the
   5.411 -domain, xend and the backend driver interact to setup the initial
   5.412 -blkif record in the backend.
   5.413 -
   5.414 -(1) Xend sends a BLKIF_BE_CREATE message to backend.
   5.415 -
   5.416 -  Backend does blkif_create(), having been passed FE domid and handle.
   5.417 -  It creates and initialises a new blkif struct, and puts it in the
   5.418 -  hash table.
   5.419 -  It then returns a STATUS_OK response to xend.
   5.420 -
   5.421 -(2) Xend sends a BLKIF_BE_VBD_CREATE message to the backend.
   5.422 - 
   5.423 -  Backend adds a vbd entry in the red-black tree for the
   5.424 -  specified (dom, handle) blkif entry.
   5.425 -  Sends a STATUS_OK response.
   5.426 -
   5.427 -(3) Xend sends a BLKIF_BE_VBD_GROW message to the backend.
   5.428 -
   5.429 -  Backend takes the physical device information passed in the 
   5.430 -  message and assigns them to the newly created vbd struct.
   5.431 -
   5.432 -(2) and (3) repeat as any additional devices are added to the domain.
   5.433 -
   5.434 -At this point, the backend has enough state to allow the frontend
   5.435 -domain to start.  The domain is run, and eventually gets to the
   5.436 -frontend driver initialisation code.  After setting up the frontend
   5.437 -data structures, this code continues the communications with xend and
   5.438 -the backend to negotiate a connection:
   5.439 -
   5.440 -(4) Frontend sends Xend a BLKIF_FE_DRIVER_STATUS_CHANGED message.
   5.441 -
   5.442 -  This message tells xend that the driver is up.  The init function
   5.443 -  now spin-waits until driver setup is complete in order to prevent
   5.444 -  Linux from attempting to boot before the disks are connected.
   5.445 -
   5.446 -(5) Xend sends the frontend an INTERFACE_STATUS_CHANGED message
   5.447 -
   5.448 -  This message specifies that the interface is now disconnected
   5.449 -  (instead of closed).
   5.450 -  The domain updates it's state, and allocates the shared blk_ring
   5.451 -  page.  Next, 
   5.452 -
   5.453 -(6) Frontend sends Xend a BLKIF_INTERFACE_CONNECT message
   5.454 -
   5.455 -  This message specifies the domain and handle, and includes the
   5.456 -  address of the newly created page.
   5.457 -
   5.458 -(7) Xend sends the backend a BLKIF_BE_CONNECT message
   5.459 -
   5.460 -  The backend fills in the blkif connection information, maps the
   5.461 -  shared page, and binds an irq to the event channel.
   5.462 -  
   5.463 -(8) Xend sends the frontend an INTERFACE_STATUS_CHANGED message
   5.464 -
   5.465 -  This message takes the frontend driver to a CONNECTED state, at
   5.466 -  which point it binds an irq to the event channel and calls
   5.467 -  xlvbd_init to initialise the individual block devices.
   5.468 -
   5.469 -The frontend Linux is stall spin waiting at this point, until all of
   5.470 -the disks have been probed.  Messaging now is directly between the
   5.471 -front and backend domain using the new shared ring and event channel.
   5.472 -
   5.473 -(9) The frontend sends a BLKIF_OP_PROBE directly to the backend.
   5.474 -
   5.475 -  This message includes a reference to an additional page, that the
   5.476 -  backend can use for it's reply.  The backend responds with an array
   5.477 -  of the domains disks (as vdisk_t structs) on the provided page.
   5.478 -
   5.479 -The frontend now initialises each disk, calling xlvbd_init_device()
   5.480 -for each one.
     6.1 --- a/docs/eps/xenlogo.eps	Tue Oct 26 13:20:54 2004 +0000
     6.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.3 @@ -1,1479 +0,0 @@
     6.4 -%!PS-Adobe-3.0 EPSF-3.0
     6.5 -%%Creator: (ImageMagick)
     6.6 -%%Title: (/homes/kaf24/xenlogo.eps)
     6.7 -%%CreationDate: (Tue Oct 28 13:52:11 2003)
     6.8 -%%BoundingBox: 155 324 445 461
     6.9 -%%DocumentData: Clean7Bit
    6.10 -%%LanguageLevel: 1
    6.11 -%%Pages: 1
    6.12 -%%EndComments
    6.13 -
    6.14 -%%BeginDefaults
    6.15 -%%EndDefaults
    6.16 -
    6.17 -%%BeginProlog
    6.18 -%
    6.19 -% Display a color image.  The image is displayed in color on
    6.20 -% Postscript viewers or printers that support color, otherwise
    6.21 -% it is displayed as grayscale.
    6.22 -%
    6.23 -/DirectClassPacket
    6.24 -{
    6.25 -  %
    6.26 -  % Get a DirectClass packet.
    6.27 -  %
    6.28 -  % Parameters:
    6.29 -  %   red.
    6.30 -  %   green.
    6.31 -  %   blue.
    6.32 -  %   length: number of pixels minus one of this color (optional).
    6.33 -  %
    6.34 -  currentfile color_packet readhexstring pop pop
    6.35 -  compression 0 eq
    6.36 -  {
    6.37 -    /number_pixels 3 def
    6.38 -  }
    6.39 -  {
    6.40 -    currentfile byte readhexstring pop 0 get
    6.41 -    /number_pixels exch 1 add 3 mul def
    6.42 -  } ifelse
    6.43 -  0 3 number_pixels 1 sub
    6.44 -  {
    6.45 -    pixels exch color_packet putinterval
    6.46 -  } for
    6.47 -  pixels 0 number_pixels getinterval
    6.48 -} bind def
    6.49 -
    6.50 -/DirectClassImage
    6.51 -{
    6.52 -  %
    6.53 -  % Display a DirectClass image.
    6.54 -  %
    6.55 -  systemdict /colorimage known
    6.56 -  {
    6.57 -    columns rows 8
    6.58 -    [
    6.59 -      columns 0 0
    6.60 -      rows neg 0 rows
    6.61 -    ]
    6.62 -    { DirectClassPacket } false 3 colorimage
    6.63 -  }
    6.64 -  {
    6.65 -    %
    6.66 -    % No colorimage operator;  convert to grayscale.
    6.67 -    %
    6.68 -    columns rows 8
    6.69 -    [
    6.70 -      columns 0 0
    6.71 -      rows neg 0 rows
    6.72 -    ]
    6.73 -    { GrayDirectClassPacket } image
    6.74 -  } ifelse
    6.75 -} bind def
    6.76 -
    6.77 -/GrayDirectClassPacket
    6.78 -{
    6.79 -  %
    6.80 -  % Get a DirectClass packet;  convert to grayscale.
    6.81 -  %
    6.82 -  % Parameters:
    6.83 -  %   red
    6.84 -  %   green
    6.85 -  %   blue
    6.86 -  %   length: number of pixels minus one of this color (optional).
    6.87 -  %
    6.88 -  currentfile color_packet readhexstring pop pop
    6.89 -  color_packet 0 get 0.299 mul
    6.90 -  color_packet 1 get 0.587 mul add
    6.91 -  color_packet 2 get 0.114 mul add
    6.92 -  cvi
    6.93 -  /gray_packet exch def
    6.94 -  compression 0 eq
    6.95 -  {
    6.96 -    /number_pixels 1 def
    6.97 -  }
    6.98 -  {
    6.99 -    currentfile byte readhexstring pop 0 get
   6.100 -    /number_pixels exch 1 add def
   6.101 -  } ifelse
   6.102 -  0 1 number_pixels 1 sub
   6.103 -  {
   6.104 -    pixels exch gray_packet put
   6.105 -  } for
   6.106 -  pixels 0 number_pixels getinterval
   6.107 -} bind def
   6.108 -
   6.109 -/GrayPseudoClassPacket
   6.110 -{
   6.111 -  %
   6.112 -  % Get a PseudoClass packet;  convert to grayscale.
   6.113 -  %
   6.114 -  % Parameters:
   6.115 -  %   index: index into the colormap.
   6.116 -  %   length: number of pixels minus one of this color (optional).
   6.117 -  %
   6.118 -  currentfile byte readhexstring pop 0 get
   6.119 -  /offset exch 3 mul def
   6.120 -  /color_packet colormap offset 3 getinterval def
   6.121 -  color_packet 0 get 0.299 mul
   6.122 -  color_packet 1 get 0.587 mul add
   6.123 -  color_packet 2 get 0.114 mul add
   6.124 -  cvi
   6.125 -  /gray_packet exch def
   6.126 -  compression 0 eq
   6.127 -  {
   6.128 -    /number_pixels 1 def
   6.129 -  }
   6.130 -  {
   6.131 -    currentfile byte readhexstring pop 0 get
   6.132 -    /number_pixels exch 1 add def
   6.133 -  } ifelse
   6.134 -  0 1 number_pixels 1 sub
   6.135 -  {
   6.136 -    pixels exch gray_packet put
   6.137 -  } for
   6.138 -  pixels 0 number_pixels getinterval
   6.139 -} bind def
   6.140 -
   6.141 -/PseudoClassPacket
   6.142 -{
   6.143 -  %
   6.144 -  % Get a PseudoClass packet.
   6.145 -  %
   6.146 -  % Parameters:
   6.147 -  %   index: index into the colormap.
   6.148 -  %   length: number of pixels minus one of this color (optional).
   6.149 -  %
   6.150 -  currentfile byte readhexstring pop 0 get
   6.151 -  /offset exch 3 mul def
   6.152 -  /color_packet colormap offset 3 getinterval def
   6.153 -  compression 0 eq
   6.154 -  {
   6.155 -    /number_pixels 3 def
   6.156 -  }
   6.157 -  {
   6.158 -    currentfile byte readhexstring pop 0 get
   6.159 -    /number_pixels exch 1 add 3 mul def
   6.160 -  } ifelse
   6.161 -  0 3 number_pixels 1 sub
   6.162 -  {
   6.163 -    pixels exch color_packet putinterval
   6.164 -  } for
   6.165 -  pixels 0 number_pixels getinterval
   6.166 -} bind def
   6.167 -
   6.168 -/PseudoClassImage
   6.169 -{
   6.170 -  %
   6.171 -  % Display a PseudoClass image.
   6.172 -  %
   6.173 -  % Parameters:
   6.174 -  %   class: 0-PseudoClass or 1-Grayscale.
   6.175 -  %
   6.176 -  currentfile buffer readline pop
   6.177 -  token pop /class exch def pop
   6.178 -  class 0 gt
   6.179 -  {
   6.180 -    currentfile buffer readline pop
   6.181 -    token pop /depth exch def pop
   6.182 -    /grays columns 8 add depth sub depth mul 8 idiv string def
   6.183 -    columns rows depth
   6.184 -    [
   6.185 -      columns 0 0
   6.186 -      rows neg 0 rows
   6.187 -    ]
   6.188 -    { currentfile grays readhexstring pop } image
   6.189 -  }
   6.190 -  {
   6.191 -    %
   6.192 -    % Parameters:
   6.193 -    %   colors: number of colors in the colormap.
   6.194 -    %   colormap: red, green, blue color packets.
   6.195 -    %
   6.196 -    currentfile buffer readline pop
   6.197 -    token pop /colors exch def pop
   6.198 -    /colors colors 3 mul def
   6.199 -    /colormap colors string def
   6.200 -    currentfile colormap readhexstring pop pop
   6.201 -    systemdict /colorimage known
   6.202 -    {
   6.203 -      columns rows 8
   6.204 -      [
   6.205 -        columns 0 0
   6.206 -        rows neg 0 rows
   6.207 -      ]
   6.208 -      { PseudoClassPacket } false 3 colorimage
   6.209 -    }
   6.210 -    {
   6.211 -      %
   6.212 -      % No colorimage operator;  convert to grayscale.
   6.213 -      %
   6.214 -      columns rows 8
   6.215 -      [
   6.216 -        columns 0 0
   6.217 -        rows neg 0 rows
   6.218 -      ]
   6.219 -      { GrayPseudoClassPacket } image
   6.220 -    } ifelse
   6.221 -  } ifelse
   6.222 -} bind def
   6.223 -
   6.224 -/DisplayImage
   6.225 -{
   6.226 -  %
   6.227 -  % Display a DirectClass or PseudoClass image.
   6.228 -  %
   6.229 -  % Parameters:
   6.230 -  %   x & y translation.
   6.231 -  %   x & y scale.
   6.232 -  %   label pointsize.
   6.233 -  %   image label.
   6.234 -  %   image columns & rows.
   6.235 -  %   class: 0-DirectClass or 1-PseudoClass.
   6.236 -  %   compression: 0-none or 1-RunlengthEncoded.
   6.237 -  %   hex color packets.
   6.238 -  %
   6.239 -  gsave
   6.240 -  /buffer 512 string def
   6.241 -  /byte 1 string def
   6.242 -  /color_packet 3 string def
   6.243 -  /pixels 768 string def
   6.244 -
   6.245 -  currentfile buffer readline pop
   6.246 -  token pop /x exch def
   6.247 -  token pop /y exch def pop
   6.248 -  x y translate
   6.249 -  currentfile buffer readline pop
   6.250 -  token pop /x exch def
   6.251 -  token pop /y exch def pop
   6.252 -  currentfile buffer readline pop
   6.253 -  token pop /pointsize exch def pop
   6.254 -  /Times-Roman findfont pointsize scalefont setfont
   6.255 -  x y scale
   6.256 -  currentfile buffer readline pop
   6.257 -  token pop /columns exch def
   6.258 -  token pop /rows exch def pop
   6.259 -  currentfile buffer readline pop
   6.260 -  token pop /class exch def pop
   6.261 -  currentfile buffer readline pop
   6.262 -  token pop /compression exch def pop
   6.263 -  class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
   6.264 -  grestore
   6.265 -} bind def
   6.266 -%%EndProlog
   6.267 -%%Page:  1 1
   6.268 -%%PageBoundingBox: 155 324 445 461
   6.269 -userdict begin
   6.270 -DisplayImage
   6.271 -155 324
   6.272 -289.992 137.145
   6.273 -12.000000
   6.274 -302 143
   6.275 -1
   6.276 -1
   6.277 -1
   6.278 -8
   6.279 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.280 -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e6
   6.281 -d4cec2b6b6aa9e9e9e9e9e9e9e9eb6b6b6c8cee0e6ffffffffffffffffffffffffffffff
   6.282 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.283 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.284 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.285 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.286 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.287 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.288 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.289 -fffffffffffffff2e0c8b6a49e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   6.290 -aabccee6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.291 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.292 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.293 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.294 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.295 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.296 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.297 -fffffffffffffffffffffffffffffffffff8e0c2aa9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   6.298 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb6ceecffffffffffffffffffffffffffff
   6.299 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.300 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.301 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.302 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.303 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.304 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.305 -fffffffffffffffffffffffffffffffffffffffffffffffffffffffff8dabc9e9e9e9e9e
   6.306 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   6.307 -aac8ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.308 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.309 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.310 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.311 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.312 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.313 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.314 -ffffffffe0bc9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   6.315 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaac8f2ffffffffffffffffffffffffffffffff
   6.316 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.317 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.318 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.319 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.320 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.321 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.322 -fffffffffffffffffffffffffffffff8ceaa9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   6.323 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb6e0
   6.324 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.325 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.326 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.327 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.328 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.329 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.330 -fffffffffffffffffffffffffffffffffffffffffffffffffffffff2c29e9e9e9e9e9e9e
   6.331 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   6.332 -9e9e9e9e9e9e9e9e9e9e9e9e9e9eaadaffffffffffffffffffffffffffffffffffffffff
   6.333 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.334 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.335 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.336 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.337 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.338 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.339 -fffffff2c29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   6.340 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaadaffffffff
   6.341 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.342 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.343 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.344 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.345 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.346 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.347 -fffffffffffffffffffffffffffffff8c29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   6.348 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   6.349 -9e9e9e9e9e9e9e9e9e9eaadaffffffffffffffffffffffffffffffffffffffffffffffff
   6.350 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.351 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.352 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.353 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.354 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.355 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffcea49e9e9e9e9e9e
   6.356 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   6.357 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb6e6ffffffffffffffff
   6.358 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.359 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.360 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.361 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.362 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.363 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.364 -ffffffffe6aa9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   6.365 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   6.366 -9e9e9e9e9e9ec2f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.367 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.368 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.369 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.370 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.371 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.372 -fffffffffffffffffffffffffffffffff8c29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   6.373 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   6.374 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4e0ffffffffffffffffffffffffff
   6.375 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.376 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.377 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.378 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.379 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.380 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6aa9e9e9e9e9e
   6.381 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1acb6bac4c8c8d6d6d6d6d6d6
   6.382 -d6cfc8c8bdbaafa89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   6.383 -9ebcf8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.384 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.385 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.386 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.387 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.388 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.389 -ffffffffffffc89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea8b6c4
   6.390 -cfd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8bdafa19e9e9e9e9e9e9e9e9e
   6.391 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaaecffffffffffffffffffffffffffffffffffff
   6.392 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.393 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.394 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.395 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.396 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.397 -fffffffffffffffffffffffffffffffffffff8b09e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   6.398 -9e9e9e9e9e9e9ea1afc1d2d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.399 -d6d6d6d6d6cbbaa89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ed4ffffff
   6.400 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.401 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.402 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.403 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.404 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.405 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeca49e9e9e
   6.406 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eafc1d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.407 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cfbaa59e9e9e9e9e9e9e9e9e9e9e
   6.408 -9e9e9e9e9e9e9e9e9e9e9ec2f8ffffffffffffffffffffffffffffffffffffffffffffff
   6.409 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.410 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.411 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.412 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.413 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.414 -ffffffffffffffffda9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1bacfd6d6d6
   6.415 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.416 -d6d6d6c8af9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb0f8ffffffffffffffff
   6.417 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.418 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.419 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.420 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.421 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.422 -ffffffffffffffffffffffffffffffffffffffffffc89e9e9e9e9e9e9e9e9e9e9e9e9e9e
   6.423 -9e9e9e9e9e9ea5c1d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.424 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cfb39e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   6.425 -9e9e9e9e9ea4ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.426 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.427 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.428 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.429 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.430 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc29e
   6.431 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea5c1d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.432 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cf
   6.433 -b39e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4ecffffffffffffffffffffffffffff
   6.434 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.435 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.436 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.437 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.438 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.439 -ffffffffffffffffffffffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1bdd6d6d6d6
   6.440 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.441 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cfaf9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4
   6.442 -daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.443 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.444 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.445 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.446 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.447 -ffffffffffffffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e9e9e9e9e9e
   6.448 -9e9e9e9e9e9e9eb3d2d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.449 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8a59e9e9e
   6.450 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9edaffffffffffffffffffffffffffffffffffffffff
   6.451 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.452 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.453 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.454 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.455 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.456 -ffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea5c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.457 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.458 -d6d6d6d6d6d6d6d6d6d6d2b69e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9edaffffffffff
   6.459 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.460 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.461 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.462 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.463 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.464 -ffffffffffffffffffffffffffffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb3d2d6d6
   6.465 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.466 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8a59e9e9e9e9e9e9e9e
   6.467 -9e9e9e9e9e9e9e9ea4ecffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.468 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.469 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.470 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.471 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.472 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e9e9e
   6.473 -9e9e9e9e9e9e9e9ea1c4d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.474 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.475 -d6d6d6d6d6d2af9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4ecffffffffffffffffffffff
   6.476 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.477 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.478 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.479 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.480 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.481 -ffffffffda9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea8cbd6d6d6d6d6d6d6d6d6d6d6d6d6
   6.482 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.483 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6bd9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   6.484 -9e9ea4f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.485 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.486 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.487 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.488 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.489 -ffffffffffffffffffffffffffffffffffe09e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eafd2
   6.490 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.491 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.492 -c8a19e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb0f8ffffffffffffffffffffffffffffffffff
   6.493 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.494 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.495 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.496 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.497 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeca49e9e9e9e
   6.498 -9e9e9e9e9e9e9e9e9e9e9eb3d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.499 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.500 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cba89e9e9e9e9e9e9e9e9e9e9e9e9e9e9ec2ffffff
   6.501 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.502 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.503 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.504 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.505 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.506 -fffffffffffffff8b09e9e9e9e9e9e9e9e9e9e9e9e9e9e9ec1d6d6d6d6d6d6d6d6d6d6d6
   6.507 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.508 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d2a89e9e9e9e
   6.509 -9e9e9e9e9e9e9e9e9e9e9ed4ffffffffffffffffffffffffffffffffffffffffffffffff
   6.510 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.511 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.512 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.513 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.514 -ffffffffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e
   6.515 -9ec1d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.516 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.517 -d6d6d6d6d6d6d6d6d6d2a89e9e9e9e9e9e9e9e9e9e9e9e9e9e9eecffffffffffffffffff
   6.518 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.519 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.520 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.521 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.522 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffda9e
   6.523 -9e9e8027272727272727272727272b353535353535353535353535353535353535353535
   6.524 -353535353535add6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.525 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c85035353535353535322727272727272727272727
   6.526 -272727272d3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f5fefffffffffffffffffff
   6.527 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.528 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.529 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.530 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.531 -fffffffffffffffffffffff2a49e9e9e9e45000000000000000000000000000000000000
   6.532 -00000000000000000000000000000000000000001ac8d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.533 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad28000000000000
   6.534 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.535 -00003fefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.536 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.537 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.538 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.539 -ffffffffffffffffffffffffffffffffffffffffffffffffffb69e9e9e9e9e9e27000000
   6.540 -000000000000000000000000000000000000000000000000000000000000000000000050
   6.541 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.542 -d6d6d6d6d6930d0000000000000000000000000000000000000000000000000000000000
   6.543 -0000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffff
   6.544 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.545 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.546 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.547 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.548 -ffffd49e9e9e9e9e9e9e9413000000000000000000000000000000000000000000000000
   6.549 -000000000000000000000000000085d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.550 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d66b0000000000000000000000000000000000
   6.551 -0000000000000000000000000000000000000000000000000000000fbfffffffffffffff
   6.552 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.553 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.554 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.555 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.556 -fffffffffffffffffffffffffffffff8a49e9e9e9e9e9e9e9e8009000000000000000000
   6.557 -000000000000000000000000000000000000000000000000000000000dadd6d6d6d6d6d6
   6.558 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c83500000000
   6.559 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.560 -000000002fdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.561 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.562 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.563 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.564 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e
   6.565 -9e9e9e9e6200000000000000000000000000000000000000000000000000000000000000
   6.566 -0000000000000028c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.567 -d6d6d6d6d6d6d6ad1a000000000000000000000000000000000000000000000000000000
   6.568 -00000000000000000000000000000000006fffffffffffffffffffffffffffffffffffff
   6.569 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.570 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.571 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.572 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.573 -ffffffffffffe69e9e9e9e9e9e9e9e9e9e9e9e4500000000000000000000000000000000
   6.574 -0000000000000000000000000000000000000000000050d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.575 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6850d0000000000000000000000000000
   6.576 -00000000000000000000000000000000000000000000000000000000000fafffffffffff
   6.577 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.578 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.579 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.580 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.581 -ffffffffffffffffffffffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e9e9e9e2b00
   6.582 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.583 -0085d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d65d0000
   6.584 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.585 -0000000000002fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.586 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.587 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.588 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.589 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09e9e
   6.590 -9e9e9e9e9e9e9e9e9e9e9ea8c81a00000000000000000000000000000000000000000000
   6.591 -0000000000000000000000000000000dadd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.592 -d6d6d6d6d6d6d6d6d6c83500000000000000000000000000000000000000000000000000
   6.593 -000000000000000000000000000000000000005fefffffffffffffffffffffffffffffff
   6.594 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.595 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.596 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.597 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.598 -ffffffffffffffffffffffaa9e9e9e9e9e9e9e9e9e9e9e9e9ecbd6ad0d00000000000000
   6.599 -00000000000000000000000000000000000000000000000000000000000028d6d6d6d6d6
   6.600 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad1a000000000000000000000000
   6.601 -00000000000000000000000000000000000000000000000000000000000000009fffffff
   6.602 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.603 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.604 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.605 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.606 -ffffffffffffffffffffffffffffffffffffffffffffffffda9e9e9e9e9e9e9e9e9e9e9e
   6.607 -9e9ebad6d6d6850000000000000000000000000000000000000000000000000000000000
   6.608 -0000000000000000005dd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d685
   6.609 -0d0000000000000000000000000000000000000000000000000000000000000000000000
   6.610 -00000000000000001fcfffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.611 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.612 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.613 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.614 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.615 -ffffaa9e9e9e9e9e9e9e9e9e9e9e9ea5d6d6d6d6d65d0000000000000000000000000000
   6.616 -00000000000000000000000000000000000000000000000093d6d6d6d6d6d6d6d6d6d6d6
   6.617 -d6d6d6d6d6d6d6d6d6d6d6d65d0000000000000000000000000000000000000000000000
   6.618 -00000000000000000000000000000000000000000049efffffffffffffffffffffffffff
   6.619 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.620 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.621 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.622 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.623 -ffffffffffffffffffffffffffffffe69e9e9e9e9e9e9e9e9e9e9e9e9ec8d6d6d6d6d6d6
   6.624 -350000000000000000000000000000000000000000000000000000000000000000000000
   6.625 -00000dbbd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c83500000000000000000000
   6.626 -000000000000000000000000000000000000000000000000000000000000000000004faa
   6.627 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.628 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.629 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.630 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.631 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb69e9e9e9e9e9e
   6.632 -9e9e9e9e9e9eacd6d6d6d6d6d6d6c81a0000000000000000000000000000000000000000
   6.633 -000000000000000000000000000000000028d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.634 -d6ad1a000000000000000000000000000000000000000000000000000000000000000000
   6.635 -0000000000000000000009769e9ee0ffffffffffffffffffffffffffffffffffffffffff
   6.636 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.637 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.638 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.639 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.640 -fffffffffffff29e9e9e9e9e9e9e9e9e9e9e9e9ecbd6d6d6d6d6d6d6d6ad0d0000000000
   6.641 -00000000000000000000000000000000000000000000000000000000000000005dd6d6d6
   6.642 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6850d0000000000000000000000000000000000000000
   6.643 -00000000000000000000000000000000000000000000001d949e9e9eb6ffffffffffffff
   6.644 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.645 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.646 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.647 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.648 -ffffffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e9e9e9e9e9e9eb3d6d6
   6.649 -d6d6d6d6d6d6d6d685000000000000000000000000000000000000000000000000000000
   6.650 -000000000000000000000093d6d6d6d6d6d6d6d6d6d6d6d6d6d6d65d0000000000000000
   6.651 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.652 -459e9e9e9e9e9ef2ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.653 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.654 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.655 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.656 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa49e
   6.657 -9e9e9e9e9e9e9e9e9e9e9ecfd6d6d6d6d6d6d6d6d6d6d65d000000000000000000000000
   6.658 -000000000000000000000000000000000000000000000000000dbbd6d6d6d6d6d6d6d6d6
   6.659 -d6d6d6c83500000000000000000000000000000000000000000000000000000000000000
   6.660 -000000000000000000000000096c9e9e9e9e9e9e9ec8ffffffffffffffffffffffffffff
   6.661 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.662 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.663 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.664 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.665 -ffffffffffffffffffffffda9e9e9e9e9e9e9e9e9e9e9e9eacd6d6d6d6d6d6d6d6d6d6d6
   6.666 -d6d635000000000000000000000000000000000000000000000000000000000000000000
   6.667 -0000000035d6d6d6d6d6d6d6d6d6d6d6ad1a000000000000000000000000000000000000
   6.668 -000000000000000000000000000000000000000000000000001d8a9e9e9e9e9e9e9e9eaa
   6.669 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.670 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.671 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.672 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.673 -ffffffffffffffffffffffffffffffffffffffffffffffffffbc9e9e9e9e9e9e9e9e9e9e
   6.674 -9e9ec8d6d6d6d6d6d6d6d6d6d6d6d6d6c81a000000000000000000000000000000000000
   6.675 -000000000000000000000000000000000000006bd6d6d6d6d6d6d6d6d6850d0000000000
   6.676 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.677 -00003b949e9e9e9e9e9e9e9e9e9ee0ffffffffffffffffffffffffffffffffffffffffff
   6.678 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.679 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.680 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.681 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.682 -fffff89e9e9e9e9e9e9e9e9e9e9e9ea5d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad0d000000
   6.683 -00000000000000000000000000000000000000000000000000000000000000000000a0d6
   6.684 -d6d6d6d6d6d65d0000000000000000000000000000000000000000000000000000000000
   6.685 -00000000000000000000000000000d7b9e9e9e9e9e9e9e9e9e9e9e9ec2ffffffffffffff
   6.686 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.687 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.688 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.689 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.690 -ffffffffffffffffffffffffffffffffda9e9e9e9e9e9e9e9e9e9e9e9ebdd6d6d6d6d6d6
   6.691 -d6d6d6d6d6d6d6d6d6d68500000000000000000000000000000000000000000000000000
   6.692 -0000000000000000000000000dc8d6d6d6d6c83500000000000000000000000000000000
   6.693 -0000000000000000000000000000000000000000000000000000001aadd6a59e9e9e9e9e
   6.694 -9e9e9e9e9e9ea4ffffffffffffffdfbf8f7f5f3f3f1f0000000000000000000000000000
   6.695 -001f3f3f5f7f8fbfcfffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.696 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.697 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.698 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc9e9e9e9e9e
   6.699 -9e9e9e9e9e9e9ed2d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d65000000000000000000000
   6.700 -00000000000000000000000000000000000000000000000000000035d6d6d6ad0d000000
   6.701 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.702 -0000000042c8d6d6bd9e9e9e9e9e9e9e9e9e9e9e9ee6ffcf9f5f3f000000000000000000
   6.703 -0000000000000000000000000000000000000000000000002f5f8fcfffffffffffffffff
   6.704 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.705 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf8f7f
   6.706 -3f3f0f000000000000000000003f3f7f9fdfffffffffffffffffffffffffffffffffffff
   6.707 -ffffffffffffffffa49e9e9e9e9e9e9e9e9e9e9eafd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.708 -d6d6d6d62800000000000000000000000000000000000000000000000000000000000000
   6.709 -0000000000006bd685000000000000000000000000000000000000000000000000000000
   6.710 -000000000000000000000000000000000078d6d6d6d6cf9e9e9e9e9e9e9e9e9e9e9e6c47
   6.711 -1f0000000000000000000000000000000000000000000000000000000000000000000000
   6.712 -0000000000000f4f9fdfffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.713 -ffbf3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3fefffffffffff
   6.714 -ffffffffffffffaf6f2f000000000000000000000000000000000000000000001f6fcfff
   6.715 -ffffffffffffffffffffffffffffffffffffffffffe69e9e9e9e9e9e9e9e9e9e9e9ec1d6
   6.716 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c80d00000000000000000000000000000000
   6.717 -000000000000000000000000000000000000000000350000000000000000000000000000
   6.718 -00000000000000000000000000000000000000000000000000000000000da0d6d6d6d6d6
   6.719 -d6a89e9e9e9e9e9e9e763b09000000000000000000000000000000000000000000000000
   6.720 -0000000000000000000000000000000000000000000000004f9fffffffffffffffffffff
   6.721 -ffffffffffffffffffffffffffffff6f0000000000000000000000000000000000000000
   6.722 -000000000000001fffffffffffffffffffff9f4f00000000000000000000000000000000
   6.723 -000000000000000000000000003fafffffffffffffffffffffffffffffffffffffffffce
   6.724 -9e9e9e9e9e9e9e9e9e9e9e9ed2d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad0000
   6.725 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.726 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.727 -00000000000035c8d6d6d6d6d6d6d6bd9e9e9e9e94621300000000000000000000000000
   6.728 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.729 -000000000f7fefffffffffffffffffffffffffffffffffffffffffffff3f000000000000
   6.730 -0000000000000000000000000000000000000000004fffffffffffffffdf6f0f00000000
   6.731 -00000000000000000000000000000000000000000000000000000000003fdfffffffffff
   6.732 -ffffffffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e9eafd6d6d6d6d6d6d6d6d6d6
   6.733 -d6d6d6d6d6d6d6d6d6d6d6d6850000000000000000000000000000000000000000000000
   6.734 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.735 -000000000000000000000000000000000000005dd6d6d6d6d6d6d6d6d6cf9e9e944f0900
   6.736 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.737 -00000000000000000000000000000000000000000f8fffffffffffffffffffffffffffff
   6.738 -ffffffffffffff000000000000000000000000000000000000000000000000000000008f
   6.739 -ffffffffffdf5f0000000000000000000000000000000000000000000000000000000000
   6.740 -00000000000000000f9fffffffffffffffffffffffffffffffffff9e9e9e9e9e9e9e9e9e
   6.741 -9e9e9ebdd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6500000000000000000
   6.742 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.743 -000000000000000000000000000000000000000000000000000000000000000d93d6d6d6
   6.744 -d6d6d6d6d6d6d6d69b4f0900000000000000000000000000000000000000000000000000
   6.745 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.746 -2fcfffffffffffffffffffffffffffffffffffffbf000000000000000000000000000000
   6.747 -00000000000000000000000000bfffffffef5f0000000000000000000000000000000000
   6.748 -0000000000000000000000000000000000000000000000009fffffffffffffffffffffff
   6.749 -ffffffffe69e9e9e9e9e9e9e9e9e9e9e9ecbd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.750 -d6d6d6d6d6d6280000000000000000000000000000000000000000000000000000000000
   6.751 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.752 -000000000000000028bbd6d6d6d6d6d6d6d6d6d6d6850d00000000000000000000000000
   6.753 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.754 -0000000000000000000000000000000f9fffffffffffffffffffffffffffffffffff8f00
   6.755 -000000000000000000000000000000000000000000000000000000ffffff8f0f00000000
   6.756 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.757 -0000009fffffffffffffffffffffffffffffd49e9e9e9e9e9e9e9e9e9e9ea1d6d6d6d6d6
   6.758 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c80d0000000000000000000000000000
   6.759 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.760 -00000000000000000000000000000000000000000050c8d6d6d6d6d6d6d6d6d6d6ad3500
   6.761 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.762 -000000000000000000000000000000000000000000000000000000000000006fffffffff
   6.763 -ffffffffffffffffffffffff5f0000000000000000000000000000000000000000000000
   6.764 -000000003fffef3f00000000000000000000000000000000000000000000000000000000
   6.765 -000000000000000000000000000000000000bfffffffffffffffffffffffffffc89e9e9e
   6.766 -9e9e9e9e9e9e9e9eafd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad
   6.767 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.768 -0000000000000000000000000000000000000000000000000000000000000000000d85d6
   6.769 -d6d6d6d6d6d6d6d6d6d66b00000000000000000000000000000000000000000000000000
   6.770 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.771 -000000000000000000005fffffffffffffffffffffffffffffff1f000000000000000000
   6.772 -0000000000000000000000000000000000006fbf0f000000000000000000000000000000
   6.773 -00000000000000000000000000000000000000000000000000000000000000001fffffff
   6.774 -ffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e9ebad6d6d6d6d6d6d6d6d6d6d6d6d6
   6.775 -d6d6d6d6d6d6d6d6d6d6d6d6d6d685000000000000000000000000000000000000000000
   6.776 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.777 -0000000000000000000028add6d6d6d6d6d6d6d6d6d6c835000000000000000000000000
   6.778 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.779 -000000000000000000000000000000000000000000000000005fffffffffffffffffffff
   6.780 -ffffffef000000000000000000000000000000000000000000000000000000003f000000
   6.781 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.782 -00000000000000000000009fffffffffffffffffffffffffa49e9e9e9e9e9e9e9e9e9e9e
   6.783 -c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d650000000000000
   6.784 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.785 -000000000000000000000000000000000000000000000042c8d6d6d6d6d6d6d6d6d6d6ad
   6.786 -0d0000000000000000000000000000000000000000000000000000000000000000000000
   6.787 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.788 -000000007fffffffffffffffffffffffffaf000000000000000000000000000000000000
   6.789 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.790 -000000000000000000000000000000000000000000000000002fffffffffffffffffffff
   6.791 -ffff9e9e9e9e9e9e9e9e9e9e9e9ed2d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.792 -d6d6d6d6d6d6d6d628000000000000000000000000000000000000000000000000000000
   6.793 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.794 -78d6d6d6d6d6d6d6d6d6d6d6850000000000000000000000000000000000000000000000
   6.795 -000000000000000000000000001f3f3f3f3f3f3f00000000000000000000000000000000
   6.796 -00000000000000000000000000000000000000bfffffffffffffffffffffff7f00000000
   6.797 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.798 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.799 -00000000dfffffffffffffffffffffe69e9e9e9e9e9e9e9e9e9e9e9ed6d6d6d6d6d6d6d6
   6.800 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c80d000000000000000000000000
   6.801 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.802 -0000000000000000000000000dadd6d6d6d6d6d6d6d6d6d6d68500000000000000000000
   6.803 -00000000000000000000000000000000000000000000000f5fafefffffffffffffffffcf
   6.804 -8f2f000000000000000000000000000000000000000000000000000000000000001fefff
   6.805 -ffffffffffffffffff3f0000000000000000000000000000000000000000000000000000
   6.806 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.807 -000000000000000000000000000000000000bfffffffffffffffffffffe69e9e9e9e9e9e
   6.808 -9e9e9e9e9eacd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.809 -d6ad00000000000000000000000000000000000000000000000000000000000000000000
   6.810 -0000000000000000000000000000000000000000000000000035c8d6d6d6d6d6d6d6d6d6
   6.811 -d6d68500000000000000000000000000000000000000000000000000000000000000001f
   6.812 -9fffffffffffffffffffffffffffffffbf3f000000000000000000000000000000000000
   6.813 -0000000000000000000000007fffffffffffffffffffff0f000000000000000000000000
   6.814 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.815 -00000000000000000000000000000000000000000000000000000000000000009fffffff
   6.816 -ffffffffffffffce9e9e9e9e9e9e9e9e9e9e9eacd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.817 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d68500000000000000000000000000000000000000
   6.818 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.819 -00006bd6d6d6d6d6d6d6d6d6d6d6d6930000000000000000000000000000000000000000
   6.820 -00000000000000000000000f8fffffffffffffffffffffffffffffffffffffff8f000000
   6.821 -00000000000000000000000000000000000000000000000000000fefffffffffffffffff
   6.822 -cf0000000000000000000000000000000000000000000000000000000000000000000000
   6.823 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.824 -000000000000000000008fffffffffffffffffffffce9e9e9e9e9e9e9e9e9e9e9ebad6d6
   6.825 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d65000000000
   6.826 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.827 -00000000000000000000000000000d93d6d6d6d6d6d6d6d6d6d6d6d6ad0d000000000000
   6.828 -0000000000000000000000000000000000000000000000002fdfffffffffffffffffffff
   6.829 -ffffffffffffffffffffff9f000000000000000000000000000000000000000000000000
   6.830 -00000000008fffffffffffffffff9f000000000000000000000000000000000000000000
   6.831 -00000000000000000000000000000000000000003f3f3f3f3f0f00000000000000000000
   6.832 -000000000000000000000000000000000000000000000000bfffffffffffffffffffffce
   6.833 -9e9e9e9e9e9e9e9e9e9e9ebad6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.834 -d6d6d6d6d6d6d6d6d6d62800000000000000000000000000000000000000000000000000
   6.835 -00000000000000000000000000000000000000000000000000000028bbd6d6d6d6d6d6d6
   6.836 -d6d6d6d6d6c81a0000000000000000000000000000000000000000000000000000000000
   6.837 -005fefffffffffffffffffffffffffffffffffffffffffffffff3f000000000000000000
   6.838 -000000000000000000000000000000000000002fffffffffffffffff5f00000000000000
   6.839 -0000000000000000000000000000000000000000000000000000000000001f6fcfffffff
   6.840 -ffffffffaf2f000000000000000000000000000000000000000000000000000000000000
   6.841 -0000bfffffffffffffffffffffbc9e9e9e9e9e9e9e9e9e9e9ebad6d6d6d6d6d6d6d6d6d6
   6.842 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c80d00000000000000000000
   6.843 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.844 -0000000050d6d6d6d6d6d6d6d6d6d6d6d6d6d64200000000000000000000000000000000
   6.845 -00000000000000000000000000005fffffffffffffffffffffffffffffffffffffffffff
   6.846 -ffffffffaf0000000000000000000000000000000000000000000000000000000000efff
   6.847 -ffffffffffff2f0000000000000000000000000000000000000000000000000000000000
   6.848 -0000000000000f9fffffffffffffffffffffffef2f000000000000000000000000000000
   6.849 -00000000000000000000000000000000cfffffffffffffffffffffb69e9e9e9e9e9e9e9e
   6.850 -9e9e9ec8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.851 -d6d6d6ad0000000000000000000000000000000000000000000000000000000000000000
   6.852 -000000000000000000000000000000000d85d6d6d6d6d6d6d6d6d6d6d6d6d6d693000000
   6.853 -0000000000000000000000000000000000000000000000000000002fefffffffffffffff
   6.854 -ffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000
   6.855 -000000000000000000000000bfffffffffffffff00000000000000000000000000000000
   6.856 -000000000000000000000000000000000000004fefffffffffffffffffffffffffffaf00
   6.857 -000000000000000000000000000000000000000000000000000000000000ffffffffffff
   6.858 -ffffffffffb69e9e9e9e9e9e9e9e9e9e9ec8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.859 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6780000000000000000000000000000000000
   6.860 -000000000000000000000000000000000000000000000000000000000028add6d6d6d6d6
   6.861 -d6d6d6d6d6d6d6d6d6d61a00000000000000000000000000000000000000000000000000
   6.862 -000000000fcfffffffffffffffffffffffffffffffffffffffffffffffffffffff1f0000
   6.863 -00000000000000000000000000000000000000000000000000007fffffffffffffbf0000
   6.864 -00000000000000000000000000000000000000000000000000000000000000008fffffff
   6.865 -ffffffffffffffffffffffffff0000000000000000000000000000000000000000000000
   6.866 -000000000000001fffffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e9ec8d6d6d6d6
   6.867 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad1a000000
   6.868 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.869 -00000000000042c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d66b000000000000000000000000
   6.870 -0000000000000000000000000000000000007fffffffffffffffffffffffffffffffffff
   6.871 -ffffffffffffffffffffff1f000000000000000000000000000000000000000000000000
   6.872 -000000007fffffffffffff7f000000000000000000000000000000000000000000000000
   6.873 -0000000000000000009fffffffffffffffffffffffffffffffffff000000000000000000
   6.874 -0000000000000000000000000000000000000000003fffffffffffffffffffffffb69e9e
   6.875 -9e9e9e9e9e9e9e9e9ec8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.876 -d6d6d6d6d6d6d6d685000000000000000000000000000000000000000000000000000000
   6.877 -0000000000000000000000000000000000000078d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.878 -d60d00000000000000000000000000000000000000000000000000000000001fffffffff
   6.879 -ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000
   6.880 -0000000000000000000000000000000000004fffffffffffff4f00000000000000000000
   6.881 -000000000000000000000000000000000000000000006fffffffffffffffffffffffffff
   6.882 -ffffffffff0000000000000000000000000000000000000000000000000000000000007f
   6.883 -ffffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e9ec8d6d6d6d6d6d6d6d6d6d6d6d6
   6.884 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8500000000000000000000000000000
   6.885 -000000000000000000000000000000000000000000000000000000000000001aadd6d6d6
   6.886 -d6d6d6d6d6d6d6d6d6d6d6d6d6d685000000000000000000000000000000000000000000
   6.887 -0000000000000000009fffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.888 -ffffbf00000000000000000000000000000000000000000000000000000000003fffffff
   6.889 -ffffff0f000000000000000000000000000000000000000000000000000000000000003f
   6.890 -ffffffffffffffffffffffffffffffffffffcf0000000000000000000000000000000000
   6.891 -00000000000000000000000000afffffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e
   6.892 -9ec8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad2800
   6.893 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.894 -00000000000000001ac8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d62800000000000000
   6.895 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.896 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.897 -000000000000000000007fffffffffffdf00000000000000000000000000000000000000
   6.898 -0000000000000000000000000fdfffffffffffffffffffffffffffffffffffffaf000000
   6.899 -000000000000000000000000000000000000000000000000000000cfffffffffffffffff
   6.900 -ffffffb69e9e9e9e9e9e9e9e9e9e9ec8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.901 -d6d6d6d6d6d6d6d6d6d6930d000000000000000000000000000000000000000000000000
   6.902 -0000000000000000000000000000000000000000000000a0d6d6d6d6d6d6d6d6d6d6d6d6
   6.903 -d6d6d6d6d6bb000000000000000000000000000000000000000000000000000000000000
   6.904 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.905 -0000000000000000000000000000000000000000000000007fffffffffffaf0000000000
   6.906 -00000000000000000000000000000000000000000000000000007fffffffffffffffffff
   6.907 -ffffffffffffffffffff7f00000000000000000000000000000000000000000000000000
   6.908 -0000000000ffffffffffffffffffffffffbc9e9e9e9e9e9e9e9e9e9e9ebad6d6d6d6d6d6
   6.909 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d65d000000000000000000000000
   6.910 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.911 -000dc8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d68500000000000000000000000000000000
   6.912 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.913 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.914 -0000afffffffffff6f000000000000000000000000000000000000000000000000000000
   6.915 -0000000fefffffffffffffffffffffffffffffffffffffff3f0000000000000000000000
   6.916 -0000000000000000000000000000000000003fffffffffffffffffffffffffce9e9e9e9e
   6.917 -9e9e9e9e9e9e9ebad6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8
   6.918 -280000000000000000000000000000000000000000000000000000000000000000000000
   6.919 -0000000000000000000000000000000028d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6500000
   6.920 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.921 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.922 -00000000000000000000000000000000cfffffffffff3f00000000000000000000000000
   6.923 -00000000000000000000000000000000007fffffffffffffffffffffffffffffffffffff
   6.924 -ffff0f00000000000000000000000000000000000000000000000000000000007fffffff
   6.925 -ffffffffffffffffffce9e9e9e9e9e9e9e9e9e9e9ebad6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.926 -d6d6d6d6d6d6d6d6d6d6d6d6a00d00000000000000000000000000000000000000000000
   6.927 -000000000000000000000000000000000000000000000000000000000000005dd6d6d6d6
   6.928 -d6d6d6d6d6d6d6d6d6d6d635000000000000000000000000000000000000000000000000
   6.929 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.930 -000000000000000000000000000000000000000000000000000000000000ffffffffffff
   6.931 -00000000000000000000000000000000000000000000000000000000000000dfffffffff
   6.932 -ffffffffffffffffffffffffffffffdf0000000000000000000000000000000000000000
   6.933 -00000000000000000000afffffffffffffffffffffffffce9e9e9e9e9e9e9e9e9e9e9eac
   6.934 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d66b00000000000000000000
   6.935 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.936 -0000000000000000000093d6d6d6d6d6d6d6d6d6d6d6d6d6d60000000000000000000000
   6.937 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.938 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.939 -000000000000003fffffffffffbf00000000000000000000000000000000000000000000
   6.940 -00000000000000004fffffffffffffffffffffffffffffffffffffffffaf000000000000
   6.941 -000000000000000000000000000000000000000000000000dfffffffffffffffffffffff
   6.942 -ffe69e9e9e9e9e9e9e9e9e9e9eacd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.943 -d6c835000000000000000000000000000000000000000000000000000000000000000000
   6.944 -0000000000000000000000000000000000000000000000000dbbd6d6d6d6d6d6d6d6d6d6
   6.945 -d6d6d6000000000000000000000000000000000000000000000000000000000000000000
   6.946 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.947 -0000000000000000000000000000000000000000006fffffffffff8f0000000000000000
   6.948 -000000000000000000000000000000000000000000009fffffffffffffffffffffffffff
   6.949 -ffffffffffffff7f00000000000000000000000000000000000000000000000000000000
   6.950 -000fffffffffffffffffffffffffffe69e9e9e9e9e9e9e9e9e9e9e9ed6d6d6d6d6d6d6d6
   6.951 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad1a0000000000000000000000000000000000000000
   6.952 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.953 -00000028c8d6d6d6d6d6d6d6d6d6d6d6d600000000000000000000000000000000000000
   6.954 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.955 -0000000000000000000000000000000000000000000000000000000000000000000000af
   6.956 -ffffffffff5f000000000000000000000000000000000000000000000000000000000000
   6.957 -efffffffffffffffffffffffffffffffffffffffff3f0000000000000000000000000000
   6.958 -0000000000000000000000000000004fffffffffffffffffffffffffffff9e9e9e9e9e9e
   6.959 -9e9e9e9e9e9ed2d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6780000000000000000
   6.960 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.961 -00000000000000000000000000000000000050d6d6d6d6d6d6d6d6d6d6d6d60000000000
   6.962 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.963 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.964 -00000000000000000000000000dfffffffffff1f00000000000000000000000000000000
   6.965 -000000000000000000000000002fffffffffffffffffffffffffffffffffffffffffff0f
   6.966 -00000000000000000000000000000000000000000000000000000000007fffffffffffff
   6.967 -ffffffffffffffffa49e9e9e9e9e9e9e9e9e9e9ec8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   6.968 -d6d6d6c85000000000000000000000000000000000000000000000000000000000000000
   6.969 -00000000000000000000000000000000000000000000000000000000000000000085d6d6
   6.970 -d6d6d6d6d6d6d6d6d6000000000000000000000000000000000000000000000000000000
   6.971 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.972 -00000000000000000000000000000000000000000000000000001fffffffffffef000000
   6.973 -0000000000000000000000000000000000000000000000000000006fffffffffffffffff
   6.974 -ffffffffffffffffffffffffdf0000000000000000000000000000000000000000000000
   6.975 -00000000000000bfffffffffffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e9ebad6
   6.976 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad28000000000000000000000000000000000000
   6.977 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.978 -00000000000000000000000dadd6d6d6d6d6d6d6d6d6d600000000000000000000000000
   6.979 -0000000000000000000000000000000027737f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
   6.980 -7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
   6.981 -7f7f7f7f9fffffffffffaf00000000000000000000000000000000000000000000000000
   6.982 -00000000009fffffffffffffffffffffffffffffffffffffffff9f000000000000000000
   6.983 -000000000000000000000000000000000000000000efffffffffffffffffffffffffffff
   6.984 -c89e9e9e9e9e9e9e9e9e9e9eafd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6850d0000000000
   6.985 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.986 -000000000000000000000000000000000000000000000000000028c8d6d6d6d6d6d6d6d6
   6.987 -d60d000000000000000000000000000000000000000000000000000000003becffffffff
   6.988 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.989 -ffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000
   6.990 -00000000000000000000000000000000000000cfffffffffffffffffffffffffffffffff
   6.991 -ffffffff6f00000000000000000000000000000000000000000000000000000000002fff
   6.992 -ffffffffffffffffffffffffffffd49e9e9e9e9e9e9e9e9e9e9ea1d6d6d6d6d6d6d6d6d6
   6.993 -d6d6d6d6d6d65d0000000000000000000000000000000000000000000000000000000000
   6.994 -000000000000000000000000000000000000000000000000000000000000000000000000
   6.995 -000000000050d6d6d6d6d6d6d6d6d6350000000000000000000000000000000000000000
   6.996 -00000000000000001dffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.997 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   6.998 -ffff3f00000000000000000000000000000000000000000000000000000000000fffffff
   6.999 -ffffffffffffffffffffffffffffffffffff3f0000000000000000000000000000000000
  6.1000 -0000000000000000000000005fffffffffffffffffffffffffffffffe69e9e9e9e9e9e9e
  6.1001 -9e9e9e9e9ecbd6d6d6d6d6d6d6d6d6d6d6d6bb2800000000000000000000000000000000
  6.1002 -000000000000000000000000000000000000000000000000000000000000000000000000
  6.1003 -000000000000000000000000000000000000000078d6d6d6d6d6d6d6d66b000000000000
  6.1004 -0000000000000000000000000000000000000000000000dfffffffffffffffffffffffff
  6.1005 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1006 -ffffffffffffffffffffffffffffffff0f00000000000000000000000000000000000000
  6.1007 -000000000000000000003fffffffffffffffffffffffffffffffffffffffffff00000000
  6.1008 -00000000000000000000000000000000000000000000000000008fffffffffffffffffff
  6.1009 -ffffffffffffff9e9e9e9e9e9e9e9e9e9e9e9ebdd6d6d6d6d6d6d6d6d6d6d6a00d000000
  6.1010 -000000000000000000000000000000000000000000000000000000000000000000000000
  6.1011 -0000000000000000000000000000000000000000000000000000000000000000000000ad
  6.1012 -d6d6d6d6d6d6d6a000000000000000000000000000000000000000000000000000000000
  6.1013 -006fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1014 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf000000000000
  6.1015 -0000000000000000000000000000000000000000000000007fffffffffffffffffffffff
  6.1016 -ffffffffffffffffffbf0000000000000000000000000000000000000000000000000000
  6.1017 -00000000cfffffffffffffffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e9eafd6d6
  6.1018 -d6d6d6d6d6d6d6d66b000000000000000000000000000000000000000000000000000000
  6.1019 -000000000000000000000000000000000000000000000000000000000000000000000000
  6.1020 -000000000000000000000000001ac8d6d6d6d6d6d6d60d00000000000000000000000000
  6.1021 -0000000000000000000000000000000fdfffffffffffffffffffffffffffffffffffffff
  6.1022 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1023 -ffffffffffffff9f00000000000000000000000000000000000000000000000000000000
  6.1024 -0000bfffffffffffffffffffffffffffffffffffffffff8f000000000000000000000000
  6.1025 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffce
  6.1026 -9e9e9e9e9e9e9e9e9e9e9e9ed2d6d6d6d6d6d6d6c8350000000000000000000000000000
  6.1027 -000000000000000000000000000000000000000000000000000000000000000000000000
  6.1028 -0000000000000000000000000000000000000000000000000000000042d6d6d6d6d6d6d6
  6.1029 -6b00000000000000000000000000000000000000000000000000000000003fffffffffff
  6.1030 -ffffffffffffffffffffffffffffffffffffffcf3f3f3f3f5f7f7f7fafbfbfbfffffffff
  6.1031 -ffffffffffffffffffffffffffffffffffffffffff5f0000000000000000000000000000
  6.1032 -00000000000000000000000000000000efffffffffffffffffffffffffffffffffffffff
  6.1033 -ff5f00000000000000000000000000000000000000000000000000000000003fffffffff
  6.1034 -ffffffffffffffffffffffffffe69e9e9e9e9e9e9e9e9e9e9e9ec1d6d6d6d6d6d6ad0d00
  6.1035 -000000000000000000000000000000000000000000000000000000000000000000000000
  6.1036 -000000000000000000000000000000000000000000000000000000000000000000000000
  6.1037 -000000000000006bd6d6d6d6d6d6bb000000000000000000000000000000000000000000
  6.1038 -0000000000000000005fffffffffffffffffffffffffffffffffffffffffffffaf0f0000
  6.1039 -000000000000000000000000000f3f3f3f5f7f7f7fafbfbfbfffffffffffffffffffff2f
  6.1040 -00000000000000000000000000000000000000000000000000000000001fffffffffffff
  6.1041 -ffffffffffffffffffffffffffffff1f0000000000000000000000000000000000000000
  6.1042 -0000000000000000006fffffffffffffffffffffffffffffffffffffa49e9e9e9e9e9e9e
  6.1043 -9e9e9e9eafd6d6d6d6d67800000000000000000000000000000000000000000000000000
  6.1044 -000000000000000000000000000000000000005d35000000000000000000000000000000
  6.1045 -00000000000000000000000000000000000000000000a0d6d6d6d6d6d65d000000000000
  6.1046 -0000000000000000000000000000000000000000000000004fefffffffffffffffffffff
  6.1047 -ffffffffffffffffdf4f0000000000000000000000000000000000000000000000000000
  6.1048 -00000000003fffffffffffffff0000000000000000000000000000000000000000000000
  6.1049 -000000000000005fffffffffffffffffffffffffffffffffffffffffef00000000000000
  6.1050 -0000000000000000000000000000000000000000000000afffffffffffffffffffffffff
  6.1051 -ffffffffffffbc9e9e9e9e9e9e9e9e9e9e9e9ed2d6d6c842000000000000000000000000
  6.1052 -000000000000000000000000000000000000000000000000000000000000000085d6c80d
  6.1053 -000000000000000000000000000000000000000000000000000000000000000000000000
  6.1054 -0dc8d6d6d6d6d6c80d000000000000000000000000000000000000000000000000000000
  6.1055 -0000000f7fefffffffffffffffffffffffffffffcf5f0000000000000000000000000000
  6.1056 -0000000000000000000000000000000000002fefffffffffffffbf000000000000000000
  6.1057 -0000000000000000000000000000000000000000008fffffffffffffffffffffffffffff
  6.1058 -ffffffffffffbf0000000000000000000000000000000000000000000000000000000000
  6.1059 -00dfffffffffffffffffffffffffffffffffffffda9e9e9e9e9e9e9e9e9e9e9e9ebdd6ad
  6.1060 -280000000000000000000000000000000000000000000000000000000000000000000000
  6.1061 -00000000000000000dadd6d6d69300000000000000000000000000000000000000000000
  6.1062 -00000000000000000000000000000035d6d6d6d6d6d69300000000000000000000000000
  6.1063 -000000000000000000000000000000000000000f4f8fbfffffffffffffffbf9f6f1f0000
  6.1064 -000000000000000000000000000000000000000000000000000000000000000fefffffff
  6.1065 -ffffffff7f000000000000000000000000000000000000000000000000000000000000cf
  6.1066 -ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000
  6.1067 -00000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff89e
  6.1068 -9e9e9e9e9e9e9e9e9e9e9ea5850d00000000000000000000000000000000000000000000
  6.1069 -00000000000000000000000000000000000000000028c8d6d6d6d6d64200000000000000
  6.1070 -0000000000000000000000000000000000000000000000000000000000005dd6d6d6d6d6
  6.1071 -d65d00000000000000000000000000000000000000000000000000000000000000000000
  6.1072 -000000000000000000000000000000000000000000000000000000000000000000000000
  6.1073 -00000000000000000fcfffffffffffffffff4f0000000000000000000000000000000000
  6.1074 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff3f00
  6.1075 -000000000000000000000000000000000000000000000000000000004fffffffffffffff
  6.1076 -ffffffffffffffffffffffffffbc9e9e9e9e9e9e9e9e9e9e9e3b00000000000000000000
  6.1077 -0000000000000000000000000000000000000000000000000000000000000000000050d6
  6.1078 -d6d6d6d6d6d6c81a00000000000000000000000000000000000000000000000000000000
  6.1079 -00000000000000000093d6d6d6d6d6d65000000000000000000000000000000000000000
  6.1080 -000000000000000000000000000000000000000000000000000000000000000000000000
  6.1081 -0000000000000000000000000000000000000000002fdfffffffffffffffffff0f000000
  6.1082 -00000000000000000000000000000000000000000000000000003fffffffffffffffffff
  6.1083 -ffffffffffffffffffffffff0f0000000000000000000000000000000000000000000000
  6.1084 -0000000000007fffffffffffffffffffffffffffffffffffffffffda9e9e9e9e9e9e9e9e
  6.1085 -9e8a1d000000000000000000000000000000000000000000000000000000000000000000
  6.1086 -000000000000000000000078d6d6d6d6d6d6d6d6d6a00000000000000000000000000000
  6.1087 -00000000000000000000000000000000000000000000000dbbd6d6d6d6d6c82800000000
  6.1088 -000000000000000000000000000000000000000000000000000000000000000000000000
  6.1089 -000000000000000000000000000000000000000000000000000000000000000000003fef
  6.1090 -ffffffffffffffffffdf0000000000000000000000000000000000000000000000000000
  6.1091 -000000006fffffffffffffffffffffffffffffffffffffffffdf00000000000000000000
  6.1092 -0000000000000000000000000000000000000000bfffffffffffffffffffffffffffffff
  6.1093 -ffffffffffffa49e9e9e9e9e9e9e6c090000000000000000000000000000000000000000
  6.1094 -00000000000000000000000000000000000000000000000da0d6d6d6d6d6d6d6d6d6d6d6
  6.1095 -5d0000000000000000000000000000000000000000000000000000000000000000000000
  6.1096 -000028d6d6d6d6d6d6c85000000000000000000000000000000000000000000000000000
  6.1097 -000000000000000000000000000000000000000000000000000000000000000000000000
  6.1098 -00000000000000000000006fffffffffffffffffffffffaf000000000000000000000000
  6.1099 -000000000000000000000000000000000000afffffffffffffffffffffffffffffffffff
  6.1100 -ffffff9f000000000000000000000000000000000000000000000000000000000000efff
  6.1101 -ffffffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e450000000000000000
  6.1102 -000000000000000000000000000000000000000000000000000000000000000000000000
  6.1103 -28add6d6d6d6d6d6d6d6d6d6d6d6d6280000000000000000000000000000000000000000
  6.1104 -00000000000000000000000000000000005dd6d6d6d6d6d6d65d00000000000000000000
  6.1105 -000000000000000000000000000000000000000000000000000000000000000000000000
  6.1106 -00000000000000000000000000000000000000000000000fbfffffffffffffffffffffff
  6.1107 -ff6f000000000000000000000000000000000000000000000000000000000000dfffffff
  6.1108 -ffffffffffffffffffffffffffffffffff6f000000000000000000000000000000000000
  6.1109 -00000000000000000000002ffffffffffffffffffffffffffffffffffffffffffffff29e
  6.1110 -9e9e9e942700000000000000000000000000000000000000000000000000000000000000
  6.1111 -0000000000000000000000000042c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad000000000000
  6.1112 -000000000000000000000000000000000000000000000000000000000000000085d6d6d6
  6.1113 -d6d6d6d6850d000000000000000000000000000000000000000000000000000000000000
  6.1114 -000000000000000000000000000000000000000000000000000000000000000000000000
  6.1115 -6fefffffffffffffffffffffffffff3f0000000000000000000000000000000000000000
  6.1116 -0000000000000000001fffffffffffffffffffffffffffffffffffffffffff3f00000000
  6.1117 -000000000000000000000000000000000000000000000000005fffffffffffffffffffff
  6.1118 -ffffffffffffffffffffffffffb69e9e7609000000000000000000000000000000000000
  6.1119 -00000000000000000000000000000000000000000000000000006bd6d6d6d6d6d6d6d6d6
  6.1120 -d6d6d6d6d6d6d6d678000000000000000000000000000000000000000000000000000000
  6.1121 -000000000000000000000dadd6d6d6d6d6d6d6bb35000000000000000000000000000000
  6.1122 -000000000000000000000000000000000000000000000000000000000000000000000000
  6.1123 -0000000000000000000000003fcfffffffffffffffffffffffffffffff00000000000000
  6.1124 -00000000000000000000000000000000000000000000004fffffffffffffffffffffffff
  6.1125 -ffffffffffffffffff000000000000000000000000000000000000000000000000000000
  6.1126 -0000008fffffffffffffffffffffffffffffffffffffffffffffffe69e58000000000000
  6.1127 -000000000000000000000000000000000000000000000000000000000000000000000000
  6.1128 -00000d85d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d635000000000000000000000000
  6.1129 -0000000000000000000000000000000000000000000000000028c8d6d6d6d6d6d6d6ac6c
  6.1130 -130000000000000000000000000000000000000000000000000000000000000000000000
  6.1131 -0000000000000000000000000000000000000000000000003fbfffffffffffffffffffff
  6.1132 -ffffffffffffbf0000000000000000000000000000000000000000000000000000000000
  6.1133 -007fffffffffffffffffffffffffffffffffffffffffbf00000000000000000000000000
  6.1134 -0000000000000000000000000000000000bfffffffffffffffffffffffffffffffffffff
  6.1135 -ffffffffffef310000000000000000000000000000000000000000000000000000000000
  6.1136 -0000000000000000000000000000001aadd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1137 -d6bb0d000000000000000000000000000000000000000000000000000000000000000000
  6.1138 -0000000050d6d6d6d6d6d6c49e9e9e6c2700000000000000000000000000000000000000
  6.1139 -00000000000000000000000000000000000000000000000000000000000000000000000f
  6.1140 -6fdfffffffffffffffffffffffffffffffffffff8f000000000000000000000000000000
  6.1141 -000000000000000000000000000000bfffffffffffffffffffffffffffffffffffffffff
  6.1142 -8f000000000000000000000000000000000000000000000000000000000000ffffffffff
  6.1143 -ffffffffffffffffffffffffffffffffffffcf1f00000000000000000000000000000000
  6.1144 -0000000000000000000000000000000000000000000000000000000028c8d6d6d6d6d6d6
  6.1145 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d69300000000000000000000000000000000000000
  6.1146 -0000000000000000000000000000000000000085d6d6d6d6d2a59e9e9e9e9e8a45130000
  6.1147 -000000000000000000000000000000000000000000000000000000000000000000000000
  6.1148 -000000000000000000000f5fafffffffffffffffffffffffffffffffffffffffffff5f00
  6.1149 -0000000000000000000000000000000000000000000000000000000000ffffffffffffff
  6.1150 -ffffffffffffffffffffffffffff5f000000000000000000000000000000000000000000
  6.1151 -00000000000000003fffffffffffffffffffffffffffffffffffffffffffff9f0f000000
  6.1152 -000000000000000000000000000000000000000000000000000000000000000000000000
  6.1153 -000000000050d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d64200000000
  6.1154 -00000000000000000000000000000000000000000000000000000000000000000000add6
  6.1155 -d6d6b69e9e9e9e9e9e9e9e9e805831090000000000000000000000000000000000000000
  6.1156 -00000000000000000000000000000000000000000f4f8fcfffffffffffffffffffffffff
  6.1157 -ffffffffffffffffffffffff1f0000000000000000000000000000000000000000000000
  6.1158 -0000000000002fffffffffffffffffffffffffffffffffffffffffff1f00000000000000
  6.1159 -000000000000000000000000000000000000000000006fffffffffffffffffffffffffff
  6.1160 -ffffffffffffffef5f000000000000000000000000000000000000000000000000000000
  6.1161 -00000000000000000000000000000000000085d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1162 -d6d6d6d6d6d6d6d6d6c81a00000000000000000000000000000000000000000000000000
  6.1163 -0000000000000000000000001ac8d6c89e9e9e9e9e9e9e9e9e9e9e9e9eaacf9f7f3f1f00
  6.1164 -00000000000000000000000000000000000000000000000000000000002f3f7fafcfffff
  6.1165 -ffffffffffffffffffffffffffffffffffffffffffffffffffef00000000000000000000
  6.1166 -00000000000000000000000000000000000000006fffffffffffffffffffffffffffffff
  6.1167 -ffffffffffef000000000000000000000000000000000000000000000000000000000000
  6.1168 -9fffffffffffffffffffffffffffffffffffffffdf2f0000000000000000000000000000
  6.1169 -0000000000000000000000000000000000000000000000000000000000000da0d6d6d6d6
  6.1170 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6a00000000000000000000000
  6.1171 -00000000000000000000000000000000000000000000000000000042d2a59e9e9e9e9e9e
  6.1172 -9e9e9e9e9e9e9edaffffffffffffcfbf9f7f7f6f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f
  6.1173 -7f7f7fafbfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1174 -ffffffdf7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7fbfff
  6.1175 -ffffffffffffffffffffffffffffffffffffffdf7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
  6.1176 -7f7f7f7f7f7f7f7f7f7f7f7f7f7fdfffffffffffffffffffffffffffffffffffffaf0f00
  6.1177 -000000000000000000000000000000000000000000000000000000000000000000000000
  6.1178 -0000000000000028bbd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1179 -d6d6d65d0000000000000000000000000000000000000000000000000000000000000000
  6.1180 -0000000000005f9e9e9e9e9e9e9e9e9e9e9e9e9eb6ffffffffffffffffffffffffffffff
  6.1181 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1182 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1183 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1184 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1185 -ffffffffffffffffffff6f00000000000000000000000000000000000000000000000000
  6.1186 -000000000000000000000000000000000000000050c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1187 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6280000000000000000000000000000000000
  6.1188 -000000000000000000000000000000000000000000809e9e9e9e9e9e9e9e9e9e9e9eecff
  6.1189 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1190 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1191 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1192 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1193 -ffffffffffffffffffffffffffffffffffffffffffffef2f000000000000000000000000
  6.1194 -0000000000000000000000000000000000000000000000000000000000000000006bd6d6
  6.1195 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad000000
  6.1196 -000000000000000000000000000000000000000000000000000000000000000000000009
  6.1197 -949e9e9e9e9e9e9e9e9e9ec8ffffffffffffffffffffffffffffffffffffffffffffffff
  6.1198 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1199 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1200 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1201 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf
  6.1202 -0f0000000000000000000000000000000000000000000000000000000000000000000000
  6.1203 -0000000000000000000d93d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1204 -d6d6d6d6d6d6d6d6d6d6d678000000000000000000000000000000000000000000000000
  6.1205 -0000000000000000000000000000279e9e9e9e9e9e9e9e9ea4f8ffffffffffffffffffff
  6.1206 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1207 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1208 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1209 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1210 -ffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000
  6.1211 -000000000000000000000000000000000000000000001aadd6d6d6d6d6d6d6d6d6d6d6d6
  6.1212 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d635000000000000000000
  6.1213 -00000000000000000000000000000000000000000000000000000000004f9e9e9e9e9e9e
  6.1214 -9e9ee0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1215 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1216 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1217 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1218 -ffffffffffffffffffffffffffffffffffffffffffffffffef4f00000000000000000000
  6.1219 -000000000000000000000000000000000000000000000000000000000000000000000035
  6.1220 -c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1221 -d6d6d6d6bb0d000000000000000000000000000000000000000000000000000000000000
  6.1222 -0000000000000000769e9e9e9e9e9ec2ffffffffffffffffffffffffffffffffffffffff
  6.1223 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1224 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1225 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1226 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1227 -ffcf1f000000000000000000000000000000000000000000000000000000000000000000
  6.1228 -0000000000000000000000005dd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1229 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d69300000000000000000000000000000000
  6.1230 -00000000000000000000000000000000000000000000098a9e9e9e9eaaf8ffffffffffff
  6.1231 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1232 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1233 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1234 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1235 -ffffffffffffffffffffffffffff9f000000000000000000000000000000000000000000
  6.1236 -0000000000000000000000000000000000000000000000000085d6d6d6d6d6d6d6d6d6d6
  6.1237 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d64200
  6.1238 -000000000000000000000000000000000000000000000000000000000000000000000000
  6.1239 -001d9e9e9e9eecffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1240 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1241 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1242 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1243 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffdf7f7f7f7f7f7f7f7f
  6.1244 -7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f614f4f4f4f4f4f4f4f4f4f4f4f4f4f4f566b6b6b
  6.1245 -6b6badd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1246 -d6d6d6d6d6d6d6d6d6d6d6d6c86b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b
  6.1247 -6b6b674f4f4f4f4f4f4f4f4f4f4f4f4f8a9e9ed4ffffffffffffffffffffffffffffffff
  6.1248 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1249 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1250 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1251 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1252 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeca49e9e9e9e
  6.1253 -9e9e9e9e9e9e9e9e9e9e9eb3d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1254 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1255 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cba89e9e9e9e9e9e9e9e9e9e9e9e9e9e9ec2ffffff
  6.1256 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1257 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1258 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1259 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1260 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1261 -ffffffffffffffffffe09e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eafd2d6d6d6d6d6d6d6d6
  6.1262 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1263 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8a19e9e9e9e9e9e
  6.1264 -9e9e9e9e9e9e9e9e9eb0f8ffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1265 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1266 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1267 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1268 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1269 -ffffffffffffffffffffffffffffffffffffffffffffffffda9e9e9e9e9e9e9e9e9e9e9e
  6.1270 -9e9e9e9e9ea8cbd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1271 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1272 -d6d6d6d6d6bd9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4f8ffffffffffffffffffffffff
  6.1273 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1274 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1275 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1276 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1277 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1278 -ffffffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1c4d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1279 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1280 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d2af9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4
  6.1281 -ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1282 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1283 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1284 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1285 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1286 -ffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  6.1287 -b3d2d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1288 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8a59e9e9e9e
  6.1289 -9e9e9e9e9e9e9e9e9e9e9e9ea4ecffffffffffffffffffffffffffffffffffffffffffff
  6.1290 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1291 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1292 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1293 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1294 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc29e9e
  6.1295 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea5c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1296 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1297 -d6d6d6d6d6d6d2b69e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9edaffffffffffffffffff
  6.1298 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1299 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1300 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1301 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1302 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1303 -ffffffffffffffffffffffffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb3d2d6d6d6
  6.1304 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1305 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8a59e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  6.1306 -9e9e9edaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1307 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1308 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1309 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1310 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1311 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e9e9e
  6.1312 -9e9e9e9e9e9e9e9e9e9ea1bad6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1313 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cfac9e9e9e
  6.1314 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4daffffffffffffffffffffffffffffffffffffff
  6.1315 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1316 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1317 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1318 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1319 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1320 -ffffffffffffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea5c1d6d6d6d6d6d6d6d6
  6.1321 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1322 -d6d6d6d6d6d6d6cfb39e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4ecffffffffffff
  6.1323 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1324 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1325 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1326 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1327 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1328 -ffffffffffffffffffffffffffffffffffffffffffc89e9e9e9e9e9e9e9e9e9e9e9e9e9e
  6.1329 -9e9e9e9e9e9ea5c1d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1330 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cfb39e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  6.1331 -9e9e9e9e9ea4ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1332 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1333 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1334 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1335 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1336 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1337 -da9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1bacfd6d6d6d6d6d6d6d6d6d6d6
  6.1338 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8af9e9e9e
  6.1339 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb0f8ffffffffffffffffffffffffffffffff
  6.1340 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1341 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1342 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1343 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1344 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1345 -ffffffffffffffffffffffffffffffeca49e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  6.1346 -9e9e9eafc1d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1347 -d6d6d6d6d6d6cfbaa59e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ec2f8ffffff
  6.1348 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1349 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1350 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1351 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1352 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1353 -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b09e9e9e9e
  6.1354 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1afc1d2d6d6d6d6d6d6d6d6d6d6d6d6d6
  6.1355 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cbbaa89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  6.1356 -9e9e9e9e9e9e9e9ed4ffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1357 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1358 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1359 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1360 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1361 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1362 -ffffffffffffffffffffc89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  6.1363 -9ea8b6c4cfd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8bdafa19e9e9e9e9e
  6.1364 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaaecffffffffffffffffffffffffffff
  6.1365 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1366 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1367 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1368 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1369 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1370 -ffffffffffffffffffffffffffffffffffffffffffffffffffe6aa9e9e9e9e9e9e9e9e9e
  6.1371 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1acb3bac4c8c8d6d6d6d6d6d6d6cfc8c8
  6.1372 -bdbaafa89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ebcf8ff
  6.1373 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1374 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1375 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1376 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1377 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1378 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1379 -fffffffff8c89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  6.1380 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  6.1381 -9e9e9e9e9e9e9e9e9ea4e0ffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1382 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1383 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1384 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1385 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1386 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1387 -ffffffffffffffffffffffffffffffffffffffffe6aa9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  6.1388 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  6.1389 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ec2f8ffffffffffffffffffffffff
  6.1390 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1391 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1392 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1393 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1394 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1395 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1396 -cea49e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  6.1397 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb6e6
  6.1398 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1399 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1400 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1401 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1402 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1403 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1404 -fffffffffffffffffffffffffffffff8c29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  6.1405 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  6.1406 -9e9e9e9e9e9e9e9e9e9eaadaffffffffffffffffffffffffffffffffffffffffffffffff
  6.1407 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1408 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1409 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1410 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1411 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1412 -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2c29e9e9e
  6.1413 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  6.1414 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaadaffffffffffffffffffffffff
  6.1415 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1416 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1417 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1418 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1419 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1420 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1421 -fffffffffffffffffffffff2c29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  6.1422 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaada
  6.1423 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1424 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1425 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1426 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1427 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1428 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1429 -fffffffffffffffffffffffffffffffffffffffffffffffffffffff8ceaa9e9e9e9e9e9e
  6.1430 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  6.1431 -9e9e9e9e9e9e9e9e9e9eb6e0ffffffffffffffffffffffffffffffffffffffffffffffff
  6.1432 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1433 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1434 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1435 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1436 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1437 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1438 -ffffffffffffffffe0bc9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  6.1439 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaac8f2ffffffffffffffffffffffff
  6.1440 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1441 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1442 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1443 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1444 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1445 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1446 -fffffffffffffffffffffffffffffffffffffffffffffffff8dabc9e9e9e9e9e9e9e9e9e
  6.1447 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaac8ecff
  6.1448 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1449 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1450 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1451 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1452 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1453 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1454 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1455 -fffffffffff8e0c2aa9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  6.1456 -9e9e9e9e9e9e9eb6d4ecffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1457 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1458 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1459 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1460 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1461 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1462 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1463 -fffffffffffffffffffffffffffffffffffffffffffffff2e0c8b6a49e9e9e9e9e9e9e9e
  6.1464 -9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaabccee6ffffffffffffffffffffffffffffffff
  6.1465 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1466 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1467 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1468 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1469 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1470 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1471 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1472 -fffffffffffff8e6d4cec2b6b6aa9e9e9e9e9e9e9e9eb6b6b6c8cee0e6ffffffffffffff
  6.1473 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1474 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1475 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1476 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1477 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  6.1478 -ffffffffffffffffffffffffffffffffffffffffffffff
  6.1479 -end
  6.1480 -%%PageTrailer
  6.1481 -%%Trailer
  6.1482 -%%EOF
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/docs/figs/xenlogo.eps	Tue Oct 26 14:12:48 2004 +0000
     8.3 @@ -0,0 +1,1479 @@
     8.4 +%!PS-Adobe-3.0 EPSF-3.0
     8.5 +%%Creator: (ImageMagick)
     8.6 +%%Title: (/homes/kaf24/xenlogo.eps)
     8.7 +%%CreationDate: (Tue Oct 28 13:52:11 2003)
     8.8 +%%BoundingBox: 155 324 445 461
     8.9 +%%DocumentData: Clean7Bit
    8.10 +%%LanguageLevel: 1
    8.11 +%%Pages: 1
    8.12 +%%EndComments
    8.13 +
    8.14 +%%BeginDefaults
    8.15 +%%EndDefaults
    8.16 +
    8.17 +%%BeginProlog
    8.18 +%
    8.19 +% Display a color image.  The image is displayed in color on
    8.20 +% Postscript viewers or printers that support color, otherwise
    8.21 +% it is displayed as grayscale.
    8.22 +%
    8.23 +/DirectClassPacket
    8.24 +{
    8.25 +  %
    8.26 +  % Get a DirectClass packet.
    8.27 +  %
    8.28 +  % Parameters:
    8.29 +  %   red.
    8.30 +  %   green.
    8.31 +  %   blue.
    8.32 +  %   length: number of pixels minus one of this color (optional).
    8.33 +  %
    8.34 +  currentfile color_packet readhexstring pop pop
    8.35 +  compression 0 eq
    8.36 +  {
    8.37 +    /number_pixels 3 def
    8.38 +  }
    8.39 +  {
    8.40 +    currentfile byte readhexstring pop 0 get
    8.41 +    /number_pixels exch 1 add 3 mul def
    8.42 +  } ifelse
    8.43 +  0 3 number_pixels 1 sub
    8.44 +  {
    8.45 +    pixels exch color_packet putinterval
    8.46 +  } for
    8.47 +  pixels 0 number_pixels getinterval
    8.48 +} bind def
    8.49 +
    8.50 +/DirectClassImage
    8.51 +{
    8.52 +  %
    8.53 +  % Display a DirectClass image.
    8.54 +  %
    8.55 +  systemdict /colorimage known
    8.56 +  {
    8.57 +    columns rows 8
    8.58 +    [
    8.59 +      columns 0 0
    8.60 +      rows neg 0 rows
    8.61 +    ]
    8.62 +    { DirectClassPacket } false 3 colorimage
    8.63 +  }
    8.64 +  {
    8.65 +    %
    8.66 +    % No colorimage operator;  convert to grayscale.
    8.67 +    %
    8.68 +    columns rows 8
    8.69 +    [
    8.70 +      columns 0 0
    8.71 +      rows neg 0 rows
    8.72 +    ]
    8.73 +    { GrayDirectClassPacket } image
    8.74 +  } ifelse
    8.75 +} bind def
    8.76 +
    8.77 +/GrayDirectClassPacket
    8.78 +{
    8.79 +  %
    8.80 +  % Get a DirectClass packet;  convert to grayscale.
    8.81 +  %
    8.82 +  % Parameters:
    8.83 +  %   red
    8.84 +  %   green
    8.85 +  %   blue
    8.86 +  %   length: number of pixels minus one of this color (optional).
    8.87 +  %
    8.88 +  currentfile color_packet readhexstring pop pop
    8.89 +  color_packet 0 get 0.299 mul
    8.90 +  color_packet 1 get 0.587 mul add
    8.91 +  color_packet 2 get 0.114 mul add
    8.92 +  cvi
    8.93 +  /gray_packet exch def
    8.94 +  compression 0 eq
    8.95 +  {
    8.96 +    /number_pixels 1 def
    8.97 +  }
    8.98 +  {
    8.99 +    currentfile byte readhexstring pop 0 get
   8.100 +    /number_pixels exch 1 add def
   8.101 +  } ifelse
   8.102 +  0 1 number_pixels 1 sub
   8.103 +  {
   8.104 +    pixels exch gray_packet put
   8.105 +  } for
   8.106 +  pixels 0 number_pixels getinterval
   8.107 +} bind def
   8.108 +
   8.109 +/GrayPseudoClassPacket
   8.110 +{
   8.111 +  %
   8.112 +  % Get a PseudoClass packet;  convert to grayscale.
   8.113 +  %
   8.114 +  % Parameters:
   8.115 +  %   index: index into the colormap.
   8.116 +  %   length: number of pixels minus one of this color (optional).
   8.117 +  %
   8.118 +  currentfile byte readhexstring pop 0 get
   8.119 +  /offset exch 3 mul def
   8.120 +  /color_packet colormap offset 3 getinterval def
   8.121 +  color_packet 0 get 0.299 mul
   8.122 +  color_packet 1 get 0.587 mul add
   8.123 +  color_packet 2 get 0.114 mul add
   8.124 +  cvi
   8.125 +  /gray_packet exch def
   8.126 +  compression 0 eq
   8.127 +  {
   8.128 +    /number_pixels 1 def
   8.129 +  }
   8.130 +  {
   8.131 +    currentfile byte readhexstring pop 0 get
   8.132 +    /number_pixels exch 1 add def
   8.133 +  } ifelse
   8.134 +  0 1 number_pixels 1 sub
   8.135 +  {
   8.136 +    pixels exch gray_packet put
   8.137 +  } for
   8.138 +  pixels 0 number_pixels getinterval
   8.139 +} bind def
   8.140 +
   8.141 +/PseudoClassPacket
   8.142 +{
   8.143 +  %
   8.144 +  % Get a PseudoClass packet.
   8.145 +  %
   8.146 +  % Parameters:
   8.147 +  %   index: index into the colormap.
   8.148 +  %   length: number of pixels minus one of this color (optional).
   8.149 +  %
   8.150 +  currentfile byte readhexstring pop 0 get
   8.151 +  /offset exch 3 mul def
   8.152 +  /color_packet colormap offset 3 getinterval def
   8.153 +  compression 0 eq
   8.154 +  {
   8.155 +    /number_pixels 3 def
   8.156 +  }
   8.157 +  {
   8.158 +    currentfile byte readhexstring pop 0 get
   8.159 +    /number_pixels exch 1 add 3 mul def
   8.160 +  } ifelse
   8.161 +  0 3 number_pixels 1 sub
   8.162 +  {
   8.163 +    pixels exch color_packet putinterval
   8.164 +  } for
   8.165 +  pixels 0 number_pixels getinterval
   8.166 +} bind def
   8.167 +
   8.168 +/PseudoClassImage
   8.169 +{
   8.170 +  %
   8.171 +  % Display a PseudoClass image.
   8.172 +  %
   8.173 +  % Parameters:
   8.174 +  %   class: 0-PseudoClass or 1-Grayscale.
   8.175 +  %
   8.176 +  currentfile buffer readline pop
   8.177 +  token pop /class exch def pop
   8.178 +  class 0 gt
   8.179 +  {
   8.180 +    currentfile buffer readline pop
   8.181 +    token pop /depth exch def pop
   8.182 +    /grays columns 8 add depth sub depth mul 8 idiv string def
   8.183 +    columns rows depth
   8.184 +    [
   8.185 +      columns 0 0
   8.186 +      rows neg 0 rows
   8.187 +    ]
   8.188 +    { currentfile grays readhexstring pop } image
   8.189 +  }
   8.190 +  {
   8.191 +    %
   8.192 +    % Parameters:
   8.193 +    %   colors: number of colors in the colormap.
   8.194 +    %   colormap: red, green, blue color packets.
   8.195 +    %
   8.196 +    currentfile buffer readline pop
   8.197 +    token pop /colors exch def pop
   8.198 +    /colors colors 3 mul def
   8.199 +    /colormap colors string def
   8.200 +    currentfile colormap readhexstring pop pop
   8.201 +    systemdict /colorimage known
   8.202 +    {
   8.203 +      columns rows 8
   8.204 +      [
   8.205 +        columns 0 0
   8.206 +        rows neg 0 rows
   8.207 +      ]
   8.208 +      { PseudoClassPacket } false 3 colorimage
   8.209 +    }
   8.210 +    {
   8.211 +      %
   8.212 +      % No colorimage operator;  convert to grayscale.
   8.213 +      %
   8.214 +      columns rows 8
   8.215 +      [
   8.216 +        columns 0 0
   8.217 +        rows neg 0 rows
   8.218 +      ]
   8.219 +      { GrayPseudoClassPacket } image
   8.220 +    } ifelse
   8.221 +  } ifelse
   8.222 +} bind def
   8.223 +
   8.224 +/DisplayImage
   8.225 +{
   8.226 +  %
   8.227 +  % Display a DirectClass or PseudoClass image.
   8.228 +  %
   8.229 +  % Parameters:
   8.230 +  %   x & y translation.
   8.231 +  %   x & y scale.
   8.232 +  %   label pointsize.
   8.233 +  %   image label.
   8.234 +  %   image columns & rows.
   8.235 +  %   class: 0-DirectClass or 1-PseudoClass.
   8.236 +  %   compression: 0-none or 1-RunlengthEncoded.
   8.237 +  %   hex color packets.
   8.238 +  %
   8.239 +  gsave
   8.240 +  /buffer 512 string def
   8.241 +  /byte 1 string def
   8.242 +  /color_packet 3 string def
   8.243 +  /pixels 768 string def
   8.244 +
   8.245 +  currentfile buffer readline pop
   8.246 +  token pop /x exch def
   8.247 +  token pop /y exch def pop
   8.248 +  x y translate
   8.249 +  currentfile buffer readline pop
   8.250 +  token pop /x exch def
   8.251 +  token pop /y exch def pop
   8.252 +  currentfile buffer readline pop
   8.253 +  token pop /pointsize exch def pop
   8.254 +  /Times-Roman findfont pointsize scalefont setfont
   8.255 +  x y scale
   8.256 +  currentfile buffer readline pop
   8.257 +  token pop /columns exch def
   8.258 +  token pop /rows exch def pop
   8.259 +  currentfile buffer readline pop
   8.260 +  token pop /class exch def pop
   8.261 +  currentfile buffer readline pop
   8.262 +  token pop /compression exch def pop
   8.263 +  class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
   8.264 +  grestore
   8.265 +} bind def
   8.266 +%%EndProlog
   8.267 +%%Page:  1 1
   8.268 +%%PageBoundingBox: 155 324 445 461
   8.269 +userdict begin
   8.270 +DisplayImage
   8.271 +155 324
   8.272 +289.992 137.145
   8.273 +12.000000
   8.274 +302 143
   8.275 +1
   8.276 +1
   8.277 +1
   8.278 +8
   8.279 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.280 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e6
   8.281 +d4cec2b6b6aa9e9e9e9e9e9e9e9eb6b6b6c8cee0e6ffffffffffffffffffffffffffffff
   8.282 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.283 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.284 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.285 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.286 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.287 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.288 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.289 +fffffffffffffff2e0c8b6a49e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   8.290 +aabccee6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.291 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.292 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.293 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.294 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.295 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.296 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.297 +fffffffffffffffffffffffffffffffffff8e0c2aa9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   8.298 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb6ceecffffffffffffffffffffffffffff
   8.299 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.300 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.301 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.302 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.303 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.304 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.305 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff8dabc9e9e9e9e9e
   8.306 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   8.307 +aac8ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.308 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.309 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.310 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.311 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.312 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.313 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.314 +ffffffffe0bc9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   8.315 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaac8f2ffffffffffffffffffffffffffffffff
   8.316 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.317 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.318 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.319 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.320 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.321 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.322 +fffffffffffffffffffffffffffffff8ceaa9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   8.323 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb6e0
   8.324 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.325 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.326 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.327 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.328 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.329 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.330 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff2c29e9e9e9e9e9e9e
   8.331 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   8.332 +9e9e9e9e9e9e9e9e9e9e9e9e9e9eaadaffffffffffffffffffffffffffffffffffffffff
   8.333 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.334 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.335 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.336 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.337 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.338 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.339 +fffffff2c29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   8.340 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaadaffffffff
   8.341 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.342 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.343 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.344 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.345 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.346 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.347 +fffffffffffffffffffffffffffffff8c29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   8.348 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   8.349 +9e9e9e9e9e9e9e9e9e9eaadaffffffffffffffffffffffffffffffffffffffffffffffff
   8.350 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.351 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.352 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.353 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.354 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.355 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffcea49e9e9e9e9e9e
   8.356 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   8.357 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb6e6ffffffffffffffff
   8.358 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.359 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.360 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.361 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.362 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.363 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.364 +ffffffffe6aa9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   8.365 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   8.366 +9e9e9e9e9e9ec2f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.367 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.368 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.369 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.370 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.371 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.372 +fffffffffffffffffffffffffffffffff8c29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   8.373 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   8.374 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4e0ffffffffffffffffffffffffff
   8.375 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.376 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.377 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.378 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.379 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.380 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6aa9e9e9e9e9e
   8.381 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1acb6bac4c8c8d6d6d6d6d6d6
   8.382 +d6cfc8c8bdbaafa89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   8.383 +9ebcf8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.384 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.385 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.386 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.387 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.388 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.389 +ffffffffffffc89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea8b6c4
   8.390 +cfd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8bdafa19e9e9e9e9e9e9e9e9e
   8.391 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaaecffffffffffffffffffffffffffffffffffff
   8.392 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.393 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.394 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.395 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.396 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.397 +fffffffffffffffffffffffffffffffffffff8b09e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   8.398 +9e9e9e9e9e9e9ea1afc1d2d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.399 +d6d6d6d6d6cbbaa89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ed4ffffff
   8.400 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.401 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.402 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.403 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.404 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.405 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeca49e9e9e
   8.406 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eafc1d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.407 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cfbaa59e9e9e9e9e9e9e9e9e9e9e
   8.408 +9e9e9e9e9e9e9e9e9e9e9ec2f8ffffffffffffffffffffffffffffffffffffffffffffff
   8.409 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.410 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.411 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.412 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.413 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.414 +ffffffffffffffffda9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1bacfd6d6d6
   8.415 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.416 +d6d6d6c8af9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb0f8ffffffffffffffff
   8.417 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.418 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.419 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.420 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.421 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.422 +ffffffffffffffffffffffffffffffffffffffffffc89e9e9e9e9e9e9e9e9e9e9e9e9e9e
   8.423 +9e9e9e9e9e9ea5c1d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.424 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cfb39e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   8.425 +9e9e9e9e9ea4ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.426 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.427 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.428 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.429 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.430 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc29e
   8.431 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea5c1d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.432 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cf
   8.433 +b39e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4ecffffffffffffffffffffffffffff
   8.434 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.435 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.436 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.437 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.438 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.439 +ffffffffffffffffffffffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1bdd6d6d6d6
   8.440 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.441 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cfaf9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4
   8.442 +daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.443 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.444 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.445 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.446 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.447 +ffffffffffffffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e9e9e9e9e9e
   8.448 +9e9e9e9e9e9e9eb3d2d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.449 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8a59e9e9e
   8.450 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9edaffffffffffffffffffffffffffffffffffffffff
   8.451 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.452 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.453 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.454 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.455 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.456 +ffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea5c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.457 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.458 +d6d6d6d6d6d6d6d6d6d6d2b69e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9edaffffffffff
   8.459 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.460 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.461 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.462 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.463 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.464 +ffffffffffffffffffffffffffffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb3d2d6d6
   8.465 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.466 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8a59e9e9e9e9e9e9e9e
   8.467 +9e9e9e9e9e9e9e9ea4ecffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.468 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.469 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.470 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.471 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.472 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e9e9e
   8.473 +9e9e9e9e9e9e9e9ea1c4d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.474 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.475 +d6d6d6d6d6d2af9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4ecffffffffffffffffffffff
   8.476 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.477 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.478 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.479 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.480 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.481 +ffffffffda9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea8cbd6d6d6d6d6d6d6d6d6d6d6d6d6
   8.482 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.483 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6bd9e9e9e9e9e9e9e9e9e9e9e9e9e9e
   8.484 +9e9ea4f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.485 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.486 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.487 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.488 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.489 +ffffffffffffffffffffffffffffffffffe09e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eafd2
   8.490 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.491 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.492 +c8a19e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb0f8ffffffffffffffffffffffffffffffffff
   8.493 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.494 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.495 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.496 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.497 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeca49e9e9e9e
   8.498 +9e9e9e9e9e9e9e9e9e9e9eb3d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.499 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.500 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cba89e9e9e9e9e9e9e9e9e9e9e9e9e9e9ec2ffffff
   8.501 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.502 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.503 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.504 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.505 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.506 +fffffffffffffff8b09e9e9e9e9e9e9e9e9e9e9e9e9e9e9ec1d6d6d6d6d6d6d6d6d6d6d6
   8.507 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.508 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d2a89e9e9e9e
   8.509 +9e9e9e9e9e9e9e9e9e9e9ed4ffffffffffffffffffffffffffffffffffffffffffffffff
   8.510 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.511 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.512 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.513 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.514 +ffffffffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e
   8.515 +9ec1d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.516 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.517 +d6d6d6d6d6d6d6d6d6d2a89e9e9e9e9e9e9e9e9e9e9e9e9e9e9eecffffffffffffffffff
   8.518 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.519 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.520 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.521 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.522 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffda9e
   8.523 +9e9e8027272727272727272727272b353535353535353535353535353535353535353535
   8.524 +353535353535add6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.525 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c85035353535353535322727272727272727272727
   8.526 +272727272d3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f5fefffffffffffffffffff
   8.527 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.528 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.529 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.530 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.531 +fffffffffffffffffffffff2a49e9e9e9e45000000000000000000000000000000000000
   8.532 +00000000000000000000000000000000000000001ac8d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.533 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad28000000000000
   8.534 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.535 +00003fefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.536 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.537 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.538 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.539 +ffffffffffffffffffffffffffffffffffffffffffffffffffb69e9e9e9e9e9e27000000
   8.540 +000000000000000000000000000000000000000000000000000000000000000000000050
   8.541 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.542 +d6d6d6d6d6930d0000000000000000000000000000000000000000000000000000000000
   8.543 +0000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffff
   8.544 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.545 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.546 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.547 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.548 +ffffd49e9e9e9e9e9e9e9413000000000000000000000000000000000000000000000000
   8.549 +000000000000000000000000000085d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.550 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d66b0000000000000000000000000000000000
   8.551 +0000000000000000000000000000000000000000000000000000000fbfffffffffffffff
   8.552 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.553 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.554 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.555 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.556 +fffffffffffffffffffffffffffffff8a49e9e9e9e9e9e9e9e8009000000000000000000
   8.557 +000000000000000000000000000000000000000000000000000000000dadd6d6d6d6d6d6
   8.558 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c83500000000
   8.559 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.560 +000000002fdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.561 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.562 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.563 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.564 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e
   8.565 +9e9e9e9e6200000000000000000000000000000000000000000000000000000000000000
   8.566 +0000000000000028c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.567 +d6d6d6d6d6d6d6ad1a000000000000000000000000000000000000000000000000000000
   8.568 +00000000000000000000000000000000006fffffffffffffffffffffffffffffffffffff
   8.569 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.570 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.571 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.572 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.573 +ffffffffffffe69e9e9e9e9e9e9e9e9e9e9e9e4500000000000000000000000000000000
   8.574 +0000000000000000000000000000000000000000000050d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.575 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6850d0000000000000000000000000000
   8.576 +00000000000000000000000000000000000000000000000000000000000fafffffffffff
   8.577 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.578 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.579 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.580 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.581 +ffffffffffffffffffffffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e9e9e9e2b00
   8.582 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.583 +0085d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d65d0000
   8.584 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.585 +0000000000002fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.586 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.587 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.588 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.589 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09e9e
   8.590 +9e9e9e9e9e9e9e9e9e9e9ea8c81a00000000000000000000000000000000000000000000
   8.591 +0000000000000000000000000000000dadd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.592 +d6d6d6d6d6d6d6d6d6c83500000000000000000000000000000000000000000000000000
   8.593 +000000000000000000000000000000000000005fefffffffffffffffffffffffffffffff
   8.594 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.595 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.596 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.597 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.598 +ffffffffffffffffffffffaa9e9e9e9e9e9e9e9e9e9e9e9e9ecbd6ad0d00000000000000
   8.599 +00000000000000000000000000000000000000000000000000000000000028d6d6d6d6d6
   8.600 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad1a000000000000000000000000
   8.601 +00000000000000000000000000000000000000000000000000000000000000009fffffff
   8.602 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.603 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.604 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.605 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.606 +ffffffffffffffffffffffffffffffffffffffffffffffffda9e9e9e9e9e9e9e9e9e9e9e
   8.607 +9e9ebad6d6d6850000000000000000000000000000000000000000000000000000000000
   8.608 +0000000000000000005dd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d685
   8.609 +0d0000000000000000000000000000000000000000000000000000000000000000000000
   8.610 +00000000000000001fcfffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.611 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.612 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.613 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.614 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.615 +ffffaa9e9e9e9e9e9e9e9e9e9e9e9ea5d6d6d6d6d65d0000000000000000000000000000
   8.616 +00000000000000000000000000000000000000000000000093d6d6d6d6d6d6d6d6d6d6d6
   8.617 +d6d6d6d6d6d6d6d6d6d6d6d65d0000000000000000000000000000000000000000000000
   8.618 +00000000000000000000000000000000000000000049efffffffffffffffffffffffffff
   8.619 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.620 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.621 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.622 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.623 +ffffffffffffffffffffffffffffffe69e9e9e9e9e9e9e9e9e9e9e9e9ec8d6d6d6d6d6d6
   8.624 +350000000000000000000000000000000000000000000000000000000000000000000000
   8.625 +00000dbbd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c83500000000000000000000
   8.626 +000000000000000000000000000000000000000000000000000000000000000000004faa
   8.627 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.628 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.629 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.630 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.631 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb69e9e9e9e9e9e
   8.632 +9e9e9e9e9e9eacd6d6d6d6d6d6d6c81a0000000000000000000000000000000000000000
   8.633 +000000000000000000000000000000000028d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.634 +d6ad1a000000000000000000000000000000000000000000000000000000000000000000
   8.635 +0000000000000000000009769e9ee0ffffffffffffffffffffffffffffffffffffffffff
   8.636 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.637 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.638 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.639 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.640 +fffffffffffff29e9e9e9e9e9e9e9e9e9e9e9e9ecbd6d6d6d6d6d6d6d6ad0d0000000000
   8.641 +00000000000000000000000000000000000000000000000000000000000000005dd6d6d6
   8.642 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6850d0000000000000000000000000000000000000000
   8.643 +00000000000000000000000000000000000000000000001d949e9e9eb6ffffffffffffff
   8.644 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.645 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.646 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.647 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.648 +ffffffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e9e9e9e9e9e9eb3d6d6
   8.649 +d6d6d6d6d6d6d6d685000000000000000000000000000000000000000000000000000000
   8.650 +000000000000000000000093d6d6d6d6d6d6d6d6d6d6d6d6d6d6d65d0000000000000000
   8.651 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.652 +459e9e9e9e9e9ef2ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.653 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.654 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.655 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.656 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa49e
   8.657 +9e9e9e9e9e9e9e9e9e9e9ecfd6d6d6d6d6d6d6d6d6d6d65d000000000000000000000000
   8.658 +000000000000000000000000000000000000000000000000000dbbd6d6d6d6d6d6d6d6d6
   8.659 +d6d6d6c83500000000000000000000000000000000000000000000000000000000000000
   8.660 +000000000000000000000000096c9e9e9e9e9e9e9ec8ffffffffffffffffffffffffffff
   8.661 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.662 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.663 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.664 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.665 +ffffffffffffffffffffffda9e9e9e9e9e9e9e9e9e9e9e9eacd6d6d6d6d6d6d6d6d6d6d6
   8.666 +d6d635000000000000000000000000000000000000000000000000000000000000000000
   8.667 +0000000035d6d6d6d6d6d6d6d6d6d6d6ad1a000000000000000000000000000000000000
   8.668 +000000000000000000000000000000000000000000000000001d8a9e9e9e9e9e9e9e9eaa
   8.669 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.670 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.671 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.672 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.673 +ffffffffffffffffffffffffffffffffffffffffffffffffffbc9e9e9e9e9e9e9e9e9e9e
   8.674 +9e9ec8d6d6d6d6d6d6d6d6d6d6d6d6d6c81a000000000000000000000000000000000000
   8.675 +000000000000000000000000000000000000006bd6d6d6d6d6d6d6d6d6850d0000000000
   8.676 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.677 +00003b949e9e9e9e9e9e9e9e9e9ee0ffffffffffffffffffffffffffffffffffffffffff
   8.678 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.679 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.680 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.681 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.682 +fffff89e9e9e9e9e9e9e9e9e9e9e9ea5d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad0d000000
   8.683 +00000000000000000000000000000000000000000000000000000000000000000000a0d6
   8.684 +d6d6d6d6d6d65d0000000000000000000000000000000000000000000000000000000000
   8.685 +00000000000000000000000000000d7b9e9e9e9e9e9e9e9e9e9e9e9ec2ffffffffffffff
   8.686 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.687 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.688 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.689 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.690 +ffffffffffffffffffffffffffffffffda9e9e9e9e9e9e9e9e9e9e9e9ebdd6d6d6d6d6d6
   8.691 +d6d6d6d6d6d6d6d6d6d68500000000000000000000000000000000000000000000000000
   8.692 +0000000000000000000000000dc8d6d6d6d6c83500000000000000000000000000000000
   8.693 +0000000000000000000000000000000000000000000000000000001aadd6a59e9e9e9e9e
   8.694 +9e9e9e9e9e9ea4ffffffffffffffdfbf8f7f5f3f3f1f0000000000000000000000000000
   8.695 +001f3f3f5f7f8fbfcfffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.696 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.697 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.698 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc9e9e9e9e9e
   8.699 +9e9e9e9e9e9e9ed2d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d65000000000000000000000
   8.700 +00000000000000000000000000000000000000000000000000000035d6d6d6ad0d000000
   8.701 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.702 +0000000042c8d6d6bd9e9e9e9e9e9e9e9e9e9e9e9ee6ffcf9f5f3f000000000000000000
   8.703 +0000000000000000000000000000000000000000000000002f5f8fcfffffffffffffffff
   8.704 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.705 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf8f7f
   8.706 +3f3f0f000000000000000000003f3f7f9fdfffffffffffffffffffffffffffffffffffff
   8.707 +ffffffffffffffffa49e9e9e9e9e9e9e9e9e9e9eafd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.708 +d6d6d6d62800000000000000000000000000000000000000000000000000000000000000
   8.709 +0000000000006bd685000000000000000000000000000000000000000000000000000000
   8.710 +000000000000000000000000000000000078d6d6d6d6cf9e9e9e9e9e9e9e9e9e9e9e6c47
   8.711 +1f0000000000000000000000000000000000000000000000000000000000000000000000
   8.712 +0000000000000f4f9fdfffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.713 +ffbf3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3fefffffffffff
   8.714 +ffffffffffffffaf6f2f000000000000000000000000000000000000000000001f6fcfff
   8.715 +ffffffffffffffffffffffffffffffffffffffffffe69e9e9e9e9e9e9e9e9e9e9e9ec1d6
   8.716 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c80d00000000000000000000000000000000
   8.717 +000000000000000000000000000000000000000000350000000000000000000000000000
   8.718 +00000000000000000000000000000000000000000000000000000000000da0d6d6d6d6d6
   8.719 +d6a89e9e9e9e9e9e9e763b09000000000000000000000000000000000000000000000000
   8.720 +0000000000000000000000000000000000000000000000004f9fffffffffffffffffffff
   8.721 +ffffffffffffffffffffffffffffff6f0000000000000000000000000000000000000000
   8.722 +000000000000001fffffffffffffffffffff9f4f00000000000000000000000000000000
   8.723 +000000000000000000000000003fafffffffffffffffffffffffffffffffffffffffffce
   8.724 +9e9e9e9e9e9e9e9e9e9e9e9ed2d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad0000
   8.725 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.726 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.727 +00000000000035c8d6d6d6d6d6d6d6bd9e9e9e9e94621300000000000000000000000000
   8.728 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.729 +000000000f7fefffffffffffffffffffffffffffffffffffffffffffff3f000000000000
   8.730 +0000000000000000000000000000000000000000004fffffffffffffffdf6f0f00000000
   8.731 +00000000000000000000000000000000000000000000000000000000003fdfffffffffff
   8.732 +ffffffffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e9eafd6d6d6d6d6d6d6d6d6d6
   8.733 +d6d6d6d6d6d6d6d6d6d6d6d6850000000000000000000000000000000000000000000000
   8.734 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.735 +000000000000000000000000000000000000005dd6d6d6d6d6d6d6d6d6cf9e9e944f0900
   8.736 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.737 +00000000000000000000000000000000000000000f8fffffffffffffffffffffffffffff
   8.738 +ffffffffffffff000000000000000000000000000000000000000000000000000000008f
   8.739 +ffffffffffdf5f0000000000000000000000000000000000000000000000000000000000
   8.740 +00000000000000000f9fffffffffffffffffffffffffffffffffff9e9e9e9e9e9e9e9e9e
   8.741 +9e9e9ebdd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6500000000000000000
   8.742 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.743 +000000000000000000000000000000000000000000000000000000000000000d93d6d6d6
   8.744 +d6d6d6d6d6d6d6d69b4f0900000000000000000000000000000000000000000000000000
   8.745 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.746 +2fcfffffffffffffffffffffffffffffffffffffbf000000000000000000000000000000
   8.747 +00000000000000000000000000bfffffffef5f0000000000000000000000000000000000
   8.748 +0000000000000000000000000000000000000000000000009fffffffffffffffffffffff
   8.749 +ffffffffe69e9e9e9e9e9e9e9e9e9e9e9ecbd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.750 +d6d6d6d6d6d6280000000000000000000000000000000000000000000000000000000000
   8.751 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.752 +000000000000000028bbd6d6d6d6d6d6d6d6d6d6d6850d00000000000000000000000000
   8.753 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.754 +0000000000000000000000000000000f9fffffffffffffffffffffffffffffffffff8f00
   8.755 +000000000000000000000000000000000000000000000000000000ffffff8f0f00000000
   8.756 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.757 +0000009fffffffffffffffffffffffffffffd49e9e9e9e9e9e9e9e9e9e9ea1d6d6d6d6d6
   8.758 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c80d0000000000000000000000000000
   8.759 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.760 +00000000000000000000000000000000000000000050c8d6d6d6d6d6d6d6d6d6d6ad3500
   8.761 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.762 +000000000000000000000000000000000000000000000000000000000000006fffffffff
   8.763 +ffffffffffffffffffffffff5f0000000000000000000000000000000000000000000000
   8.764 +000000003fffef3f00000000000000000000000000000000000000000000000000000000
   8.765 +000000000000000000000000000000000000bfffffffffffffffffffffffffffc89e9e9e
   8.766 +9e9e9e9e9e9e9e9eafd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad
   8.767 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.768 +0000000000000000000000000000000000000000000000000000000000000000000d85d6
   8.769 +d6d6d6d6d6d6d6d6d6d66b00000000000000000000000000000000000000000000000000
   8.770 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.771 +000000000000000000005fffffffffffffffffffffffffffffff1f000000000000000000
   8.772 +0000000000000000000000000000000000006fbf0f000000000000000000000000000000
   8.773 +00000000000000000000000000000000000000000000000000000000000000001fffffff
   8.774 +ffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e9ebad6d6d6d6d6d6d6d6d6d6d6d6d6
   8.775 +d6d6d6d6d6d6d6d6d6d6d6d6d6d685000000000000000000000000000000000000000000
   8.776 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.777 +0000000000000000000028add6d6d6d6d6d6d6d6d6d6c835000000000000000000000000
   8.778 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.779 +000000000000000000000000000000000000000000000000005fffffffffffffffffffff
   8.780 +ffffffef000000000000000000000000000000000000000000000000000000003f000000
   8.781 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.782 +00000000000000000000009fffffffffffffffffffffffffa49e9e9e9e9e9e9e9e9e9e9e
   8.783 +c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d650000000000000
   8.784 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.785 +000000000000000000000000000000000000000000000042c8d6d6d6d6d6d6d6d6d6d6ad
   8.786 +0d0000000000000000000000000000000000000000000000000000000000000000000000
   8.787 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.788 +000000007fffffffffffffffffffffffffaf000000000000000000000000000000000000
   8.789 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.790 +000000000000000000000000000000000000000000000000002fffffffffffffffffffff
   8.791 +ffff9e9e9e9e9e9e9e9e9e9e9e9ed2d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.792 +d6d6d6d6d6d6d6d628000000000000000000000000000000000000000000000000000000
   8.793 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.794 +78d6d6d6d6d6d6d6d6d6d6d6850000000000000000000000000000000000000000000000
   8.795 +000000000000000000000000001f3f3f3f3f3f3f00000000000000000000000000000000
   8.796 +00000000000000000000000000000000000000bfffffffffffffffffffffff7f00000000
   8.797 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.798 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.799 +00000000dfffffffffffffffffffffe69e9e9e9e9e9e9e9e9e9e9e9ed6d6d6d6d6d6d6d6
   8.800 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c80d000000000000000000000000
   8.801 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.802 +0000000000000000000000000dadd6d6d6d6d6d6d6d6d6d6d68500000000000000000000
   8.803 +00000000000000000000000000000000000000000000000f5fafefffffffffffffffffcf
   8.804 +8f2f000000000000000000000000000000000000000000000000000000000000001fefff
   8.805 +ffffffffffffffffff3f0000000000000000000000000000000000000000000000000000
   8.806 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.807 +000000000000000000000000000000000000bfffffffffffffffffffffe69e9e9e9e9e9e
   8.808 +9e9e9e9e9eacd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.809 +d6ad00000000000000000000000000000000000000000000000000000000000000000000
   8.810 +0000000000000000000000000000000000000000000000000035c8d6d6d6d6d6d6d6d6d6
   8.811 +d6d68500000000000000000000000000000000000000000000000000000000000000001f
   8.812 +9fffffffffffffffffffffffffffffffbf3f000000000000000000000000000000000000
   8.813 +0000000000000000000000007fffffffffffffffffffff0f000000000000000000000000
   8.814 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.815 +00000000000000000000000000000000000000000000000000000000000000009fffffff
   8.816 +ffffffffffffffce9e9e9e9e9e9e9e9e9e9e9eacd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.817 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d68500000000000000000000000000000000000000
   8.818 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.819 +00006bd6d6d6d6d6d6d6d6d6d6d6d6930000000000000000000000000000000000000000
   8.820 +00000000000000000000000f8fffffffffffffffffffffffffffffffffffffff8f000000
   8.821 +00000000000000000000000000000000000000000000000000000fefffffffffffffffff
   8.822 +cf0000000000000000000000000000000000000000000000000000000000000000000000
   8.823 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.824 +000000000000000000008fffffffffffffffffffffce9e9e9e9e9e9e9e9e9e9e9ebad6d6
   8.825 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d65000000000
   8.826 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.827 +00000000000000000000000000000d93d6d6d6d6d6d6d6d6d6d6d6d6ad0d000000000000
   8.828 +0000000000000000000000000000000000000000000000002fdfffffffffffffffffffff
   8.829 +ffffffffffffffffffffff9f000000000000000000000000000000000000000000000000
   8.830 +00000000008fffffffffffffffff9f000000000000000000000000000000000000000000
   8.831 +00000000000000000000000000000000000000003f3f3f3f3f0f00000000000000000000
   8.832 +000000000000000000000000000000000000000000000000bfffffffffffffffffffffce
   8.833 +9e9e9e9e9e9e9e9e9e9e9ebad6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.834 +d6d6d6d6d6d6d6d6d6d62800000000000000000000000000000000000000000000000000
   8.835 +00000000000000000000000000000000000000000000000000000028bbd6d6d6d6d6d6d6
   8.836 +d6d6d6d6d6c81a0000000000000000000000000000000000000000000000000000000000
   8.837 +005fefffffffffffffffffffffffffffffffffffffffffffffff3f000000000000000000
   8.838 +000000000000000000000000000000000000002fffffffffffffffff5f00000000000000
   8.839 +0000000000000000000000000000000000000000000000000000000000001f6fcfffffff
   8.840 +ffffffffaf2f000000000000000000000000000000000000000000000000000000000000
   8.841 +0000bfffffffffffffffffffffbc9e9e9e9e9e9e9e9e9e9e9ebad6d6d6d6d6d6d6d6d6d6
   8.842 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c80d00000000000000000000
   8.843 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.844 +0000000050d6d6d6d6d6d6d6d6d6d6d6d6d6d64200000000000000000000000000000000
   8.845 +00000000000000000000000000005fffffffffffffffffffffffffffffffffffffffffff
   8.846 +ffffffffaf0000000000000000000000000000000000000000000000000000000000efff
   8.847 +ffffffffffff2f0000000000000000000000000000000000000000000000000000000000
   8.848 +0000000000000f9fffffffffffffffffffffffef2f000000000000000000000000000000
   8.849 +00000000000000000000000000000000cfffffffffffffffffffffb69e9e9e9e9e9e9e9e
   8.850 +9e9e9ec8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.851 +d6d6d6ad0000000000000000000000000000000000000000000000000000000000000000
   8.852 +000000000000000000000000000000000d85d6d6d6d6d6d6d6d6d6d6d6d6d6d693000000
   8.853 +0000000000000000000000000000000000000000000000000000002fefffffffffffffff
   8.854 +ffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000
   8.855 +000000000000000000000000bfffffffffffffff00000000000000000000000000000000
   8.856 +000000000000000000000000000000000000004fefffffffffffffffffffffffffffaf00
   8.857 +000000000000000000000000000000000000000000000000000000000000ffffffffffff
   8.858 +ffffffffffb69e9e9e9e9e9e9e9e9e9e9ec8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.859 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6780000000000000000000000000000000000
   8.860 +000000000000000000000000000000000000000000000000000000000028add6d6d6d6d6
   8.861 +d6d6d6d6d6d6d6d6d6d61a00000000000000000000000000000000000000000000000000
   8.862 +000000000fcfffffffffffffffffffffffffffffffffffffffffffffffffffffff1f0000
   8.863 +00000000000000000000000000000000000000000000000000007fffffffffffffbf0000
   8.864 +00000000000000000000000000000000000000000000000000000000000000008fffffff
   8.865 +ffffffffffffffffffffffffff0000000000000000000000000000000000000000000000
   8.866 +000000000000001fffffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e9ec8d6d6d6d6
   8.867 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad1a000000
   8.868 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.869 +00000000000042c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d66b000000000000000000000000
   8.870 +0000000000000000000000000000000000007fffffffffffffffffffffffffffffffffff
   8.871 +ffffffffffffffffffffff1f000000000000000000000000000000000000000000000000
   8.872 +000000007fffffffffffff7f000000000000000000000000000000000000000000000000
   8.873 +0000000000000000009fffffffffffffffffffffffffffffffffff000000000000000000
   8.874 +0000000000000000000000000000000000000000003fffffffffffffffffffffffb69e9e
   8.875 +9e9e9e9e9e9e9e9e9ec8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.876 +d6d6d6d6d6d6d6d685000000000000000000000000000000000000000000000000000000
   8.877 +0000000000000000000000000000000000000078d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.878 +d60d00000000000000000000000000000000000000000000000000000000001fffffffff
   8.879 +ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000
   8.880 +0000000000000000000000000000000000004fffffffffffff4f00000000000000000000
   8.881 +000000000000000000000000000000000000000000006fffffffffffffffffffffffffff
   8.882 +ffffffffff0000000000000000000000000000000000000000000000000000000000007f
   8.883 +ffffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e9ec8d6d6d6d6d6d6d6d6d6d6d6d6
   8.884 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8500000000000000000000000000000
   8.885 +000000000000000000000000000000000000000000000000000000000000001aadd6d6d6
   8.886 +d6d6d6d6d6d6d6d6d6d6d6d6d6d685000000000000000000000000000000000000000000
   8.887 +0000000000000000009fffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.888 +ffffbf00000000000000000000000000000000000000000000000000000000003fffffff
   8.889 +ffffff0f000000000000000000000000000000000000000000000000000000000000003f
   8.890 +ffffffffffffffffffffffffffffffffffffcf0000000000000000000000000000000000
   8.891 +00000000000000000000000000afffffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e
   8.892 +9ec8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad2800
   8.893 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.894 +00000000000000001ac8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d62800000000000000
   8.895 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.896 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.897 +000000000000000000007fffffffffffdf00000000000000000000000000000000000000
   8.898 +0000000000000000000000000fdfffffffffffffffffffffffffffffffffffffaf000000
   8.899 +000000000000000000000000000000000000000000000000000000cfffffffffffffffff
   8.900 +ffffffb69e9e9e9e9e9e9e9e9e9e9ec8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.901 +d6d6d6d6d6d6d6d6d6d6930d000000000000000000000000000000000000000000000000
   8.902 +0000000000000000000000000000000000000000000000a0d6d6d6d6d6d6d6d6d6d6d6d6
   8.903 +d6d6d6d6d6bb000000000000000000000000000000000000000000000000000000000000
   8.904 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.905 +0000000000000000000000000000000000000000000000007fffffffffffaf0000000000
   8.906 +00000000000000000000000000000000000000000000000000007fffffffffffffffffff
   8.907 +ffffffffffffffffffff7f00000000000000000000000000000000000000000000000000
   8.908 +0000000000ffffffffffffffffffffffffbc9e9e9e9e9e9e9e9e9e9e9ebad6d6d6d6d6d6
   8.909 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d65d000000000000000000000000
   8.910 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.911 +000dc8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d68500000000000000000000000000000000
   8.912 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.913 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.914 +0000afffffffffff6f000000000000000000000000000000000000000000000000000000
   8.915 +0000000fefffffffffffffffffffffffffffffffffffffff3f0000000000000000000000
   8.916 +0000000000000000000000000000000000003fffffffffffffffffffffffffce9e9e9e9e
   8.917 +9e9e9e9e9e9e9ebad6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8
   8.918 +280000000000000000000000000000000000000000000000000000000000000000000000
   8.919 +0000000000000000000000000000000028d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6500000
   8.920 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.921 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.922 +00000000000000000000000000000000cfffffffffff3f00000000000000000000000000
   8.923 +00000000000000000000000000000000007fffffffffffffffffffffffffffffffffffff
   8.924 +ffff0f00000000000000000000000000000000000000000000000000000000007fffffff
   8.925 +ffffffffffffffffffce9e9e9e9e9e9e9e9e9e9e9ebad6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.926 +d6d6d6d6d6d6d6d6d6d6d6d6a00d00000000000000000000000000000000000000000000
   8.927 +000000000000000000000000000000000000000000000000000000000000005dd6d6d6d6
   8.928 +d6d6d6d6d6d6d6d6d6d6d635000000000000000000000000000000000000000000000000
   8.929 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.930 +000000000000000000000000000000000000000000000000000000000000ffffffffffff
   8.931 +00000000000000000000000000000000000000000000000000000000000000dfffffffff
   8.932 +ffffffffffffffffffffffffffffffdf0000000000000000000000000000000000000000
   8.933 +00000000000000000000afffffffffffffffffffffffffce9e9e9e9e9e9e9e9e9e9e9eac
   8.934 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d66b00000000000000000000
   8.935 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.936 +0000000000000000000093d6d6d6d6d6d6d6d6d6d6d6d6d6d60000000000000000000000
   8.937 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.938 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.939 +000000000000003fffffffffffbf00000000000000000000000000000000000000000000
   8.940 +00000000000000004fffffffffffffffffffffffffffffffffffffffffaf000000000000
   8.941 +000000000000000000000000000000000000000000000000dfffffffffffffffffffffff
   8.942 +ffe69e9e9e9e9e9e9e9e9e9e9eacd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.943 +d6c835000000000000000000000000000000000000000000000000000000000000000000
   8.944 +0000000000000000000000000000000000000000000000000dbbd6d6d6d6d6d6d6d6d6d6
   8.945 +d6d6d6000000000000000000000000000000000000000000000000000000000000000000
   8.946 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.947 +0000000000000000000000000000000000000000006fffffffffff8f0000000000000000
   8.948 +000000000000000000000000000000000000000000009fffffffffffffffffffffffffff
   8.949 +ffffffffffffff7f00000000000000000000000000000000000000000000000000000000
   8.950 +000fffffffffffffffffffffffffffe69e9e9e9e9e9e9e9e9e9e9e9ed6d6d6d6d6d6d6d6
   8.951 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad1a0000000000000000000000000000000000000000
   8.952 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.953 +00000028c8d6d6d6d6d6d6d6d6d6d6d6d600000000000000000000000000000000000000
   8.954 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.955 +0000000000000000000000000000000000000000000000000000000000000000000000af
   8.956 +ffffffffff5f000000000000000000000000000000000000000000000000000000000000
   8.957 +efffffffffffffffffffffffffffffffffffffffff3f0000000000000000000000000000
   8.958 +0000000000000000000000000000004fffffffffffffffffffffffffffff9e9e9e9e9e9e
   8.959 +9e9e9e9e9e9ed2d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6780000000000000000
   8.960 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.961 +00000000000000000000000000000000000050d6d6d6d6d6d6d6d6d6d6d6d60000000000
   8.962 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.963 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.964 +00000000000000000000000000dfffffffffff1f00000000000000000000000000000000
   8.965 +000000000000000000000000002fffffffffffffffffffffffffffffffffffffffffff0f
   8.966 +00000000000000000000000000000000000000000000000000000000007fffffffffffff
   8.967 +ffffffffffffffffa49e9e9e9e9e9e9e9e9e9e9ec8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
   8.968 +d6d6d6c85000000000000000000000000000000000000000000000000000000000000000
   8.969 +00000000000000000000000000000000000000000000000000000000000000000085d6d6
   8.970 +d6d6d6d6d6d6d6d6d6000000000000000000000000000000000000000000000000000000
   8.971 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.972 +00000000000000000000000000000000000000000000000000001fffffffffffef000000
   8.973 +0000000000000000000000000000000000000000000000000000006fffffffffffffffff
   8.974 +ffffffffffffffffffffffffdf0000000000000000000000000000000000000000000000
   8.975 +00000000000000bfffffffffffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e9ebad6
   8.976 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad28000000000000000000000000000000000000
   8.977 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.978 +00000000000000000000000dadd6d6d6d6d6d6d6d6d6d600000000000000000000000000
   8.979 +0000000000000000000000000000000027737f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
   8.980 +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
   8.981 +7f7f7f7f9fffffffffffaf00000000000000000000000000000000000000000000000000
   8.982 +00000000009fffffffffffffffffffffffffffffffffffffffff9f000000000000000000
   8.983 +000000000000000000000000000000000000000000efffffffffffffffffffffffffffff
   8.984 +c89e9e9e9e9e9e9e9e9e9e9eafd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6850d0000000000
   8.985 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.986 +000000000000000000000000000000000000000000000000000028c8d6d6d6d6d6d6d6d6
   8.987 +d60d000000000000000000000000000000000000000000000000000000003becffffffff
   8.988 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.989 +ffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000
   8.990 +00000000000000000000000000000000000000cfffffffffffffffffffffffffffffffff
   8.991 +ffffffff6f00000000000000000000000000000000000000000000000000000000002fff
   8.992 +ffffffffffffffffffffffffffffd49e9e9e9e9e9e9e9e9e9e9ea1d6d6d6d6d6d6d6d6d6
   8.993 +d6d6d6d6d6d65d0000000000000000000000000000000000000000000000000000000000
   8.994 +000000000000000000000000000000000000000000000000000000000000000000000000
   8.995 +000000000050d6d6d6d6d6d6d6d6d6350000000000000000000000000000000000000000
   8.996 +00000000000000001dffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.997 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
   8.998 +ffff3f00000000000000000000000000000000000000000000000000000000000fffffff
   8.999 +ffffffffffffffffffffffffffffffffffff3f0000000000000000000000000000000000
  8.1000 +0000000000000000000000005fffffffffffffffffffffffffffffffe69e9e9e9e9e9e9e
  8.1001 +9e9e9e9e9ecbd6d6d6d6d6d6d6d6d6d6d6d6bb2800000000000000000000000000000000
  8.1002 +000000000000000000000000000000000000000000000000000000000000000000000000
  8.1003 +000000000000000000000000000000000000000078d6d6d6d6d6d6d6d66b000000000000
  8.1004 +0000000000000000000000000000000000000000000000dfffffffffffffffffffffffff
  8.1005 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1006 +ffffffffffffffffffffffffffffffff0f00000000000000000000000000000000000000
  8.1007 +000000000000000000003fffffffffffffffffffffffffffffffffffffffffff00000000
  8.1008 +00000000000000000000000000000000000000000000000000008fffffffffffffffffff
  8.1009 +ffffffffffffff9e9e9e9e9e9e9e9e9e9e9e9ebdd6d6d6d6d6d6d6d6d6d6d6a00d000000
  8.1010 +000000000000000000000000000000000000000000000000000000000000000000000000
  8.1011 +0000000000000000000000000000000000000000000000000000000000000000000000ad
  8.1012 +d6d6d6d6d6d6d6a000000000000000000000000000000000000000000000000000000000
  8.1013 +006fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1014 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf000000000000
  8.1015 +0000000000000000000000000000000000000000000000007fffffffffffffffffffffff
  8.1016 +ffffffffffffffffffbf0000000000000000000000000000000000000000000000000000
  8.1017 +00000000cfffffffffffffffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e9eafd6d6
  8.1018 +d6d6d6d6d6d6d6d66b000000000000000000000000000000000000000000000000000000
  8.1019 +000000000000000000000000000000000000000000000000000000000000000000000000
  8.1020 +000000000000000000000000001ac8d6d6d6d6d6d6d60d00000000000000000000000000
  8.1021 +0000000000000000000000000000000fdfffffffffffffffffffffffffffffffffffffff
  8.1022 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1023 +ffffffffffffff9f00000000000000000000000000000000000000000000000000000000
  8.1024 +0000bfffffffffffffffffffffffffffffffffffffffff8f000000000000000000000000
  8.1025 +000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffce
  8.1026 +9e9e9e9e9e9e9e9e9e9e9e9ed2d6d6d6d6d6d6d6c8350000000000000000000000000000
  8.1027 +000000000000000000000000000000000000000000000000000000000000000000000000
  8.1028 +0000000000000000000000000000000000000000000000000000000042d6d6d6d6d6d6d6
  8.1029 +6b00000000000000000000000000000000000000000000000000000000003fffffffffff
  8.1030 +ffffffffffffffffffffffffffffffffffffffcf3f3f3f3f5f7f7f7fafbfbfbfffffffff
  8.1031 +ffffffffffffffffffffffffffffffffffffffffff5f0000000000000000000000000000
  8.1032 +00000000000000000000000000000000efffffffffffffffffffffffffffffffffffffff
  8.1033 +ff5f00000000000000000000000000000000000000000000000000000000003fffffffff
  8.1034 +ffffffffffffffffffffffffffe69e9e9e9e9e9e9e9e9e9e9e9ec1d6d6d6d6d6d6ad0d00
  8.1035 +000000000000000000000000000000000000000000000000000000000000000000000000
  8.1036 +000000000000000000000000000000000000000000000000000000000000000000000000
  8.1037 +000000000000006bd6d6d6d6d6d6bb000000000000000000000000000000000000000000
  8.1038 +0000000000000000005fffffffffffffffffffffffffffffffffffffffffffffaf0f0000
  8.1039 +000000000000000000000000000f3f3f3f5f7f7f7fafbfbfbfffffffffffffffffffff2f
  8.1040 +00000000000000000000000000000000000000000000000000000000001fffffffffffff
  8.1041 +ffffffffffffffffffffffffffffff1f0000000000000000000000000000000000000000
  8.1042 +0000000000000000006fffffffffffffffffffffffffffffffffffffa49e9e9e9e9e9e9e
  8.1043 +9e9e9e9eafd6d6d6d6d67800000000000000000000000000000000000000000000000000
  8.1044 +000000000000000000000000000000000000005d35000000000000000000000000000000
  8.1045 +00000000000000000000000000000000000000000000a0d6d6d6d6d6d65d000000000000
  8.1046 +0000000000000000000000000000000000000000000000004fefffffffffffffffffffff
  8.1047 +ffffffffffffffffdf4f0000000000000000000000000000000000000000000000000000
  8.1048 +00000000003fffffffffffffff0000000000000000000000000000000000000000000000
  8.1049 +000000000000005fffffffffffffffffffffffffffffffffffffffffef00000000000000
  8.1050 +0000000000000000000000000000000000000000000000afffffffffffffffffffffffff
  8.1051 +ffffffffffffbc9e9e9e9e9e9e9e9e9e9e9e9ed2d6d6c842000000000000000000000000
  8.1052 +000000000000000000000000000000000000000000000000000000000000000085d6c80d
  8.1053 +000000000000000000000000000000000000000000000000000000000000000000000000
  8.1054 +0dc8d6d6d6d6d6c80d000000000000000000000000000000000000000000000000000000
  8.1055 +0000000f7fefffffffffffffffffffffffffffffcf5f0000000000000000000000000000
  8.1056 +0000000000000000000000000000000000002fefffffffffffffbf000000000000000000
  8.1057 +0000000000000000000000000000000000000000008fffffffffffffffffffffffffffff
  8.1058 +ffffffffffffbf0000000000000000000000000000000000000000000000000000000000
  8.1059 +00dfffffffffffffffffffffffffffffffffffffda9e9e9e9e9e9e9e9e9e9e9e9ebdd6ad
  8.1060 +280000000000000000000000000000000000000000000000000000000000000000000000
  8.1061 +00000000000000000dadd6d6d69300000000000000000000000000000000000000000000
  8.1062 +00000000000000000000000000000035d6d6d6d6d6d69300000000000000000000000000
  8.1063 +000000000000000000000000000000000000000f4f8fbfffffffffffffffbf9f6f1f0000
  8.1064 +000000000000000000000000000000000000000000000000000000000000000fefffffff
  8.1065 +ffffffff7f000000000000000000000000000000000000000000000000000000000000cf
  8.1066 +ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000
  8.1067 +00000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff89e
  8.1068 +9e9e9e9e9e9e9e9e9e9e9ea5850d00000000000000000000000000000000000000000000
  8.1069 +00000000000000000000000000000000000000000028c8d6d6d6d6d64200000000000000
  8.1070 +0000000000000000000000000000000000000000000000000000000000005dd6d6d6d6d6
  8.1071 +d65d00000000000000000000000000000000000000000000000000000000000000000000
  8.1072 +000000000000000000000000000000000000000000000000000000000000000000000000
  8.1073 +00000000000000000fcfffffffffffffffff4f0000000000000000000000000000000000
  8.1074 +00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff3f00
  8.1075 +000000000000000000000000000000000000000000000000000000004fffffffffffffff
  8.1076 +ffffffffffffffffffffffffffbc9e9e9e9e9e9e9e9e9e9e9e3b00000000000000000000
  8.1077 +0000000000000000000000000000000000000000000000000000000000000000000050d6
  8.1078 +d6d6d6d6d6d6c81a00000000000000000000000000000000000000000000000000000000
  8.1079 +00000000000000000093d6d6d6d6d6d65000000000000000000000000000000000000000
  8.1080 +000000000000000000000000000000000000000000000000000000000000000000000000
  8.1081 +0000000000000000000000000000000000000000002fdfffffffffffffffffff0f000000
  8.1082 +00000000000000000000000000000000000000000000000000003fffffffffffffffffff
  8.1083 +ffffffffffffffffffffffff0f0000000000000000000000000000000000000000000000
  8.1084 +0000000000007fffffffffffffffffffffffffffffffffffffffffda9e9e9e9e9e9e9e9e
  8.1085 +9e8a1d000000000000000000000000000000000000000000000000000000000000000000
  8.1086 +000000000000000000000078d6d6d6d6d6d6d6d6d6a00000000000000000000000000000
  8.1087 +00000000000000000000000000000000000000000000000dbbd6d6d6d6d6c82800000000
  8.1088 +000000000000000000000000000000000000000000000000000000000000000000000000
  8.1089 +000000000000000000000000000000000000000000000000000000000000000000003fef
  8.1090 +ffffffffffffffffffdf0000000000000000000000000000000000000000000000000000
  8.1091 +000000006fffffffffffffffffffffffffffffffffffffffffdf00000000000000000000
  8.1092 +0000000000000000000000000000000000000000bfffffffffffffffffffffffffffffff
  8.1093 +ffffffffffffa49e9e9e9e9e9e9e6c090000000000000000000000000000000000000000
  8.1094 +00000000000000000000000000000000000000000000000da0d6d6d6d6d6d6d6d6d6d6d6
  8.1095 +5d0000000000000000000000000000000000000000000000000000000000000000000000
  8.1096 +000028d6d6d6d6d6d6c85000000000000000000000000000000000000000000000000000
  8.1097 +000000000000000000000000000000000000000000000000000000000000000000000000
  8.1098 +00000000000000000000006fffffffffffffffffffffffaf000000000000000000000000
  8.1099 +000000000000000000000000000000000000afffffffffffffffffffffffffffffffffff
  8.1100 +ffffff9f000000000000000000000000000000000000000000000000000000000000efff
  8.1101 +ffffffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e450000000000000000
  8.1102 +000000000000000000000000000000000000000000000000000000000000000000000000
  8.1103 +28add6d6d6d6d6d6d6d6d6d6d6d6d6280000000000000000000000000000000000000000
  8.1104 +00000000000000000000000000000000005dd6d6d6d6d6d6d65d00000000000000000000
  8.1105 +000000000000000000000000000000000000000000000000000000000000000000000000
  8.1106 +00000000000000000000000000000000000000000000000fbfffffffffffffffffffffff
  8.1107 +ff6f000000000000000000000000000000000000000000000000000000000000dfffffff
  8.1108 +ffffffffffffffffffffffffffffffffff6f000000000000000000000000000000000000
  8.1109 +00000000000000000000002ffffffffffffffffffffffffffffffffffffffffffffff29e
  8.1110 +9e9e9e942700000000000000000000000000000000000000000000000000000000000000
  8.1111 +0000000000000000000000000042c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad000000000000
  8.1112 +000000000000000000000000000000000000000000000000000000000000000085d6d6d6
  8.1113 +d6d6d6d6850d000000000000000000000000000000000000000000000000000000000000
  8.1114 +000000000000000000000000000000000000000000000000000000000000000000000000
  8.1115 +6fefffffffffffffffffffffffffff3f0000000000000000000000000000000000000000
  8.1116 +0000000000000000001fffffffffffffffffffffffffffffffffffffffffff3f00000000
  8.1117 +000000000000000000000000000000000000000000000000005fffffffffffffffffffff
  8.1118 +ffffffffffffffffffffffffffb69e9e7609000000000000000000000000000000000000
  8.1119 +00000000000000000000000000000000000000000000000000006bd6d6d6d6d6d6d6d6d6
  8.1120 +d6d6d6d6d6d6d6d678000000000000000000000000000000000000000000000000000000
  8.1121 +000000000000000000000dadd6d6d6d6d6d6d6bb35000000000000000000000000000000
  8.1122 +000000000000000000000000000000000000000000000000000000000000000000000000
  8.1123 +0000000000000000000000003fcfffffffffffffffffffffffffffffff00000000000000
  8.1124 +00000000000000000000000000000000000000000000004fffffffffffffffffffffffff
  8.1125 +ffffffffffffffffff000000000000000000000000000000000000000000000000000000
  8.1126 +0000008fffffffffffffffffffffffffffffffffffffffffffffffe69e58000000000000
  8.1127 +000000000000000000000000000000000000000000000000000000000000000000000000
  8.1128 +00000d85d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d635000000000000000000000000
  8.1129 +0000000000000000000000000000000000000000000000000028c8d6d6d6d6d6d6d6ac6c
  8.1130 +130000000000000000000000000000000000000000000000000000000000000000000000
  8.1131 +0000000000000000000000000000000000000000000000003fbfffffffffffffffffffff
  8.1132 +ffffffffffffbf0000000000000000000000000000000000000000000000000000000000
  8.1133 +007fffffffffffffffffffffffffffffffffffffffffbf00000000000000000000000000
  8.1134 +0000000000000000000000000000000000bfffffffffffffffffffffffffffffffffffff
  8.1135 +ffffffffffef310000000000000000000000000000000000000000000000000000000000
  8.1136 +0000000000000000000000000000001aadd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1137 +d6bb0d000000000000000000000000000000000000000000000000000000000000000000
  8.1138 +0000000050d6d6d6d6d6d6c49e9e9e6c2700000000000000000000000000000000000000
  8.1139 +00000000000000000000000000000000000000000000000000000000000000000000000f
  8.1140 +6fdfffffffffffffffffffffffffffffffffffff8f000000000000000000000000000000
  8.1141 +000000000000000000000000000000bfffffffffffffffffffffffffffffffffffffffff
  8.1142 +8f000000000000000000000000000000000000000000000000000000000000ffffffffff
  8.1143 +ffffffffffffffffffffffffffffffffffffcf1f00000000000000000000000000000000
  8.1144 +0000000000000000000000000000000000000000000000000000000028c8d6d6d6d6d6d6
  8.1145 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d69300000000000000000000000000000000000000
  8.1146 +0000000000000000000000000000000000000085d6d6d6d6d2a59e9e9e9e9e8a45130000
  8.1147 +000000000000000000000000000000000000000000000000000000000000000000000000
  8.1148 +000000000000000000000f5fafffffffffffffffffffffffffffffffffffffffffff5f00
  8.1149 +0000000000000000000000000000000000000000000000000000000000ffffffffffffff
  8.1150 +ffffffffffffffffffffffffffff5f000000000000000000000000000000000000000000
  8.1151 +00000000000000003fffffffffffffffffffffffffffffffffffffffffffff9f0f000000
  8.1152 +000000000000000000000000000000000000000000000000000000000000000000000000
  8.1153 +000000000050d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d64200000000
  8.1154 +00000000000000000000000000000000000000000000000000000000000000000000add6
  8.1155 +d6d6b69e9e9e9e9e9e9e9e9e805831090000000000000000000000000000000000000000
  8.1156 +00000000000000000000000000000000000000000f4f8fcfffffffffffffffffffffffff
  8.1157 +ffffffffffffffffffffffff1f0000000000000000000000000000000000000000000000
  8.1158 +0000000000002fffffffffffffffffffffffffffffffffffffffffff1f00000000000000
  8.1159 +000000000000000000000000000000000000000000006fffffffffffffffffffffffffff
  8.1160 +ffffffffffffffef5f000000000000000000000000000000000000000000000000000000
  8.1161 +00000000000000000000000000000000000085d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1162 +d6d6d6d6d6d6d6d6d6c81a00000000000000000000000000000000000000000000000000
  8.1163 +0000000000000000000000001ac8d6c89e9e9e9e9e9e9e9e9e9e9e9e9eaacf9f7f3f1f00
  8.1164 +00000000000000000000000000000000000000000000000000000000002f3f7fafcfffff
  8.1165 +ffffffffffffffffffffffffffffffffffffffffffffffffffef00000000000000000000
  8.1166 +00000000000000000000000000000000000000006fffffffffffffffffffffffffffffff
  8.1167 +ffffffffffef000000000000000000000000000000000000000000000000000000000000
  8.1168 +9fffffffffffffffffffffffffffffffffffffffdf2f0000000000000000000000000000
  8.1169 +0000000000000000000000000000000000000000000000000000000000000da0d6d6d6d6
  8.1170 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6a00000000000000000000000
  8.1171 +00000000000000000000000000000000000000000000000000000042d2a59e9e9e9e9e9e
  8.1172 +9e9e9e9e9e9e9edaffffffffffffcfbf9f7f7f6f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f
  8.1173 +7f7f7fafbfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1174 +ffffffdf7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7fbfff
  8.1175 +ffffffffffffffffffffffffffffffffffffffdf7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
  8.1176 +7f7f7f7f7f7f7f7f7f7f7f7f7f7fdfffffffffffffffffffffffffffffffffffffaf0f00
  8.1177 +000000000000000000000000000000000000000000000000000000000000000000000000
  8.1178 +0000000000000028bbd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1179 +d6d6d65d0000000000000000000000000000000000000000000000000000000000000000
  8.1180 +0000000000005f9e9e9e9e9e9e9e9e9e9e9e9e9eb6ffffffffffffffffffffffffffffff
  8.1181 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1182 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1183 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1184 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1185 +ffffffffffffffffffff6f00000000000000000000000000000000000000000000000000
  8.1186 +000000000000000000000000000000000000000050c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1187 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6280000000000000000000000000000000000
  8.1188 +000000000000000000000000000000000000000000809e9e9e9e9e9e9e9e9e9e9e9eecff
  8.1189 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1190 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1191 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1192 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1193 +ffffffffffffffffffffffffffffffffffffffffffffef2f000000000000000000000000
  8.1194 +0000000000000000000000000000000000000000000000000000000000000000006bd6d6
  8.1195 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad000000
  8.1196 +000000000000000000000000000000000000000000000000000000000000000000000009
  8.1197 +949e9e9e9e9e9e9e9e9e9ec8ffffffffffffffffffffffffffffffffffffffffffffffff
  8.1198 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1199 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1200 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1201 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf
  8.1202 +0f0000000000000000000000000000000000000000000000000000000000000000000000
  8.1203 +0000000000000000000d93d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1204 +d6d6d6d6d6d6d6d6d6d6d678000000000000000000000000000000000000000000000000
  8.1205 +0000000000000000000000000000279e9e9e9e9e9e9e9e9ea4f8ffffffffffffffffffff
  8.1206 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1207 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1208 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1209 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1210 +ffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000
  8.1211 +000000000000000000000000000000000000000000001aadd6d6d6d6d6d6d6d6d6d6d6d6
  8.1212 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d635000000000000000000
  8.1213 +00000000000000000000000000000000000000000000000000000000004f9e9e9e9e9e9e
  8.1214 +9e9ee0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1215 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1216 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1217 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1218 +ffffffffffffffffffffffffffffffffffffffffffffffffef4f00000000000000000000
  8.1219 +000000000000000000000000000000000000000000000000000000000000000000000035
  8.1220 +c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1221 +d6d6d6d6bb0d000000000000000000000000000000000000000000000000000000000000
  8.1222 +0000000000000000769e9e9e9e9e9ec2ffffffffffffffffffffffffffffffffffffffff
  8.1223 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1224 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1225 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1226 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1227 +ffcf1f000000000000000000000000000000000000000000000000000000000000000000
  8.1228 +0000000000000000000000005dd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1229 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d69300000000000000000000000000000000
  8.1230 +00000000000000000000000000000000000000000000098a9e9e9e9eaaf8ffffffffffff
  8.1231 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1232 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1233 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1234 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1235 +ffffffffffffffffffffffffffff9f000000000000000000000000000000000000000000
  8.1236 +0000000000000000000000000000000000000000000000000085d6d6d6d6d6d6d6d6d6d6
  8.1237 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d64200
  8.1238 +000000000000000000000000000000000000000000000000000000000000000000000000
  8.1239 +001d9e9e9e9eecffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1240 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1241 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1242 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1243 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffdf7f7f7f7f7f7f7f7f
  8.1244 +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f614f4f4f4f4f4f4f4f4f4f4f4f4f4f4f566b6b6b
  8.1245 +6b6badd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1246 +d6d6d6d6d6d6d6d6d6d6d6d6c86b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b
  8.1247 +6b6b674f4f4f4f4f4f4f4f4f4f4f4f4f8a9e9ed4ffffffffffffffffffffffffffffffff
  8.1248 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1249 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1250 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1251 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1252 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeca49e9e9e9e
  8.1253 +9e9e9e9e9e9e9e9e9e9e9eb3d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1254 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1255 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cba89e9e9e9e9e9e9e9e9e9e9e9e9e9e9ec2ffffff
  8.1256 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1257 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1258 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1259 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1260 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1261 +ffffffffffffffffffe09e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eafd2d6d6d6d6d6d6d6d6
  8.1262 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1263 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8a19e9e9e9e9e9e
  8.1264 +9e9e9e9e9e9e9e9e9eb0f8ffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1265 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1266 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1267 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1268 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1269 +ffffffffffffffffffffffffffffffffffffffffffffffffda9e9e9e9e9e9e9e9e9e9e9e
  8.1270 +9e9e9e9e9ea8cbd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1271 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1272 +d6d6d6d6d6bd9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4f8ffffffffffffffffffffffff
  8.1273 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1274 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1275 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1276 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1277 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1278 +ffffffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1c4d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1279 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1280 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d2af9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4
  8.1281 +ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1282 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1283 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1284 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1285 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1286 +ffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  8.1287 +b3d2d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1288 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8a59e9e9e9e
  8.1289 +9e9e9e9e9e9e9e9e9e9e9e9ea4ecffffffffffffffffffffffffffffffffffffffffffff
  8.1290 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1291 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1292 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1293 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1294 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc29e9e
  8.1295 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea5c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1296 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1297 +d6d6d6d6d6d6d2b69e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9edaffffffffffffffffff
  8.1298 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1299 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1300 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1301 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1302 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1303 +ffffffffffffffffffffffffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb3d2d6d6d6
  8.1304 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1305 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8a59e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  8.1306 +9e9e9edaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1307 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1308 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1309 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1310 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1311 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e9e9e
  8.1312 +9e9e9e9e9e9e9e9e9e9ea1bad6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1313 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cfac9e9e9e
  8.1314 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4daffffffffffffffffffffffffffffffffffffff
  8.1315 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1316 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1317 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1318 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1319 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1320 +ffffffffffffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea5c1d6d6d6d6d6d6d6d6
  8.1321 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1322 +d6d6d6d6d6d6d6cfb39e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4ecffffffffffff
  8.1323 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1324 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1325 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1326 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1327 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1328 +ffffffffffffffffffffffffffffffffffffffffffc89e9e9e9e9e9e9e9e9e9e9e9e9e9e
  8.1329 +9e9e9e9e9e9ea5c1d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1330 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cfb39e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  8.1331 +9e9e9e9e9ea4ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1332 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1333 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1334 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1335 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1336 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1337 +da9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1bacfd6d6d6d6d6d6d6d6d6d6d6
  8.1338 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8af9e9e9e
  8.1339 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb0f8ffffffffffffffffffffffffffffffff
  8.1340 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1341 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1342 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1343 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1344 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1345 +ffffffffffffffffffffffffffffffeca49e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  8.1346 +9e9e9eafc1d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1347 +d6d6d6d6d6d6cfbaa59e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ec2f8ffffff
  8.1348 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1349 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1350 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1351 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1352 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1353 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b09e9e9e9e
  8.1354 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1afc1d2d6d6d6d6d6d6d6d6d6d6d6d6d6
  8.1355 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cbbaa89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  8.1356 +9e9e9e9e9e9e9e9ed4ffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1357 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1358 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1359 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1360 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1361 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1362 +ffffffffffffffffffffc89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  8.1363 +9ea8b6c4cfd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8bdafa19e9e9e9e9e
  8.1364 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaaecffffffffffffffffffffffffffff
  8.1365 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1366 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1367 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1368 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1369 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1370 +ffffffffffffffffffffffffffffffffffffffffffffffffffe6aa9e9e9e9e9e9e9e9e9e
  8.1371 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1acb3bac4c8c8d6d6d6d6d6d6d6cfc8c8
  8.1372 +bdbaafa89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ebcf8ff
  8.1373 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1374 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1375 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1376 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1377 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1378 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1379 +fffffffff8c89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  8.1380 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  8.1381 +9e9e9e9e9e9e9e9e9ea4e0ffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1382 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1383 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1384 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1385 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1386 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1387 +ffffffffffffffffffffffffffffffffffffffffe6aa9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  8.1388 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  8.1389 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ec2f8ffffffffffffffffffffffff
  8.1390 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1391 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1392 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1393 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1394 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1395 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1396 +cea49e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  8.1397 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb6e6
  8.1398 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1399 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1400 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1401 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1402 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1403 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1404 +fffffffffffffffffffffffffffffff8c29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  8.1405 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  8.1406 +9e9e9e9e9e9e9e9e9e9eaadaffffffffffffffffffffffffffffffffffffffffffffffff
  8.1407 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1408 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1409 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1410 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1411 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1412 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2c29e9e9e
  8.1413 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  8.1414 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaadaffffffffffffffffffffffff
  8.1415 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1416 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1417 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1418 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1419 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1420 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1421 +fffffffffffffffffffffff2c29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  8.1422 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaada
  8.1423 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1424 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1425 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1426 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1427 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1428 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1429 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff8ceaa9e9e9e9e9e9e
  8.1430 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  8.1431 +9e9e9e9e9e9e9e9e9e9eb6e0ffffffffffffffffffffffffffffffffffffffffffffffff
  8.1432 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1433 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1434 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1435 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1436 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1437 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1438 +ffffffffffffffffe0bc9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  8.1439 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaac8f2ffffffffffffffffffffffff
  8.1440 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1441 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1442 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1443 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1444 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1445 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1446 +fffffffffffffffffffffffffffffffffffffffffffffffff8dabc9e9e9e9e9e9e9e9e9e
  8.1447 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaac8ecff
  8.1448 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1449 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1450 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1451 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1452 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1453 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1454 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1455 +fffffffffff8e0c2aa9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e
  8.1456 +9e9e9e9e9e9e9eb6d4ecffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1457 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1458 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1459 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1460 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1461 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1462 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1463 +fffffffffffffffffffffffffffffffffffffffffffffff2e0c8b6a49e9e9e9e9e9e9e9e
  8.1464 +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaabccee6ffffffffffffffffffffffffffffffff
  8.1465 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1466 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1467 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1468 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1469 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1470 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1471 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1472 +fffffffffffff8e6d4cec2b6b6aa9e9e9e9e9e9e9e9eb6b6b6c8cee0e6ffffffffffffff
  8.1473 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1474 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1475 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1476 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1477 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  8.1478 +ffffffffffffffffffffffffffffffffffffffffffffff
  8.1479 +end
  8.1480 +%%PageTrailer
  8.1481 +%%Trailer
  8.1482 +%%EOF
     9.1 --- a/docs/interface.tex	Tue Oct 26 13:20:54 2004 +0000
     9.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.3 @@ -1,901 +0,0 @@
     9.4 -\documentclass[11pt,twoside,final,openright]{xenstyle}
     9.5 -\usepackage{a4,graphicx,setspace}
     9.6 -\setstretch{1.15}
     9.7 -\input{style.tex}
     9.8 -
     9.9 -\begin{document}
    9.10 -
    9.11 -% TITLE PAGE
    9.12 -\pagestyle{empty}
    9.13 -\begin{center}
    9.14 -\vspace*{\fill}
    9.15 -\includegraphics{eps/xenlogo.eps}
    9.16 -\vfill
    9.17 -\vfill
    9.18 -\vfill
    9.19 -\begin{tabular}{l}
    9.20 -{\Huge \bf Interface manual} \\[4mm]
    9.21 -{\huge Xen v2.0 for x86} \\[80mm]
    9.22 -
    9.23 -{\Large Xen is Copyright (c) 2004, The Xen Team} \\[3mm]
    9.24 -{\Large University of Cambridge, UK} \\[20mm]
    9.25 -{\large Last updated on 11th March, 2004}
    9.26 -\end{tabular}
    9.27 -\vfill
    9.28 -\end{center}
    9.29 -\cleardoublepage
    9.30 -
    9.31 -% TABLE OF CONTENTS
    9.32 -\pagestyle{plain}
    9.33 -\pagenumbering{roman}
    9.34 -{ \parskip 0pt plus 1pt
    9.35 -  \tableofcontents }
    9.36 -\cleardoublepage
    9.37 -
    9.38 -% PREPARE FOR MAIN TEXT
    9.39 -\pagenumbering{arabic}
    9.40 -\raggedbottom
    9.41 -\widowpenalty=10000
    9.42 -\clubpenalty=10000
    9.43 -\parindent=0pt
    9.44 -\renewcommand{\topfraction}{.8}
    9.45 -\renewcommand{\bottomfraction}{.8}
    9.46 -\renewcommand{\textfraction}{.2}
    9.47 -\renewcommand{\floatpagefraction}{.8}
    9.48 -\setstretch{1.15}
    9.49 -
    9.50 -\chapter{Introduction}
    9.51 -Xen allows the hardware resouces of a machine to be virtualized and
    9.52 -dynamically partitioned such as to allow multiple different 'guest'
    9.53 -operating system images to be run simultaneously.
    9.54 -
    9.55 -Virtualizing the machine in this manner provides flexibility allowing
    9.56 -different users to choose their preferred operating system (Windows,
    9.57 -Linux, NetBSD, or a custom operating system).  Furthermore, Xen provides
    9.58 -secure partitioning between these 'domains', and enables better resource
    9.59 -accounting and QoS isolation than can be achieved with a conventional
    9.60 -operating system.
    9.61 -
    9.62 -The hypervisor runs directly on server hardware and dynamically partitions
    9.63 -it between a number of {\it domains}, each of which hosts an instance
    9.64 -of a {\it guest operating system}.  The hypervisor provides just enough
    9.65 -abstraction of the machine to allow effective isolation and resource 
    9.66 -management between these domains.
    9.67 -
    9.68 -Xen essentially takes a virtual machine approach as pioneered by IBM
    9.69 -VM/370.  However, unlike VM/370 or more recent efforts such as VMWare
    9.70 -and Virtual PC, Xen doesn not attempt to completely virtualize the
    9.71 -underlying hardware.  Instead parts of the hosted guest operating
    9.72 -systems are modified to work with the hypervisor; the operating system
    9.73 -is effectively ported to a new target architecture, typically
    9.74 -requiring changes in just the machine-dependent code.  The user-level
    9.75 -API is unchanged, thus existing binaries and operating system
    9.76 -distributions can work unmodified.
    9.77 -
    9.78 -In addition to exporting virtualized instances of CPU, memory, network and
    9.79 -block devicees, Xen exposes a control interface to set how these resources
    9.80 -are shared between the running domains.  The control interface is privileged
    9.81 -and may only be accessed by one particular virtual machine: {\it domain0}.
    9.82 -This domain is a required part of any Xen-base server and runs the application
    9.83 -software that manages the control-plane aspects of the platform.  Running the
    9.84 -control software in {\it domain0}, distinct from the hypervisor itself, allows
    9.85 -the Xen framework to separate the notions of {\it mechanism} and {\it policy}
    9.86 -within the system.
    9.87 -
    9.88 -
    9.89 -\chapter{CPU state}
    9.90 -
    9.91 -All privileged state must be handled by Xen.  The guest OS has no
    9.92 -direct access to CR3 and is not permitted to update privileged bits in
    9.93 -EFLAGS.
    9.94 -
    9.95 -\chapter{Exceptions}
    9.96 -The IDT is virtualised by submitting a virtual 'trap
    9.97 -table' to Xen.  Most trap handlers are identical to native x86
    9.98 -handlers.  The page-fault handler is a noteable exception.
    9.99 -
   9.100 -\chapter{Interrupts and events}
   9.101 -Interrupts are virtualized by mapping them to events, which are delivered 
   9.102 -asynchronously to the target domain.  A guest OS can map these events onto
   9.103 -its standard interrupt dispatch mechanisms, such as a simple vectoring 
   9.104 -scheme.  Each physical interrupt source controlled by the hypervisor, including
   9.105 -network devices, disks, or the timer subsystem, is responsible for identifying
   9.106 -the target for an incoming interrupt and sending an event to that domain.
   9.107 -
   9.108 -This demultiplexing mechanism also provides a device-specific mechanism for 
   9.109 -event coalescing or hold-off.  For example, a guest OS may request to only 
   9.110 -actually receive an event after {\it n} packets are queued ready for delivery
   9.111 -to it, {\it t} nanoseconds after the first packet arrived (which ever is true
   9.112 -first).  This allows latency and throughput requirements to be addressed on a
   9.113 -domain-specific basis.
   9.114 -
   9.115 -\chapter{Time}
   9.116 -Guest operating systems need to be aware of the passage of real time and their
   9.117 -own ``virtual time'', i.e. the time they have been executing.  Furthermore, a
   9.118 -notion of time is required in the hypervisor itself for scheduling and the
   9.119 -activities that relate to it.  To this end the hypervisor provides for notions
   9.120 -of time:  cycle counter time, system time, wall clock time, domain virtual 
   9.121 -time.
   9.122 -
   9.123 -
   9.124 -\section{Cycle counter time}
   9.125 -This provides the finest-grained, free-running time reference, with the
   9.126 -approximate frequency being publicly accessible.  The cycle counter time is
   9.127 -used to accurately extrapolate the other time references.  On SMP machines
   9.128 -it is currently assumed that the cycle counter time is synchronised between
   9.129 -CPUs.  The current x86-based implementation achieves this within inter-CPU
   9.130 -communication latencies.
   9.131 -
   9.132 -\section{System time}
   9.133 -This is a 64-bit value containing the nanoseconds elapsed since boot
   9.134 -time.  Unlike cycle counter time, system time accurately reflects the
   9.135 -passage of real time, i.e.  it is adjusted several times a second for timer
   9.136 -drift.  This is done by running an NTP client in {\it domain0} on behalf of
   9.137 -the machine, feeding updates to the hypervisor.  Intermediate values can be
   9.138 -extrapolated using the cycle counter.
   9.139 -
   9.140 -\section{Wall clock time}
   9.141 -This is the actual ``time of day'' Unix style struct timeval (i.e. seconds and
   9.142 -microseconds since 1 January 1970, adjusted by leap seconds etc.).  Again, an 
   9.143 -NTP client hosted by {\it domain0} can help maintain this value.  To guest 
   9.144 -operating systems this value will be reported instead of the hardware RTC
   9.145 -clock value and they can use the system time and cycle counter times to start
   9.146 -and remain perfectly in time.
   9.147 -
   9.148 -
   9.149 -\section{Domain virtual time}
   9.150 -This progresses at the same pace as cycle counter time, but only while a
   9.151 -domain is executing.  It stops while a domain is de-scheduled.  Therefore the
   9.152 -share of the CPU that a domain receives is indicated by the rate at which
   9.153 -its domain virtual time increases, relative to the rate at which cycle
   9.154 -counter time does so.
   9.155 -
   9.156 -\section{Time interface}
   9.157 -Xen exports some timestamps to guest operating systems through their shared
   9.158 -info page.  Timestamps are provided for system time and wall-clock time.  Xen
   9.159 -also provides the cycle counter values at the time of the last update
   9.160 -allowing guests to calculate the current values.  The cpu frequency and a
   9.161 -scaling factor are provided for guests to convert cycle counter values to
   9.162 -real time.  Since all time stamps need to be updated and read
   9.163 -\emph{atomically} two version numbers are also stored in the shared info
   9.164 -page.
   9.165 -
   9.166 -Xen will ensure that the time stamps are updated frequently enough to avoid
   9.167 -an overflow of the cycle counter values.  A guest can check if its notion of
   9.168 -time is up-to-date by comparing the version numbers.
   9.169 -
   9.170 -\section{Timer events}
   9.171 -
   9.172 -Xen maintains a periodic timer (currently with a 10ms period) which sends a
   9.173 -timer event to the currently executing domain.  This allows Guest OSes to
   9.174 -keep track of the passing of time when executing.  The scheduler also
   9.175 -arranges for a newly activated domain to receive a timer event when
   9.176 -scheduled so that the Guest OS can adjust to the passage of time while it
   9.177 -has been inactive.
   9.178 -
   9.179 -In addition, Xen exports a hypercall interface to each domain which allows
   9.180 -them to request a timer event sent to them at the specified system
   9.181 -time.  Guest OSes may use this timer to implement timeout values when they
   9.182 -block.
   9.183 -
   9.184 -\chapter{Memory}
   9.185 -
   9.186 -The hypervisor is responsible for providing memory to each of the
   9.187 -domains running over it.  However, the Xen hypervisor's duty is
   9.188 -restricted to managing physical memory and to policying page table
   9.189 -updates.  All other memory management functions are handled
   9.190 -externally.  Start-of-day issues such as building initial page tables
   9.191 -for a domain, loading its kernel image and so on are done by the {\it
   9.192 -domain builder} running in user-space in {\it domain0}.  Paging to
   9.193 -disk and swapping is handled by the guest operating systems
   9.194 -themselves, if they need it.
   9.195 -
   9.196 -On a Xen-based system, the hypervisor itself runs in {\it ring 0}.  It
   9.197 -has full access to the physical memory available in the system and is
   9.198 -responsible for allocating portions of it to the domains.  Guest
   9.199 -operating systems run in and use {\it rings 1}, {\it 2} and {\it 3} as
   9.200 -they see fit, aside from the fact that segmentation is used to prevent
   9.201 -the guest OS from accessing a portion of the linear address space that
   9.202 -is reserved for use by the hypervisor.  This approach allows
   9.203 -transitions between the guest OS and hypervisor without flushing the
   9.204 -TLB.  We expect most guest operating systems will use ring 1 for their
   9.205 -own operation and place applications (if they support such a notion)
   9.206 -in ring 3.
   9.207 -
   9.208 -\section{Physical Memory Allocation}
   9.209 -The hypervisor reserves a small fixed portion of physical memory at
   9.210 -system boot time.  This special memory region is located at the
   9.211 -beginning of physical memory and is mapped at the very top of every
   9.212 -virtual address space.
   9.213 -
   9.214 -Any physical memory that is not used directly by the hypervisor is divided into
   9.215 -pages and is available for allocation to domains.  The hypervisor tracks which
   9.216 -pages are free and which pages have been allocated to each domain.  When a new
   9.217 -domain is initialized, the hypervisor allocates it pages drawn from the free 
   9.218 -list.  The amount of memory required by the domain is passed to the hypervisor
   9.219 -as one of the parameters for new domain initialization by the domain builder.
   9.220 -
   9.221 -Domains can never be allocated further memory beyond that which was
   9.222 -requested for them on initialization.  However, a domain can return
   9.223 -pages to the hypervisor if it discovers that its memory requirements
   9.224 -have diminished.
   9.225 -
   9.226 -% put reasons for why pages might be returned here.
   9.227 -\section{Page Table Updates}
   9.228 -In addition to managing physical memory allocation, the hypervisor is also in
   9.229 -charge of performing page table updates on behalf of the domains.  This is 
   9.230 -neccessary to prevent domains from adding arbitrary mappings to their page
   9.231 -tables or introducing mappings to other's page tables.
   9.232 -
   9.233 -\section{Writabel Page Tables}
   9.234 -A domain can also request write access to its page tables.  In this
   9.235 -mode, Xen notes write attempts to page table pages and makes the page
   9.236 -temporarily writable.  In-use page table pages are also disconnect
   9.237 -from the page directory.  The domain can now update entries in these
   9.238 -page table pages without the assistance of Xen.  As soon as the
   9.239 -writabel page table pages get used as page table pages, Xen makes the
   9.240 -pages read-only again and revalidates the entries in the pages.
   9.241 -
   9.242 -\section{Segment Descriptor Tables}
   9.243 -
   9.244 -On boot a guest is supplied with a default GDT, which is {\em not}
   9.245 -taken from its own memory allocation.  If the guest wishes to use other
   9.246 -than the default `flat' ring-1 and ring-3 segments that this default
   9.247 -table provides, it must register a custom GDT and/or LDT with Xen,
   9.248 -allocated from its own memory.
   9.249 -
   9.250 -int {\bf set\_gdt}(unsigned long *{\em frame\_list}, int {\em entries})
   9.251 -
   9.252 -{\em frame\_list}: An array of up to 16 page frames within which the
   9.253 -GDT resides.  Any frame registered as a GDT frame may only be mapped
   9.254 -read-only within the guest's address space (e.g., no writable
   9.255 -mappings, no use as a page-table page, and so on).
   9.256 -
   9.257 -{\em entries}: The number of descriptor-entry slots in the GDT.  Note
   9.258 -that the table must be large enough to contain Xen's reserved entries;
   9.259 -thus we must have '{\em entries $>$ LAST\_RESERVED\_GDT\_ENTRY}'.
   9.260 -Note also that, after registering the GDT, slots {\em FIRST\_} through
   9.261 -{\em LAST\_RESERVED\_GDT\_ENTRY} are no longer usable by the guest and
   9.262 -may be overwritten by Xen.
   9.263 -
   9.264 -\section{Pseudo-Physical Memory}
   9.265 -The usual problem of external fragmentation means that a domain is
   9.266 -unlikely to receive a contiguous stretch of physical memory.  However,
   9.267 -most guest operating systems do not have built-in support for
   9.268 -operating in a fragmented physical address space e.g. Linux has to
   9.269 -have a one-to-one mapping for its physical memory.  There a notion of
   9.270 -{\it pseudo physical memory} is introdouced.  Xen maintains a {\it
   9.271 -real physical} to {\it pseudo physical} mapping which can be consulted
   9.272 -by every domain.  Additionally, at its start of day, a domain is
   9.273 -supplied a {\it pseudo physical} to {\it real physical} mapping which
   9.274 -it needs to keep updated itself.  From that moment onwards {\it pseudo
   9.275 -physical} addresses are used instead of discontiguous {\it real
   9.276 -physical} addresses.  Thus, the rest of the guest OS code has an
   9.277 -impression of operating in a contiguous address space.  Guest OS page
   9.278 -tables contain real physical addresses.  Mapping {\it pseudo physical}
   9.279 -to {\it real physical} addresses is needed on page table updates and
   9.280 -also on remapping memory regions with the guest OS.
   9.281 -
   9.282 -
   9.283 -
   9.284 -\chapter{Network I/O}
   9.285 -
   9.286 -Virtual network device services are provided by shared memory
   9.287 -communications with a `backend' domain.  From the point of view of
   9.288 -other domains, the backend may be viewed as a virtual ethernet switch
   9.289 -element with each domain having one or more virtual network interfaces
   9.290 -connected to it.
   9.291 -
   9.292 -\section{Backend Packet Handling}
   9.293 -The backend driver is responsible primarily for {\it data-path} operations.
   9.294 -In terms of networking this means packet transmission and reception.
   9.295 -
   9.296 -On the transmission side, the backend needs to perform two key actions:
   9.297 -\begin{itemize}
   9.298 -\item {\tt Validation:} A domain may only be allowed to emit packets
   9.299 -matching a certain specification; for example, ones in which the
   9.300 -source IP address matches one assigned to the virtual interface over
   9.301 -which it is sent.  The backend would be responsible for ensuring any
   9.302 -such requirements are met, either by checking or by stamping outgoing
   9.303 -packets with prescribed values for certain fields.
   9.304 -
   9.305 -Validation functions can be configured using standard firewall rules
   9.306 -(i.e. IP Tables, in the case of Linux).
   9.307 -
   9.308 -\item {\tt Scheduling:} Since a number of domains can share a single
   9.309 -``real'' network interface, the hypervisor must mediate access when
   9.310 -several domains each have packets queued for transmission.  Of course,
   9.311 -this general scheduling function subsumes basic shaping or
   9.312 -rate-limiting schemes.
   9.313 -
   9.314 -\item {\tt Logging and Accounting:} The hypervisor can be configured
   9.315 -with classifier rules that control how packets are accounted or
   9.316 -logged.  For example, {\it domain0} could request that it receives a
   9.317 -log message or copy of the packet whenever another domain attempts to
   9.318 -send a TCP packet containg a SYN.
   9.319 -\end{itemize}
   9.320 -
   9.321 -On the recive side, the backend's role is relatively straightforward:
   9.322 -once a packet is received, it just needs to determine the virtual interface(s)
   9.323 -to which it must be delivered and deliver it via page-flipping. 
   9.324 -
   9.325 -
   9.326 -\section{Data Transfer}
   9.327 -
   9.328 -Each virtual interface uses two ``descriptor rings'', one for transmit,
   9.329 -the other for receive.  Each descriptor identifies a block of contiguous
   9.330 -physical memory allocated to the domain.  There are four cases:
   9.331 -
   9.332 -\begin{itemize}
   9.333 -
   9.334 -\item The transmit ring carries packets to transmit from the domain to the
   9.335 -hypervisor.
   9.336 -
   9.337 -\item The return path of the transmit ring carries ``empty'' descriptors
   9.338 -indicating that the contents have been transmitted and the memory can be
   9.339 -re-used.
   9.340 -
   9.341 -\item The receive ring carries empty descriptors from the domain to the 
   9.342 -hypervisor; these provide storage space for that domain's received packets.
   9.343 -
   9.344 -\item The return path of the receive ring carries packets that have been
   9.345 -received.
   9.346 -\end{itemize}
   9.347 -
   9.348 -Real physical addresses are used throughout, with the domain performing 
   9.349 -translation from pseudo-physical addresses if that is necessary.
   9.350 -
   9.351 -If a domain does not keep its receive ring stocked with empty buffers then 
   9.352 -packets destined to it may be dropped.  This provides some defense against 
   9.353 -receiver-livelock problems because an overload domain will cease to receive
   9.354 -further data.  Similarly, on the transmit path, it provides the application
   9.355 -with feedback on the rate at which packets are able to leave the system.
   9.356 -
   9.357 -Synchronization between the hypervisor and the domain is achieved using 
   9.358 -counters held in shared memory that is accessible to both.  Each ring has
   9.359 -associated producer and consumer indices indicating the area in the ring
   9.360 -that holds descriptors that contain data.  After receiving {\it n} packets
   9.361 -or {\t nanoseconds} after receiving the first packet, the hypervisor sends
   9.362 -an event to the domain. 
   9.363 -
   9.364 -\chapter{Block I/O}
   9.365 -
   9.366 -\section{Virtual Block Devices (VBDs)}
   9.367 -
   9.368 -All guest OS disk access goes through the VBD interface.  The VBD
   9.369 -interface provides the administrator with the ability to selectively
   9.370 -grant domains access to portions of block storage devices visible to
   9.371 -the the block backend device (usually domain 0).
   9.372 -
   9.373 -VBDs can literally be backed by any block device accessible to the
   9.374 -backend domain, including network-based block devices (iSCSI, *NBD,
   9.375 -etc), loopback devices and LVM / MD devices.
   9.376 -
   9.377 -Old (Xen 1.2) virtual disks are not supported under Xen 2.0, since
   9.378 -similar functionality can be achieved using the (more advanced) LVM
   9.379 -system, which is already in widespread use.
   9.380 -
   9.381 -\subsection{Data Transfer}
   9.382 -Domains which have been granted access to a logical block device are permitted
   9.383 -to read and write it by shared memory communications with the backend domain. 
   9.384 -
   9.385 -In overview, the same style of descriptor-ring that is used for
   9.386 -network packets is used here.  Each domain has one ring that carries
   9.387 -operation requests to the hypervisor and carries the results back
   9.388 -again.
   9.389 -
   9.390 -Rather than copying data, the backend simply maps the domain's buffers
   9.391 -in order to enable direct DMA to them.  The act of mapping the buffers
   9.392 -also increases the reference counts of the underlying pages, so that
   9.393 -the unprivileged domain cannot try to return them to the hypervisor,
   9.394 -install them as page tables, or any other unsafe behaviour.
   9.395 -%block API here 
   9.396 -
   9.397 -\chapter{Privileged operations}
   9.398 -{\it Domain0} is responsible for building all other domains on the server
   9.399 -and providing control interfaces for managing scheduling, networking, and
   9.400 -blocks.
   9.401 -
   9.402 -\chapter{CPU Scheduler}
   9.403 -
   9.404 -Xen offers a uniform API for CPU schedulers.  It is possible to choose
   9.405 -from a number of schedulers at boot and it should be easy to add more.
   9.406 -
   9.407 -\paragraph*{Note: SMP host support}
   9.408 -Xen has always supported SMP host systems.  Domains are statically assigned to
   9.409 -CPUs, either at creation time or when manually pinning to a particular CPU.
   9.410 -The current schedulers then run locally on each CPU to decide which of the
   9.411 -assigned domains should be run there.
   9.412 -
   9.413 -\section{Standard Schedulers}
   9.414 -
   9.415 -These BVT, Atropos and Round Robin schedulers are part of the normal
   9.416 -Xen distribution.  BVT provides proportional fair shares of the CPU to
   9.417 -the running domains.  Atropos can be used to reserve absolute shares
   9.418 -of the CPU for each domain.  Round-robin is provided as an example of
   9.419 -Xen's internal scheduler API.
   9.420 -
   9.421 -More information on the characteristics and use of these schedulers is
   9.422 -available in { \tt Sched-HOWTO.txt }.
   9.423 -
   9.424 -\section{Scheduling API}
   9.425 -
   9.426 -The scheduling API is used by both the schedulers described above and should
   9.427 -also be used by any new schedulers.  It provides a generic interface and also
   9.428 -implements much of the ``boilerplate'' code.
   9.429 -
   9.430 -Schedulers conforming to this API are described by the following
   9.431 -structure:
   9.432 -
   9.433 -\begin{verbatim}
   9.434 -struct scheduler
   9.435 -{
   9.436 -    char *name;             /* full name for this scheduler      */
   9.437 -    char *opt_name;         /* option name for this scheduler    */
   9.438 -    unsigned int sched_id;  /* ID for this scheduler             */
   9.439 -
   9.440 -    int          (*init_scheduler) ();
   9.441 -    int          (*alloc_task)     (struct task_struct *);
   9.442 -    void         (*add_task)       (struct task_struct *);
   9.443 -    void         (*free_task)      (struct task_struct *);
   9.444 -    void         (*rem_task)       (struct task_struct *);
   9.445 -    void         (*wake_up)        (struct task_struct *);
   9.446 -    void         (*do_block)       (struct task_struct *);
   9.447 -    task_slice_t (*do_schedule)    (s_time_t);
   9.448 -    int          (*control)        (struct sched_ctl_cmd *);
   9.449 -    int          (*adjdom)         (struct task_struct *,
   9.450 -                                    struct sched_adjdom_cmd *);
   9.451 -    s32          (*reschedule)     (struct task_struct *);
   9.452 -    void         (*dump_settings)  (void);
   9.453 -    void         (*dump_cpu_state) (int);
   9.454 -    void         (*dump_runq_el)   (struct task_struct *);
   9.455 -};
   9.456 -\end{verbatim}
   9.457 -
   9.458 -The only method that {\em must} be implemented is
   9.459 -{\tt do\_schedule()}.  However, if there is not some implementation for the
   9.460 -{\tt wake\_up()} method then waking tasks will not get put on the runqueue!
   9.461 -
   9.462 -The fields of the above structure are described in more detail below.
   9.463 -
   9.464 -\subsubsection{name}
   9.465 -
   9.466 -The name field should point to a descriptive ASCII string.
   9.467 -
   9.468 -\subsubsection{opt\_name}
   9.469 -
   9.470 -This field is the value of the {\tt sched=} boot-time option that will select
   9.471 -this scheduler.
   9.472 -
   9.473 -\subsubsection{sched\_id}
   9.474 -
   9.475 -This is an integer that uniquely identifies this scheduler.  There should be a
   9.476 -macro corrsponding to this scheduler ID in {\tt <hypervisor-ifs/sched-if.h>}.
   9.477 -
   9.478 -\subsubsection{init\_scheduler}
   9.479 -
   9.480 -\paragraph*{Purpose}
   9.481 -
   9.482 -This is a function for performing any scheduler-specific initialisation.  For
   9.483 -instance, it might allocate memory for per-CPU scheduler data and initialise it
   9.484 -appropriately.
   9.485 -
   9.486 -\paragraph*{Call environment}
   9.487 -
   9.488 -This function is called after the initialisation performed by the generic
   9.489 -layer.  The function is called exactly once, for the scheduler that has been
   9.490 -selected.
   9.491 -
   9.492 -\paragraph*{Return values}
   9.493 -
   9.494 -This should return negative on failure --- this will cause an
   9.495 -immediate panic and the system will fail to boot.
   9.496 -
   9.497 -\subsubsection{alloc\_task}
   9.498 -
   9.499 -\paragraph*{Purpose}
   9.500 -Called when a {\tt task\_struct} is allocated by the generic scheduler
   9.501 -layer.  A particular scheduler implementation may use this method to
   9.502 -allocate per-task data for this task.  It may use the {\tt
   9.503 -sched\_priv} pointer in the {\tt task\_struct} to point to this data.
   9.504 -
   9.505 -\paragraph*{Call environment}
   9.506 -The generic layer guarantees that the {\tt sched\_priv} field will
   9.507 -remain intact from the time this method is called until the task is
   9.508 -deallocated (so long as the scheduler implementation does not change
   9.509 -it explicitly!).
   9.510 -
   9.511 -\paragraph*{Return values}
   9.512 -Negative on failure.
   9.513 -
   9.514 -\subsubsection{add\_task}
   9.515 -
   9.516 -\paragraph*{Purpose}
   9.517 -
   9.518 -Called when a task is initially added by the generic layer.
   9.519 -
   9.520 -\paragraph*{Call environment}
   9.521 -
   9.522 -The fields in the {\tt task\_struct} are now filled out and available for use.
   9.523 -Schedulers should implement appropriate initialisation of any per-task private
   9.524 -information in this method.
   9.525 -
   9.526 -\subsubsection{free\_task}
   9.527 -
   9.528 -\paragraph*{Purpose}
   9.529 -
   9.530 -Schedulers should free the space used by any associated private data
   9.531 -structures.
   9.532 -
   9.533 -\paragraph*{Call environment}
   9.534 -
   9.535 -This is called when a {\tt task\_struct} is about to be deallocated.
   9.536 -The generic layer will have done generic task removal operations and
   9.537 -(if implemented) called the scheduler's {\tt rem\_task} method before
   9.538 -this method is called.
   9.539 -
   9.540 -\subsubsection{rem\_task}
   9.541 -
   9.542 -\paragraph*{Purpose}
   9.543 -
   9.544 -This is called when a task is being removed from scheduling (but is
   9.545 -not yet being freed).
   9.546 -
   9.547 -\subsubsection{wake\_up}
   9.548 -
   9.549 -\paragraph*{Purpose}
   9.550 -
   9.551 -Called when a task is woken up, this method should put the task on the runqueue
   9.552 -(or do the scheduler-specific equivalent action).
   9.553 -
   9.554 -\paragraph*{Call environment}
   9.555 -
   9.556 -The task is already set to state RUNNING.
   9.557 -
   9.558 -\subsubsection{do\_block}
   9.559 -
   9.560 -\paragraph*{Purpose}
   9.561 -
   9.562 -This function is called when a task is blocked.  This function should
   9.563 -not remove the task from the runqueue.
   9.564 -
   9.565 -\paragraph*{Call environment}
   9.566 -
   9.567 -The EVENTS\_MASTER\_ENABLE\_BIT is already set and the task state changed to
   9.568 -TASK\_INTERRUPTIBLE on entry to this method.  A call to the {\tt
   9.569 -  do\_schedule} method will be made after this method returns, in
   9.570 -order to select the next task to run.
   9.571 -
   9.572 -\subsubsection{do\_schedule}
   9.573 -
   9.574 -This method must be implemented.
   9.575 -
   9.576 -\paragraph*{Purpose}
   9.577 -
   9.578 -The method is called each time a new task must be chosen for scheduling on the
   9.579 -current CPU.  The current time as passed as the single argument (the current
   9.580 -task can be found using the {\tt current} macro).
   9.581 -
   9.582 -This method should select the next task to run on this CPU and set it's minimum
   9.583 -time to run as well as returning the data described below.
   9.584 -
   9.585 -This method should also take the appropriate action if the previous
   9.586 -task has blocked, e.g. removing it from the runqueue.
   9.587 -
   9.588 -\paragraph*{Call environment}
   9.589 -
   9.590 -The other fields in the {\tt task\_struct} are updated by the generic layer,
   9.591 -which also performs all Xen-specific tasks and performs the actual task switch
   9.592 -(unless the previous task has been chosen again).
   9.593 -
   9.594 -This method is called with the {\tt schedule\_lock} held for the current CPU
   9.595 -and local interrupts disabled.
   9.596 -
   9.597 -\paragraph*{Return values}
   9.598 -
   9.599 -Must return a {\tt struct task\_slice} describing what task to run and how long
   9.600 -for (at maximum).
   9.601 -
   9.602 -\subsubsection{control}
   9.603 -
   9.604 -\paragraph*{Purpose}
   9.605 -
   9.606 -This method is called for global scheduler control operations.  It takes a
   9.607 -pointer to a {\tt struct sched\_ctl\_cmd}, which it should either
   9.608 -source data from or populate with data, depending on the value of the
   9.609 -{\tt direction} field.
   9.610 -
   9.611 -\paragraph*{Call environment}
   9.612 -
   9.613 -The generic layer guarantees that when this method is called, the
   9.614 -caller selected the correct scheduler ID, hence the scheduler's
   9.615 -implementation does not need to sanity-check these parts of the call.
   9.616 -
   9.617 -\paragraph*{Return values}
   9.618 -
   9.619 -This function should return the value to be passed back to user space, hence it
   9.620 -should either be 0 or an appropriate errno value.
   9.621 -
   9.622 -\subsubsection{sched\_adjdom}
   9.623 -
   9.624 -\paragraph*{Purpose}
   9.625 -
   9.626 -This method is called to adjust the scheduling parameters of a particular
   9.627 -domain, or to query their current values.  The function should check
   9.628 -the {\tt direction} field of the {\tt sched\_adjdom\_cmd} it receives in
   9.629 -order to determine which of these operations is being performed.
   9.630 -
   9.631 -\paragraph*{Call environment}
   9.632 -
   9.633 -The generic layer guarantees that the caller has specified the correct
   9.634 -control interface version and scheduler ID and that the supplied {\tt
   9.635 -task\_struct} will not be deallocated during the call (hence it is not
   9.636 -necessary to {\tt get\_task\_struct}).
   9.637 -
   9.638 -\paragraph*{Return values}
   9.639 -
   9.640 -This function should return the value to be passed back to user space, hence it
   9.641 -should either be 0 or an appropriate errno value.
   9.642 -
   9.643 -\subsubsection{reschedule}
   9.644 -
   9.645 -\paragraph*{Purpose}
   9.646 -
   9.647 -This method is called to determine if a reschedule is required as a result of a
   9.648 -particular task.
   9.649 -
   9.650 -\paragraph*{Call environment}
   9.651 -The generic layer will cause a reschedule if the current domain is the idle
   9.652 -task or it has exceeded its minimum time slice before a reschedule.  The
   9.653 -generic layer guarantees that the task passed is not currently running but is
   9.654 -on the runqueue.
   9.655 -
   9.656 -\paragraph*{Return values}
   9.657 -
   9.658 -Should return a mask of CPUs to cause a reschedule on.
   9.659 -
   9.660 -\subsubsection{dump\_settings}
   9.661 -
   9.662 -\paragraph*{Purpose}
   9.663 -
   9.664 -If implemented, this should dump any private global settings for this
   9.665 -scheduler to the console.
   9.666 -
   9.667 -\paragraph*{Call environment}
   9.668 -
   9.669 -This function is called with interrupts enabled.
   9.670 -
   9.671 -\subsubsection{dump\_cpu\_state}
   9.672 -
   9.673 -\paragraph*{Purpose}
   9.674 -
   9.675 -This method should dump any private settings for the specified CPU.
   9.676 -
   9.677 -\paragraph*{Call environment}
   9.678 -
   9.679 -This function is called with interrupts disabled and the {\tt schedule\_lock}
   9.680 -for the specified CPU held.
   9.681 -
   9.682 -\subsubsection{dump\_runq\_el}
   9.683 -
   9.684 -\paragraph*{Purpose}
   9.685 -
   9.686 -This method should dump any private settings for the specified task.
   9.687 -
   9.688 -\paragraph*{Call environment}
   9.689 -
   9.690 -This function is called with interrupts disabled and the {\tt schedule\_lock}
   9.691 -for the task's CPU held.
   9.692 -
   9.693 -
   9.694 -\chapter{Debugging}
   9.695 -
   9.696 -Xen provides tools for debugging both Xen and guest OSes.  Currently, the
   9.697 -Pervasive Debugger provides a GDB stub, which provides facilities for symbolic
   9.698 -debugging of Xen itself and of OS kernels running on top of Xen.  The Trace
   9.699 -Buffer provides a lightweight means to log data about Xen's internal state and
   9.700 -behaviour at runtime, for later analysis.
   9.701 -
   9.702 -\section{Pervasive Debugger}
   9.703 -
   9.704 -Information on using the pervasive debugger is available in pdb.txt.
   9.705 -
   9.706 -
   9.707 -\section{Trace Buffer}
   9.708 -
   9.709 -The trace buffer provides a means to observe Xen's operation from domain 0.
   9.710 -Trace events, inserted at key points in Xen's code, record data that can be
   9.711 -read by the {\tt xentrace} tool.  Recording these events has a low overhead
   9.712 -and hence the trace buffer may be useful for debugging timing-sensitive
   9.713 -behaviours.
   9.714 -
   9.715 -\subsection{Internal API}
   9.716 -
   9.717 -To use the trace buffer functionality from within Xen, you must {\tt \#include
   9.718 -<xen/trace.h>}, which contains definitions related to the trace buffer.  Trace
   9.719 -events are inserted into the buffer using the {\tt TRACE\_xD} ({\tt x} = 0, 1,
   9.720 -2, 3, 4 or 5) macros.  These all take an event number, plus {\tt x} additional
   9.721 -(32-bit) data as their arguments.  For trace buffer-enabled builds of Xen these
   9.722 -will insert the event ID and data into the trace buffer, along with the current
   9.723 -value of the CPU cycle-counter.  For builds without the trace buffer enabled,
   9.724 -the macros expand to no-ops and thus can be left in place without incurring
   9.725 -overheads.
   9.726 -
   9.727 -\subsection{Trace-enabled builds}
   9.728 -
   9.729 -By default, the trace buffer is enabled only in debug builds (i.e. {\tt NDEBUG}
   9.730 -is not defined).  It can be enabled separately by defining {\tt TRACE\_BUFFER},
   9.731 -either in {\tt <xen/config.h>} or on the gcc command line.
   9.732 -
   9.733 -The size (in pages) of the per-CPU trace buffers can be specified using the
   9.734 -{\tt tbuf\_size=n } boot parameter to Xen.  If the size is set to 0, the trace
   9.735 -buffers will be disabled.
   9.736 -
   9.737 -\subsection{Dumping trace data}
   9.738 -
   9.739 -When running a trace buffer build of Xen, trace data are written continuously
   9.740 -into the buffer data areas, with newer data overwriting older data.  This data
   9.741 -can be captured using the {\tt xentrace} program in Domain 0.
   9.742 -
   9.743 -The {\tt xentrace} tool uses {\tt /dev/mem} in domain 0 to map the trace
   9.744 -buffers into its address space.  It then periodically polls all the buffers for
   9.745 -new data, dumping out any new records from each buffer in turn.  As a result,
   9.746 -for machines with multiple (logical) CPUs, the trace buffer output will not be
   9.747 -in overall chronological order.
   9.748 -
   9.749 -The output from {\tt xentrace} can be post-processed using {\tt
   9.750 -xentrace\_cpusplit} (used to split trace data out into per-cpu log files) and
   9.751 -{\tt xentrace\_format} (used to pretty-print trace data).  For the predefined
   9.752 -trace points, there is an example format file in {\tt tools/xentrace/formats }.
   9.753 -
   9.754 -For more information, see the manual pages for {\tt xentrace}, {\tt
   9.755 -xentrace\_format} and {\tt xentrace\_cpusplit}.
   9.756 -
   9.757 -
   9.758 -\chapter{Hypervisor calls}
   9.759 -
   9.760 -\section{ set\_trap\_table(trap\_info\_t *table)} 
   9.761 -
   9.762 -Install trap handler table.
   9.763 -
   9.764 -\section{ mmu\_update(mmu\_update\_t *req, int count, int *success\_count)} 
   9.765 -Update the page table for the domain. Updates can be batched.
   9.766 -success\_count will be updated to report the number of successfull
   9.767 -updates.  The update types are:
   9.768 -
   9.769 -{\it MMU\_NORMAL\_PT\_UPDATE}:
   9.770 -
   9.771 -{\it MMU\_MACHPHYS\_UPDATE}:
   9.772 -
   9.773 -{\it MMU\_EXTENDED\_COMMAND}:
   9.774 -
   9.775 -\section{ set\_gdt(unsigned long *frame\_list, int entries)} 
   9.776 -Set the global descriptor table - virtualization for lgdt.
   9.777 -
   9.778 -\section{ stack\_switch(unsigned long ss, unsigned long esp)} 
   9.779 -Request context switch from hypervisor.
   9.780 -
   9.781 -\section{ set\_callbacks(unsigned long event\_selector, unsigned long event\_address,
   9.782 -                        unsigned long failsafe\_selector, unsigned
   9.783 - long failsafe\_address) } Register OS event processing routine.  In
   9.784 - Linux both the event\_selector and failsafe\_selector are the
   9.785 - kernel's CS.  The value event\_address specifies the address for an
   9.786 - interrupt handler dispatch routine and failsafe\_address specifies a
   9.787 - handler for application faults.
   9.788 -
   9.789 -\section{ fpu\_taskswitch(void)} 
   9.790 -Notify hypervisor that fpu registers needed to be save on context switch.
   9.791 -
   9.792 -\section{ sched\_op(unsigned long op)} 
   9.793 -Request scheduling operation from hypervisor. The options are: {\it
   9.794 -yield}, {\it block}, and {\it shutdown}.  {\it yield} keeps the
   9.795 -calling domain run-able but may cause a reschedule if other domains
   9.796 -are run-able.  {\it block} removes the calling domain from the run
   9.797 -queue and the domains sleeps until an event is delivered to it.  {\it
   9.798 -shutdown} is used to end the domain's execution and allows to specify
   9.799 -whether the domain should reboot, halt or suspend..
   9.800 -
   9.801 -\section{ dom0\_op(dom0\_op\_t *op)} 
   9.802 -Administrative domain operations for domain management. The options are:
   9.803 -
   9.804 -{\it DOM0\_CREATEDOMAIN}: create new domain, specifying the name and memory usage
   9.805 -in kilobytes.
   9.806 -
   9.807 -{\it DOM0\_CREATEDOMAIN}: create domain
   9.808 -
   9.809 -{\it DOM0\_PAUSEDOMAIN}: mark domain as unschedulable
   9.810 -
   9.811 -{\it DOM0\_UNPAUSEDOMAIN}: mark domain as schedulable
   9.812 -
   9.813 -{\it DOM0\_DESTROYDOMAIN}: deallocate resources associated with the domain
   9.814 -
   9.815 -{\it DOM0\_GETMEMLIST}: get list of pages used by the domain
   9.816 -
   9.817 -{\it DOM0\_SCHEDCTL}:
   9.818 -
   9.819 -{\it DOM0\_ADJUSTDOM}: adjust scheduling priorities for domain
   9.820 -
   9.821 -{\it DOM0\_BUILDDOMAIN}: do final guest OS setup for domain
   9.822 -
   9.823 -{\it DOM0\_GETDOMAINFO}: get statistics about the domain
   9.824 -
   9.825 -{\it DOM0\_GETPAGEFRAMEINFO}:
   9.826 -
   9.827 -{\it DOM0\_IOPL}: set IO privilege level
   9.828 -
   9.829 -{\it DOM0\_MSR}:
   9.830 -
   9.831 -{\it DOM0\_DEBUG}: interactively call pervasive debugger
   9.832 -
   9.833 -{\it DOM0\_SETTIME}: set system time
   9.834 -
   9.835 -{\it DOM0\_READCONSOLE}: read console content from hypervisor buffer ring
   9.836 -
   9.837 -{\it DOM0\_PINCPUDOMAIN}: pin domain to a particular CPU
   9.838 -
   9.839 -{\it DOM0\_GETTBUFS}: get information about the size and location of
   9.840 -                      the trace buffers (only on trace-buffer enabled builds)
   9.841 -
   9.842 -{\it DOM0\_PHYSINFO}: get information about the host machine
   9.843 -
   9.844 -{\it DOM0\_PCIDEV\_ACCESS}: modify PCI device access permissions
   9.845 -
   9.846 -{\it DOM0\_SCHED\_ID}: get the ID of the current Xen scheduler
   9.847 -
   9.848 -{\it DOM0\_SHADOW\_CONTROL}:
   9.849 -
   9.850 -{\it DOM0\_SETDOMAINNAME}: set the name of a domain
   9.851 -
   9.852 -{\it DOM0\_SETDOMAININITIALMEM}: set initial memory allocation of a domain
   9.853 -
   9.854 -{\it DOM0\_SETDOMAINMAXMEM}: set maximum memory allocation of a domain
   9.855 -
   9.856 -{\it DOM0\_GETPAGEFRAMEINFO2}:
   9.857 -
   9.858 -{\it DOM0\_SETDOMAINVMASSIST}: set domain VM assist options
   9.859 -
   9.860 -
   9.861 -\section{ set\_debugreg(int reg, unsigned long value)}
   9.862 -set debug register reg to value
   9.863 -
   9.864 -\section{ get\_debugreg(int reg)}
   9.865 - get the debug register reg
   9.866 -
   9.867 -\section{ update\_descriptor(unsigned long ma, unsigned long word1, unsigned long word2)} 
   9.868 -
   9.869 -\section{ set\_fast\_trap(int idx)}
   9.870 - install traps to allow guest OS to bypass hypervisor
   9.871 -
   9.872 -\section{ dom\_mem\_op(unsigned int op, unsigned long *extent\_list, unsigned long nr\_extents, unsigned int extent\_order)}
   9.873 -Increase or decrease memory reservations for guest OS
   9.874 -
   9.875 -\section{ multicall(void *call\_list, int nr\_calls)}
   9.876 -Execute a series of hypervisor calls
   9.877 -
   9.878 -\section{ update\_va\_mapping(unsigned long page\_nr, unsigned long val, unsigned long flags)}
   9.879 -
   9.880 -\section{ set\_timer\_op(uint64\_t timeout)} 
   9.881 -Request a timer event to be sent at the specified system time.
   9.882 -
   9.883 -\section{ event\_channel\_op(void *op)} 
   9.884 -Iinter-domain event-channel management.
   9.885 -
   9.886 -\section{ xen\_version(int cmd)}
   9.887 -Request Xen version number.
   9.888 -
   9.889 -\section{ console\_io(int cmd, int count, char *str)}
   9.890 -Interact with the console, operations are:
   9.891 -
   9.892 -{\it CONSOLEIO\_write}: Output count characters from buffer str.
   9.893 -
   9.894 -{\it CONSOLEIO\_read}: Input at most count characters into buffer str.
   9.895 -
   9.896 -\section{ physdev\_op(void *physdev\_op)}
   9.897 -
   9.898 -\section{ grant\_table\_op(unsigned int cmd, void *uop, unsigned int count)}
   9.899 -
   9.900 -\section{ vm\_assist(unsigned int cmd, unsigned int type)}
   9.901 -
   9.902 -\section{ update\_va\_mapping\_otherdomain(unsigned long page\_nr, unsigned long val, unsigned long flags, uint16\_t domid)}
   9.903 -
   9.904 -\end{document}
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/docs/misc/XenDebugger-HOWTO	Tue Oct 26 14:12:48 2004 +0000
    10.3 @@ -0,0 +1,304 @@
    10.4 +Pervasive Debugging 
    10.5 +===================
    10.6 +
    10.7 +Alex Ho (alex.ho at cl.cam.ac.uk)
    10.8 +
    10.9 +Introduction
   10.10 +------------
   10.11 +
   10.12 +The pervasive debugging project is leveraging Xen to 
   10.13 +debug distributed systems.  We have added a gdb stub
   10.14 +to Xen to allow for remote debugging of both Xen and
   10.15 +guest operating systems.  More information about the
   10.16 +pervasive debugger is available at: http://www.cl.cam.ac.uk/netos/pdb
   10.17 +
   10.18 +
   10.19 +Implementation
   10.20 +--------------
   10.21 +
   10.22 +The gdb stub communicates with gdb running over a serial line.
   10.23 +The main entry point is pdb_handle_exception() which is invoked
   10.24 +from:    pdb_key_pressed()    ('D' on the console)
   10.25 +         do_int3_exception()  (interrupt 3: breakpoint exception)
   10.26 +         do_debug()           (interrupt 1: debug exception)
   10.27 +
   10.28 +This accepts characters from the serial port and passes gdb
   10.29 +commands to pdb_process_command() which implements the gdb stub
   10.30 +interface.  This file draws heavily from the kgdb project and
   10.31 +sample gdbstub provided with gdb.
   10.32 +
   10.33 +The stub can examine registers, single step and continue, and
   10.34 +read and write memory (in Xen, a domain, or a Linux process'
   10.35 +address space).  The debugger does not currently trace the 
   10.36 +current process, so all bets are off if context switch occurs
   10.37 +in the domain.
   10.38 +
   10.39 +
   10.40 +Setup
   10.41 +-----
   10.42 +
   10.43 + +-------+ telnet +-----------+ serial +-------+ 
   10.44 + |  GDB  |--------|  nsplitd  |--------|  Xen  |
   10.45 + +-------+        +-----------+        +-------+ 
   10.46 +
   10.47 +To run pdb, Xen must be appropriately configured and 
   10.48 +a suitable serial interface attached to the target machine.
   10.49 +GDB and nsplitd can run on the same machine.
   10.50 +
   10.51 +Xen Configuration
   10.52 +
   10.53 +  Add the "pdb=xxx" option to your Xen boot command line
   10.54 +  where xxx is one of the following values:
   10.55 +     com1    gdb stub should communicate on com1
   10.56 +     com1H   gdb stub should communicate on com1 (with high bit set)
   10.57 +     com2    gdb stub should communicate on com2
   10.58 +     com2H   gdb stub should communicate on com2 (with high bit set)
   10.59 +
   10.60 +  Symbolic debugging infomration is quite helpful too:
   10.61 +  xeno.bk/xen/arch/x86/Rules.mk
   10.62 +    add -g to CFLAGS to compile Xen with symbols
   10.63 +  xeno.bk/linux-2.4.27-xen-sparse/arch/xen/Makefile
   10.64 +    add -g to CFLAGS to compile Linux with symbols
   10.65 +
   10.66 +  You may also want to consider dedicating a register to the
   10.67 +  frame pointer (disable the -fomit-frame-pointer compile flag).
   10.68 +
   10.69 +  When booting Xen and domain 0, look for the console text 
   10.70 +  "pdb: pervasive debugger" just before DOM0 starts up.
   10.71 +
   10.72 +Serial Port Configuration
   10.73 +
   10.74 +  pdb expects to communicate with gdb using the serial port.  Since 
   10.75 +  this port is often shared with the machine's console output, pdb can
   10.76 +  discriminate its communication by setting the high bit of each byte.
   10.77 +
   10.78 +  A new tool has been added to the source tree which splits 
   10.79 +  the serial output from a remote machine into two streams: 
   10.80 +  one stream (without the high bit) is the console and 
   10.81 +  one stream (with the high bit stripped) is the pdb communication.
   10.82 +
   10.83 +  See:  xeno.bk/tools/misc/nsplitd
   10.84 +
   10.85 +  nsplitd configuration
   10.86 +  ---------------------
   10.87 +  hostname$ more /etc/xinetd.d/nsplit
   10.88 +  service nsplit1
   10.89 +  {
   10.90 +        socket_type             = stream
   10.91 +        protocol                = tcp
   10.92 +        wait                    = no
   10.93 +        user                    = wanda
   10.94 +        server                  = /usr/sbin/in.nsplitd
   10.95 +        server_args             = serial.cl.cam.ac.uk:wcons00
   10.96 +        disable                 = no
   10.97 +        only_from               = 128.232.0.0/17 127.0.0.1
   10.98 +  }
   10.99 +
  10.100 +  hostname$ egrep 'wcons00|nsplit1' /etc/services
  10.101 +  wcons00         9600/tcp        # Wanda remote console
  10.102 +  nsplit1         12010/tcp       # Nemesis console splitter ports.
  10.103 +
  10.104 +  Note: nsplitd was originally written for the Nemesis project
  10.105 +  at Cambridge.
  10.106 +
  10.107 +  After nsplitd accepts a connection on <port> (12010 in the above
  10.108 +  example), it starts listening on port <port + 1>.  Characters sent 
  10.109 +  to the <port + 1> will have the high bit set and vice versa for 
  10.110 +  characters received.
  10.111 +
  10.112 +  You can connect to the nsplitd using
  10.113 +  'tools/misc/xencons <host> <port>'
  10.114 +
  10.115 +GDB 6.0
  10.116 +  pdb has been tested with gdb 6.0.  It should also work with
  10.117 +  earlier versions.
  10.118 +
  10.119 +
  10.120 +Usage
  10.121 +-----
  10.122 +
  10.123 +1. Boot Xen and Linux
  10.124 +2. Interrupt Xen by pressing 'D' at the console
  10.125 +   You should see the console message: 
  10.126 +   (XEN) pdb_handle_exception [0x88][0x101000:0xfc5e72ac]
  10.127 +   At this point Xen is frozen and the pdb stub is waiting for gdb commands 
  10.128 +   on the serial line.
  10.129 +3. Attach with gdb
  10.130 +   (gdb) file xeno.bk/xen/xen
  10.131 +   Reading symbols from xeno.bk/xen/xen...done.
  10.132 +   (gdb) target remote <hostname>:<port + 1>              /* contact nsplitd */
  10.133 +   Remote debugging using serial.srg:12131
  10.134 +   continue_cpu_idle_loop () at current.h:10
  10.135 +   warning: shared library handler failed to enable breakpoint
  10.136 +   (gdb) break __enter_scheduler
  10.137 +   Breakpoint 1 at 0xfc510a94: file schedule.c, line 330.
  10.138 +   (gdb) cont
  10.139 +   Continuing.
  10.140 +
  10.141 +   Program received signal SIGTRAP, Trace/breakpoint trap.
  10.142 +   __enter_scheduler () at schedule.c:330
  10.143 +   (gdb) step
  10.144 +   (gdb) step
  10.145 +   (gdb) print next            /* the variable prev has been optimized away! */
  10.146 +   $1 = (struct task_struct *) 0x0
  10.147 +   (gdb) delete
  10.148 +   Delete all breakpoints? (y or n) y
  10.149 +4. You can add additional symbols to gdb
  10.150 +   (gdb) add-sym xeno.bk/linux-2.4.27-xen0/vmlinux
  10.151 +   add symbol table from file "xeno.bk/linux-2.4.27-xen0/vmlinux" at
  10.152 +   (y or n) y
  10.153 +   Reading symbols from xeno.bk/linux-2.4.27-xen0/vmlinux...done.
  10.154 +   (gdb) x/s cpu_vendor_names[0]
  10.155 +   0xc01530d2 <cpdext+62898>:	 "Intel"
  10.156 +   (gdb) break free_uid
  10.157 +   Breakpoint 2 at 0xc0012250
  10.158 +   (gdb) cont
  10.159 +   Continuing.                                  /* run a command in domain 0 */
  10.160 +
  10.161 +   Program received signal SIGTRAP, Trace/breakpoint trap.
  10.162 +   free_uid (up=0xbffff738) at user.c:77
  10.163 +
  10.164 +   (gdb) print *up
  10.165 +   $2 = {__count = {counter = 0}, processes = {counter = 135190120}, files = {
  10.166 +       counter = 0}, next = 0x395, pprev = 0xbffff878, uid = 134701041}
  10.167 +   (gdb) finish
  10.168 +   Run till exit from #0  free_uid (up=0xbffff738) at user.c:77
  10.169 +
  10.170 +   Program received signal SIGTRAP, Trace/breakpoint trap.
  10.171 +   release_task (p=0xc2da0000) at exit.c:51
  10.172 +   (gdb) print *p
  10.173 +   $3 = {state = 4, flags = 4, sigpending = 0, addr_limit = {seg = 3221225472},
  10.174 +     exec_domain = 0xc016a040, need_resched = 0, ptrace = 0, lock_depth = -1, 
  10.175 +     counter = 1, nice = 0, policy = 0, mm = 0x0, processor = 0, 
  10.176 +     cpus_runnable = 1, cpus_allowed = 4294967295, run_list = {next = 0x0, 
  10.177 +       prev = 0x0}, sleep_time = 18995, next_task = 0xc017c000, 
  10.178 +     prev_task = 0xc2f94000, active_mm = 0x0, local_pages = {next = 0xc2da0054,
  10.179 +       prev = 0xc2da0054}, allocation_order = 0, nr_local_pages = 0, 
  10.180 +     ...
  10.181 +5. To resume Xen, enter the "continue" command to gdb.
  10.182 +   This sends the packet $c#63 along the serial channel.
  10.183 +
  10.184 +   (gdb) cont
  10.185 +   Continuing.
  10.186 +
  10.187 +Debugging Multiple Domains & Processes
  10.188 +--------------------------------------
  10.189 +
  10.190 +pdb supports debugging multiple domains & processes.  You can switch
  10.191 +between different domains and processes within domains and examine
  10.192 +variables in each.
  10.193 +
  10.194 +The pdb context identifies the current debug target.  It is stored
  10.195 +in the xen variable pdb_ctx and defaults to xen.
  10.196 +
  10.197 +   target    pdb_ctx.domain    pdb_ctx.process
  10.198 +   ------    --------------    ---------------
  10.199 +    xen           -1                 -1
  10.200 +  guest os      0,1,2,...            -1
  10.201 +   process      0,1,2,...          0,1,2,...
  10.202 +
  10.203 +Unfortunately, gdb doesn't understand debugging multiple process
  10.204 +simultaneously (we're working on it), so at present you are limited 
  10.205 +to just one set of symbols for symbolic debugging.  When debugging
  10.206 +processes, pdb currently supports just Linux 2.4.
  10.207 +
  10.208 +   define setup
  10.209 +      file xeno-clone/xeno.bk/xen/xen
  10.210 +      add-sym xeno-clone/xeno.bk/linux-2.4.27-xen0/vmlinux
  10.211 +      add-sym ~ach61/a.out
  10.212 +   end
  10.213 +
  10.214 +
  10.215 +1. Connect with gdb as before.  A couple of Linux-specific 
  10.216 +   symbols need to be defined.
  10.217 +
  10.218 +   (gdb) target remote <hostname>:<port + 1>              /* contact nsplitd */
  10.219 +   Remote debugging using serial.srg:12131
  10.220 +   continue_cpu_idle_loop () at current.h:10
  10.221 +   warning: shared library handler failed to enable breakpoint
  10.222 +   (gdb) set pdb_pidhash_addr = &pidhash
  10.223 +   (gdb) set pdb_init_task_union_addr = &init_task_union
  10.224 +
  10.225 +2. The pdb context defaults to Xen and we can read Xen's memory.
  10.226 +   An attempt to access domain 0 memory fails.
  10.227 +  
  10.228 +   (gdb) print pdb_ctx
  10.229 +   $1 = {valid = 0, domain = -1, process = -1, ptbr = 1052672}
  10.230 +   (gdb) print hexchars
  10.231 +   $2 = "0123456789abcdef"
  10.232 +   (gdb) print cpu_vendor_names
  10.233 +   Cannot access memory at address 0xc0191f80
  10.234 +
  10.235 +3. Now we change to domain 0.  In addition to changing pdb_ctx.domain,
  10.236 +   we need to change pdb_ctx.valid to signal pdb of the change.
  10.237 +   It is now possible to examine Xen and Linux memory.
  10.238 +
  10.239 +   (gdb) set pdb_ctx.domain=0
  10.240 +   (gdb) set pdb_ctx.valid=1
  10.241 +   (gdb) print hexchars
  10.242 +   $3 = "0123456789abcdef"
  10.243 +   (gdb) print cpu_vendor_names
  10.244 +   $4 = {0xc0158b46 "Intel", 0xc0158c37 "Cyrix", 0xc0158b55 "AMD", 
  10.245 +     0xc0158c3d "UMC", 0xc0158c41 "NexGen", 0xc0158c48 "Centaur", 
  10.246 +     0xc0158c50 "Rise", 0xc0158c55 "Transmeta"}
  10.247 +
  10.248 +4. Now change to a process within domain 0.  Again, we need to
  10.249 +   change pdb_ctx.valid in addition to pdb_ctx.process.
  10.250 +
  10.251 +   (gdb) set pdb_ctx.process=962
  10.252 +   (gdb) set pdb_ctx.valid =1
  10.253 +   (gdb) print pdb_ctx
  10.254 +   $1 = {valid = 0, domain = 0, process = 962, ptbr = 52998144}
  10.255 +   (gdb) print aho_a
  10.256 +   $2 = 20
  10.257 +
  10.258 +5. Now we can read the same variable from another process running
  10.259 +   the same executable in another domain.
  10.260 +
  10.261 +   (gdb) set pdb_ctx.domain=1
  10.262 +   (gdb) set pdb_ctx.process=1210
  10.263 +   (gdb) set pdb_ctx.valid=1
  10.264 +   (gdb) print pdb_ctx
  10.265 +   $3 = {valid = 0, domain = 1, process = 1210, ptbr = 70574080}
  10.266 +   (gdb) print aho_a
  10.267 +   $4 = 27
  10.268 +
  10.269 +
  10.270 +Some Helpful .gdbinit Commands
  10.271 +------------------------------
  10.272 +
  10.273 +define setup
  10.274 +  file    .../install/boot/xen-syms
  10.275 +  add-sym .../install/boot/vmlinux-syms-2.4.27-xen0
  10.276 +  add-sym /homes/aho/a.out
  10.277 +end
  10.278 +document setup
  10.279 +  load symbols for xen, xenolinux (dom 0), and "a.out"
  10.280 +end
  10.281 +
  10.282 +define setup-linux
  10.283 +  set pdb_pidhash_addr = &pidhash
  10.284 +  set pdb_init_task_union_addr = &init_task_union
  10.285 +
  10.286 +  set task_struct_mm_offset           = (void *)&(init_task_union.task.mm) - (void *)&(init_task_union.task)
  10.287 +  set task_struct_next_task_offset    = (void *)&(init_task_union.task.next_task) - (void *)&(init_task_union.task)
  10.288 +  set task_struct_pid_offset          = (void *)&(init_task_union.task.pid) - (void *)&(init_task_union.task)
  10.289 +  set task_struct_pidhash_next_offset = (void *)&(init_task_union.task.pidhash_next) - (void *)&(init_task_union.task)
  10.290 +  set task_struct_comm_offset         = (void *)&(init_task_union.task.comm) - (void *)&(init_task_union.task)
  10.291 +  set task_struct_comm_length         = sizeof (init_task_union.task.comm)
  10.292 +
  10.293 +  set mm_struct_pgd_offset            = sizeof (struct vm_area_struct *) * 2 + sizeof (rb_root_t)
  10.294 +end
  10.295 +document setup-linux
  10.296 +  define various xenolinux specific offsets and sizes in pdb
  10.297 +end
  10.298 +
  10.299 +
  10.300 +
  10.301 +
  10.302 +Changes
  10.303 +-------
  10.304 +
  10.305 +04.07.15 aho .gdbinit
  10.306 +04.02.05 aho creation
  10.307 +04.03.31 aho add description on debugging multiple domains
    11.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.2 +++ b/docs/misc/blkif-drivers-explained.txt	Tue Oct 26 14:12:48 2004 +0000
    11.3 @@ -0,0 +1,477 @@
    11.4 +=== How the Blkif Drivers Work ===
    11.5 +Andrew Warfield
    11.6 +andrew.warfield@cl.cam.ac.uk
    11.7 +
    11.8 +The intent of this is to explain at a fairly detailed level how the
    11.9 +split device drivers work in Xen 1.3 (aka 2.0beta).  The intended
   11.10 +audience for this, I suppose, is anyone who intends to work with the
   11.11 +existing blkif interfaces and wants something to help them get up to
   11.12 +speed with the code in a hurry.  Secondly though, I hope to break out
   11.13 +the general mechanisms that are used in the drivers that are likely to
   11.14 +be necessary to implement other drivers interfaces.
   11.15 +
   11.16 +As a point of warning before starting, it is worth mentioning that I
   11.17 +anticipate much of the specifics described here changing in the near
   11.18 +future.  There has been talk about making the blkif protocol
   11.19 +a bit more efficient than it currently is.  Keir's addition of grant
   11.20 +tables will change the current remapping code that is used when shared
   11.21 +pages are initially set up.
   11.22 +
   11.23 +Also, writing other control interface types will likely need support
   11.24 +from Xend, which at the moment has a steep learning curve... this
   11.25 +should be addressed in the future.
   11.26 +
   11.27 +For more information on the driver model as a whole, read the
   11.28 +"Reconstructing I/O" technical report
   11.29 +(http://www.cl.cam.ac.uk/Research/SRG/netos/papers/2004-xenngio.pdf).
   11.30 +
   11.31 +==== High-level structure of a split-driver interface ====
   11.32 +
   11.33 +Why would you want to write a split driver in the first place?  As Xen
   11.34 +is a virtual machine manager and focuses on isolation as an initial
   11.35 +design principle, it is generally considered unwise to share physical
   11.36 +access to devices across domains.  The reasons for this are obvious:
   11.37 +when device resources are shared, misbehaving code or hardware can
   11.38 +result in the failure of all of the client applications.  Moreover, as
   11.39 +virtual machines in Xen are entire OSs, standard device drives that
   11.40 +they might use cannot have multiple instantiations for a single piece
   11.41 +of hardware.  In light of all this, the general approach in Xen is to
   11.42 +give a single virtual machine hardware access to a device, and where
   11.43 +other VMs want to share the device, export a higher-level interface to
   11.44 +facilitate that sharing.  If you don't want to share, that's fine.
   11.45 +There are currently Xen users actively exploring running two
   11.46 +completely isolated X-Servers on a Xen host, each with it's own video
   11.47 +card, keyboard, and mouse.  In these situations, the guests need only
   11.48 +be given physical access to the necessary devices and left to go on
   11.49 +their own.  However, for devices such as disks and network interfaces,
   11.50 +where sharing is required, the split driver approach is a good
   11.51 +solution.
   11.52 +
   11.53 +The structure is like this:
   11.54 +
   11.55 +   +--------------------------+  +--------------------------+
   11.56 +   | Domain 0 (privileged)    |  | Domain 1 (unprivileged) |
   11.57 +   |                          |  |                          |
   11.58 +   | Xend ( Application )     |  |                          |
   11.59 +   | Blkif Backend Driver     |  | Blkif Frontend Driver    |
   11.60 +   | Physical Device Driver   |  |                          |
   11.61 +   +--------------------------+  +--------------------------+
   11.62 +   +--------------------------------------------------------+
   11.63 +   |                X       E       N                       |
   11.64 +   +--------------------------------------------------------+
   11.65 +
   11.66 +
   11.67 +The Blkif driver is in two parts, which we refer to as frontend (FE)
   11.68 +and a backend (BE).  Together, they serve to proxy device requests
   11.69 +between the guest operating system in an unprivileged domain, and the
   11.70 +physical device driver in the physical domain.  An additional benefit
   11.71 +to this approach is that the FE driver can provide a single interface
   11.72 +for a whole class of physical devices.  The blkif interface mounts
   11.73 +IDE, SCSI, and our own VBD-structured disks, independent of the
   11.74 +physical driver underneath.  Moreover, supporting additional OSs only
   11.75 +requires that a new FE driver be written to connect to the existing
   11.76 +backend.
   11.77 +
   11.78 +==== Inter-Domain Communication Mechanisms ====
   11.79 +
   11.80 +===== Event Channels =====
   11.81 +
   11.82 +Before getting into the specifics of the block interface driver, it is
   11.83 +worth discussing the mechanisms that are used to communicate between
   11.84 +domains.  Two mechanisms are used to allow the construction of
   11.85 +high-performance drivers: event channels and shared-memory rings.
   11.86 +
   11.87 +Event channels are an asynchronous interdomain notification
   11.88 +mechanism.  Xen allows channels to be instantiated between two
   11.89 +domains, and domains can request that a virtual irq be attached to
   11.90 +notifications on a given channel.  The result of this is that the
   11.91 +frontend domain can send a notification on an event channel, resulting
   11.92 +in an interrupt entry into the backend at a later time.
   11.93 +
   11.94 +The event channel between two domains is instantiated in the Xend code
   11.95 +during driver startup (described later).  Xend's channel.py
   11.96 +(tools/python/xen/xend/server/channel.py) defines the function
   11.97 +
   11.98 +
   11.99 +def eventChannel(dom1, dom2):
  11.100 +    return xc.evtchn_bind_interdomain(dom1=dom1, dom2=dom2)
  11.101 +
  11.102 +
  11.103 +which maps to xc_evtchn_bind_interdomain() in tools/libxc/xc_evtchn.c,
  11.104 +which in turn generates a hypercall to Xen to patch the event channel
  11.105 +between the domains.  Only a privileged domain can request the
  11.106 +creation of an event channel.
  11.107 +
  11.108 +Once the event channel is created in Xend, its ends are passed to both the
  11.109 +front and backend domains over the control channel.  The end that is
  11.110 +passed to a domain is just an integer "port" uniquely identifying the
  11.111 +event channel's local connection to that domain.  An example of this
  11.112 +setup code is in linux-2.6.x/drivers/xen/blkfront/blkfront.c in
  11.113 +blkif_status_change, which receives several status change events as
  11.114 +the driver starts up.  It is passed an event channel end in a
  11.115 +BLKIF_INTERFACE_STATUS_CONNECTED message, and patches it in like this:
  11.116 +
  11.117 +
  11.118 +   blkif_evtchn = status->evtchn;
  11.119 +   blkif_irq    = bind_evtchn_to_irq(blkif_evtchn);
  11.120 +   if ( (rc = request_irq(blkif_irq, blkif_int, 
  11.121 +                          SA_SAMPLE_RANDOM, "blkif", NULL)) )
  11.122 +       printk(KERN_ALERT"blkfront request_irq failed (%ld)\n",rc);
  11.123 +
  11.124 +
  11.125 +This code associates a virtual irq with the event channel, and
  11.126 +attaches the function blkif_int() as an interrupt handler for that
  11.127 +irq.  blkif_int() simply handles the notification and returns, it does
  11.128 +not need to interact with the channel at all.
  11.129 +
  11.130 +An example of generating a notification can also be seen in blkfront.c:
  11.131 +
  11.132 +
  11.133 +static inline void flush_requests(void)
  11.134 +{
  11.135 +    DISABLE_SCATTERGATHER();
  11.136 +    wmb(); /* Ensure that the frontend can see the requests. */
  11.137 +    blk_ring->req_prod = req_prod;
  11.138 +    notify_via_evtchn(blkif_evtchn);
  11.139 +}
  11.140 +}}}
  11.141 +
  11.142 +notify_via_evtchn issues a hypercall to set the event waiting flag on
  11.143 +the other domain's end of the channel.
  11.144 +
  11.145 +===== Communication Rings =====
  11.146 +
  11.147 +Event channels are strictly a notification mechanism between domains.
  11.148 +To move large chunks of data back and forth, Xen allows domains to
  11.149 +share pages of memory.  We use communication rings as a means of
  11.150 +managing access to a shared memory page for message passing between
  11.151 +domains.  These rings are not explicitly a mechanism of Xen, which is
  11.152 +only concerned with the actual sharing of the page and not how it is
  11.153 +used, they are however worth discussing as they are used in many
  11.154 +places in the current code and are a useful model for communicating
  11.155 +across a shared page.
  11.156 +
  11.157 +A shared page is set up by a guest first allocating and passing the
  11.158 +address of a page in its own address space to the backend driver.  
  11.159 +
  11.160 +
  11.161 +   blk_ring = (blkif_ring_t *)__get_free_page(GFP_KERNEL);
  11.162 +   blk_ring->req_prod = blk_ring->resp_prod = resp_cons = req_prod = 0;
  11.163 +   ...
  11.164 +   /* Construct an interface-CONNECT message for the domain controller. */
  11.165 +   cmsg.type      = CMSG_BLKIF_FE;
  11.166 +   cmsg.subtype   = CMSG_BLKIF_FE_INTERFACE_CONNECT;
  11.167 +   cmsg.length    = sizeof(blkif_fe_interface_connect_t);
  11.168 +   up.handle      = 0;
  11.169 +   up.shmem_frame = virt_to_machine(blk_ring) >> PAGE_SHIFT;
  11.170 +   memcpy(cmsg.msg, &up, sizeof(up));  
  11.171 +
  11.172 +
  11.173 +blk_ring will be the shared page.  The producer and consumer pointers
  11.174 +are then initialised (these will be discussed soon), and then the
  11.175 +machine address of the page is send to the backend via a control
  11.176 +channel to Xend.  This control channel itself uses the notification
  11.177 +and shared memory mechanisms described here, but is set up for each
  11.178 +domain automatically at startup.
  11.179 +
  11.180 +The backend, which is a privileged domain then takes the page address
  11.181 +and maps it into its own address space (in
  11.182 +linux26/drivers/xen/blkback/interface.c:blkif_connect()):
  11.183 +
  11.184 +
  11.185 +void blkif_connect(blkif_be_connect_t *connect)
  11.186 +
  11.187 +   ...
  11.188 +   unsigned long shmem_frame = connect->shmem_frame;
  11.189 +   ...
  11.190 +
  11.191 +   if ( (vma = get_vm_area(PAGE_SIZE, VM_IOREMAP)) == NULL )
  11.192 +   {
  11.193 +      connect->status = BLKIF_BE_STATUS_OUT_OF_MEMORY;
  11.194 +      return;
  11.195 +   }
  11.196 +
  11.197 +   prot = __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED);
  11.198 +   error = direct_remap_area_pages(&init_mm, VMALLOC_VMADDR(vma->addr),
  11.199 +                                   shmem_frame<<PAGE_SHIFT, PAGE_SIZE,
  11.200 +                                   prot, domid);
  11.201 +
  11.202 +   ...
  11.203 +
  11.204 +   blkif->blk_ring_base = (blkif_ring_t *)vma->addr
  11.205 +}}}
  11.206 +
  11.207 +The machine address of the page is passed in the shmem_frame field of
  11.208 +the connect message.  This is then mapped into the virtual address
  11.209 +space of the backend domain, and saved in the blkif structure
  11.210 +representing this particular backend connection.
  11.211 +
  11.212 +NOTE:  New mechanisms will be added very shortly to allow domains to
  11.213 +explicitly grant access to their pages to other domains.  This "grant
  11.214 +table" support is in the process of being added to the tree, and will
  11.215 +change the way a shared page is set up.  In particular, it will remove
  11.216 +the need of the remapping domain to be privileged.
  11.217 +
  11.218 +Sending data across shared rings:
  11.219 +
  11.220 +Shared rings avoid the potential for write interference between
  11.221 +domains in a very cunning way.  A ring is partitioned into a request
  11.222 +and a response region, and domains only work within their own space.
  11.223 +This can be thought of as a double producer-consumer ring -- the ring
  11.224 +is described by four pointers into a circular buffer of fixed-size
  11.225 +records.  Pointers may only advance, and may not pass one another.
  11.226 +
  11.227 +
  11.228 +                          rsp_cons----+
  11.229 +                                      V
  11.230 +           +----+----+----+----+----+----+----+
  11.231 +           |    |    |    free      |RSP1|RSP2|
  11.232 +           +----+----+----+----+----+----+----+
  11.233 + req_prod->|    |       -------->        |RSP3|
  11.234 +           +----+                        +----+
  11.235 +           |REQ8|                        |    |<-rsp_prod
  11.236 +           +----+                        +----+
  11.237 +           |REQ7|                        |    |
  11.238 +           +----+                        +----+
  11.239 +           |REQ6|       <--------        |    |
  11.240 +           +----+----+----+----+----+----+----+
  11.241 +           |REQ5|REQ4|    free      |    |    |
  11.242 +           +----+----+----+----+----+----+----+
  11.243 +  req_cons---------^
  11.244 +
  11.245 +
  11.246 +
  11.247 +By adopting the convention that every request will receive a response,
  11.248 +not all four pointers need be shared and flow control on the ring
  11.249 +becomes very easy to manage.  Each domain manages its own
  11.250 +consumer pointer, and the two producer pointers are visible to both (Xen/include/hypervisor-ifs/io/blkif.h):
  11.251 +
  11.252 +
  11.253 +
  11.254 +/* NB. Ring size must be small enough for sizeof(blkif_ring_t) <=PAGE_SIZE.*/
  11.255 +  #define BLKIF_RING_SIZE        64
  11.256 +
  11.257 +  ...
  11.258 +
  11.259 +/*
  11.260 + * We use a special capitalised type name because it is _essential_ that all
  11.261 + * arithmetic on indexes is done on an integer type of the correct size.
  11.262 + */
  11.263 +typedef u32 BLKIF_RING_IDX;
  11.264 +
  11.265 +/*
  11.266 + * Ring indexes are 'free running'. That is, they are not stored modulo the
  11.267 + * size of the ring buffer. The following macro converts a free-running counter
  11.268 + * into a value that can directly index a ring-buffer array.
  11.269 + */
  11.270 +#define MASK_BLKIF_IDX(_i) ((_i)&(BLKIF_RING_SIZE-1))
  11.271 +
  11.272 +typedef struct {
  11.273 +    BLKIF_RING_IDX req_prod;  /*  0: Request producer. Updated by front-end. */
  11.274 +    BLKIF_RING_IDX resp_prod; /*  4: Response producer. Updated by back-end. */
  11.275 +    union {                   /*  8 */
  11.276 +        blkif_request_t  req;
  11.277 +        blkif_response_t resp;
  11.278 +    } PACKED ring[BLKIF_RING_SIZE];
  11.279 +} PACKED blkif_ring_t;
  11.280 +
  11.281 +
  11.282 +
  11.283 +As shown in the diagram above, the rules for using a shared memory
  11.284 +ring are simple.  
  11.285 +
  11.286 + 1. A ring is full when a domain's producer and consumer pointers are
  11.287 +    equal (e.g. req_prod == resp_cons).  In this situation, the
  11.288 +    consumer pointer must be advanced.  Furthermore, if the consumer
  11.289 +    pointer is equal to the other domain's producer pointer,
  11.290 +    (e.g. resp_cons = resp_prod), then the other domain has all the
  11.291 +    buffers.
  11.292 +
  11.293 +2. Producer pointers point to the next buffer that will be written to.
  11.294 +   (So blk_ring[MASK_BLKIF_IDX(req_prod)] should not be consumed.)
  11.295 +
  11.296 +3. Consumer pointers point to a valid message, so long as they are not
  11.297 +   equal to the associated producer pointer.
  11.298 +
  11.299 +4. A domain should only ever write to the message pointed
  11.300 +   to by its producer index, and read from the message at it's
  11.301 +   consumer.  More generally, the domain may be thought of to have
  11.302 +   exclusive access to the messages between its consumer and producer,
  11.303 +   and should absolutely not read or write outside this region.
  11.304 +
  11.305 +In general, drivers keep a private copy of their producer pointer and
  11.306 +then set the shared version when they are ready for the other end to
  11.307 +process a set of messages.  Additionally, it is worth paying attention
  11.308 +to the use of memory barriers (rmb/wmb) in the code, to ensure that
  11.309 +rings that are shared across processors behave as expected.
  11.310 +
  11.311 +==== Structure of the Blkif Drivers ====
  11.312 +
  11.313 +Now that the communications primitives have been discussed, I'll
  11.314 +quickly cover the general structure of the blkif driver.  This is
  11.315 +intended to give a high-level idea of what is going on, in an effort
  11.316 +to make reading the code a more approachable task.
  11.317 +
  11.318 +There are three key software components that are involved in the blkif
  11.319 +drivers (not counting Xen itself).  The frontend and backend driver,
  11.320 +and Xend, which coordinates their initial connection.  Xend may also
  11.321 +be involved in control-channel signalling in some cases after startup,
  11.322 +for instance to manage reconnection if the backend is restarted.
  11.323 +
  11.324 +===== Frontend Driver Structure =====
  11.325 +
  11.326 +The frontend domain uses a single event channel and a shared memory
  11.327 +ring to trade control messages with the backend.  These are both setup
  11.328 +during domain startup, which will be discussed shortly.  The shared
  11.329 +memory ring is called blkif_ring, and the private ring indexes are
  11.330 +resp_cons, and req_prod.  The ring is protected by blkif_io_lock.
  11.331 +Additionally, the frontend keeps a list of outstanding requests in
  11.332 +rec_ring[].  These are uniquely identified by a guest-local id number,
  11.333 +which is associated with each request sent to the backend, and
  11.334 +returned with the matching responses.  Information about the actual
  11.335 +disks are stored in major_info[], of which only the first nr_vbds
  11.336 +entries are valid.  Finally, the global 'recovery' indicates that the
  11.337 +connection between the backend and frontend drivers has been broken
  11.338 +(possibly due to a backend driver crash) and that the frontend is in
  11.339 +recovery mode, in which case it will attempt to reconnect and reissue
  11.340 +outstanding requests.
  11.341 +
  11.342 +The frontend driver is single-threaded and after setup is entered only
  11.343 +through three points:  (1) read/write requests from the XenLinux guest
  11.344 +that it is a part of, (2) interrupts from the backend driver on its
  11.345 +event channel (blkif_int()), and (3) control messages from Xend
  11.346 +(blkif_ctrlif_rx).
  11.347 +
  11.348 +===== Backend Driver Structure =====
  11.349 +
  11.350 +The backend driver is slightly more complex as it must manage any
  11.351 +number of concurrent frontend connections.  For each domain it
  11.352 +manages, the backend driver maintains a blkif structure, which
  11.353 +describes all the connection and disk information associated with that
  11.354 +particular domain.  This structure is associated with the interrupt
  11.355 +registration, and allows the backend driver to have immediate context
  11.356 +when it takes a notification from some domain.
  11.357 +
  11.358 +All of the blkif structures are stored in a hash table (blkif_hash),
  11.359 +which is indexed by a hash of the domain id, and a "handle", really a
  11.360 +per-domain blkif identifier, in case it wants to have multiple connections.
  11.361 +
  11.362 +The per-connection blkif structure is of type blkif_t.  It contains
  11.363 +all of the communication details (event channel, irq, shared memory
  11.364 +ring and indexes), and blk_ring_lock, which is the backend mutex on
  11.365 +the shared ring.  The structure also contains vbd_rb, which is a
  11.366 +red-black tree, containing an entry for each device/partition that is
  11.367 +assigned to that domain.  This structure is filled by xend passing
  11.368 +disk information to the backend at startup, and is protected by
  11.369 +vbd_lock.  Finally, the blkif struct contains a status field, which
  11.370 +describes the state of the connection.
  11.371 +
  11.372 +The backend driver spawns a kernel thread at startup
  11.373 +(blkio_schedule()), which handles requests to and from the actual disk
  11.374 +device drivers.  This scheduler thread maintains a list of blkif
  11.375 +structures that have pending requests, and services them round-robin
  11.376 +with a maximum per-round request limit.  blkifs are added to the list
  11.377 +in the interrupt handler (blkif_be_int()) using
  11.378 +add_to_blkdev_list_tail(), and removed in the scheduler loop after
  11.379 +calling do_block_io_op(), which processes a batch of requests.  The
  11.380 +scheduler thread is explicitly activated at several points in the code
  11.381 +using maybe_trigger_blkio_schedule().
  11.382 +
  11.383 +Pending requests between the backend driver and the physical device
  11.384 +drivers use another ring, pending_ring.  Requests are placed in this
  11.385 +ring in the scheduler thread and issued to the device.  A completion
  11.386 +callback, end_block_io_op, indicates that requests have been serviced
  11.387 +and generates a response on the appropriate blkif ring.  pending
  11.388 +reqs[] stores a list of outstanding requests with the physical drivers.
  11.389 +
  11.390 +So, control entries to the backend are (1) the blkio scheduler thread,
  11.391 +which sends requests to the real device drivers, (2) end_block_io_op,
  11.392 +which is called as serviced requests complete, (3) blkif_be_int()
  11.393 +handles notifications from the frontend drivers in other domains, and
  11.394 +(4) blkif_ctrlif_rx() handles control messages from xend.
  11.395 +
  11.396 +==== Driver Startup ====
  11.397 +
  11.398 +Prior to starting a new guest using the frontend driver, the backend
  11.399 +will have been started in a privileged domain.  The backend
  11.400 +initialisation code initialises all of its data structures, such as
  11.401 +the blkif hash table, and starts the scheduler thread as a kernel
  11.402 +thread. It then sends a driver status up message to let xend know it
  11.403 +is ready to take frontend connections.
  11.404 +
  11.405 +When a new domain that uses the blkif frontend driver is started,
  11.406 +there are a series of interactions between it, xend, and the specified
  11.407 +backend driver.  These interactions are as follows:
  11.408 +
  11.409 +The domain configuration given to xend will specify the backend domain
  11.410 +and disks that the new guest is to use.  Prior to actually running the
  11.411 +domain, xend and the backend driver interact to setup the initial
  11.412 +blkif record in the backend.
  11.413 +
  11.414 +(1) Xend sends a BLKIF_BE_CREATE message to backend.
  11.415 +
  11.416 +  Backend does blkif_create(), having been passed FE domid and handle.
  11.417 +  It creates and initialises a new blkif struct, and puts it in the
  11.418 +  hash table.
  11.419 +  It then returns a STATUS_OK response to xend.
  11.420 +
  11.421 +(2) Xend sends a BLKIF_BE_VBD_CREATE message to the backend.
  11.422 + 
  11.423 +  Backend adds a vbd entry in the red-black tree for the
  11.424 +  specified (dom, handle) blkif entry.
  11.425 +  Sends a STATUS_OK response.
  11.426 +
  11.427 +(3) Xend sends a BLKIF_BE_VBD_GROW message to the backend.
  11.428 +
  11.429 +  Backend takes the physical device information passed in the 
  11.430 +  message and assigns them to the newly created vbd struct.
  11.431 +
  11.432 +(2) and (3) repeat as any additional devices are added to the domain.
  11.433 +
  11.434 +At this point, the backend has enough state to allow the frontend
  11.435 +domain to start.  The domain is run, and eventually gets to the
  11.436 +frontend driver initialisation code.  After setting up the frontend
  11.437 +data structures, this code continues the communications with xend and
  11.438 +the backend to negotiate a connection:
  11.439 +
  11.440 +(4) Frontend sends Xend a BLKIF_FE_DRIVER_STATUS_CHANGED message.
  11.441 +
  11.442 +  This message tells xend that the driver is up.  The init function
  11.443 +  now spin-waits until driver setup is complete in order to prevent
  11.444 +  Linux from attempting to boot before the disks are connected.
  11.445 +
  11.446 +(5) Xend sends the frontend an INTERFACE_STATUS_CHANGED message
  11.447 +
  11.448 +  This message specifies that the interface is now disconnected
  11.449 +  (instead of closed).
  11.450 +  The domain updates it's state, and allocates the shared blk_ring
  11.451 +  page.  Next, 
  11.452 +
  11.453 +(6) Frontend sends Xend a BLKIF_INTERFACE_CONNECT message
  11.454 +
  11.455 +  This message specifies the domain and handle, and includes the
  11.456 +  address of the newly created page.
  11.457 +
  11.458 +(7) Xend sends the backend a BLKIF_BE_CONNECT message
  11.459 +
  11.460 +  The backend fills in the blkif connection information, maps the
  11.461 +  shared page, and binds an irq to the event channel.
  11.462 +  
  11.463 +(8) Xend sends the frontend an INTERFACE_STATUS_CHANGED message
  11.464 +
  11.465 +  This message takes the frontend driver to a CONNECTED state, at
  11.466 +  which point it binds an irq to the event channel and calls
  11.467 +  xlvbd_init to initialise the individual block devices.
  11.468 +
  11.469 +The frontend Linux is stall spin waiting at this point, until all of
  11.470 +the disks have been probed.  Messaging now is directly between the
  11.471 +front and backend domain using the new shared ring and event channel.
  11.472 +
  11.473 +(9) The frontend sends a BLKIF_OP_PROBE directly to the backend.
  11.474 +
  11.475 +  This message includes a reference to an additional page, that the
  11.476 +  backend can use for it's reply.  The backend responds with an array
  11.477 +  of the domains disks (as vdisk_t structs) on the provided page.
  11.478 +
  11.479 +The frontend now initialises each disk, calling xlvbd_init_device()
  11.480 +for each one.
    12.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.2 +++ b/docs/misc/xen_config.html	Tue Oct 26 14:12:48 2004 +0000
    12.3 @@ -0,0 +1,194 @@
    12.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    12.5 +<html>
    12.6 +<head>
    12.7 +  <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
    12.8 +  <title>Xen Configuration Syntax</title>
    12.9 +</head>
   12.10 +<body>
   12.11 +<center>
   12.12 +<h1>Xen Configuration Syntax</h1>
   12.13 +<br>
   12.14 +<!-- Version 0.1<br>2004 June 21<br> -->
   12.15 +Version 0.2<br>2004 July 19<br>
   12.16 +</center>
   12.17 +
   12.18 +<h1>Xen Configuration</h1>
   12.19 +The Xen virtual machine creation tools provide command-line interfaces and
   12.20 +HTTP interfaces to creating virtual machines. Underneath all these interfaces
   12.21 +virtual machine configuration data is represented in a common configuration syntax
   12.22 +called SXP.
   12.23 +
   12.24 +The SXP syntax is s-expressions (sxprs), a simple bracketed abstract syntax.
   12.25 +Python lists are used to represent its parsed form, with a support
   12.26 +api providing  access to fields and values (class xen.xend.sxp).
   12.27 +
   12.28 +<h1>SXP syntax</h1>
   12.29 +<p>A general s-expression has the syntax:
   12.30 +<code><pre>
   12.31 +s-exp = '(' s-exp* ')' | atom | string
   12.32 +</pre></code>
   12.33 +Where an <code>atom</code> is an unquoted string, such as fred or /domain/0.
   12.34 +A <code>string</code> is a quoted string, supporting the usual escape sequences.
   12.35 +Strings support single or double quotes: 'fred 1' or "fred 2" are both accepted.
   12.36 +The characters ()[]&lt;&gt{} are separators.
   12.37 +
   12.38 +<p>An <code>element</code> is an s-expression representing data similar to XML.
   12.39 +It has the form:
   12.40 +<code><pre>
   12.41 +element    = '(' name attributes? value* ')'
   12.42 +name       = atom
   12.43 +attributes = '(' '@' attribute* ')'
   12.44 +attribute  = '(' attrname attrval ')'
   12.45 +attrname   = atom
   12.46 +attrval    = atom | string
   12.47 +value      = element | atom | string
   12.48 +</pre></code>
   12.49 +The <code>name</code> is the element name (roughly indentifying its type).
   12.50 +The <code>attributes</code> is a list of attribute-values.
   12.51 +We usually prefer to avoid using attributes, and use sub-elements instead.
   12.52 +As in XML, any element may have the attribute <code>id</code> to give it an identifier
   12.53 +for later reference.
   12.54 +
   12.55 +<h1>VM configuration</h1>
   12.56 +A vm configuration is a single SXP vm element, with subelements for
   12.57 +vm parameters and devices. The supported elements and their fields
   12.58 +are listed below.
   12.59 +
   12.60 +<h2>(vm) element</h2>
   12.61 +The top-level element, a virtual machine configuration.
   12.62 +<ul>
   12.63 +    <li>name: string, required. Domain name.
   12.64 +    <li>id: int, optional, default generated. Domain unique id.
   12.65 +    <li>memory: int, required. Domain memory in MB.
   12.66 +    <li>maxmem: int, optional. Maximum domain memory in MB.
   12.67 +    <li>cpu: int, optional. Cpu to run on.
   12.68 +    <li>cpu_weight, float, optional, default 1. Cpu weight - controls share of CPU.
   12.69 +    <li>image: linux | netbsd | ..., required. Domain image (OS-specific element).
   12.70 +    <li>backend: any backend device type, optional, default none.
   12.71 +    <li>device: any device type, optional, repeats. Device.
   12.72 +    <li>restart: string, optional, default onreboot. Restart mode, one of
   12.73 +        <ul><li>onreboot: restart the domain when it exits with code reboot.
   12.74 +            <li>always: always restart the domain when it exits.
   12.75 +            <li>never:  never restart the domain.
   12.76 +        </ul>
   12.77 +    <li>console: int, optional, default 9600 + domain id. Console port.
   12.78 +</ul>
   12.79 +
   12.80 +<h2>(image (linux)) element</h2>
   12.81 +Defines a linux kernel image and its command-line parameters.
   12.82 +<ul>
   12.83 +    <li>kernel: string, required. Kernel image file (absolute path).
   12.84 +    <li>root: string, optional. Root device.
   12.85 +    <li>ip: string, optional. IP address specifier.
   12.86 +    <li>ramdisk: string, optional, default none. Ramdisk file (absolute path).
   12.87 +    <li>args: string, optional. Extra kernel args.
   12.88 +</ul>
   12.89 +
   12.90 +<h2>(image (netbsd)) element</h2>
   12.91 +Defines a netbsd kernel image and its command-line parameters.
   12.92 +<ul>
   12.93 +    <li>kernel: string, required. Kernel image file.
   12.94 +    <li>root: string, optional. Root device.
   12.95 +    <li>ip: string, optional. IP address specifier.
   12.96 +    <li>ramdisk: string, optional, default none. Ramdisk file.
   12.97 +    <li>args: string, optional. Extra kernel args.
   12.98 +</ul>
   12.99 +
  12.100 +<h2>(backend (blkif)) element</h2>
  12.101 +The vm is a block device backend.
  12.102 +The vm can have pci devices configured.
  12.103 +
  12.104 +<h2>(backend (netif)) element</h2>
  12.105 +The vm is a net device backend.
  12.106 +
  12.107 +<h2>(device (vif)) element</h2>
  12.108 +Defines a virtual network interface.
  12.109 +<ul>
  12.110 +    <li>mac: string, required. Interface MAC address.
  12.111 +    <li>bridge: string, optional, default system-dependent. Bridge to connect to.
  12.112 +    <li>script: string, optional, default system-dependent. Vif script to use
  12.113 +        when bringing the interface up or down.
  12.114 +    <li>ip: IP address, optional, no default. May be repeated. An IP address
  12.115 +    or CIDR-format subnet the vif may use.
  12.116 +    <li>backend: domain name or id, optional, default 0.
  12.117 +    Defines the domain to use as  the backend for the interface.
  12.118 +</ul>
  12.119 +
  12.120 +<h2>(device (vbd)) element</h2>
  12.121 +Defines a virtual block device.
  12.122 +<ul>
  12.123 +    <li>uname: string, required. Virtual block device id, e.g phys:hda1.
  12.124 +    <li>dev: string, required. Device file name in domain, e.g. xda1.
  12.125 +    <li>mode: string, optional, default r. Read-write mode: r | rw | w.
  12.126 +    <li>backend: domain name or id, optional, default 0.
  12.127 +     Defines the domain to use as the backend for the device.
  12.128 +</ul>
  12.129 +The uname field defines the device being exported from the block device
  12.130 +controller. The dev field defines the device name the vm will see.
  12.131 +The device is read-only unless the mode contains w.
  12.132 +
  12.133 +<h2>(device (pci)) element</h2>
  12.134 +Defines a pci device. 
  12.135 +<ul>
  12.136 +    <li>bus: int, required. PCI bus id.
  12.137 +    <li>dev: int, required. PCI dev id.
  12.138 +    <li>func: int, required. PCI func id.
  12.139 +</ul>
  12.140 +The bus, dev or func may be given in hex,
  12.141 +e.g. 0xff. With no leading 0x they are interpreted as decimal.
  12.142 +
  12.143 +<h2>(vnet) element</h2>
  12.144 +Defines the virtual networks associated with vifs (may go away soon).
  12.145 +Contains a list of vif elements:
  12.146 +<ul>
  12.147 +  <li>id: id of the vif being configured.
  12.148 +  <li>vnet: id of vnet the vif is assigned to.
  12.149 +</ul>
  12.150 +
  12.151 +<h1>Examples</h1>
  12.152 +<p> A vm  with 64 MB memory, root on /dev/xda1 (mapped from /dev/hda1),
  12.153 +one vif with default MAC.
  12.154 +<code><pre>
  12.155 +(vm
  12.156 +    (name xendom1)
  12.157 +    (memory 64)
  12.158 +    (image
  12.159 +        (linux
  12.160 +            (kernel /boot/vmlinuz-2.4.26-xen)
  12.161 +            (ip ::::xendom1:eth0:dhcp)
  12.162 +            (root /dev/xda1)
  12.163 +            (args 'rw fastboot 4')
  12.164 +        )
  12.165 +    )
  12.166 +    (device (vif))
  12.167 +    (device (vbd (uname phy:hda1) (dev xda1) (mode w)))
  12.168 +)
  12.169 +</pre></code>
  12.170 +
  12.171 +<p>A vm with 64 MB memory, NFS root, and 2 vifs on separate vnets.
  12.172 +<code><pre>
  12.173 +(vm 
  12.174 +   (name xendom2)
  12.175 +   (memory 64)
  12.176 +    # Define a linux image.
  12.177 +    (image
  12.178 +        (linux 
  12.179 +            (kernel "/boot/vmlinuz-2.4.26-xen")
  12.180 +            (ip     "::::xendom2:eth0:dhcp")
  12.181 +            (root   "/dev/nfs")
  12.182 +            (args   "rw fastboot nfsroot=15.144.25.79:/opt/xen/xendom2 4")
  12.183 +         )
  12.184 +    )
  12.185 +    # Define some vifs, with ids for use later.
  12.186 +    (device (vif (@ (id vif1)) (mac aa:00:00:00:00:12)))
  12.187 +    (device (vif (@ (id vif2)) (mac aa:00:00:00:10:12)))
  12.188 +
  12.189 +     # Configure vnets. Refer to vifs by id.
  12.190 +     (vnet (vif (id vif1) (vnet 1))
  12.191 +           (vif (id vif2) (vnet 2)))
  12.192 +
  12.193 +)
  12.194 +</pre></code>
  12.195 +
  12.196 +</body>
  12.197 +</html>
    13.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.2 +++ b/docs/src/interface.tex	Tue Oct 26 14:12:48 2004 +0000
    13.3 @@ -0,0 +1,900 @@
    13.4 +\documentclass[11pt,twoside,final,openright]{xenstyle}
    13.5 +\usepackage{a4,graphicx,setspace}
    13.6 +\setstretch{1.15}
    13.7 +
    13.8 +\begin{document}
    13.9 +
   13.10 +% TITLE PAGE
   13.11 +\pagestyle{empty}
   13.12 +\begin{center}
   13.13 +\vspace*{\fill}
   13.14 +\includegraphics{figs/xenlogo.eps}
   13.15 +\vfill
   13.16 +\vfill
   13.17 +\vfill
   13.18 +\begin{tabular}{l}
   13.19 +{\Huge \bf Interface manual} \\[4mm]
   13.20 +{\huge Xen v2.0 for x86} \\[80mm]
   13.21 +
   13.22 +{\Large Xen is Copyright (c) 2004, The Xen Team} \\[3mm]
   13.23 +{\Large University of Cambridge, UK} \\[20mm]
   13.24 +{\large Last updated on 11th March, 2004}
   13.25 +\end{tabular}
   13.26 +\vfill
   13.27 +\end{center}
   13.28 +\cleardoublepage
   13.29 +
   13.30 +% TABLE OF CONTENTS
   13.31 +\pagestyle{plain}
   13.32 +\pagenumbering{roman}
   13.33 +{ \parskip 0pt plus 1pt
   13.34 +  \tableofcontents }
   13.35 +\cleardoublepage
   13.36 +
   13.37 +% PREPARE FOR MAIN TEXT
   13.38 +\pagenumbering{arabic}
   13.39 +\raggedbottom
   13.40 +\widowpenalty=10000
   13.41 +\clubpenalty=10000
   13.42 +\parindent=0pt
   13.43 +\renewcommand{\topfraction}{.8}
   13.44 +\renewcommand{\bottomfraction}{.8}
   13.45 +\renewcommand{\textfraction}{.2}
   13.46 +\renewcommand{\floatpagefraction}{.8}
   13.47 +\setstretch{1.15}
   13.48 +
   13.49 +\chapter{Introduction}
   13.50 +Xen allows the hardware resouces of a machine to be virtualized and
   13.51 +dynamically partitioned such as to allow multiple different 'guest'
   13.52 +operating system images to be run simultaneously.
   13.53 +
   13.54 +Virtualizing the machine in this manner provides flexibility allowing
   13.55 +different users to choose their preferred operating system (Windows,
   13.56 +Linux, NetBSD, or a custom operating system).  Furthermore, Xen provides
   13.57 +secure partitioning between these 'domains', and enables better resource
   13.58 +accounting and QoS isolation than can be achieved with a conventional
   13.59 +operating system.
   13.60 +
   13.61 +The hypervisor runs directly on server hardware and dynamically partitions
   13.62 +it between a number of {\it domains}, each of which hosts an instance
   13.63 +of a {\it guest operating system}.  The hypervisor provides just enough
   13.64 +abstraction of the machine to allow effective isolation and resource 
   13.65 +management between these domains.
   13.66 +
   13.67 +Xen essentially takes a virtual machine approach as pioneered by IBM
   13.68 +VM/370.  However, unlike VM/370 or more recent efforts such as VMWare
   13.69 +and Virtual PC, Xen doesn not attempt to completely virtualize the
   13.70 +underlying hardware.  Instead parts of the hosted guest operating
   13.71 +systems are modified to work with the hypervisor; the operating system
   13.72 +is effectively ported to a new target architecture, typically
   13.73 +requiring changes in just the machine-dependent code.  The user-level
   13.74 +API is unchanged, thus existing binaries and operating system
   13.75 +distributions can work unmodified.
   13.76 +
   13.77 +In addition to exporting virtualized instances of CPU, memory, network and
   13.78 +block devicees, Xen exposes a control interface to set how these resources
   13.79 +are shared between the running domains.  The control interface is privileged
   13.80 +and may only be accessed by one particular virtual machine: {\it domain0}.
   13.81 +This domain is a required part of any Xen-base server and runs the application
   13.82 +software that manages the control-plane aspects of the platform.  Running the
   13.83 +control software in {\it domain0}, distinct from the hypervisor itself, allows
   13.84 +the Xen framework to separate the notions of {\it mechanism} and {\it policy}
   13.85 +within the system.
   13.86 +
   13.87 +
   13.88 +\chapter{CPU state}
   13.89 +
   13.90 +All privileged state must be handled by Xen.  The guest OS has no
   13.91 +direct access to CR3 and is not permitted to update privileged bits in
   13.92 +EFLAGS.
   13.93 +
   13.94 +\chapter{Exceptions}
   13.95 +The IDT is virtualised by submitting a virtual 'trap
   13.96 +table' to Xen.  Most trap handlers are identical to native x86
   13.97 +handlers.  The page-fault handler is a noteable exception.
   13.98 +
   13.99 +\chapter{Interrupts and events}
  13.100 +Interrupts are virtualized by mapping them to events, which are delivered 
  13.101 +asynchronously to the target domain.  A guest OS can map these events onto
  13.102 +its standard interrupt dispatch mechanisms, such as a simple vectoring 
  13.103 +scheme.  Each physical interrupt source controlled by the hypervisor, including
  13.104 +network devices, disks, or the timer subsystem, is responsible for identifying
  13.105 +the target for an incoming interrupt and sending an event to that domain.
  13.106 +
  13.107 +This demultiplexing mechanism also provides a device-specific mechanism for 
  13.108 +event coalescing or hold-off.  For example, a guest OS may request to only 
  13.109 +actually receive an event after {\it n} packets are queued ready for delivery
  13.110 +to it, {\it t} nanoseconds after the first packet arrived (which ever is true
  13.111 +first).  This allows latency and throughput requirements to be addressed on a
  13.112 +domain-specific basis.
  13.113 +
  13.114 +\chapter{Time}
  13.115 +Guest operating systems need to be aware of the passage of real time and their
  13.116 +own ``virtual time'', i.e. the time they have been executing.  Furthermore, a
  13.117 +notion of time is required in the hypervisor itself for scheduling and the
  13.118 +activities that relate to it.  To this end the hypervisor provides for notions
  13.119 +of time:  cycle counter time, system time, wall clock time, domain virtual 
  13.120 +time.
  13.121 +
  13.122 +
  13.123 +\section{Cycle counter time}
  13.124 +This provides the finest-grained, free-running time reference, with the
  13.125 +approximate frequency being publicly accessible.  The cycle counter time is
  13.126 +used to accurately extrapolate the other time references.  On SMP machines
  13.127 +it is currently assumed that the cycle counter time is synchronised between
  13.128 +CPUs.  The current x86-based implementation achieves this within inter-CPU
  13.129 +communication latencies.
  13.130 +
  13.131 +\section{System time}
  13.132 +This is a 64-bit value containing the nanoseconds elapsed since boot
  13.133 +time.  Unlike cycle counter time, system time accurately reflects the
  13.134 +passage of real time, i.e.  it is adjusted several times a second for timer
  13.135 +drift.  This is done by running an NTP client in {\it domain0} on behalf of
  13.136 +the machine, feeding updates to the hypervisor.  Intermediate values can be
  13.137 +extrapolated using the cycle counter.
  13.138 +
  13.139 +\section{Wall clock time}
  13.140 +This is the actual ``time of day'' Unix style struct timeval (i.e. seconds and
  13.141 +microseconds since 1 January 1970, adjusted by leap seconds etc.).  Again, an 
  13.142 +NTP client hosted by {\it domain0} can help maintain this value.  To guest 
  13.143 +operating systems this value will be reported instead of the hardware RTC
  13.144 +clock value and they can use the system time and cycle counter times to start
  13.145 +and remain perfectly in time.
  13.146 +
  13.147 +
  13.148 +\section{Domain virtual time}
  13.149 +This progresses at the same pace as cycle counter time, but only while a
  13.150 +domain is executing.  It stops while a domain is de-scheduled.  Therefore the
  13.151 +share of the CPU that a domain receives is indicated by the rate at which
  13.152 +its domain virtual time increases, relative to the rate at which cycle
  13.153 +counter time does so.
  13.154 +
  13.155 +\section{Time interface}
  13.156 +Xen exports some timestamps to guest operating systems through their shared
  13.157 +info page.  Timestamps are provided for system time and wall-clock time.  Xen
  13.158 +also provides the cycle counter values at the time of the last update
  13.159 +allowing guests to calculate the current values.  The cpu frequency and a
  13.160 +scaling factor are provided for guests to convert cycle counter values to
  13.161 +real time.  Since all time stamps need to be updated and read
  13.162 +\emph{atomically} two version numbers are also stored in the shared info
  13.163 +page.
  13.164 +
  13.165 +Xen will ensure that the time stamps are updated frequently enough to avoid
  13.166 +an overflow of the cycle counter values.  A guest can check if its notion of
  13.167 +time is up-to-date by comparing the version numbers.
  13.168 +
  13.169 +\section{Timer events}
  13.170 +
  13.171 +Xen maintains a periodic timer (currently with a 10ms period) which sends a
  13.172 +timer event to the currently executing domain.  This allows Guest OSes to
  13.173 +keep track of the passing of time when executing.  The scheduler also
  13.174 +arranges for a newly activated domain to receive a timer event when
  13.175 +scheduled so that the Guest OS can adjust to the passage of time while it
  13.176 +has been inactive.
  13.177 +
  13.178 +In addition, Xen exports a hypercall interface to each domain which allows
  13.179 +them to request a timer event sent to them at the specified system
  13.180 +time.  Guest OSes may use this timer to implement timeout values when they
  13.181 +block.
  13.182 +
  13.183 +\chapter{Memory}
  13.184 +
  13.185 +The hypervisor is responsible for providing memory to each of the
  13.186 +domains running over it.  However, the Xen hypervisor's duty is
  13.187 +restricted to managing physical memory and to policying page table
  13.188 +updates.  All other memory management functions are handled
  13.189 +externally.  Start-of-day issues such as building initial page tables
  13.190 +for a domain, loading its kernel image and so on are done by the {\it
  13.191 +domain builder} running in user-space in {\it domain0}.  Paging to
  13.192 +disk and swapping is handled by the guest operating systems
  13.193 +themselves, if they need it.
  13.194 +
  13.195 +On a Xen-based system, the hypervisor itself runs in {\it ring 0}.  It
  13.196 +has full access to the physical memory available in the system and is
  13.197 +responsible for allocating portions of it to the domains.  Guest
  13.198 +operating systems run in and use {\it rings 1}, {\it 2} and {\it 3} as
  13.199 +they see fit, aside from the fact that segmentation is used to prevent
  13.200 +the guest OS from accessing a portion of the linear address space that
  13.201 +is reserved for use by the hypervisor.  This approach allows
  13.202 +transitions between the guest OS and hypervisor without flushing the
  13.203 +TLB.  We expect most guest operating systems will use ring 1 for their
  13.204 +own operation and place applications (if they support such a notion)
  13.205 +in ring 3.
  13.206 +
  13.207 +\section{Physical Memory Allocation}
  13.208 +The hypervisor reserves a small fixed portion of physical memory at
  13.209 +system boot time.  This special memory region is located at the
  13.210 +beginning of physical memory and is mapped at the very top of every
  13.211 +virtual address space.
  13.212 +
  13.213 +Any physical memory that is not used directly by the hypervisor is divided into
  13.214 +pages and is available for allocation to domains.  The hypervisor tracks which
  13.215 +pages are free and which pages have been allocated to each domain.  When a new
  13.216 +domain is initialized, the hypervisor allocates it pages drawn from the free 
  13.217 +list.  The amount of memory required by the domain is passed to the hypervisor
  13.218 +as one of the parameters for new domain initialization by the domain builder.
  13.219 +
  13.220 +Domains can never be allocated further memory beyond that which was
  13.221 +requested for them on initialization.  However, a domain can return
  13.222 +pages to the hypervisor if it discovers that its memory requirements
  13.223 +have diminished.
  13.224 +
  13.225 +% put reasons for why pages might be returned here.
  13.226 +\section{Page Table Updates}
  13.227 +In addition to managing physical memory allocation, the hypervisor is also in
  13.228 +charge of performing page table updates on behalf of the domains.  This is 
  13.229 +neccessary to prevent domains from adding arbitrary mappings to their page
  13.230 +tables or introducing mappings to other's page tables.
  13.231 +
  13.232 +\section{Writabel Page Tables}
  13.233 +A domain can also request write access to its page tables.  In this
  13.234 +mode, Xen notes write attempts to page table pages and makes the page
  13.235 +temporarily writable.  In-use page table pages are also disconnect
  13.236 +from the page directory.  The domain can now update entries in these
  13.237 +page table pages without the assistance of Xen.  As soon as the
  13.238 +writabel page table pages get used as page table pages, Xen makes the
  13.239 +pages read-only again and revalidates the entries in the pages.
  13.240 +
  13.241 +\section{Segment Descriptor Tables}
  13.242 +
  13.243 +On boot a guest is supplied with a default GDT, which is {\em not}
  13.244 +taken from its own memory allocation.  If the guest wishes to use other
  13.245 +than the default `flat' ring-1 and ring-3 segments that this default
  13.246 +table provides, it must register a custom GDT and/or LDT with Xen,
  13.247 +allocated from its own memory.
  13.248 +
  13.249 +int {\bf set\_gdt}(unsigned long *{\em frame\_list}, int {\em entries})
  13.250 +
  13.251 +{\em frame\_list}: An array of up to 16 page frames within which the
  13.252 +GDT resides.  Any frame registered as a GDT frame may only be mapped
  13.253 +read-only within the guest's address space (e.g., no writable
  13.254 +mappings, no use as a page-table page, and so on).
  13.255 +
  13.256 +{\em entries}: The number of descriptor-entry slots in the GDT.  Note
  13.257 +that the table must be large enough to contain Xen's reserved entries;
  13.258 +thus we must have '{\em entries $>$ LAST\_RESERVED\_GDT\_ENTRY}'.
  13.259 +Note also that, after registering the GDT, slots {\em FIRST\_} through
  13.260 +{\em LAST\_RESERVED\_GDT\_ENTRY} are no longer usable by the guest and
  13.261 +may be overwritten by Xen.
  13.262 +
  13.263 +\section{Pseudo-Physical Memory}
  13.264 +The usual problem of external fragmentation means that a domain is
  13.265 +unlikely to receive a contiguous stretch of physical memory.  However,
  13.266 +most guest operating systems do not have built-in support for
  13.267 +operating in a fragmented physical address space e.g. Linux has to
  13.268 +have a one-to-one mapping for its physical memory.  There a notion of
  13.269 +{\it pseudo physical memory} is introdouced.  Xen maintains a {\it
  13.270 +real physical} to {\it pseudo physical} mapping which can be consulted
  13.271 +by every domain.  Additionally, at its start of day, a domain is
  13.272 +supplied a {\it pseudo physical} to {\it real physical} mapping which
  13.273 +it needs to keep updated itself.  From that moment onwards {\it pseudo
  13.274 +physical} addresses are used instead of discontiguous {\it real
  13.275 +physical} addresses.  Thus, the rest of the guest OS code has an
  13.276 +impression of operating in a contiguous address space.  Guest OS page
  13.277 +tables contain real physical addresses.  Mapping {\it pseudo physical}
  13.278 +to {\it real physical} addresses is needed on page table updates and
  13.279 +also on remapping memory regions with the guest OS.
  13.280 +
  13.281 +
  13.282 +
  13.283 +\chapter{Network I/O}
  13.284 +
  13.285 +Virtual network device services are provided by shared memory
  13.286 +communications with a `backend' domain.  From the point of view of
  13.287 +other domains, the backend may be viewed as a virtual ethernet switch
  13.288 +element with each domain having one or more virtual network interfaces
  13.289 +connected to it.
  13.290 +
  13.291 +\section{Backend Packet Handling}
  13.292 +The backend driver is responsible primarily for {\it data-path} operations.
  13.293 +In terms of networking this means packet transmission and reception.
  13.294 +
  13.295 +On the transmission side, the backend needs to perform two key actions:
  13.296 +\begin{itemize}
  13.297 +\item {\tt Validation:} A domain may only be allowed to emit packets
  13.298 +matching a certain specification; for example, ones in which the
  13.299 +source IP address matches one assigned to the virtual interface over
  13.300 +which it is sent.  The backend would be responsible for ensuring any
  13.301 +such requirements are met, either by checking or by stamping outgoing
  13.302 +packets with prescribed values for certain fields.
  13.303 +
  13.304 +Validation functions can be configured using standard firewall rules
  13.305 +(i.e. IP Tables, in the case of Linux).
  13.306 +
  13.307 +\item {\tt Scheduling:} Since a number of domains can share a single
  13.308 +``real'' network interface, the hypervisor must mediate access when
  13.309 +several domains each have packets queued for transmission.  Of course,
  13.310 +this general scheduling function subsumes basic shaping or
  13.311 +rate-limiting schemes.
  13.312 +
  13.313 +\item {\tt Logging and Accounting:} The hypervisor can be configured
  13.314 +with classifier rules that control how packets are accounted or
  13.315 +logged.  For example, {\it domain0} could request that it receives a
  13.316 +log message or copy of the packet whenever another domain attempts to
  13.317 +send a TCP packet containg a SYN.
  13.318 +\end{itemize}
  13.319 +
  13.320 +On the recive side, the backend's role is relatively straightforward:
  13.321 +once a packet is received, it just needs to determine the virtual interface(s)
  13.322 +to which it must be delivered and deliver it via page-flipping. 
  13.323 +
  13.324 +
  13.325 +\section{Data Transfer}
  13.326 +
  13.327 +Each virtual interface uses two ``descriptor rings'', one for transmit,
  13.328 +the other for receive.  Each descriptor identifies a block of contiguous
  13.329 +physical memory allocated to the domain.  There are four cases:
  13.330 +
  13.331 +\begin{itemize}
  13.332 +
  13.333 +\item The transmit ring carries packets to transmit from the domain to the
  13.334 +hypervisor.
  13.335 +
  13.336 +\item The return path of the transmit ring carries ``empty'' descriptors
  13.337 +indicating that the contents have been transmitted and the memory can be
  13.338 +re-used.
  13.339 +
  13.340 +\item The receive ring carries empty descriptors from the domain to the 
  13.341 +hypervisor; these provide storage space for that domain's received packets.
  13.342 +
  13.343 +\item The return path of the receive ring carries packets that have been
  13.344 +received.
  13.345 +\end{itemize}
  13.346 +
  13.347 +Real physical addresses are used throughout, with the domain performing 
  13.348 +translation from pseudo-physical addresses if that is necessary.
  13.349 +
  13.350 +If a domain does not keep its receive ring stocked with empty buffers then 
  13.351 +packets destined to it may be dropped.  This provides some defense against 
  13.352 +receiver-livelock problems because an overload domain will cease to receive
  13.353 +further data.  Similarly, on the transmit path, it provides the application
  13.354 +with feedback on the rate at which packets are able to leave the system.
  13.355 +
  13.356 +Synchronization between the hypervisor and the domain is achieved using 
  13.357 +counters held in shared memory that is accessible to both.  Each ring has
  13.358 +associated producer and consumer indices indicating the area in the ring
  13.359 +that holds descriptors that contain data.  After receiving {\it n} packets
  13.360 +or {\t nanoseconds} after receiving the first packet, the hypervisor sends
  13.361 +an event to the domain. 
  13.362 +
  13.363 +\chapter{Block I/O}
  13.364 +
  13.365 +\section{Virtual Block Devices (VBDs)}
  13.366 +
  13.367 +All guest OS disk access goes through the VBD interface.  The VBD
  13.368 +interface provides the administrator with the ability to selectively
  13.369 +grant domains access to portions of block storage devices visible to
  13.370 +the the block backend device (usually domain 0).
  13.371 +
  13.372 +VBDs can literally be backed by any block device accessible to the
  13.373 +backend domain, including network-based block devices (iSCSI, *NBD,
  13.374 +etc), loopback devices and LVM / MD devices.
  13.375 +
  13.376 +Old (Xen 1.2) virtual disks are not supported under Xen 2.0, since
  13.377 +similar functionality can be achieved using the (more advanced) LVM
  13.378 +system, which is already in widespread use.
  13.379 +
  13.380 +\subsection{Data Transfer}
  13.381 +Domains which have been granted access to a logical block device are permitted
  13.382 +to read and write it by shared memory communications with the backend domain. 
  13.383 +
  13.384 +In overview, the same style of descriptor-ring that is used for
  13.385 +network packets is used here.  Each domain has one ring that carries
  13.386 +operation requests to the hypervisor and carries the results back
  13.387 +again.
  13.388 +
  13.389 +Rather than copying data, the backend simply maps the domain's buffers
  13.390 +in order to enable direct DMA to them.  The act of mapping the buffers
  13.391 +also increases the reference counts of the underlying pages, so that
  13.392 +the unprivileged domain cannot try to return them to the hypervisor,
  13.393 +install them as page tables, or any other unsafe behaviour.
  13.394 +%block API here 
  13.395 +
  13.396 +\chapter{Privileged operations}
  13.397 +{\it Domain0} is responsible for building all other domains on the server
  13.398 +and providing control interfaces for managing scheduling, networking, and
  13.399 +blocks.
  13.400 +
  13.401 +\chapter{CPU Scheduler}
  13.402 +
  13.403 +Xen offers a uniform API for CPU schedulers.  It is possible to choose
  13.404 +from a number of schedulers at boot and it should be easy to add more.
  13.405 +
  13.406 +\paragraph*{Note: SMP host support}
  13.407 +Xen has always supported SMP host systems.  Domains are statically assigned to
  13.408 +CPUs, either at creation time or when manually pinning to a particular CPU.
  13.409 +The current schedulers then run locally on each CPU to decide which of the
  13.410 +assigned domains should be run there.
  13.411 +
  13.412 +\section{Standard Schedulers}
  13.413 +
  13.414 +These BVT, Atropos and Round Robin schedulers are part of the normal
  13.415 +Xen distribution.  BVT provides proportional fair shares of the CPU to
  13.416 +the running domains.  Atropos can be used to reserve absolute shares
  13.417 +of the CPU for each domain.  Round-robin is provided as an example of
  13.418 +Xen's internal scheduler API.
  13.419 +
  13.420 +More information on the characteristics and use of these schedulers is
  13.421 +available in { \tt Sched-HOWTO.txt }.
  13.422 +
  13.423 +\section{Scheduling API}
  13.424 +
  13.425 +The scheduling API is used by both the schedulers described above and should
  13.426 +also be used by any new schedulers.  It provides a generic interface and also
  13.427 +implements much of the ``boilerplate'' code.
  13.428 +
  13.429 +Schedulers conforming to this API are described by the following
  13.430 +structure:
  13.431 +
  13.432 +\begin{verbatim}
  13.433 +struct scheduler
  13.434 +{
  13.435 +    char *name;             /* full name for this scheduler      */
  13.436 +    char *opt_name;         /* option name for this scheduler    */
  13.437 +    unsigned int sched_id;  /* ID for this scheduler             */
  13.438 +
  13.439 +    int          (*init_scheduler) ();
  13.440 +    int          (*alloc_task)     (struct task_struct *);
  13.441 +    void         (*add_task)       (struct task_struct *);
  13.442 +    void         (*free_task)      (struct task_struct *);
  13.443 +    void         (*rem_task)       (struct task_struct *);
  13.444 +    void         (*wake_up)        (struct task_struct *);
  13.445 +    void         (*do_block)       (struct task_struct *);
  13.446 +    task_slice_t (*do_schedule)    (s_time_t);
  13.447 +    int          (*control)        (struct sched_ctl_cmd *);
  13.448 +    int          (*adjdom)         (struct task_struct *,
  13.449 +                                    struct sched_adjdom_cmd *);
  13.450 +    s32          (*reschedule)     (struct task_struct *);
  13.451 +    void         (*dump_settings)  (void);
  13.452 +    void         (*dump_cpu_state) (int);
  13.453 +    void         (*dump_runq_el)   (struct task_struct *);
  13.454 +};
  13.455 +\end{verbatim}
  13.456 +
  13.457 +The only method that {\em must} be implemented is
  13.458 +{\tt do\_schedule()}.  However, if there is not some implementation for the
  13.459 +{\tt wake\_up()} method then waking tasks will not get put on the runqueue!
  13.460 +
  13.461 +The fields of the above structure are described in more detail below.
  13.462 +
  13.463 +\subsubsection{name}
  13.464 +
  13.465 +The name field should point to a descriptive ASCII string.
  13.466 +
  13.467 +\subsubsection{opt\_name}
  13.468 +
  13.469 +This field is the value of the {\tt sched=} boot-time option that will select
  13.470 +this scheduler.
  13.471 +
  13.472 +\subsubsection{sched\_id}
  13.473 +
  13.474 +This is an integer that uniquely identifies this scheduler.  There should be a
  13.475 +macro corrsponding to this scheduler ID in {\tt <hypervisor-ifs/sched-if.h>}.
  13.476 +
  13.477 +\subsubsection{init\_scheduler}
  13.478 +
  13.479 +\paragraph*{Purpose}
  13.480 +
  13.481 +This is a function for performing any scheduler-specific initialisation.  For
  13.482 +instance, it might allocate memory for per-CPU scheduler data and initialise it
  13.483 +appropriately.
  13.484 +
  13.485 +\paragraph*{Call environment}
  13.486 +
  13.487 +This function is called after the initialisation performed by the generic
  13.488 +layer.  The function is called exactly once, for the scheduler that has been
  13.489 +selected.
  13.490 +
  13.491 +\paragraph*{Return values}
  13.492 +
  13.493 +This should return negative on failure --- this will cause an
  13.494 +immediate panic and the system will fail to boot.
  13.495 +
  13.496 +\subsubsection{alloc\_task}
  13.497 +
  13.498 +\paragraph*{Purpose}
  13.499 +Called when a {\tt task\_struct} is allocated by the generic scheduler
  13.500 +layer.  A particular scheduler implementation may use this method to
  13.501 +allocate per-task data for this task.  It may use the {\tt
  13.502 +sched\_priv} pointer in the {\tt task\_struct} to point to this data.
  13.503 +
  13.504 +\paragraph*{Call environment}
  13.505 +The generic layer guarantees that the {\tt sched\_priv} field will
  13.506 +remain intact from the time this method is called until the task is
  13.507 +deallocated (so long as the scheduler implementation does not change
  13.508 +it explicitly!).
  13.509 +
  13.510 +\paragraph*{Return values}
  13.511 +Negative on failure.
  13.512 +
  13.513 +\subsubsection{add\_task}
  13.514 +
  13.515 +\paragraph*{Purpose}
  13.516 +
  13.517 +Called when a task is initially added by the generic layer.
  13.518 +
  13.519 +\paragraph*{Call environment}
  13.520 +
  13.521 +The fields in the {\tt task\_struct} are now filled out and available for use.
  13.522 +Schedulers should implement appropriate initialisation of any per-task private
  13.523 +information in this method.
  13.524 +
  13.525 +\subsubsection{free\_task}
  13.526 +
  13.527 +\paragraph*{Purpose}
  13.528 +
  13.529 +Schedulers should free the space used by any associated private data
  13.530 +structures.
  13.531 +
  13.532 +\paragraph*{Call environment}
  13.533 +
  13.534 +This is called when a {\tt task\_struct} is about to be deallocated.
  13.535 +The generic layer will have done generic task removal operations and
  13.536 +(if implemented) called the scheduler's {\tt rem\_task} method before
  13.537 +this method is called.
  13.538 +
  13.539 +\subsubsection{rem\_task}
  13.540 +
  13.541 +\paragraph*{Purpose}
  13.542 +
  13.543 +This is called when a task is being removed from scheduling (but is
  13.544 +not yet being freed).
  13.545 +
  13.546 +\subsubsection{wake\_up}
  13.547 +
  13.548 +\paragraph*{Purpose}
  13.549 +
  13.550 +Called when a task is woken up, this method should put the task on the runqueue
  13.551 +(or do the scheduler-specific equivalent action).
  13.552 +
  13.553 +\paragraph*{Call environment}
  13.554 +
  13.555 +The task is already set to state RUNNING.
  13.556 +
  13.557 +\subsubsection{do\_block}
  13.558 +
  13.559 +\paragraph*{Purpose}
  13.560 +
  13.561 +This function is called when a task is blocked.  This function should
  13.562 +not remove the task from the runqueue.
  13.563 +
  13.564 +\paragraph*{Call environment}
  13.565 +
  13.566 +The EVENTS\_MASTER\_ENABLE\_BIT is already set and the task state changed to
  13.567 +TASK\_INTERRUPTIBLE on entry to this method.  A call to the {\tt
  13.568 +  do\_schedule} method will be made after this method returns, in
  13.569 +order to select the next task to run.
  13.570 +
  13.571 +\subsubsection{do\_schedule}
  13.572 +
  13.573 +This method must be implemented.
  13.574 +
  13.575 +\paragraph*{Purpose}
  13.576 +
  13.577 +The method is called each time a new task must be chosen for scheduling on the
  13.578 +current CPU.  The current time as passed as the single argument (the current
  13.579 +task can be found using the {\tt current} macro).
  13.580 +
  13.581 +This method should select the next task to run on this CPU and set it's minimum
  13.582 +time to run as well as returning the data described below.
  13.583 +
  13.584 +This method should also take the appropriate action if the previous
  13.585 +task has blocked, e.g. removing it from the runqueue.
  13.586 +
  13.587 +\paragraph*{Call environment}
  13.588 +
  13.589 +The other fields in the {\tt task\_struct} are updated by the generic layer,
  13.590 +which also performs all Xen-specific tasks and performs the actual task switch
  13.591 +(unless the previous task has been chosen again).
  13.592 +
  13.593 +This method is called with the {\tt schedule\_lock} held for the current CPU
  13.594 +and local interrupts disabled.
  13.595 +
  13.596 +\paragraph*{Return values}
  13.597 +
  13.598 +Must return a {\tt struct task\_slice} describing what task to run and how long
  13.599 +for (at maximum).
  13.600 +
  13.601 +\subsubsection{control}
  13.602 +
  13.603 +\paragraph*{Purpose}
  13.604 +
  13.605 +This method is called for global scheduler control operations.  It takes a
  13.606 +pointer to a {\tt struct sched\_ctl\_cmd}, which it should either
  13.607 +source data from or populate with data, depending on the value of the
  13.608 +{\tt direction} field.
  13.609 +
  13.610 +\paragraph*{Call environment}
  13.611 +
  13.612 +The generic layer guarantees that when this method is called, the
  13.613 +caller selected the correct scheduler ID, hence the scheduler's
  13.614 +implementation does not need to sanity-check these parts of the call.
  13.615 +
  13.616 +\paragraph*{Return values}
  13.617 +
  13.618 +This function should return the value to be passed back to user space, hence it
  13.619 +should either be 0 or an appropriate errno value.
  13.620 +
  13.621 +\subsubsection{sched\_adjdom}
  13.622 +
  13.623 +\paragraph*{Purpose}
  13.624 +
  13.625 +This method is called to adjust the scheduling parameters of a particular
  13.626 +domain, or to query their current values.  The function should check
  13.627 +the {\tt direction} field of the {\tt sched\_adjdom\_cmd} it receives in
  13.628 +order to determine which of these operations is being performed.
  13.629 +
  13.630 +\paragraph*{Call environment}
  13.631 +
  13.632 +The generic layer guarantees that the caller has specified the correct
  13.633 +control interface version and scheduler ID and that the supplied {\tt
  13.634 +task\_struct} will not be deallocated during the call (hence it is not
  13.635 +necessary to {\tt get\_task\_struct}).
  13.636 +
  13.637 +\paragraph*{Return values}
  13.638 +
  13.639 +This function should return the value to be passed back to user space, hence it
  13.640 +should either be 0 or an appropriate errno value.
  13.641 +
  13.642 +\subsubsection{reschedule}
  13.643 +
  13.644 +\paragraph*{Purpose}
  13.645 +
  13.646 +This method is called to determine if a reschedule is required as a result of a
  13.647 +particular task.
  13.648 +
  13.649 +\paragraph*{Call environment}
  13.650 +The generic layer will cause a reschedule if the current domain is the idle
  13.651 +task or it has exceeded its minimum time slice before a reschedule.  The
  13.652 +generic layer guarantees that the task passed is not currently running but is
  13.653 +on the runqueue.
  13.654 +
  13.655 +\paragraph*{Return values}
  13.656 +
  13.657 +Should return a mask of CPUs to cause a reschedule on.
  13.658 +
  13.659 +\subsubsection{dump\_settings}
  13.660 +
  13.661 +\paragraph*{Purpose}
  13.662 +
  13.663 +If implemented, this should dump any private global settings for this
  13.664 +scheduler to the console.
  13.665 +
  13.666 +\paragraph*{Call environment}
  13.667 +
  13.668 +This function is called with interrupts enabled.
  13.669 +
  13.670 +\subsubsection{dump\_cpu\_state}
  13.671 +
  13.672 +\paragraph*{Purpose}
  13.673 +
  13.674 +This method should dump any private settings for the specified CPU.
  13.675 +
  13.676 +\paragraph*{Call environment}
  13.677 +
  13.678 +This function is called with interrupts disabled and the {\tt schedule\_lock}
  13.679 +for the specified CPU held.
  13.680 +
  13.681 +\subsubsection{dump\_runq\_el}
  13.682 +
  13.683 +\paragraph*{Purpose}
  13.684 +
  13.685 +This method should dump any private settings for the specified task.
  13.686 +
  13.687 +\paragraph*{Call environment}
  13.688 +
  13.689 +This function is called with interrupts disabled and the {\tt schedule\_lock}
  13.690 +for the task's CPU held.
  13.691 +
  13.692 +
  13.693 +\chapter{Debugging}
  13.694 +
  13.695 +Xen provides tools for debugging both Xen and guest OSes.  Currently, the
  13.696 +Pervasive Debugger provides a GDB stub, which provides facilities for symbolic
  13.697 +debugging of Xen itself and of OS kernels running on top of Xen.  The Trace
  13.698 +Buffer provides a lightweight means to log data about Xen's internal state and
  13.699 +behaviour at runtime, for later analysis.
  13.700 +
  13.701 +\section{Pervasive Debugger}
  13.702 +
  13.703 +Information on using the pervasive debugger is available in pdb.txt.
  13.704 +
  13.705 +
  13.706 +\section{Trace Buffer}
  13.707 +
  13.708 +The trace buffer provides a means to observe Xen's operation from domain 0.
  13.709 +Trace events, inserted at key points in Xen's code, record data that can be
  13.710 +read by the {\tt xentrace} tool.  Recording these events has a low overhead
  13.711 +and hence the trace buffer may be useful for debugging timing-sensitive
  13.712 +behaviours.
  13.713 +
  13.714 +\subsection{Internal API}
  13.715 +
  13.716 +To use the trace buffer functionality from within Xen, you must {\tt \#include
  13.717 +<xen/trace.h>}, which contains definitions related to the trace buffer.  Trace
  13.718 +events are inserted into the buffer using the {\tt TRACE\_xD} ({\tt x} = 0, 1,
  13.719 +2, 3, 4 or 5) macros.  These all take an event number, plus {\tt x} additional
  13.720 +(32-bit) data as their arguments.  For trace buffer-enabled builds of Xen these
  13.721 +will insert the event ID and data into the trace buffer, along with the current
  13.722 +value of the CPU cycle-counter.  For builds without the trace buffer enabled,
  13.723 +the macros expand to no-ops and thus can be left in place without incurring
  13.724 +overheads.
  13.725 +
  13.726 +\subsection{Trace-enabled builds}
  13.727 +
  13.728 +By default, the trace buffer is enabled only in debug builds (i.e. {\tt NDEBUG}
  13.729 +is not defined).  It can be enabled separately by defining {\tt TRACE\_BUFFER},
  13.730 +either in {\tt <xen/config.h>} or on the gcc command line.
  13.731 +
  13.732 +The size (in pages) of the per-CPU trace buffers can be specified using the
  13.733 +{\tt tbuf\_size=n } boot parameter to Xen.  If the size is set to 0, the trace
  13.734 +buffers will be disabled.
  13.735 +
  13.736 +\subsection{Dumping trace data}
  13.737 +
  13.738 +When running a trace buffer build of Xen, trace data are written continuously
  13.739 +into the buffer data areas, with newer data overwriting older data.  This data
  13.740 +can be captured using the {\tt xentrace} program in Domain 0.
  13.741 +
  13.742 +The {\tt xentrace} tool uses {\tt /dev/mem} in domain 0 to map the trace
  13.743 +buffers into its address space.  It then periodically polls all the buffers for
  13.744 +new data, dumping out any new records from each buffer in turn.  As a result,
  13.745 +for machines with multiple (logical) CPUs, the trace buffer output will not be
  13.746 +in overall chronological order.
  13.747 +
  13.748 +The output from {\tt xentrace} can be post-processed using {\tt
  13.749 +xentrace\_cpusplit} (used to split trace data out into per-cpu log files) and
  13.750 +{\tt xentrace\_format} (used to pretty-print trace data).  For the predefined
  13.751 +trace points, there is an example format file in {\tt tools/xentrace/formats }.
  13.752 +
  13.753 +For more information, see the manual pages for {\tt xentrace}, {\tt
  13.754 +xentrace\_format} and {\tt xentrace\_cpusplit}.
  13.755 +
  13.756 +
  13.757 +\chapter{Hypervisor calls}
  13.758 +
  13.759 +\section{ set\_trap\_table(trap\_info\_t *table)} 
  13.760 +
  13.761 +Install trap handler table.
  13.762 +
  13.763 +\section{ mmu\_update(mmu\_update\_t *req, int count, int *success\_count)} 
  13.764 +Update the page table for the domain. Updates can be batched.
  13.765 +success\_count will be updated to report the number of successfull
  13.766 +updates.  The update types are:
  13.767 +
  13.768 +{\it MMU\_NORMAL\_PT\_UPDATE}:
  13.769 +
  13.770 +{\it MMU\_MACHPHYS\_UPDATE}:
  13.771 +
  13.772 +{\it MMU\_EXTENDED\_COMMAND}:
  13.773 +
  13.774 +\section{ set\_gdt(unsigned long *frame\_list, int entries)} 
  13.775 +Set the global descriptor table - virtualization for lgdt.
  13.776 +
  13.777 +\section{ stack\_switch(unsigned long ss, unsigned long esp)} 
  13.778 +Request context switch from hypervisor.
  13.779 +
  13.780 +\section{ set\_callbacks(unsigned long event\_selector, unsigned long event\_address,
  13.781 +                        unsigned long failsafe\_selector, unsigned
  13.782 + long failsafe\_address) } Register OS event processing routine.  In
  13.783 + Linux both the event\_selector and failsafe\_selector are the
  13.784 + kernel's CS.  The value event\_address specifies the address for an
  13.785 + interrupt handler dispatch routine and failsafe\_address specifies a
  13.786 + handler for application faults.
  13.787 +
  13.788 +\section{ fpu\_taskswitch(void)} 
  13.789 +Notify hypervisor that fpu registers needed to be save on context switch.
  13.790 +
  13.791 +\section{ sched\_op(unsigned long op)} 
  13.792 +Request scheduling operation from hypervisor. The options are: {\it
  13.793 +yield}, {\it block}, and {\it shutdown}.  {\it yield} keeps the
  13.794 +calling domain run-able but may cause a reschedule if other domains
  13.795 +are run-able.  {\it block} removes the calling domain from the run
  13.796 +queue and the domains sleeps until an event is delivered to it.  {\it
  13.797 +shutdown} is used to end the domain's execution and allows to specify
  13.798 +whether the domain should reboot, halt or suspend..
  13.799 +
  13.800 +\section{ dom0\_op(dom0\_op\_t *op)} 
  13.801 +Administrative domain operations for domain management. The options are:
  13.802 +
  13.803 +{\it DOM0\_CREATEDOMAIN}: create new domain, specifying the name and memory usage
  13.804 +in kilobytes.
  13.805 +
  13.806 +{\it DOM0\_CREATEDOMAIN}: create domain
  13.807 +
  13.808 +{\it DOM0\_PAUSEDOMAIN}: mark domain as unschedulable
  13.809 +
  13.810 +{\it DOM0\_UNPAUSEDOMAIN}: mark domain as schedulable
  13.811 +
  13.812 +{\it DOM0\_DESTROYDOMAIN}: deallocate resources associated with the domain
  13.813 +
  13.814 +{\it DOM0\_GETMEMLIST}: get list of pages used by the domain
  13.815 +
  13.816 +{\it DOM0\_SCHEDCTL}:
  13.817 +
  13.818 +{\it DOM0\_ADJUSTDOM}: adjust scheduling priorities for domain
  13.819 +
  13.820 +{\it DOM0\_BUILDDOMAIN}: do final guest OS setup for domain
  13.821 +
  13.822 +{\it DOM0\_GETDOMAINFO}: get statistics about the domain
  13.823 +
  13.824 +{\it DOM0\_GETPAGEFRAMEINFO}:
  13.825 +
  13.826 +{\it DOM0\_IOPL}: set IO privilege level
  13.827 +
  13.828 +{\it DOM0\_MSR}:
  13.829 +
  13.830 +{\it DOM0\_DEBUG}: interactively call pervasive debugger
  13.831 +
  13.832 +{\it DOM0\_SETTIME}: set system time
  13.833 +
  13.834 +{\it DOM0\_READCONSOLE}: read console content from hypervisor buffer ring
  13.835 +
  13.836 +{\it DOM0\_PINCPUDOMAIN}: pin domain to a particular CPU
  13.837 +
  13.838 +{\it DOM0\_GETTBUFS}: get information about the size and location of
  13.839 +                      the trace buffers (only on trace-buffer enabled builds)
  13.840 +
  13.841 +{\it DOM0\_PHYSINFO}: get information about the host machine
  13.842 +
  13.843 +{\it DOM0\_PCIDEV\_ACCESS}: modify PCI device access permissions
  13.844 +
  13.845 +{\it DOM0\_SCHED\_ID}: get the ID of the current Xen scheduler
  13.846 +
  13.847 +{\it DOM0\_SHADOW\_CONTROL}:
  13.848 +
  13.849 +{\it DOM0\_SETDOMAINNAME}: set the name of a domain
  13.850 +
  13.851 +{\it DOM0\_SETDOMAININITIALMEM}: set initial memory allocation of a domain
  13.852 +
  13.853 +{\it DOM0\_SETDOMAINMAXMEM}: set maximum memory allocation of a domain
  13.854 +
  13.855 +{\it DOM0\_GETPAGEFRAMEINFO2}:
  13.856 +
  13.857 +{\it DOM0\_SETDOMAINVMASSIST}: set domain VM assist options
  13.858 +
  13.859 +
  13.860 +\section{ set\_debugreg(int reg, unsigned long value)}
  13.861 +set debug register reg to value
  13.862 +
  13.863 +\section{ get\_debugreg(int reg)}
  13.864 + get the debug register reg
  13.865 +
  13.866 +\section{ update\_descriptor(unsigned long ma, unsigned long word1, unsigned long word2)} 
  13.867 +
  13.868 +\section{ set\_fast\_trap(int idx)}
  13.869 + install traps to allow guest OS to bypass hypervisor
  13.870 +
  13.871 +\section{ dom\_mem\_op(unsigned int op, unsigned long *extent\_list, unsigned long nr\_extents, unsigned int extent\_order)}
  13.872 +Increase or decrease memory reservations for guest OS
  13.873 +
  13.874 +\section{ multicall(void *call\_list, int nr\_calls)}
  13.875 +Execute a series of hypervisor calls
  13.876 +
  13.877 +\section{ update\_va\_mapping(unsigned long page\_nr, unsigned long val, unsigned long flags)}
  13.878 +
  13.879 +\section{ set\_timer\_op(uint64\_t timeout)} 
  13.880 +Request a timer event to be sent at the specified system time.
  13.881 +
  13.882 +\section{ event\_channel\_op(void *op)} 
  13.883 +Iinter-domain event-channel management.
  13.884 +
  13.885 +\section{ xen\_version(int cmd)}
  13.886 +Request Xen version number.
  13.887 +
  13.888 +\section{ console\_io(int cmd, int count, char *str)}
  13.889 +Interact with the console, operations are:
  13.890 +
  13.891 +{\it CONSOLEIO\_write}: Output count characters from buffer str.
  13.892 +
  13.893 +{\it CONSOLEIO\_read}: Input at most count characters into buffer str.
  13.894 +
  13.895 +\section{ physdev\_op(void *physdev\_op)}
  13.896 +
  13.897 +\section{ grant\_table\_op(unsigned int cmd, void *uop, unsigned int count)}
  13.898 +
  13.899 +\section{ vm\_assist(unsigned int cmd, unsigned int type)}
  13.900 +
  13.901 +\section{ update\_va\_mapping\_otherdomain(unsigned long page\_nr, unsigned long val, unsigned long flags, uint16\_t domid)}
  13.902 +
  13.903 +\end{document}
    14.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    14.2 +++ b/docs/src/user.tex	Tue Oct 26 14:12:48 2004 +0000
    14.3 @@ -0,0 +1,1611 @@
    14.4 +\documentclass[11pt,twoside,final,openright]{xenstyle}
    14.5 +\usepackage{a4,graphicx,setspace}
    14.6 +\setstretch{1.15}
    14.7 +
    14.8 +\begin{document}
    14.9 +
   14.10 +% TITLE PAGE
   14.11 +\pagestyle{empty}
   14.12 +\begin{center}
   14.13 +\vspace*{\fill}
   14.14 +\includegraphics{figs/xenlogo.eps}
   14.15 +\vfill
   14.16 +\vfill
   14.17 +\vfill
   14.18 +\begin{tabular}{l}
   14.19 +{\Huge \bf Users' manual} \\[4mm]
   14.20 +{\huge Xen v2.0 for x86} \\[80mm]
   14.21 +
   14.22 +{\Large Xen is Copyright (c) 2004, The Xen Team} \\[3mm]
   14.23 +{\Large University of Cambridge, UK} \\[20mm]
   14.24 +{\large Last updated on 12th October, 2004}
   14.25 +\end{tabular}
   14.26 +\vfill
   14.27 +\end{center}
   14.28 +\cleardoublepage
   14.29 +
   14.30 +% TABLE OF CONTENTS
   14.31 +\pagestyle{plain}
   14.32 +\pagenumbering{roman}
   14.33 +{ \parskip 0pt plus 1pt
   14.34 +  \tableofcontents }
   14.35 +\cleardoublepage
   14.36 +
   14.37 +% PREPARE FOR MAIN TEXT
   14.38 +\pagenumbering{arabic}
   14.39 +\raggedbottom
   14.40 +\widowpenalty=10000
   14.41 +\clubpenalty=10000
   14.42 +\parindent=0pt
   14.43 +\renewcommand{\topfraction}{.8}
   14.44 +\renewcommand{\bottomfraction}{.8}
   14.45 +\renewcommand{\textfraction}{.2}
   14.46 +\renewcommand{\floatpagefraction}{.8}
   14.47 +\setstretch{1.15}
   14.48 +
   14.49 +\newcommand{\path}[1]{{\tt #1}}
   14.50 +
   14.51 +\part{Introduction and Tutorial}
   14.52 +\chapter{Introduction}
   14.53 +
   14.54 +{\bf
   14.55 +DISCLAIMER: This documentation is currently under active development
   14.56 +and as such there may be mistakes and omissions --- watch out for
   14.57 +these and please report any you find to the developer's mailing list.
   14.58 +Contributions of material, suggestions and corrections are welcome.
   14.59 +}
   14.60 +
   14.61 +Xen is a { \em paravirtualising } virtual machine monitor (VMM) or
   14.62 +``Hypervisor'' for the x86 processor architecture.  Xen can securely
   14.63 +multiplex heterogeneous virtual machines on a single physical with
   14.64 +near-native performance.  The virtual machine technology facilitates
   14.65 +enterprise-grade functionality, including:
   14.66 +
   14.67 +\begin{itemize}
   14.68 +\item Virtual machines with close to native performance.
   14.69 +\item Live migration of running virtual machines.
   14.70 +\item Excellent hardware support (use unmodified Linux device drivers).
   14.71 +\item Suspend to disk / resume from disk of running virtual machines.
   14.72 +\item Transparent copy on write disks.
   14.73 +\item Sandboxed, restartable device drivers.
   14.74 +\item Pervasive debugging - debug whole OSes, from kernel to applications.
   14.75 +\end{itemize}
   14.76 +
   14.77 +Xen support is available for increasingly many operating systems.  The
   14.78 +following OSs have either been ported already or a port is in
   14.79 +progress:
   14.80 +\begin{itemize}
   14.81 +\item Linux 2.4
   14.82 +\item Linux 2.6
   14.83 +\item NetBSD 2.0
   14.84 +\item Dragonfly BSD
   14.85 +\item FreeBSD 5.3
   14.86 +\item Plan 9
   14.87 +% \item Windows XP
   14.88 +\end{itemize}
   14.89 +
   14.90 +Right now, Linux 2.4, Linux 2.6 and NetBSD are available for Xen 2.0.
   14.91 +It is intended that Xen support be integrated into the official
   14.92 +releases of Linux 2.6, NetBSD 2.0, FreeBSD and Dragonfly BSD.
   14.93 +
   14.94 +Even running multiple copies of Linux can be very useful, providing a
   14.95 +means of containing faults to one OS image, providing performance
   14.96 +isolation between the various OS instances and trying out multiple
   14.97 +distros.
   14.98 +
   14.99 +% The Windows XP port is only available to those who have signed the
  14.100 +% Microsoft Academic Source License.  Publically available XP support
  14.101 +% will not be available for the foreseeable future (this may change when
  14.102 +% Intel's Vanderpool Technology becomes available).
  14.103 +
  14.104 +Possible usage scenarios for Xen include:
  14.105 +\begin{description}
  14.106 +\item [Kernel development] test and debug kernel modifications in a
  14.107 +      sandboxed virtual machine --- no need for a separate test
  14.108 +      machine
  14.109 +\item [Multiple OS Configurations] run multiple operating systems
  14.110 +      simultaneously, for instance for compatibility or QA purposes
  14.111 +\item [Server consolidation] move multiple servers onto one box,
  14.112 +      provided performance and fault isolation at virtual machine
  14.113 +      boundaries
  14.114 +\item [Cluster computing] improve manageability and efficiency by
  14.115 +      running services in virtual machines, isolated from
  14.116 +      machine-specifics and load balance using live migration
  14.117 +\item [High availability computing] run device drivers in sandboxed
  14.118 +      domains for increased robustness
  14.119 +\item [Hardware support for custom OSes] export drivers from a
  14.120 +      mainstream OS (e.g. Linux) with good hardware support
  14.121 +      to your custom OS, avoiding the need for you to port existing
  14.122 +      drivers to achieve good hardware support
  14.123 +\end{description}
  14.124 +
  14.125 +\section{Structure}
  14.126 +
  14.127 +\subsection{High level}
  14.128 +
  14.129 +A Xen system has multiple layers.  The lowest layer is Xen itself ---
  14.130 +the most privileged piece of code in the system.  On top of Xen run
  14.131 +guest operating system kernels.  These are scheduled pre-emptively by
  14.132 +Xen.  On top of these run the applications of the guest OSs.  Guest
  14.133 +OSs are responsible for scheduling their own applications within the
  14.134 +time allotted to them by Xen.
  14.135 +
  14.136 +One of the domains --- { \em Domain 0 } --- is privileged.  It is
  14.137 +started by Xen at system boot and is responsible for initialising and
  14.138 +managing the whole machine.  Domain 0 builds other domains and manages
  14.139 +their virtual devices.  It also performs suspend, resume and
  14.140 +migration of other virtual machines.  Where it is used, the X server
  14.141 +is also run in domain 0.
  14.142 +
  14.143 +Within Domain 0, a process called ``Xend'' runs to manage the system.
  14.144 +Xend is responsible for managing virtual machines and providing access
  14.145 +to their consoles.  Commands are issued to Xend over an HTTP
  14.146 +interface, either from a command-line tool or from a web browser.
  14.147 +
  14.148 +XXX need diagram(s) here to make this make sense
  14.149 +
  14.150 +\subsection{Paravirtualisation}
  14.151 +
  14.152 +Paravirtualisation allows very high performance virtual machine
  14.153 +technology, even on architectures (like x86) which are traditionally
  14.154 +hard to virtualise.
  14.155 +
  14.156 +Paravirtualisation requires guest operating systems to be { \em ported
  14.157 +} to run on the VMM.  This process is similar to a port of an
  14.158 +operating system to a new hardware platform.  Although operating
  14.159 +system kernels must explicitly support Xen in order to run in a
  14.160 +virtual machine, { \em user space applications and libraries
  14.161 +do not require modification }.
  14.162 +
  14.163 +\section{Hardware Support}
  14.164 +
  14.165 +Xen currently runs on the x86 architecture, but could in principle be
  14.166 +ported to others. In fact, it would have been rather easier to write
  14.167 +Xen for pretty much any other architecture as x86 is particularly
  14.168 +tricky to handle. A good description of Xen's design, implementation
  14.169 +and performance is contained in the October 2003 SOSP paper, available
  14.170 +at:\\
  14.171 +{\tt http://www.cl.cam.ac.uk/netos/papers/2003-xensosp.pdf}\\
  14.172 +Work to port Xen to x86\_64 and IA64 is currently underway.
  14.173 +
  14.174 +Xen requires a ``P6'' or newer processor (e.g. Pentium Pro, Celeron,
  14.175 +Pentium II, Pentium III, Pentium IV, Xeon, AMD Athlon, AMD Duron).
  14.176 +Multiprocessor machines are supported, and we also have basic support
  14.177 +for HyperThreading (SMT), although this remains a topic for ongoing
  14.178 +research.  We're also working on an x86\_64 port (though Xen already
  14.179 +runs on these systems just fine in 32-bit mode).
  14.180 +
  14.181 +Xen can currently use up to 4GB of memory.  It is possible for x86
  14.182 +machines to address up to 64GB of physical memory but (unless an
  14.183 +external developer volunteers) there are no plans to support these
  14.184 +systems.  The x86\_64 port is the planned route to supporting more
  14.185 +than 4GB of memory.
  14.186 +
  14.187 +Xen offloads most of the hardware support issues to the guest OS
  14.188 +running in Domain 0.  Xen itself only contains code to detect and
  14.189 +start additional processors, setup interrupt routing and perform PCI
  14.190 +bus enumeration.  Device drivers run within a privileged guest OS
  14.191 +rather than within Xen itself.  This means that we should be
  14.192 +compatible with the majority of device hardware supported by Linux.
  14.193 +The default XenLinux build contains support for relatively modern
  14.194 +server-class network and disk hardware, but you can add support for
  14.195 +other hardware by configuring your XenLinux kernel in the normal way
  14.196 +(e.g. \verb_# make ARCH=xen menuconfig_).
  14.197 +
  14.198 +\section{History}
  14.199 +
  14.200 +
  14.201 +``Xen'' is a Virtual Machine Monitor (VMM) originally developed by the
  14.202 +Systems Research Group of the University of Cambridge Computer
  14.203 +Laboratory, as part of the UK-EPSRC funded XenoServers project.
  14.204 +
  14.205 +The XenoServers project aims to provide a ``public infrastructure for
  14.206 +global distributed computing'', and Xen plays a key part in that,
  14.207 +allowing us to efficiently partition a single machine to enable
  14.208 +multiple independent clients to run their operating systems and
  14.209 +applications in an environment providing protection, resource
  14.210 +isolation and accounting.  The project web page contains further
  14.211 +information along with pointers to papers and technical reports:
  14.212 +{\tt http://www.cl.cam.ac.uk/xeno}
  14.213 +
  14.214 +Xen has since grown into a project in its own right, enabling us to
  14.215 +investigate interesting research issues regarding the best techniques
  14.216 +for virtualizing resources such as the CPU, memory, disk and network.
  14.217 +The project has been bolstered by support from Intel Research
  14.218 +Cambridge, and HP Labs, who are now working closely with us.
  14.219 +% We're also in receipt of support from Microsoft Research Cambridge to
  14.220 +% port Windows XP to run on Xen.
  14.221 +
  14.222 +Xen was first described in the 2003 paper at SOSP \\
  14.223 +({\tt http://www.cl.cam.ac.uk/netos/papers/2003-xensosp.pdf}).
  14.224 +The first public release of Xen (1.0) was made in October 2003.  Xen
  14.225 +was developed as a research project by the University of Cambridge
  14.226 +Computer Laboratory (UK).  Xen was the first Virtual Machine Monitor
  14.227 +to make use of {\em paravirtualisation} to achieve near-native
  14.228 +performance virtualisation of commodity operating systems.  Since
  14.229 +then, Xen has been extensively developed and is now used in production
  14.230 +scenarios on multiple sites.
  14.231 +
  14.232 +Xen 2.0 is the latest release, featuring greatly enhanced hardware
  14.233 +support, configuration flexibility, usability and a larger complement
  14.234 +of supported operating systems.  We think that Xen has the potential
  14.235 +to become {\em the} definitive open source virtualisation solution and
  14.236 +will work to conclusively achieve that position.
  14.237 +
  14.238 +
  14.239 +\chapter{Installation}
  14.240 +
  14.241 +The Xen distribution includes three main components:  Xen itself,
  14.242 +utilities to convert a standard Linux tree to run on Xen and the
  14.243 +userspace tools required to operate a Xen-based system.
  14.244 +
  14.245 +This manual describes how to install the Xen 2.0 distribution from
  14.246 +source.  Alternatively, there may be packages available for your
  14.247 +operating system distribution.
  14.248 +
  14.249 +\section{Prerequisites}
  14.250 +\label{sec:prerequisites}
  14.251 +\begin{itemize}
  14.252 +\item A working installation of your favourite Linux distribution.
  14.253 +\item A working installation of the GRUB bootloader.
  14.254 +\item An installation of Twisted v1.3 or above (see {\tt
  14.255 +http://www.twistedmatrix.com}).  There may be a package available for
  14.256 +your distribution; alternatively it can be installed by running {\tt \#
  14.257 +make install-twisted} in the root of the Xen source tree.
  14.258 +\item The Linux bridge control tools (see {\tt
  14.259 +http://bridge.sourceforge.net}).  There may be packages of these tools
  14.260 +available for your distribution.
  14.261 +\item Linux IP Routing Tools
  14.262 +\item make
  14.263 +\item gcc
  14.264 +\item libcurl
  14.265 +\item zlib-dev
  14.266 +\item python-dev
  14.267 +\item python2.3-pycurl
  14.268 +\item python2.3-twisted
  14.269 +\end{itemize}
  14.270 +
  14.271 +\section{Optional}
  14.272 +\begin{itemize}
  14.273 +\item The Python logging package (see {\tt http://www.red-dove.com/})
  14.274 +for additional Xend logging functionality.
  14.275 +\end{itemize}
  14.276 +
  14.277 +\section{Install Bitkeeper (Optional)}
  14.278 +
  14.279 +To fetch a local copy, first download the BitKeeper tools.
  14.280 +Download instructions must be obtained by filling out the provided
  14.281 +form at: \\ {\tt
  14.282 +http://www.bitmover.com/cgi-bin/download.cgi }
  14.283 +
  14.284 +The BitKeeper install program is designed to be run with X.  If X is
  14.285 +not available, you can specify the install directory on the command
  14.286 +line.
  14.287 +
  14.288 +\section{Download the Xen source code}
  14.289 +
  14.290 +\subsection{Using Bitkeeper}
  14.291 +
  14.292 +The public master BK repository for the 2.0 release lives at: \\
  14.293 +{\tt bk://xen.bkbits.net/xen-2.0.bk}.  You can use Bitkeeper to
  14.294 +download it and keep it updated with the latest features and fixes.
  14.295 +
  14.296 +Change to the directory in which you want to put the source code, then
  14.297 +run:
  14.298 +\begin{verbatim}
  14.299 +# bk clone bk://xen.bkbits.net/xen-2.0.bk
  14.300 +\end{verbatim}
  14.301 +
  14.302 +Under your current directory, a new directory named `xen-2.0.bk' has
  14.303 +been created, which contains all the source code for the Xen
  14.304 +hypervisor and the Xen tools.  The directory also contains `sparse' OS
  14.305 +source trees, containing only the files that require changes to allow
  14.306 +the OS to run on Xen.
  14.307 +
  14.308 +Once you have cloned the repository, you can update to the newest
  14.309 +changes to the repository by running:
  14.310 +\begin{verbatim}
  14.311 +# cd xen-2.0.bk # to change into the local repository
  14.312 +# bk pull       # to update the repository
  14.313 +\end{verbatim}
  14.314 +
  14.315 +\subsection{Without Bitkeeper}
  14.316 +
  14.317 +The Xen source tree is also available in gzipped tarball form from the
  14.318 +Xen downloads page:\\
  14.319 +{\tt http://www.cl.cam.ac.uk/Research/SRG/netos/xen/downloads.html}.
  14.320 +Prebuilt tarballs are also available from this page but are very large.
  14.321 +
  14.322 +\section{The distribution}
  14.323 +
  14.324 +The Xen source code repository is structured as follows:
  14.325 +
  14.326 +\begin{description}
  14.327 +\item[\path{tools/}] Xen node controller daemon (Xend), command line tools, 
  14.328 +  control libraries
  14.329 +\item[\path{xen/}] The Xen hypervisor itself.
  14.330 +\item[\path{linux-2.4.27-xen/}] Xen support for Linux 2.4
  14.331 +\item[\path{linux-2.6.8.1-xen/}] Xen support for Linux 2.6
  14.332 +\item[\path{netbsd-2.0-xen-sparse/}] Xen support for NetBSD 2.0
  14.333 +\item[\path{docs/}] various documentation files for users and developers
  14.334 +\item[\path{extras/}] currently this contains the Mini OS, aimed at developers
  14.335 +\end{description}
  14.336 +
  14.337 +\section{Build and install}
  14.338 +
  14.339 +The Xen makefile includes a target ``world'' that will do the
  14.340 +following:
  14.341 +
  14.342 +\begin{itemize}
  14.343 +\item Build Xen
  14.344 +\item Build the control tools, including Xend
  14.345 +\item Download (if necessary) and unpack the Linux 2.6 source code,
  14.346 +      and patch it for use with Xen
  14.347 +\item Build a Linux kernel to use in domain 0 and a smaller
  14.348 +      unprivileged kernel, which can optionally be used for
  14.349 +      unprivileged virtual machines.
  14.350 +\end{itemize}
  14.351 +
  14.352 +Inspect the Makefile if you want to see what goes on during a build.
  14.353 +Building Xen and the tools is straightforward, but XenLinux is more
  14.354 +complicated.  The makefile needs a `pristine' linux kernel tree which
  14.355 +it will then add the Xen architecture files to.  You can tell the
  14.356 +makefile the location of the appropriate linux compressed tar file by
  14.357 +setting the LINUX\_SRC environment variable, e.g. \\
  14.358 +\verb!# LINUX_SRC=/tmp/linux-2.6.8.1.tar.bz2 make world! \\ or by
  14.359 +placing the tar file somewhere in the search path of {\tt
  14.360 +LINUX\_SRC\_PATH} which defaults to ``{\tt .:..}".  If the makefile
  14.361 +can't find a suitable kernel tar file it attempts to download it from
  14.362 +kernel.org (this won't work if you're behind a firewall).
  14.363 +
  14.364 +After untaring the pristine kernel tree, the makefile uses the {\tt
  14.365 +mkbuildtree} script to add the Xen patches to the kernel.  It then
  14.366 +builds two different XenLinux images, one with a ``-xen0'' extension
  14.367 +which contains hardware device drivers and drivers for Xen's virtual
  14.368 +devices, and one with a ``-xenU'' extension that just contains the
  14.369 +virtual ones.
  14.370 +
  14.371 +The procedure is similar to build the Linux 2.4 port: \\
  14.372 +\verb!# LINUX_SRC=/path/to/linux2.4/source make linux24!
  14.373 +
  14.374 +The NetBSD port can be built using: \\ \verb!# make netbsd! \\ The
  14.375 +NetBSD port is built using a snapshot of the netbsd-2-0 cvs branch.
  14.376 +The snapshot is downloaded as part of the build process, if it is not
  14.377 +yet present in the {\tt NETBSD\_SRC\_PATH} search path.  The build
  14.378 +process also downloads a toolchain which includes all the tools
  14.379 +necessary to build the NetBSD kernel under Linux.
  14.380 +
  14.381 +If you have an SMP machine you may wish to give the {\tt '-j4'}
  14.382 +argument to make to get a parallel build.
  14.383 +
  14.384 +XXX Insert details on customising the kernel to be built.
  14.385 +i.e. merging config files
  14.386 +
  14.387 +If you have an existing Linux kernel configuration that you would like
  14.388 +to use for domain 0, you should copy it to
  14.389 +install/boot/config-2.6.8.1-xen0.  During the first build, you may be
  14.390 +asked about some Xen-specific options.  We advised accepting the
  14.391 +defaults for these options.
  14.392 +
  14.393 +\framebox{\parbox{5in}{
  14.394 +{\bf Distro specific:} \\
  14.395 +{\it Gentoo} --- if not using udev (most installations, currently), you'll need
  14.396 +to enable devfs and devfs mount at boot time in the xen0 config.
  14.397 +}}
  14.398 +
  14.399 +The files produced by the build process are stored under the
  14.400 +\path{install/} directory.  To install them in their default
  14.401 +locations, do: \\
  14.402 +\verb_# make install_
  14.403 +
  14.404 +Alternatively, users with special installation requirements may wish
  14.405 +to install them manually by copying the files to their appropriate
  14.406 +destinations.
  14.407 +
  14.408 +Files in \path{install/boot/} include:
  14.409 +\begin{itemize}
  14.410 +\item \path{install/boot/xen.gz} The Xen 'kernel'
  14.411 +\item \path{install/boot/vmlinuz-2.6.8.1-xen0}  Domain 0 XenLinux kernel
  14.412 +\item \path{install/boot/vmlinuz-2.6.8.1-xenU}  Unprivileged XenLinux kernel
  14.413 +\end{itemize}
  14.414 +
  14.415 +The difference between the two Linux kernels that are built is due to
  14.416 +the configuration file used for each.  The "U" suffixed unprivileged
  14.417 +version doesn't contain any of the physical hardware device drivers
  14.418 +--- it is 30\% smaller and hence may be preferred for your
  14.419 +non-privileged domains.  The ``0'' suffixed privileged version can be
  14.420 +used to boot the system, as well as in driver domains and unprivileged
  14.421 +domains.
  14.422 +
  14.423 +The \path{install/boot} directory will also contain the config files
  14.424 +used for building the XenLinux kernels, and also versions of Xen and
  14.425 +XenLinux kernels that contain debug symbols (\path{xen-syms} and
  14.426 +\path{vmlinux-syms-2.6.8.1-xen0}) which are essential for interpreting crash
  14.427 +dumps.  Retain these files as the developers may wish to see them if
  14.428 +you post on the mailing list.
  14.429 +
  14.430 +\section{Configuration}
  14.431 +
  14.432 +\subsection{GRUB Configuration}
  14.433 +
  14.434 +An entry should be added to \path{grub.conf} (often found under
  14.435 +\path{/boot/} or \path{/boot/grub/}) to allow Xen / XenLinux to boot.
  14.436 +This file is sometimes called \path{menu.lst}, depending on your
  14.437 +distribution.  The entry should look something like the following:
  14.438 +
  14.439 +\begin{verbatim}
  14.440 +title Xen 2.0 / XenLinux 2.6.8.1
  14.441 +  kernel /boot/xen.gz dom0_mem=131072 com1=115200,8n1
  14.442 +  module /boot/vmlinuz-2.6.8.1-xen0 root=/dev/sda4 ro console=tty0 console=ttyS0
  14.443 +\end{verbatim}
  14.444 +
  14.445 +The first line of the configuration (kernel...) tells GRUB where to
  14.446 +find Xen itself and what boot parameters should be passed to it (in
  14.447 +this case, setting domain 0's memory allocation and the settings for
  14.448 +the serial port).
  14.449 +
  14.450 +The second line of the configuration describes the location of the
  14.451 +XenLinux kernel that Xen should start and the parameters that should
  14.452 +be passed to it (these are standard Linux parameters, identifying the
  14.453 +root device and specifying it be initially mounted read only and
  14.454 +instructing that console output be sent both to the screen and to the
  14.455 +serial port).
  14.456 +
  14.457 +As always when installing a new kernel, it is recommended that you do
  14.458 +not remove the original contents of \path{menu.lst} --- you may want
  14.459 +to boot up with your old Linux kernel in future, particularly if you
  14.460 +have problems.
  14.461 +
  14.462 +\framebox{\parbox{5in}{
  14.463 +{\bf Distro specific:} \\
  14.464 +{\it SuSE} --- Omit the {\tt ro} option from the XenLinux kernel
  14.465 +command line, since the partition won't be remounted rw during boot.
  14.466 +}}
  14.467 +
  14.468 +\subsection{Serial Console}
  14.469 +
  14.470 +In order to configure serial console output, it is necessary to add a
  14.471 +line into \path{/etc/inittab}.  The XenLinux console driver is
  14.472 +designed to make this procedure the same as configuring a normal
  14.473 +serial console.  Add the line:
  14.474 +
  14.475 +{\tt c:2345:respawn:/sbin/mingetty ttyS0}
  14.476 +
  14.477 +\subsection{TLS Libraries}
  14.478 +
  14.479 +Users of the XenLinux 2.6 kernel should disable Thread Local Storage
  14.480 +(e.g. by doing a {\tt mv /lib/tls /lib/tls.disabled}) before
  14.481 +attempting to run with a XenLinux kernel.  You can always reenable it
  14.482 +by restoring the directory to its original location (i.e. {\tt mv
  14.483 +  /lib/tls.disabled /lib/tls}).
  14.484 +
  14.485 +The TLS implementation uses segmentation in a way that is not
  14.486 +permissable under Xen.  If TLS is not disabled, an emulation mode is
  14.487 +used within Xen which reduces performance substantially and is not
  14.488 +guaranteed to work perfectly.
  14.489 +
  14.490 +\section{Test the new install}
  14.491 +
  14.492 +It should now be possible to restart the system and use Xen.  Reboot
  14.493 +as usual but choose the new Xen option when the Grub screen appears.
  14.494 +
  14.495 +What follows should look much like a conventional Linux boot.  The
  14.496 +first portion of the output comes from Xen itself, supplying low level
  14.497 +information about itself and the machine it is running on.  The
  14.498 +following portion of the output comes from XenLinux itself.
  14.499 +
  14.500 +You may see some errors during the XenLinux boot.  These are not
  14.501 +necessarily anything to worry about --- they may result from kernel
  14.502 +configuration differences between your XenLinux kernel and the one you
  14.503 +usually use.
  14.504 +
  14.505 +When the boot completes, you should be able to log into your system as
  14.506 +usual.  If you are unable to log in to your system running Xen, you
  14.507 +should still be able to reboot with your normal Linux kernel.
  14.508 +
  14.509 +
  14.510 +\chapter{Starting a domain}
  14.511 +
  14.512 +The first step in creating a new domain is to prepare a root
  14.513 +filesystem for it to boot off.  Typically, this might be stored in a
  14.514 +normal partition, an LVM or other volume manager partition, a disk
  14.515 +file or on an NFS server.
  14.516 +
  14.517 +A simple way to do this is simply to boot from your standard OS
  14.518 +install CD and install the distribution into another partition on your
  14.519 +hard drive.
  14.520 +
  14.521 +{\em N.b } you can boot with Xen and XenLinux without installing any
  14.522 +special userspace tools but will need to have the prerequisites
  14.523 +described in Section~\ref{sec:prerequisites} and the Xen control tools
  14.524 +installed before you proceed.
  14.525 +
  14.526 +\section{From the web interface}
  14.527 +
  14.528 +Boot the Xen machine and start Xensv (see Chapter~\ref{cha:xensv} for
  14.529 +more details) using the command: \\
  14.530 +\verb_# xensv start_ \\
  14.531 +This will also start Xend (see Chapter~\ref{cha:xend} for more information).
  14.532 +
  14.533 +The domain management interface will then be available at {\tt
  14.534 +http://your\_machine:8080/}.  This provides a user friendly wizard for
  14.535 +starting domains and functions for managing running domains.
  14.536 +
  14.537 +\section{From the command line}
  14.538 +
  14.539 +Full details of the {\tt xm} tool are found in Chapter~\ref{cha:xm}.
  14.540 +
  14.541 +This example explains how to use the \path{xmdefconfig} file.  If you
  14.542 +require a more complex setup, you will want to write a custom
  14.543 +configuration file --- details of the configuration file formats are
  14.544 +included in Chapter~\ref{cha:config}.
  14.545 +
  14.546 +The \path{xmexample1} file is a simple template configuration file
  14.547 +for describing a single VM.
  14.548 +
  14.549 +The \path{xmexample2} file is a template description that is intended
  14.550 +to be reused for multiple virtual machines.  Setting the value of the
  14.551 +{\tt vmid} variable on the {\tt xm} command line
  14.552 +fills in parts of this template.
  14.553 +
  14.554 +Both of them can be found in \path{/etc/xen/}
  14.555 +\subsection{Editing \path{xmdefconfig}}
  14.556 +
  14.557 +At minimum, you should edit the following variables in \path{/etc/xen/xmdefconfig}:
  14.558 +
  14.559 +\begin{description}
  14.560 +\item[kernel] Set this to the path of the kernel you compiled for use
  14.561 +              with Xen. [e.g. {\tt kernel =
  14.562 +              '/root/xen-2.0.bk/install/boot/vmlinuz-2.4.27-xenU'}]
  14.563 +\item[memory] Set this to the size of the domain's memory in
  14.564 +megabytes. [e.g. {\tt memory = 64 } ]
  14.565 +\item[disk] Set the first entry in this list to calculate the offset
  14.566 +of the domain's root partition, based on the domain ID.  Set the
  14.567 +second to the location of \path{/usr} (if you are sharing it between
  14.568 +domains). [i.e. {\tt disk = ['phy:your\_hard\_drive\%d,sda1,w' \%
  14.569 +(base\_partition\_number + vmid), 'phy:your\_usr\_partition,sda6,r' ]}
  14.570 +\item[dhcp] Uncomment the dhcp variable, so that the domain will
  14.571 +receive its IP address from a DHCP server. [i.e. {\tt dhcp=''dhcp''}]
  14.572 +\end{description}
  14.573 +
  14.574 +You may also want to edit the {\bf vif} variable in order to choose
  14.575 +the MAC address of the virtual ethernet interface yourself.  For
  14.576 +example: \\ \verb_vif = ['mac=00:06:AA:F6:BB:B3']_\\ If you do not set
  14.577 +this variable, Xend will automatically generate a random MAC address
  14.578 +from an unused range.
  14.579 +
  14.580 +If you don't have a \path{xmdefconfig} file, simply create your own 
  14.581 +by copying one of the \path{/etc/xen/xmexample} files.
  14.582 +\subsection{Starting the domain}
  14.583 +
  14.584 +The {\tt xm} tool provides a variety of commands for managing domains.
  14.585 +Use the {\tt create} command to start new domains.  To start the
  14.586 +virtual machine with virtual machine ID 1.
  14.587 +
  14.588 +\begin{verbatim}
  14.589 +# xm create -c vmid=1
  14.590 +\end{verbatim}
  14.591 +
  14.592 +The {\tt -c} switch causes {\tt xm} to turn into the domain's console
  14.593 +after creation.  The {\tt vmid=1} sets the {\tt vmid} variable used in
  14.594 +the {\tt xmdefconfig} file.  The tool uses the
  14.595 +\path{/etc/xen/xmdefconfig} file, since no custom configuration file
  14.596 +was specified on the command line.
  14.597 +
  14.598 +\section{Example: ttylinux}
  14.599 +
  14.600 +Ttylinux is a very small Linux distribution, designed to
  14.601 +require very few resources.  We will use it as a concrete example of
  14.602 +how to start a Xen domain.  Most users will probably want to install a
  14.603 +more complex mainstream distribution once they have mastered the
  14.604 +basics.
  14.605 +
  14.606 +\begin{enumerate}
  14.607 +\item Download the ttylinux disk image from XXX where from?
  14.608 +\item Create a configuration file like the following:
  14.609 +\begin{verbatim}
  14.610 +kernel = "/boot/vmlinuz-2.6.8.1-xenU" # or a 2.4 kernel or a xen0 kernel
  14.611 +memory = 64
  14.612 +name = "ttylinux"
  14.613 +cpu = -1 # leave to Xen to pick
  14.614 +nics = 1
  14.615 +ip = "1.2.3.4"
  14.616 +disk = ['file:/path/to/ttylinux-disk,sda1,w']
  14.617 +root = "/dev/sda1 ro"
  14.618 +\end{verbatim}
  14.619 +\item Now start the domain and connect to its console:
  14.620 +\begin{verbatim}
  14.621 +xm create -f configfile -c
  14.622 +\end{verbatim}
  14.623 +\item Login as root, password root.
  14.624 +\end{enumerate}
  14.625 +
  14.626 +\section{Starting / Stopping domains automatically}
  14.627 +
  14.628 +It is possible to have certain domains start automatically at boot
  14.629 +time and to have dom0 wait for all running domains to shutdown before
  14.630 +it shuts down the system.
  14.631 +
  14.632 +To specify a domain is to start at boot-time, place its
  14.633 +configuration file (or a link to it) under \path{/etc/xen/auto/}.
  14.634 +
  14.635 +A Sys-V style init script for RedHat and LSB-compliant systems is
  14.636 +provided and will be automatically copied to \path{/etc/init.d/}
  14.637 +during install.  You can then enable it in the appriate way for your
  14.638 +distribution.
  14.639 +
  14.640 +For instance, on RedHat:
  14.641 +
  14.642 +\verb_# chkconfig --add xendomains_
  14.643 +
  14.644 +By default, this will start the boot-time domains in runlevels 3, 4
  14.645 +and 5.
  14.646 +
  14.647 +You can also use the {\tt service} command to run this script manually, e.g:
  14.648 +
  14.649 +\verb_# service xendomains start_
  14.650 +
  14.651 +Starts all the domains with config files under /etc/xen/auto/.
  14.652 +
  14.653 +\verb_# service xendomains stop_
  14.654 +
  14.655 +Shuts down ALL running Xen domains.
  14.656 +
  14.657 +
  14.658 +\chapter{Domain management tasks}
  14.659 +
  14.660 +The previous chapter described a simple example of how to configure
  14.661 +and start a domain.  This chapter summarises the tools available to
  14.662 +manage running domains.
  14.663 +
  14.664 +\section{Command line management}
  14.665 +
  14.666 +Command line management tasks are also performed using the {\tt xm}
  14.667 +tool.  For online help for the commands available, type:\\
  14.668 +\verb_# xm help_
  14.669 +
  14.670 +\subsection{Basic management commands}
  14.671 +
  14.672 +The most important {\tt xm} commands are: \\
  14.673 +\verb_# xm list_ : Lists all domains running. \\
  14.674 +\verb_# xm consoles_ : Gives information about the domain consoles. \\
  14.675 +\verb_# xm console_: open a console to a domain.
  14.676 +e.g. \verb_# xm console 1_ (open console to domain 1)
  14.677 +
  14.678 +\subsection{\tt xm list}
  14.679 +
  14.680 +The output of {\tt xm list} is in rows of the following format:\\
  14.681 +\verb_name domid memory cpu state cputime console_
  14.682 +
  14.683 +\begin{description}
  14.684 +\item[name]  The descriptive name of the virtual machine.
  14.685 +\item[domid] The number of the domain ID this virtual machine is running in.
  14.686 +\item[memory] Memory size in megabytes.
  14.687 +\item[cpu]   The CPU this domain is running on.
  14.688 +\item[state] Domain state consists of 5 fields:
  14.689 +  \begin{description}
  14.690 +  \item[r] running
  14.691 +  \item[b] blocked
  14.692 +  \item[p] paused
  14.693 +  \item[s] shutdown
  14.694 +  \item[c] crashed
  14.695 +  \end{description}
  14.696 +\item[cputime] How much CPU time (in seconds) the domain has used so far.
  14.697 +\item[console] TCP port accepting connections to the domain's console.
  14.698 +\end{description}
  14.699 +
  14.700 +The {\tt xm list} command also supports a long output format when the
  14.701 +{\tt -l} switch is used.  This outputs the fulls details of the
  14.702 +running domains in Xend's SXP configuration format.
  14.703 +
  14.704 +For example, suppose the system is running the ttylinux domain as
  14.705 +described earlier.  The list command should produce output somewhat
  14.706 +like the following:
  14.707 +\begin{verbatim}
  14.708 +# xm list
  14.709 +Name              Id  Mem(MB)  CPU  State  Time(s)  Console
  14.710 +Domain-0           0      251    0  r----    172.2        
  14.711 +ttylinux           5       63    0  -b---      3.0    9605
  14.712 +\end{verbatim}
  14.713 +
  14.714 +Here we can see the details for the ttylinux domain, as well as for
  14.715 +domain 0 (which of course is always running).  Note that the console
  14.716 +port for the ttylinux domain is 9605.  This can be connected to by TCP
  14.717 +using a terminal program (e.g. {\tt telnet} or, better, {\tt
  14.718 +xencons}).  The simplest way to connect is to use the {\tt xm console}
  14.719 +command, specifying the domain name or ID.  To connect to the console
  14.720 +of the ttylinux domain, we could use:
  14.721 +\begin{verbatim}
  14.722 +# xm console ttylinux
  14.723 +\end{verbatim}
  14.724 +or:
  14.725 +\begin{verbatim}
  14.726 +# xm console 5
  14.727 +\end{verbatim}
  14.728 +
  14.729 +\chapter{Other kinds of storage}
  14.730 +
  14.731 +It is possible to use any Linux block device to store virtual machine
  14.732 +disk images.  This chapter covers some of the possibilities; note that
  14.733 +it is also possible to use network-based block devices and other
  14.734 +unconventional block devices.
  14.735 +
  14.736 +\section{File-backed virtual block devices}
  14.737 +
  14.738 +It is possible to use a file in Domain 0 as the primary storage for a
  14.739 +virtual machine.  As well as being convenient, this also has the
  14.740 +advantage that the virtual block device will be {\em sparse} --- space
  14.741 +will only really be allocated as parts of the file are used.  So if a
  14.742 +virtual machine uses only half of its disk space then the file really
  14.743 +takes up half of the size allocated.
  14.744 +
  14.745 +For example, to create a 2GB sparse file-backed virtual block device
  14.746 +(actually only consumes 1KB of disk):
  14.747 +
  14.748 +\verb_# dd if=/dev/zero of=vm1disk bs=1k seek=2048k count=1_
  14.749 +
  14.750 +Make a file system in the disk file: \\
  14.751 +\verb_# mkfs -t ext3 vm1disk_
  14.752 +
  14.753 +(when the tool asks for confirmation, answer `y')
  14.754 +
  14.755 +Populate the file system e.g. by copying from the current root:
  14.756 +\begin{verbatim}
  14.757 +# mount -o loop vm1disk /mnt
  14.758 +# cp -ax / /mnt
  14.759 +\end{verbatim}
  14.760 +Tailor the file system by editing \path{/etc/fstab},
  14.761 +\path{/etc/hostname}, etc (don't forget to edit the files in the
  14.762 +mounted file system, instead of your domain 0 filesystem, e.g. you
  14.763 +would edit \path{/mnt/etc/fstab} instead of \path{/etc/fstab} ).  For
  14.764 +this example put \path{/dev/sda1} to root in fstab.
  14.765 +
  14.766 +Now unmount (this is important!):\\
  14.767 +\verb_# umount /mnt_
  14.768 +
  14.769 +In the configuration file set:\\
  14.770 +\verb_disk = ['file:/full/path/to/vm1disk,sda1,w']_
  14.771 +
  14.772 +As the virtual machine writes to its `disk', the sparse file will be
  14.773 +filled in and consume more space up to the original 2GB.
  14.774 +
  14.775 +\section{LVM-backed virtual block devices}
  14.776 +
  14.777 +XXX Put some simple examples here - would be nice if an LVM user could
  14.778 +contribute some, although obviously users would have to read the LVM
  14.779 +docs to do advanced stuff.
  14.780 +
  14.781 +\part{Quick Reference}
  14.782 +
  14.783 +\chapter{Domain Configuration Files}
  14.784 +\label{cha:config}
  14.785 +
  14.786 +XXX Could use a little explanation about possible values
  14.787 +
  14.788 +Xen configuration files contain the following standard variables:
  14.789 +
  14.790 +\begin{description}
  14.791 +\item[kernel] Path to the kernel image (on the server).
  14.792 +\item[ramdisk] Path to a ramdisk image (optional).
  14.793 +% \item[builder] The name of the domain build function (e.g. {\tt'linux'} or {\tt'netbsd'}.
  14.794 +\item[memory] Memory size in megabytes.
  14.795 +\item[cpu] CPU to assign this domain to.
  14.796 +\item[nics] Number of virtual network interfaces.
  14.797 +\item[vif] List of MAC addresses (random addresses are assigned if not given).
  14.798 +\item[disk] Regions of disk to export to the domain.
  14.799 +\item[dhcp] Set to {\tt 'dhcp'} if you want to DHCP allocate the IP address.
  14.800 +\item[netmask] IP netmask.
  14.801 +\item[gateway] IP address for the gateway (if any).
  14.802 +\item[hostname] Set the hostname for the virtual machine.
  14.803 +\item[root] Set the root device.
  14.804 +\item[nfs\_server] IP address for the NFS server.
  14.805 +\item[nfs\_root] Path of the root filesystem on the NFS server.
  14.806 +\item[extra] Extra string to append to the kernel command line.
  14.807 +\item[restart] Three possible options:
  14.808 +  \begin{description}
  14.809 +  \item[always] Always restart the domain, no matter what
  14.810 +                its exit code is.
  14.811 +  \item[never]  Never restart the domain.
  14.812 +  \item[onreboot] (restart the domain if it requests reboot).
  14.813 +  \end{description}
  14.814 +\end{description}
  14.815 +
  14.816 +It is also possible to include Python scripting commands in
  14.817 +configuration files.  This is done in the \path{xmdefconfig} file in
  14.818 +order to handle the {\tt vmid} variable.
  14.819 +
  14.820 +
  14.821 +\chapter{Xend (Node control daemon)}
  14.822 +\label{cha:xend}
  14.823 +
  14.824 +The Xen Daemon (Xend) performs system management functions related to
  14.825 +virtual machines.  It forms a central point of control for a machine
  14.826 +and can be controlled using an HTTP-based protocol.  Xend must be
  14.827 +running in order to start and manage virtual machines.
  14.828 +
  14.829 +Xend must be run as root because it needs access to privileged system
  14.830 +management functions.  A small set of commands may be issued on the
  14.831 +Xend command line:
  14.832 +
  14.833 +\begin{tabular}{ll}
  14.834 +\verb_# xend start_ & start Xend, if not already running \\
  14.835 +\verb_# xend stop_  & stop Xend if already running       \\
  14.836 +\verb_# xend restart_ & restart Xend if running, otherwise start it \\
  14.837 +\end{tabular}
  14.838 +
  14.839 +A SysV init script called {\tt xend} is provided to start Xend at boot
  14.840 +time.  {\tt make install} installs this script in {\path{/etc/init.d}.
  14.841 +To enable it, you have to make symbolic links in the appropriate
  14.842 +runlevel directories or use the {\tt chkconfig} tool, where available.
  14.843 +
  14.844 +Once Xend is running, more sophisticated administration can be done
  14.845 +using the Xensv web interface (see Chapter~\ref{cha:xensv}).
  14.846 +
  14.847 +\chapter{Xensv (Web interface server)}
  14.848 +\label{cha:xensv}
  14.849 +
  14.850 +Xensv is the server for the web control interface.  It can be started
  14.851 +using:\\
  14.852 +\verb_# xensv start_ \\
  14.853 +and stopped using:
  14.854 +\verb_# xensv stop_ \\
  14.855 +It will automatically start Xend if it is not already running.
  14.856 +
  14.857 +By default, Xensv will serve out the web interface on port 8080.  This
  14.858 +can be changed by editing {\tt
  14.859 +/usr/lib/python2.3/site-packages/xen/sv/params.py}.
  14.860 +
  14.861 +Once Xensv is running, the web interface can be used to manage running
  14.862 +domains and provides a user friendly domain creation wizard.
  14.863 +
  14.864 +\chapter{The xm tool}
  14.865 +\label{cha:xm}
  14.866 +
  14.867 +XXX Add description of arguments and switches for all the options
  14.868 +
  14.869 +The xm tool is the primary tool for managing Xen from the console.
  14.870 +The general format of an xm command line is:
  14.871 +
  14.872 +\begin{verbatim}
  14.873 +# xm command [switches] [arguments] [variables]
  14.874 +\end{verbatim}
  14.875 +
  14.876 +The available {\em switches } and {\em arguments} are dependent on the
  14.877 +{\em command} chosen.  The {\em variables} may be set using
  14.878 +declarations of the form {\tt variable=value} and command line
  14.879 +declarations override any of the values in the configuration file
  14.880 +being used, including the standard variables described above and any
  14.881 +custom variables (for instance, the \path{xmdefconfig} file uses a
  14.882 +{\tt vmid} variable).
  14.883 +
  14.884 +The available commands are as follows:
  14.885 +
  14.886 +\begin{description}
  14.887 +\item[balloon] Request a domain to adjust its memory footprint.
  14.888 +\item[create] Create a new domain.
  14.889 +\item[destroy] Kill a domain immediately.
  14.890 +\item[list] List running domains.
  14.891 +\item[shutdown] Ask a domain to shutdown.
  14.892 +\item[dmesg] Fetch the Xen (not Linux!) boot output.
  14.893 +\item[consoles] Lists the available consoles.
  14.894 +\item[console] Connect to the console for a domain.
  14.895 +\item[help] Get help on xm commands.
  14.896 +\item[save] Suspend a domain to disk.
  14.897 +\item[restore] Restore a domain from disk.
  14.898 +\item[pause] Pause a domain's execution.
  14.899 +\item[unpause] Unpause a domain.
  14.900 +\item[pincpu] Pin a domain to a CPU.
  14.901 +\item[bvt] Set BVT scheduler parameters for a domain.
  14.902 +\item[bvt\_ctxallow] Set the BVT context switching allowance for the system.
  14.903 +\item[atropos] Set the atropos parameters for a domain.
  14.904 +\item[rrobin] Set the round robin time slice for the system.
  14.905 +\item[info] Get information about the Xen host.
  14.906 +\item[call] Call a Xend HTTP API function directly.
  14.907 +\end{description}
  14.908 +
  14.909 +For a detailed overview of switches, arguments and variables to each command
  14.910 +try
  14.911 +\begin{verbatim}
  14.912 +# xm help command
  14.913 +\end{verbatim}
  14.914 +
  14.915 +\chapter{Glossary}
  14.916 +
  14.917 +\begin{description}
  14.918 +\item[Atropos]             One of the CPU schedulers provided by Xen.
  14.919 +                           Atropos provides domains with absolute shares
  14.920 +                           of the CPU, with timeliness guarantees and a
  14.921 +                           mechanism for sharing out ``slack time''.
  14.922 +
  14.923 +\item[BVT]                 The BVT scheduler is used to give proportional
  14.924 +                           fair shares of the CPU to domains.
  14.925 +
  14.926 +\item[Exokernel]           A minimal piece of privileged code, similar to
  14.927 +                           a {\bf microkernel} but providing a more
  14.928 +                           `hardware-like' interface to the tasks it
  14.929 +                           manages.  This is similar to a paravirtualising
  14.930 +                           VMM like {\bf Xen} but was designed as a new
  14.931 +                           operating system structure, rather than
  14.932 +                           specifically to run multiple conventional OSs.
  14.933 +
  14.934 +\item[Domain]              A domain is the execution context that
  14.935 +                           contains a running { \bf virtual machine }.
  14.936 +                           The relationship between virtual machines
  14.937 +                           and domains on Xen is similar to that between
  14.938 +                           programs and processes in an operating
  14.939 +                           system: a virtual machine is a persistent
  14.940 +                           entity that resides on disk (somewhat like
  14.941 +                           a program).  When it is loaded for execution,
  14.942 +                           it runs in a domain.  Each domain has a
  14.943 +                           { \bf domain ID }.
  14.944 +
  14.945 +\item[Domain 0]            The first domain to be started on a Xen
  14.946 +                           machine.  Domain 0 is responsible for managing
  14.947 +                           the system.
  14.948 +
  14.949 +\item[Domain ID]           A unique identifier for a { \bf domain },
  14.950 +                           analogous to a process ID in an operating
  14.951 +                           system.  Apart from domain
  14.952 +
  14.953 +\item[Full virtualisation] An approach to virtualisation which
  14.954 +                           requires no modifications to the hosted
  14.955 +                           operating system, providing the illusion of
  14.956 +                           a complete system of real hardware devices.
  14.957 +
  14.958 +\item[Hypervisor]          An alternative term for { \bf VMM }, used
  14.959 +                           because it means ``beyond supervisor'',
  14.960 +                           since it is responsible for managing multiple
  14.961 +                           ``supervisor'' kernels.
  14.962 +
  14.963 +\item[Live migration]      A technique for moving a running virtual
  14.964 +                           machine to another physical host, without
  14.965 +			   stopping it or the services running on it.
  14.966 +
  14.967 +\item[Microkernel]         A small base of code running at the highest
  14.968 +                           hardware privilege level.  A microkernel is
  14.969 +                           responsible for sharing CPU and memory (and
  14.970 +                           sometimes other devices) between less
  14.971 +                           privileged tasks running on the system.
  14.972 +                           This is similar to a VMM, particularly a
  14.973 +                           {\bf paravirtualising} VMM but typically
  14.974 +                           addressing a different problem space and
  14.975 +                           providing different kind of interface.
  14.976 +
  14.977 +\item[NetBSD/Xen]          A port of NetBSD to the Xen architecture.
  14.978 +
  14.979 +\item[Paravirtualisation]  An approach to virtualisation which requires
  14.980 +                           modifications to the operating system in
  14.981 +                           order to run in a virtual machine.  Xen
  14.982 +                           uses paravirtualisation but preserves
  14.983 +                           binary compatibility for user space
  14.984 +                           applications.
  14.985 +
  14.986 +\item[Shadow pagetables]   A technique for hiding the layout of machine
  14.987 +                           memory from a virtual machine's operating
  14.988 +			   system.  Used in some {\bf VMM}s to provide
  14.989 +			   the illusion of contiguous physical memory,
  14.990 +			   in Xen this is used during
  14.991 +			   {\bf live migration}.
  14.992 +
  14.993 +\item[Virtual Machine]     The environment in which a hosted operating
  14.994 +                           system runs, providing the abstraction of a
  14.995 +                           dedicated machine.  A virtual machine may
  14.996 +                           be identical to the underlying hardware (as
  14.997 +                           in { \bf full virtualisation }, or it may
  14.998 +                           differ, as in { \bf paravirtualisation }.
  14.999 +
 14.1000 +\item[VMM]                 Virtual Machine Monitor - the software that
 14.1001 +                           allows multiple virtual machines to be
 14.1002 +                           multiplexed on a single physical machine.
 14.1003 +
 14.1004 +\item[Xen]                 Xen is a paravirtualising virtual machine
 14.1005 +                           monitor, developed primarily by the
 14.1006 +                           Systems Research Group at the University
 14.1007 +                           of Cambridge Computer Laboratory.
 14.1008 +
 14.1009 +\item[XenLinux]            Official name for the port of the Linux kernel
 14.1010 +                           that runs on Xen.
 14.1011 +
 14.1012 +\end{description}
 14.1013 +
 14.1014 +\part{Advanced Topics}
 14.1015 +
 14.1016 +\chapter{Advanced Network Configuration}
 14.1017 +
 14.1018 +For simple systems with a single ethernet interface with a simple
 14.1019 +configuration, the default installation should work ``out of the
 14.1020 +box''.  More complicated network setups, for instance with multiple
 14.1021 +ethernet interfaces and / or existing bridging setups will require
 14.1022 +some special configuration.
 14.1023 +
 14.1024 +The purpose of this chapter is to describe the mechanisms provided by
 14.1025 +xend to allow a flexible configuration for Xen's virtual networking.
 14.1026 +
 14.1027 +\section{Xen networking scripts}
 14.1028 +
 14.1029 +Xen's virtual networking is configured by 3 shell scripts.  These are
 14.1030 +called automatically by Xend when certain events occur, with arguments
 14.1031 +to the scripts providing further contextual information.  These
 14.1032 +scripts are found by default in \path{/etc/xen}.  The names and
 14.1033 +locations of the scripts can be configured in \path{xend-config.sxp}.
 14.1034 +
 14.1035 +\subsection{\path{network}}
 14.1036 +
 14.1037 +This script is called once when Xend is started and once when Xend is
 14.1038 +stopped.  Its job is to do any advance preparation required for the
 14.1039 +Xen virtual network when Xend starts and to do any corresponding
 14.1040 +cleanup when Xend exits.
 14.1041 +
 14.1042 +In the default configuration, this script creates the bridge
 14.1043 +``xen-br0'' and moves eth0 onto that bridge, modifying the routing
 14.1044 +accordingly.
 14.1045 +
 14.1046 +In configurations where the bridge already exists, this script could
 14.1047 +be replaced with a link to \path{/bin/true} (for instance).
 14.1048 +
 14.1049 +When Xend exits, this script is called with the {\tt stop} argument,
 14.1050 +which causes it to delete the Xen bridge and remove {\tt eth0} from
 14.1051 +it, restoring the normal IP and routing configuration.
 14.1052 +
 14.1053 +\subsection{\path{vif-bridge}}
 14.1054 +
 14.1055 +This script is called for every domain virtual interface.  This should
 14.1056 +do things like configuring firewalling rules for that interface and
 14.1057 +adding it to the appropriate bridge.
 14.1058 +
 14.1059 +By default, this adds and removes VIFs on the default Xen bridge.
 14.1060 +This script can be customized to properly deal with more complicated
 14.1061 +bridging setups.
 14.1062 +
 14.1063 +\chapter{Advanced Scheduling Configuration}
 14.1064 +
 14.1065 +\section{Scheduler selection}
 14.1066 +
 14.1067 +Xen offers a boot time choice between multiple schedulers.  To select
 14.1068 +a scheduler, pass the boot parameter { \tt sched=sched\_name } to Xen,
 14.1069 +substituting the appropriate scheduler name.  Details of the schedulers
 14.1070 +and their parameters are included below; future versions of the tools
 14.1071 +will provide a higher-level interface to these tools.
 14.1072 +
 14.1073 +It is expected that system administrators configure their system to
 14.1074 +use the scheduler most appropriate to their needs.  Currently, the BVT
 14.1075 +scheduler is the recommended choice, since the Atropos scheduler is
 14.1076 +not finished.
 14.1077 +
 14.1078 +\section{Borrowed Virtual Time}
 14.1079 +
 14.1080 +{\tt sched=bvt } (the default) \\ 
 14.1081 +
 14.1082 +BVT provides proportional fair shares of the CPU time.  It has been
 14.1083 +observed to penalise domains that block frequently (e.g. IO intensive
 14.1084 +domains), but this can be compensated by using warping. 
 14.1085 +
 14.1086 +\subsection{Global Parameters}
 14.1087 +
 14.1088 +\begin{description}
 14.1089 +\item[ctx\_allow]
 14.1090 +  the context switch allowance is similar to the "quantum"
 14.1091 +  in traditional schedulers.  It is the minimum time that
 14.1092 +  a scheduled domain will be allowed to run before being
 14.1093 +  pre-empted.  This prevents thrashing of the CPU.
 14.1094 +\end{description}
 14.1095 +
 14.1096 +\subsection{Per-domain parameters}
 14.1097 +
 14.1098 +\begin{description}
 14.1099 +\item[mcuadv]
 14.1100 +  the MCU (Minimum Charging Unit) advance determines the
 14.1101 +  proportional share of the CPU that a domain receives.  It
 14.1102 +  is set inversely proportionally to a domain's sharing weight.
 14.1103 +\item[warp]
 14.1104 +  the amount of "virtual time" the domain is allowed to warp
 14.1105 +  backwards
 14.1106 +\item[warpl]
 14.1107 +  the warp limit is the maximum time a domain can run warped for
 14.1108 +\item[warpu]
 14.1109 +  the unwarp requirement is the minimum time a domain must
 14.1110 +  run unwarped for before it can warp again
 14.1111 +\end{description}
 14.1112 +
 14.1113 +\section{Atropos}
 14.1114 +
 14.1115 +{\tt sched=atropos } \\
 14.1116 +
 14.1117 +Atropos is a Soft Real Time scheduler.  It provides guarantees about
 14.1118 +absolute shares of the CPU (with a method for optionally sharing out
 14.1119 +slack CPU time on a best-effort basis) and can provide timeliness
 14.1120 +guarantees for latency-sensitive domains.
 14.1121 +
 14.1122 +Every domain has an associated period and slice.  The domain should
 14.1123 +receive 'slice' nanoseconds every 'period' nanoseconds.  This allows
 14.1124 +the administrator to configure both the absolute share of the CPU a
 14.1125 +domain receives and the frequency with which it is scheduled.  When
 14.1126 +domains unblock, their period is reduced to the value of the latency
 14.1127 +hint (the slice is scaled accordingly so that they still get the same
 14.1128 +proportion of the CPU).  For each subsequent period, the slice and
 14.1129 +period times are doubled until they reach their original values.
 14.1130 +
 14.1131 +Note: don't overcommit the CPU when using Atropos (i.e. don't reserve
 14.1132 +more CPU than is available - the utilisation should be kept to
 14.1133 +slightly less than 100% in order to ensure predictable behaviour).
 14.1134 +
 14.1135 +\subsection{Per-domain parameters}
 14.1136 +
 14.1137 +\begin{description}
 14.1138 +\item[slice]
 14.1139 +  The length of time per period that a domain is guaranteed.
 14.1140 +\item[period]
 14.1141 +  The period over which a domain is guaranteed to receive
 14.1142 +  its slice of CPU time.
 14.1143 +\item[latency]
 14.1144 +  The latency hint is used to control how soon after
 14.1145 +  waking up a domain should be scheduled.
 14.1146 +\item[xtratime]
 14.1147 +  This is a true (1) / false (0) flag that specifies whether
 14.1148 +  a domain should be allowed a share of the system slack time.
 14.1149 +\end{description}
 14.1150 +
 14.1151 +\section{Round Robin}
 14.1152 +
 14.1153 +{\tt sched=rrobin } \\
 14.1154 +
 14.1155 +The Round Robin scheduler is included as a simple demonstration of
 14.1156 +Xen's internal scheduler API.  It is not intended for production use
 14.1157 +--- the other schedulers included are all more general and should give
 14.1158 +higher throughput.
 14.1159 +
 14.1160 +\subsection{Global parameters}
 14.1161 +
 14.1162 +\begin{description}
 14.1163 +\item[rr\_slice]
 14.1164 +  The maximum time each domain runs before the next
 14.1165 +  scheduling decision is made.
 14.1166 +\end{description}
 14.1167 +
 14.1168 +\chapter{Privileged domains}
 14.1169 +
 14.1170 +There are two possible types of privileges:  IO privileges and
 14.1171 +administration privileges.
 14.1172 +
 14.1173 +\section{Driver domains (IO Privileges)}
 14.1174 +
 14.1175 +IO privileges can be assigned to allow a domain to drive PCI devices
 14.1176 +itself.  This is used to support driver domains.
 14.1177 +
 14.1178 +Setting backend privileges is currently only supported in SXP format
 14.1179 +config files (??? is this true - there's nothing in xmdefconfig,
 14.1180 +anyhow).  To allow a domain to function as a backend for others,
 14.1181 +somewhere within the {\tt vm} element of its configuration file must
 14.1182 +be a {\tt backend} element of the form {\tt (backend ({\em type}))}
 14.1183 +where {\tt \em type} may be either {\tt netif} or {\tt blkif},
 14.1184 +according to the type of virtual device this domain will service.
 14.1185 +After this domain has been built, Xend will connect all new and
 14.1186 +existing {\em virtual} devices (of the appropriate type) to that
 14.1187 +backend.
 14.1188 +
 14.1189 +Note that:
 14.1190 +\begin{itemize}
 14.1191 +\item a block backend cannot import virtual block devices from other
 14.1192 +domains
 14.1193 +\item a network backend cannot import virtual network devices from
 14.1194 +other domains
 14.1195 +\end{itemize}
 14.1196 +
 14.1197 +Thus (particularly in the case of block backends, which cannot import
 14.1198 +a virtual block device as their root filesystem), you may need to boot
 14.1199 +a backend domain from a ramdisk or a network device.
 14.1200 +
 14.1201 +The privilege to drive PCI devices may also be specified on a
 14.1202 +per-device basis.  Xen will assign the minimal set of hardware
 14.1203 +privileges to a domain that are required to control its devices.  This
 14.1204 +can be configured in either format of configuration file:
 14.1205 +
 14.1206 +\begin{itemize}
 14.1207 +\item SXP Format:
 14.1208 +  Include {\tt device} elements
 14.1209 +  {\tt (device (pci (bus {\em x}) (dev {\em y}) (func {\em z}))) } \\
 14.1210 +  inside the top-level {\tt vm} element.  Each one specifies the address
 14.1211 +  of a device this domain is allowed to drive ---
 14.1212 +  the numbers {\em x},{\em y} and {\em z} may be in either decimal or
 14.1213 +  hexadecimal format.
 14.1214 +\item Flat Format: Include a list of PCI device addresses of the
 14.1215 +  format: \\ {\tt pci = ['x,y,z', ...] } \\ where each element in the
 14.1216 +  list is a string specifying the components of the PCI device
 14.1217 +  address, separated by commas.  The components ({\tt \em x}, {\tt \em
 14.1218 +  y} and {\tt \em z}) of the list may be formatted as either decimal
 14.1219 +  or hexadecimal.
 14.1220 +\end{itemize}
 14.1221 +
 14.1222 +\section{Administration Domains}
 14.1223 +
 14.1224 +Administration privileges allow a domain to use the ``dom0
 14.1225 +operations'' (so called because they are usually available only to
 14.1226 +domain 0).  A privileged domain can build other domains, set scheduling
 14.1227 +parameters, etc.
 14.1228 +
 14.1229 +% Support for other administrative domains is not yet available...
 14.1230 +
 14.1231 +\chapter{Xen build options}
 14.1232 +
 14.1233 +For most users, the default build of Xen will be adequate.  For some
 14.1234 +advanced uses, Xen provides a number of build-time options:
 14.1235 +
 14.1236 +At build time, these options should be set as environment variables or
 14.1237 +passed on make's command-line.  For example:
 14.1238 +
 14.1239 +\begin{verbatim}
 14.1240 +export option=y; make
 14.1241 +option=y make
 14.1242 +make option1=y option2=y
 14.1243 +\end{verbatim}
 14.1244 +
 14.1245 +\section{List of options}
 14.1246 +
 14.1247 +{\bf verbose=y }\\
 14.1248 +Enable debugging messages when Xen detects an unexpected condition.
 14.1249 +Also enables console output from all domains. \\
 14.1250 +{\bf debug=y }\\
 14.1251 +Enable debug assertions.  Implies {\bf verbose=y }.
 14.1252 +(Primarily useful for tracing bugs in Xen).        \\
 14.1253 +{\bf debugger=y }\\
 14.1254 +Enable the in-Xen pervasive debugger (PDB).
 14.1255 +This can be used to debug Xen, guest OSes, and
 14.1256 +applications. For more information see the 
 14.1257 +XenDebugger-HOWTO.                                 \\
 14.1258 +{\bf perfc=y }\\
 14.1259 +Enable performance-counters for significant events
 14.1260 +within Xen. The counts can be reset or displayed
 14.1261 +on Xen's console via console control keys.          \\
 14.1262 +{\bf trace=y }\\
 14.1263 +Enable per-cpu trace buffers which log a range of
 14.1264 +events within Xen for collection by control
 14.1265 +software.  For more information see the chapter on debugging,
 14.1266 +in the Xen Interface Manual.
 14.1267 +
 14.1268 +\chapter{Boot options}
 14.1269 +
 14.1270 +\section{Xen boot options}
 14.1271 +
 14.1272 +These options are used to configure Xen's behaviour at runtime.  They
 14.1273 +should be appended to Xen's command line, either manually or by
 14.1274 +editing \path{grub.conf}.
 14.1275 +
 14.1276 +{\bf ignorebiostables }\\
 14.1277 + Disable parsing of BIOS-supplied tables. This may help with some
 14.1278 + chipsets that aren't fully supported by Xen. If you specify this
 14.1279 + option then ACPI tables are also ignored, and SMP support is
 14.1280 + disabled. \\
 14.1281 +
 14.1282 +{\bf noreboot } \\
 14.1283 + Don't reboot the machine automatically on errors.  This is
 14.1284 + useful to catch debug output if you aren't catching console messages
 14.1285 + via the serial line. \\
 14.1286 +
 14.1287 +{\bf nosmp } \\
 14.1288 + Disable SMP support.
 14.1289 + This option is implied by 'ignorebiostables'. \\
 14.1290 +
 14.1291 +{\bf noacpi } \\
 14.1292 + Disable ACPI tables, which confuse Xen on some chipsets.
 14.1293 + This option is implied by 'ignorebiostables'. \\
 14.1294 +
 14.1295 +{\bf watchdog } \\
 14.1296 + Enable NMI watchdog which can report certain failures. \\
 14.1297 +
 14.1298 +{\bf noht } \\
 14.1299 + Disable Hyperthreading. \\
 14.1300 +
 14.1301 +{\bf badpage=$<$page number$>$[,$<$page number$>$] } \\
 14.1302 + Specify a list of pages not to be allocated for use 
 14.1303 + because they contain bad bytes. For example, if your
 14.1304 + memory tester says that byte 0x12345678 is bad, you would
 14.1305 + place 'badpage=0x12345' on Xen's command line (i.e., the
 14.1306 + last three digits of the byte address are not
 14.1307 + included!). \\
 14.1308 +
 14.1309 +{\bf com1=$<$baud$>$,DPS[,$<$io\_base$>$,$<$irq$>$] \\
 14.1310 + com2=$<$baud$>$,DPS[,$<$io\_base$>$,$<$irq$>$] } \\
 14.1311 + Xen supports up to two 16550-compatible serial ports.
 14.1312 + For example: 'com1=9600,8n1,0x408,5' maps COM1 to a
 14.1313 + 9600-baud port, 8 data bits, no parity, 1 stop bit,
 14.1314 + I/O port base 0x408, IRQ 5.
 14.1315 + If the I/O base and IRQ are standard (com1:0x3f8,4;
 14.1316 + com2:0x2f8,3) then they need not be specified. \\
 14.1317 +
 14.1318 +{\bf console=$<$specifier list$>$ } \\
 14.1319 + Specify the destination for Xen console I/O.
 14.1320 + This is a comma-separated list of, for example:
 14.1321 +\begin{description}
 14.1322 + \item[vga]  use VGA console and allow keyboard input
 14.1323 + \item[com1] use serial port com1
 14.1324 + \item[com2H] use serial port com2. Transmitted chars will
 14.1325 +   have the MSB set. Received chars must have
 14.1326 +   MSB set.
 14.1327 + \item[com2L] use serial port com2. Transmitted chars will
 14.1328 +   have the MSB cleared. Received chars must
 14.1329 +   have MSB cleared.
 14.1330 +\end{description}
 14.1331 + The latter two examples allow a single port to be
 14.1332 + shared by two subsystems (e.g. console and
 14.1333 + debugger). Sharing is controlled by MSB of each
 14.1334 + transmitted/received character.
 14.1335 + [NB. Default for this option is 'com1,tty'] \\
 14.1336 +
 14.1337 +{\bf conswitch=$<$switch-char$><$auto-switch-char$>$ } \\
 14.1338 + Specify how to switch serial-console input between
 14.1339 + Xen and DOM0. The required sequence is CTRL-<switch-char>
 14.1340 + pressed three times. Specifying '`' disables switching.
 14.1341 + The <auto-switch-char> specifies whether Xen should
 14.1342 + auto-switch input to DOM0 when it boots -- if it is 'x'
 14.1343 + then auto-switching is disabled.  Any other value, or
 14.1344 + omitting the character, enables auto-switching.
 14.1345 + [NB. Default for this option is 'a'] \\
 14.1346 +
 14.1347 +{\bf nmi=xxx } \\
 14.1348 + Specify what to do with an NMI parity or I/O error. \\
 14.1349 + 'nmi=fatal':  Xen prints a diagnostic and then hangs. \\
 14.1350 + 'nmi=dom0':   Inform DOM0 of the NMI. \\
 14.1351 + 'nmi=ignore': Ignore the NMI. \\
 14.1352 +
 14.1353 +{\bf dom0\_mem=xxx } \\
 14.1354 + Set the maximum amount of memory for domain0. \\
 14.1355 +
 14.1356 +{\bf tbuf\_size=xxx } \\
 14.1357 + Set the size of the per-cpu trace buffers, in pages
 14.1358 + (default 1).  Note that the trace buffers are only
 14.1359 + enabled in debug builds.  Most users can ignore
 14.1360 + this feature completely. \\
 14.1361 +
 14.1362 +{\bf sched=xxx } \\
 14.1363 + Select the CPU scheduler Xen should use.  The current
 14.1364 + possibilities are 'bvt', 'atropos' and 'rrobin'.  The
 14.1365 + default is 'bvt'.  For more information see
 14.1366 + Sched-HOWTO.txt. \\
 14.1367 +
 14.1368 +{\bf pci\_dom0\_hide=(xx.xx.x)(yy.yy.y)... } \\
 14.1369 +Hide selected PCI devices from domain 0 (for instance, to stop it
 14.1370 +taking ownership of them so that they can be driven by another
 14.1371 +domain).  Device IDs should be given in hex format.  Bridge devices do
 14.1372 +not need to be hidden --- they are hidden implicitly, since guest OSes
 14.1373 +do not need to configure them.
 14.1374 +
 14.1375 +\section{XenLinux Options}
 14.1376 +
 14.1377 +{\bf xencons=xxx}
 14.1378 +Specify the device node to
 14.1379 +which the Xen virtual console driver is attached: \\
 14.1380 + 'xencons=off': disable virtual console \\
 14.1381 + 'xencons=tty': attach console to /dev/tty1 (tty0 at boot-time) \\
 14.1382 + 'xencons=ttyS': attach console to /dev/ttyS0\\
 14.1383 +The default is ttyS for dom0 and tty for all other domains.
 14.1384 +
 14.1385 +\chapter{Further Support}
 14.1386 +
 14.1387 +If you have questions that are not answered by this manual, the
 14.1388 +sources of information listed below may be of interest to you.  Note
 14.1389 +that bug reports, suggestions and contributions related to the
 14.1390 +software (or the documentation) should be sent to the Xen developers'
 14.1391 +mailing list (address below).
 14.1392 +
 14.1393 +\section{Other documentation}
 14.1394 +
 14.1395 +For developers interested in porting operating systems to Xen, the
 14.1396 +{\em Xen Interface Manual} is distributed in the \path{docs/}
 14.1397 +directory of the Xen source distribution.  Various HOWTOs are
 14.1398 +available in \path{docs/HOWTOS} but this content is being integrated
 14.1399 +into this manual.
 14.1400 +
 14.1401 +\section{Online references}
 14.1402 +
 14.1403 +The official Xen web site is found at: \\
 14.1404 +{\tt
 14.1405 +http://www.cl.cam.ac.uk/Research/SRG/netos/xen/] }.
 14.1406 +
 14.1407 +Links to other
 14.1408 +documentation sources are listed at: \\ {\tt
 14.1409 +http://www.cl.cam.ac.uk/Research/SRG/netos/xen/documentation.html}.
 14.1410 +
 14.1411 +\section{Mailing lists}
 14.1412 +
 14.1413 +There are currently two official Xen mailing lists:
 14.1414 +
 14.1415 +\begin{description}
 14.1416 +\item[xen-devel@lists.sourceforge.net] Used for development
 14.1417 +discussions and requests for help.  Subscribe at: \\
 14.1418 +{\tt http://lists.sourceforge.net/mailman/listinfo/xen-devel}
 14.1419 +\item[xen-announce@lists.sourceforge.net] Used for announcements only.
 14.1420 +Subscribe at: \\
 14.1421 +{\tt http://lists.sourceforge.net/mailman/listinfo/xen-announce}
 14.1422 +\item[xen-changelog@lists.sourceforge.net]  Changelog feed
 14.1423 +from the unstable and 2.0 trees - developer oriented.  Subscribe at: \\
 14.1424 +{\tt http://lists.sourceforge.net/mailman/listinfo/xen-changelog}
 14.1425 +\end{description}
 14.1426 +
 14.1427 +Although there is no specific user support list, the developers try to
 14.1428 +assist users who post on xen-devel.  As the bulk of traffic on this
 14.1429 +list increases, a dedicated user support list may be introduced.
 14.1430 +
 14.1431 +\appendix
 14.1432 +
 14.1433 +\chapter{Installing Debian}
 14.1434 +
 14.1435 +The Debian project provides a tool called {\tt debootstrap} which
 14.1436 +allows a base Debian system to be installed into a filesystem without
 14.1437 +requiring the host system to have any Debian-specific software (such
 14.1438 +as {\tt apt}).
 14.1439 +
 14.1440 +Here's some info how to install Debian 3.1 (Sarge) for an unprivileged
 14.1441 +Xen domain:
 14.1442 +
 14.1443 +\begin{enumerate}
 14.1444 +\item Set up Xen 2.0 and test that it's working, as described earlier in
 14.1445 +      this manual.
 14.1446 +
 14.1447 +\item Create disk images for root-fs and swap (alternatively, you
 14.1448 +      might create dedicated partitions, LVM logical volumes, etc. if
 14.1449 +      that suits your setup).
 14.1450 +\begin{verbatim}  
 14.1451 +dd if=/dev/zero of=/path/diskimage bs=1024k count=size_in_mbytes
 14.1452 +dd if=/dev/zero of=/path/swapimage bs=1024k count=size_in_mbytes
 14.1453 +\end{verbatim}
 14.1454 +      If you're going to use this filesystem / diskimage only as a
 14.1455 +      `template' for other vm diskimages, something like 300 MB should
 14.1456 +      be enough.. (of course it depends what kind of packages you are
 14.1457 +      planning to install to the template)
 14.1458 +
 14.1459 +\item Create the filesystem and initialise the swap image
 14.1460 +\begin{verbatim}
 14.1461 +mkfs.ext3 /path/diskimage
 14.1462 +mkswap /path/swapimage
 14.1463 +\end{verbatim}
 14.1464 +
 14.1465 +\item Mount the diskimage for installation
 14.1466 +\begin{verbatim}
 14.1467 +mount -o loop /path/diskimage /mnt/disk
 14.1468 +\end{verbatim}
 14.1469 +
 14.1470 +\item Install {\tt debootstrap}
 14.1471 +
 14.1472 +Make sure you have debootstrap installed on the host.  If you are
 14.1473 +running Debian sarge (3.1 / testing) or unstable you can install it by
 14.1474 +running {\tt apt-get install debootstrap}.  Otherwise, it can be
 14.1475 +downloaded from the Debian project website.
 14.1476 +
 14.1477 +\item Install debian base to the diskimage:
 14.1478 +\begin{verbatim}
 14.1479 +debootstrap --arch i386 sarge /mnt/disk  \
 14.1480 +            http://ftp.<countrycode>.debian.org/debian
 14.1481 +\end{verbatim}
 14.1482 +
 14.1483 +You can use any other Debian http/ftp mirror you want.
 14.1484 +
 14.1485 +\item When debootstrap completes successfully, modify settings:
 14.1486 +\begin{verbatim}
 14.1487 +chroot /mnt/disk /bin/bash
 14.1488 +\end{verbatim}
 14.1489 +
 14.1490 +Edit the following files using vi or nano and make needed changes:
 14.1491 +\begin{verbatim}
 14.1492 +/etc/hostname
 14.1493 +/etc/hosts
 14.1494 +/etc/resolv.conf
 14.1495 +/etc/network/interfaces
 14.1496 +/etc/networks
 14.1497 +\end{verbatim}
 14.1498 +
 14.1499 +Set up access to the services, edit:
 14.1500 +\begin{verbatim}
 14.1501 +/etc/hosts.deny
 14.1502 +/etc/hosts.allow
 14.1503 +/etc/inetd.conf
 14.1504 +\end{verbatim}
 14.1505 +
 14.1506 +Add Debian mirror to:   
 14.1507 +\begin{verbatim}
 14.1508 +/etc/apt/sources.list
 14.1509 +\end{verbatim}
 14.1510 +
 14.1511 +Create fstab like this:
 14.1512 +\begin{verbatim}
 14.1513 +/dev/sda1       /       ext3    errors=remount-ro       0       1
 14.1514 +/dev/sda2       none    swap    sw                      0       0
 14.1515 +proc            /proc   proc    defaults                0       0
 14.1516 +\end{verbatim}
 14.1517 +
 14.1518 +Logout
 14.1519 +
 14.1520 +\item      Umount the diskimage
 14.1521 +\begin{verbatim}
 14.1522 +umount /mnt/disk
 14.1523 +\end{verbatim}
 14.1524 +
 14.1525 +\item Create Xen 2.0 configuration file for the new domain. You can
 14.1526 +        use the example-configurations coming with xen as a template.
 14.1527 +
 14.1528 +        Make sure you have the following set up:
 14.1529 +\begin{verbatim}
 14.1530 +disk = [ 'file:/path/diskimage,sda1,w', 'file:/path/swapimage,sda2,w' ]
 14.1531 +root = "/dev/sda1 ro"
 14.1532 +\end{verbatim}
 14.1533 +
 14.1534 +\item Start the new domain
 14.1535 +\begin{verbatim}
 14.1536 +xm create -f domain_config_file
 14.1537 +\end{verbatim}
 14.1538 +
 14.1539 +Check that the new domain is running:
 14.1540 +\begin{verbatim}
 14.1541 +xm list
 14.1542 +\end{verbatim}
 14.1543 +
 14.1544 +\item   Attach to the console of the new domain.
 14.1545 +        You should see something like this when starting the new domain:
 14.1546 +
 14.1547 +\begin{verbatim}
 14.1548 +Started domain testdomain2, console on port 9626
 14.1549 +\end{verbatim}
 14.1550 +        
 14.1551 +        There you can see the ID of the console: 26. You can also list
 14.1552 +        the consoles with {\tt xm consoles"}. (ID is the last two
 14.1553 +        digits of the portnumber.)
 14.1554 +
 14.1555 +        Attach to the console:
 14.1556 +
 14.1557 +\begin{verbatim}
 14.1558 +xm console 26
 14.1559 +\end{verbatim}
 14.1560 +
 14.1561 +        or by telnetting to the port 9626 of localhost (the xm console
 14.1562 +        progam works better).
 14.1563 +
 14.1564 +\item   Log in and run base-config
 14.1565 +
 14.1566 +        As a default there's no password for the root.
 14.1567 +
 14.1568 +        Check that everything looks OK, and the system started without
 14.1569 +        errors.  Check that the swap is active, and the network settings are
 14.1570 +        correct.
 14.1571 +
 14.1572 +        Run {\tt /usr/sbin/base-config} to set up the Debian settings.
 14.1573 +
 14.1574 +        Set up the password for root using passwd.
 14.1575 +
 14.1576 +\item     Done. You can exit the console by pressing {\tt Ctrl + ]}
 14.1577 +
 14.1578 +\end{enumerate}
 14.1579 +
 14.1580 +If you need to create new domains, you can just copy the contents of
 14.1581 +the `template'-image to the new disk images, either by mounting the
 14.1582 +template and the new image, and using {\tt cp -a} or {\tt tar} or by
 14.1583 +simply copying the image file.  Once this is done, modify the
 14.1584 +image-specific settings (hostname, network settings, etc).
 14.1585 +
 14.1586 +\end{document}
 14.1587 +
 14.1588 +
 14.1589 +%% Other stuff without a home
 14.1590 +
 14.1591 +%% Instructions Re Python API
 14.1592 +
 14.1593 +%% Other Control Tasks using Python
 14.1594 +%% ================================
 14.1595 +
 14.1596 +%% A Python module 'Xc' is installed as part of the tools-install
 14.1597 +%% process. This can be imported, and an 'xc object' instantiated, to
 14.1598 +%% provide access to privileged command operations:
 14.1599 +
 14.1600 +%% # import Xc
 14.1601 +%% # xc = Xc.new()
 14.1602 +%% # dir(xc)
 14.1603 +%% # help(xc.domain_create)
 14.1604 +
 14.1605 +%% In this way you can see that the class 'xc' contains useful
 14.1606 +%% documentation for you to consult.
 14.1607 +
 14.1608 +%% A further package of useful routines (xenctl) is also installed:
 14.1609 +
 14.1610 +%% # import xenctl.utils
 14.1611 +%% # help(xenctl.utils)
 14.1612 +
 14.1613 +%% You can use these modules to write your own custom scripts or you can
 14.1614 +%% customise the scripts supplied in the Xen distribution.
    15.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    15.2 +++ b/docs/src/xend.tex	Tue Oct 26 14:12:48 2004 +0000
    15.3 @@ -0,0 +1,443 @@
    15.4 +% -*- mode: LaTeX -*-
    15.5 +\def\seca{\chapter}
    15.6 +\def\secb{\section}
    15.7 +\def\secc{\subsection}
    15.8 +\def\secd{\subsubsection}
    15.9 +\def\refa{chapter}
   15.10 +\def\refb{section}
   15.11 +\def\refc{section}
   15.12 +\def\refd{section}
   15.13 +
   15.14 +%\def\seca{\section}
   15.15 +%\def\secb{\subsection}
   15.16 +%\def\secc{\subsubsection}
   15.17 +%\def\refa{section}
   15.18 +%\def\refb{section}
   15.19 +%\def\refc{section}
   15.20 +
   15.21 +\documentclass[11pt,twoside,final,openright]{xenstyle}
   15.22 +\usepackage{a4,graphicx,setspace}
   15.23 +\setstretch{1.15}
   15.24 +
   15.25 +\begin{document}
   15.26 +
   15.27 +% TITLE PAGE
   15.28 +\pagestyle{empty}
   15.29 +\begin{center}
   15.30 +\vspace*{\fill}
   15.31 +\includegraphics{figs/xenlogo.eps}
   15.32 +\vfill
   15.33 +\vfill
   15.34 +\vfill
   15.35 +\begin{tabular}{l}
   15.36 +{\Huge \bf Xend} \\[4mm]
   15.37 +{\huge Xen v2.0 for x86} \\[80mm]
   15.38 +
   15.39 +{\Large Xen is Copyright (c) 2004, The Xen Team} \\[3mm]
   15.40 +{\Large University of Cambridge, UK} \\[20mm]
   15.41 +{\large Last updated 30 August 2004}
   15.42 +\end{tabular}
   15.43 +\vfill
   15.44 +\end{center}
   15.45 +\cleardoublepage
   15.46 +
   15.47 +% TABLE OF CONTENTS
   15.48 +\pagestyle{plain}
   15.49 +\pagenumbering{roman}
   15.50 +{ \parskip 0pt plus 1pt
   15.51 +  \tableofcontents }
   15.52 +\cleardoublepage
   15.53 +% PREPARE FOR MAIN TEXT
   15.54 +\pagenumbering{arabic}
   15.55 +\raggedbottom
   15.56 +\widowpenalty=10000
   15.57 +\clubpenalty=10000
   15.58 +\parindent=0pt
   15.59 +\renewcommand{\topfraction}{.8}
   15.60 +\renewcommand{\bottomfraction}{.8}
   15.61 +\renewcommand{\textfraction}{.2}
   15.62 +\renewcommand{\floatpagefraction}{.8}
   15.63 +
   15.64 +\setstretch{1.15}
   15.65 +
   15.66 +\seca{Introduction}
   15.67 +Xend is the control daemon used to manage a machine running the Xen hypervisor.
   15.68 +Xend is responsible for creating and destroying domains and managing their
   15.69 +resources, such as virtual block devices and virtual network interfaces.
   15.70 +
   15.71 +Xend exists because the Xen hypervisor itself only manages the memory image
   15.72 +of a domain and its scheduling. Xen provides the event channels that connect
   15.73 +a domain to its devices, but is intentionally not involved in setting them up.
   15.74 +
   15.75 +Xend runs as a daemon in the privileged domain 0 and uses a low-level api
   15.76 +to communicate with Xen via the domain 0 kernel. Xend exports its control
   15.77 +interface to its clients using HTTP. Most programming languages have
   15.78 +HTTP client libraries, so this interface can be used from most popular 
   15.79 +languages, for example Python, Perl, C, Java.
   15.80 +Xend itself is written in Python, as are most of the Xen tools.
   15.81 +
   15.82 +The xend interface is intended to be a complete interface for the creation
   15.83 +and management of domains. It supports domain creation, shutdown, reboot,
   15.84 +destruction, save, restore and migration.
   15.85 +
   15.86 +When xend creates a domain it creates the domain memory image and communicates
   15.87 +with the device driver domain(s) to configure the devices for the domain.
   15.88 +This sets up connections between the domain and backend device controllers
   15.89 +in the driver domain. When a domain shuts down its memory image cannot be fully released
   15.90 +unless its backend devices are released and disconnected. This is done by xend.
   15.91 +In order to protect against loss of this information when xend is restarted,
   15.92 +xend maintains a persistent database of domain configurations. This allows
   15.93 +xend to be stopped and restarted without loss of configuration information.
   15.94 +For example, in order to upgrade the xend software.
   15.95 +
   15.96 +\seca{Domain lifecycle}
   15.97 +\secb{Domain creation}
   15.98 +Xend is instructed to create a domain by posting a domain\_create message to it,
   15.99 +containing the domain configuration to be instantiated. The domain configuration
  15.100 +is in sxp format and is as far as possible {\em fully-bound}, that is, all
  15.101 +parameters are fully-specified. The domain configuration is saved in the filesystem
  15.102 +so that it can be reused later if necessary.
  15.103 +
  15.104 +The domain configuration specifies the domain name, memory size, kernel image
  15.105 +and parameters, and all the domain devices. Xend uses the Xen api to create
  15.106 +the domain memory image, and then {\em builds} the memory image for the domain
  15.107 +using the kernel image. At this point the domain exists, but it cannot be run because
  15.108 +it has no devices. Xend then communicates with the device driver domain to create
  15.109 +the configured devices. Once the devices are created it sets up event channels
  15.110 +for them between the driver domain and the new domain, and notifies the new domain
  15.111 +that its devices are connected. At this point the domain can be started.
  15.112 +
  15.113 +Xend is also responsible for managing domain consoles. When a domain is created,
  15.114 +xend sets up a console event channel to the domain, and creates a TCP listening port
  15.115 +for the domain console. When a connection is accepted to the port, xend
  15.116 +connects input and output for the port to the domain console channel.
  15.117 +
  15.118 +\secb{Domain destruction}
  15.119 +When a domain terminates, because it has been shutdown or it has crashed, the
  15.120 +domain resources must be released so that the domain memory image can be
  15.121 +finally removed from xen. Xend monitors the domains, and is also signaled by
  15.122 +xen (using a VIRQ) when a domain exits. Xend examines the domain states and
  15.123 +determines which domains have exited. It then communicates with the driver domain
  15.124 +to release the devices for exited domains. Xend also closes any open console
  15.125 +connections and removes the TCP listeners for exited domains.
  15.126 +Once all devices have been released it instructs xen to destroy the memory image.
  15.127 +
  15.128 +\secb{Domain restart}
  15.129 +Domain restart is the xen equivalent of a machine reboot. When a domain
  15.130 +exits because it has been shutdown in reboot mode, its exit code is reboot.
  15.131 +When examining domains to find those that have exited and destroy them,
  15.132 +xend detects those that have exited for reboot and does not completely destroy
  15.133 +them. It disconnects all their devices, and detaches the console listener
  15.134 +from its channel to the domain, but does not close it. Instead it schedules
  15.135 +a call to rebuild the domain from its configuration. This proceeds almost
  15.136 +identically to creating the domain, except that the console listener is
  15.137 +reused and connected to the new domain. This allows existing console
  15.138 +connections to remain connected across a domain restart. The restarted
  15.139 +domain keeps the same name and domain id.
  15.140 +
  15.141 +The determination of when to restart a domain is in fact slightly more
  15.142 +complex than described above. A domain is configured with a 
  15.143 +{\em restart mode}. If the restart mode is {\em onreboot}, the default,
  15.144 +restart happens when the domain is shutdown normally and
  15.145 +exits with code reboot. If the restart mode is {\em never} the domain is
  15.146 +not restarted. If the restart mode is {\em always} the domain is always
  15.147 +restarted, regardless of how it exited.
  15.148 +
  15.149 +In order to prevent continual domain crash causing restart loops, xend
  15.150 +has a {\em minimum restart time}. Xend remembers when a domain was last
  15.151 +restarted and will fail a restart that happens inside the minimum
  15.152 +restart time.
  15.153 +
  15.154 +\seca{Devices}
  15.155 +\secb{Virtual network interfaces}
  15.156 +Each virtual network interface (vif) has 2 parts: the font-end device in its domain,
  15.157 +and the back-end device in the driver domain. Usually the driver domain is domain 0,
  15.158 +and there is a linux network device corresponding to the vif. The linux device for
  15.159 +interface N on domain D is called vifD.N. When a packet is sent on the vif in the 
  15.160 +domain the packet is received from the linux device. The linux devices are connected
  15.161 +to network interfaces using ethernet bridging.
  15.162 +
  15.163 +The default setup is a bridge xen-br0, with eth0 connected to it, and the routes
  15.164 +for eth0 directed at xen-br0. This is controlled by the xend network setup script,
  15.165 +default {\tt /etc/xen/network}, which is run when xend starts.
  15.166 +
  15.167 +When the vifs for a domain are created, a vif control script, default {\tt /etc/xen/vif-bridge},
  15.168 +is run to connect the vif to its bridge. The default script connects the vif
  15.169 +to xen-br0 and optionally sets up iptables rules to prevent IP address spoofing.
  15.170 +The bridge a vif is connected to can be defined in its configuration, and this is useful
  15.171 +for setting up virtual networks using several bridges.
  15.172 +
  15.173 +\secb{Virtual block devices}
  15.174 +Virtual block devices in a domain are interfaces onto back-end device drivers
  15.175 +that export physical devices to domains. In the default configuration the back-end
  15.176 +driver is in domain 0 and can export any linux block device to a domain. This includes
  15.177 +physical disk partitions, LVM volumes and loopback mounts of files. In fact anything
  15.178 +that linux can represent as a block device can be exported to a domain as virtual
  15.179 +block device.
  15.180 +
  15.181 +\seca{Xend invocation}
  15.182 +Xend is started (by root) using the command
  15.183 +\begin{verbatim}
  15.184 +xend start
  15.185 +\end{verbatim}
  15.186 +Xend can be stopped using
  15.187 +\begin{verbatim}
  15.188 +xend stop
  15.189 +\end{verbatim}
  15.190 +Xend must be started before any domains (apart from domain 0) can be created.
  15.191 +If you try to use the {\tt xm} tool when xend is not running you will get a
  15.192 +'connection refused' message.
  15.193 +
  15.194 +\secb{Xend configuration}
  15.195 +Xend reads its own configuration from {\tt /etc/xen/xend-config.sxp}, which is
  15.196 +a sequence of s-expressions. The configuration parameters are:
  15.197 +\begin{itemize}
  15.198 +
  15.199 +\item xend-port: Port xend should use for the HTTP interface (default 8000).
  15.200 +
  15.201 +\item xend-address: Address xend should listen on.
  15.202