mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-29 05:40:23 -04:00
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@1033 fefdeb5f-60dc-0310-8127-8f9354f1896f
346 lines
19 KiB
XML
346 lines
19 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?> <!-- -*-html-helper-*- -->
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
|
|
<head>
|
|
<title>pulseaudio @PACKAGE_VERSION@</title>
|
|
<link rel="stylesheet" type="text/css" href="style.css" />
|
|
</head>
|
|
|
|
<body>
|
|
<h1><a name="top">pulseaudio @PACKAGE_VERSION@</a></h1>
|
|
|
|
<p><i>Copyright 2004-2006 Lennart Poettering <@PACKAGE_BUGREPORT@></i> and Pierre Ossman</p>
|
|
|
|
<ul class="toc">
|
|
<li><a href="#license">License</a></li>
|
|
<li><a href="#news">News</a></li>
|
|
<li><a href="#overview">Overview</a></li>
|
|
<li><a href="#status">Current Status</a></li>
|
|
<li><a href="#documentation">Documentation</a></li>
|
|
<li><a href="#requirements">Requirements</a></li>
|
|
<li><a href="#installation">Installation</a></li>
|
|
<li><a href="#acks">Acknowledgements</a></li>
|
|
<li><a href="#download">Download</a></li>
|
|
<li><a href="#community">Community</a></li>
|
|
</ul>
|
|
|
|
<h2><a name="license">License</a></h2>
|
|
|
|
<p>This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Lesser General Public License as
|
|
published by the Free Software Foundation; either version 2 of the
|
|
License, or (at your option) any later version.</p>
|
|
|
|
<p>This program is distributed in the hope that it will be useful, but
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.</p>
|
|
|
|
<p>You should have received a copy of the GNU Lesser General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.</p>
|
|
|
|
<h2><a name="news">News</a></h2>
|
|
|
|
<div class="news-date">Fri Jun 2 2006: </div> <p class="news-text"><a
|
|
href="@PACKAGE_URL@pulseaudio-0.9.1.tar.gz">Version 0.9.1</a>
|
|
released; changes include: load modules even when libtool <tt>.la</tt>
|
|
files are missing; generate better ALSA device names from
|
|
<tt>module-detect</tt>; if an ALSA device doesn't support the
|
|
requested number of channels or the frequency, accept what ALSA
|
|
suggests instead; amd64 portability; drop <tt>.sh</tt> suffix of
|
|
<tt>esdcompat.sh</tt>; build system fixes; No API or ABI changes were made</p>
|
|
|
|
<div class="news-date">Fri May 26 2006: </div> <p class="news-text"><a
|
|
href="@PACKAGE_URL@pulseaudio-0.9.0.tar.gz">Version 0.9.0</a>
|
|
released; changes include: new module <tt>module-volume-restore</tt>;
|
|
new OSS API emulation tool <tt>padsp</tt>; require valid UTF8 strings
|
|
everywhere; properly support ALSA channel maps for surround sound;
|
|
increase maximum number of channels per stream to 32; add new threaded
|
|
main loop API for synchronous programs; introduce real shared object
|
|
versioning; a few API additions; many, many bugfixes</p>
|
|
|
|
<div class="news-date">Fri Apr 28 2006: </div> <p class="news-text"><a
|
|
href="@PACKAGE_URL@pulseaudio-0.8.1.tar.gz">Version 0.8.1</a>
|
|
released; changes include: support for specifying the channel map on
|
|
the command lines of <tt>paplay</tt> and <tt>pacat</tt> and as
|
|
arguments to the driver modules; ALSA hardware mixer compatibility;
|
|
fix linking; properly remove <tt>PF_UNIX</tt> sockets when unloading
|
|
protocol modules; fix sample cache; many other fixes</p>
|
|
|
|
<div class="news-date">Thu Apr 13 2006: </div> <p class="news-text"><a
|
|
href="@PACKAGE_URL@pulseaudio-0.8.tar.gz">Version 0.8</a> released;
|
|
changes include: too many to count - consider reading <a href="http://0pointer.de/blog/projects/pulseaudio-0.8.html">this blog entry</a> for more information; many, many minor fixes.</p>
|
|
|
|
<div class="news-date">Sun Nov 21 2004: </div> <p class="news-text"><a
|
|
href="@PACKAGE_URL@pulseaudio-0.7.tar.gz">Version 0.7</a> released;
|
|
changes include: IPv6 support; PID file support; publish credentials
|
|
in X11 root window (<tt>module-x11-publish</tt>; new tool <tt>pacmd</tt>; ESOUND backend; new command <tt>load-sample-dir-lazy</tt>; many, many minor fixes.</p>
|
|
|
|
<div class="news-date">Thu Oct 28 2004: </div> <p class="news-text"><a
|
|
href="@PACKAGE_URL@pulseaudio-0.6.tar.gz">Version 0.6</a> released;
|
|
changes include: TCP wrappers support; don't load the complete sound
|
|
file into memory when playing back using <tt>pa_play_file()</tt>;
|
|
autoload API change; don't load all sound files as FLOAT32; shorten
|
|
default buffers; client-side latency interpolation; add new user
|
|
volume metrics; add <tt>module-tunnel</tt>, <tt>module-null-sink</tt>,
|
|
<tt>module-match</tt> and new tool <tt>paplay</tt>; new API version
|
|
macros; many client API improvements; correctly lock cookie file
|
|
generation; correctly lock daemon autospawning; print daemon layout to
|
|
STDERR on SIGHUP; new options for <tt>pacat</tt>: allow sample type specification.</p>
|
|
|
|
<div class="news-date">Mon Sep 24 2004: </div> <p class="news-text"><a
|
|
href="@PACKAGE_URL@pulseaudio-0.5.1.tar.gz">Version 0.5.1</a> released;
|
|
changes include: improve esound protocol compatibility; fix
|
|
autospawning via <tt>libesd</tt>; make use of POSIX capabilities;
|
|
allow <tt>SCHED_FIFO</tt> scheduling only for users in group
|
|
<tt>realtime</tt>; minor build system fix.</p>
|
|
|
|
<div class="news-date">Mon Sep 20 2004: </div> <p class="news-text"><a
|
|
href="@PACKAGE_URL@pulseaudio-0.5.tar.gz">Version 0.5</a> released;
|
|
changes include: extensive API improvements, new module
|
|
<tt>module-combine</tt> for combining multiple sound cards into one,
|
|
gcc 2.95 compatibility, configuration files, add "lazy" samples,
|
|
support for source and network latency measurements, add
|
|
<tt>module-pipe-source</tt>, many other fixes and improvements.</p>
|
|
|
|
<div class="news-date">Wed Sep 8 2004: </div> <p class="news-text"><a
|
|
href="@PACKAGE_URL@pulseaudio-0.4.tar.gz">Version 0.4</a> released;
|
|
changes include: daemon auto spawning, support for <tt>SCHED_FIFO</tt> scheduling, three new modules, proper logging, CPU load watchdog, many fixes.</p>
|
|
|
|
<div class="news-date">Fri Aug 27 2004: </div> <p class="news-text"><a
|
|
href="@PACKAGE_URL@pulseaudio-0.3.tar.gz">Version 0.3</a> released;
|
|
changes include: support for both glib 2.0 and glib 1.2, future cancellation, API updates, many fixes, relicense client library to LGPL.</p>
|
|
|
|
<div class="news-date">Fri Aug 20 2004: </div> <p class="news-text"><a
|
|
href="@PACKAGE_URL@pulseaudio-0.2.tar.gz">Version 0.2</a> released;
|
|
changes include: added sample cache, introspection API, client API
|
|
documentation, module autoloading, glib support, a module for intercepting X11 bell events, and much more.</p>
|
|
|
|
<div class="news-date">Sat Jul 17 2004: </div> <p class="news-text"><a
|
|
href="@PACKAGE_URL@pulseaudio-0.1.tar.gz">Version 0.1</a> released</p>
|
|
|
|
<h2><a name="overview">Overview</a></h2>
|
|
|
|
<p><tt>pulseaudio</tt> is a networked sound server for Linux and other
|
|
Unix like operating systems and Microsoft Windows. It is intended to be an improved drop-in
|
|
replacement for the <a
|
|
href="http://www.tux.org/~ricdude/apps.html">Enlightened Sound
|
|
Daemon</a> (ESOUND). In addition to the features ESOUND provides
|
|
<tt>pulseaudio</tt> has:</p>
|
|
|
|
<ul>
|
|
<li>Extensible plugin architecture (by loading dynamic loadable modules with <tt>dlopen()</tt>)</li>
|
|
<li>Support for more than one sink/source</li>
|
|
<li>Better low latency behaviour</li>
|
|
<li>Embedabble into other software (the core is available as C library)</li>
|
|
<li>Completely asynchronous C API</li>
|
|
<li>Simple command line interface for reconfiguring the daemon while running</li>
|
|
<li>Flexible, implicit sample type conversion and resampling</li>
|
|
<li>"Zero-Copy" architecture</li>
|
|
<li>Module autoloading</li>
|
|
<li>Very accurate latency measurement for playback and recording.</li>
|
|
<li>May be used to combine multiple sound cards to one (with sample rate adjustment)</li>
|
|
<li>Client side latency interpolation</li>
|
|
<li>Ability to fully synchronize multiple playback streams</li>
|
|
</ul>
|
|
|
|
<p>Both the core and the client API are completely asynchronous making
|
|
use of a simple main loop abstraction layer. This allows easy
|
|
integration with asynchronous applications using the
|
|
<tt>glib</tt>/<tt>gtk</tt> mainloop. Since the asynchronous API
|
|
available through <tt>pulselib</tt> is quite difficult to use there is
|
|
a simplified synchronous API wrapper <tt>pulselib-simple</tt>
|
|
available. A simple main loop implementation is available as well.</p>
|
|
|
|
<p>The following modules are currently available:</p>
|
|
|
|
<ul>
|
|
<li><tt>module-oss</tt>: driver for <a href="http://www.opensound.com">Open Sound System</a> (OSS) audio sinks and sources.</li>
|
|
<li><tt>module-oss-mmap</tt>: same as above, but uses <tt>mmap()</tt> access to the audio buffer. Not as compatible bot more accurate in latency calculations</li>
|
|
<li><tt>module-alsa-sink</tt>, <tt>module-alsa-source</tt>: drivers for <a href="http://www.alsa-project.org/">Advanced Linux
|
|
Sound Architecture</a> (ALSA) sinks and sources</li>
|
|
<li><tt>module-solaris</tt>: drivers for Solaris audio sinks and sources</li>
|
|
<li><tt>module-waveout</tt>: drivers for Microsoft Windows audio sinks and sources</li>
|
|
<li><tt>module-pipe-sink</tt>, <tt>module-pipe-source</tt>: demonstration module providing UNIX FIFOs backed sinks/sources</li>
|
|
<li><tt>module-combine</tt>: combine multiple sinks into one, adjusting the sample rate if the their clocks deviate.</li>
|
|
<li><tt>module-sine</tt>: a sine generate sink input.</li>
|
|
<li><tt>module-x11-bell</tt>: play a sample from the sample cache on every X11 bell event.</li>
|
|
<li><tt>module-x11-publish</tt>: store Polypaudio credentials in the X11 root window.</li>
|
|
<li><tt>module-esound-protocol-tcp</tt>, <tt>module-esound-protocol-unix</tt>: <a href="http://www.tux.org/~ricdude/apps.html">ESOUND</a> compatibility modules (for TCP/IP resp. UNIX domain sockets)</li>
|
|
<li><tt>module-native-protocol-tcp</tt>, <tt>module-native-protocol-unix</tt>: Native pulseaudio protocol (for TCP/IP resp. UNIX domain sockets)</li>
|
|
<li><tt>module-simple-protocol-tcp</tt>, <tt>module-simple-protocol-unix</tt>: Simplistic protocol for playback/capture for usage with tools like <tt>netcat</tt> (for TCP/IP resp. UNIX domain sockets)</li>
|
|
<li><tt>module-cli-protocol-tcp</tt>, <tt>module-cli-protocol-unix</tt>, <tt>module-cli</tt>: Expose pulseaudio's internals whith a simple command line interface. (for TCP/IP resp. UNIX domain sockets resp. STDIN/STDOUT)</li>
|
|
<li><tt>module-http-protocol-tcp</tt>: Spawns a small HTTP server which can be used to introspect the Polypaudio server with a web browser.</li>
|
|
<li><tt>module-tunnel-sink</tt>, <tt>module-tunnel-source</tt>: make sinks/sources from other hosts available locally.</li>
|
|
<li><tt>module-match</tt>: adjust volume automatically for newly created playback streams based on a regular expression matching table.</li>
|
|
<li><tt>module-volume-restore</tt>: much like <tt>module-match</tt>, but create rules fully automatically based on the client name.</li>
|
|
<li><tt>module-null-sink</tt>: a clocked sink similar to <tt>/dev/null</tt>.</li>
|
|
<li><tt>module-esound-sink</tt>: a sink for forwarding audio data to an <a href="http://www.tux.org/~ricdude/apps.html">ESOUND</a> server.</li>
|
|
<li><tt>module-detect</tt>: a module which automatically detects what sound hardware is available locally and which loads the required driver modules.</li>
|
|
<li><tt>module-lirc</tt>: a module to control the volume of a sink with infrared remote controls supported by LIRC.</li>
|
|
<li><tt>module-mmkbd-evdev</tt>: a module to control the volume of a sink with the special volume keys of a multimeda keyboard.</li>
|
|
<li><tt>module-zeroconf-publish</tt>: a module to publish local sources/sinks using mDNS zeroconf.</li>
|
|
<li><tt>module-rtp-send</tt>, <tt>module-rtp-recv</tt>: modules to implement RTP/SAP/SDP based audio streaming.</li>
|
|
<li><tt>module-jack-sink</tt>, <tt>module-jack-source</tt>: connect to a <a href="http://jackit.sourceforge.net/">JACK Audio Connection Kit</a> server. (A sound server for professional audio production)</li>
|
|
</ul>
|
|
|
|
<p>A GTK GUI manager application for pulseaudio is the <a
|
|
href="http://0pointer.de/lennart/projects/paman/">Polypaudio
|
|
Manager</a>. Other GTK GUI tool for Polypaudio are the <a
|
|
href="http://0pointer.de/lennart/projects/pavumeter">Polypaudio Volume
|
|
Meter</a> and the <a
|
|
href="http://0pointer.de/lennart/projects/pavucontrol">Polypaudio Volume
|
|
Control</a> .</p>
|
|
|
|
<p>There are output plugins for <a
|
|
href="http://0pointer.de/lennart/projects/xmms-pulse/">XMMS</a>, <a
|
|
href="http://0pointer.de/lennart/projects/libao-pulse/">libao</a>
|
|
(merged in <tt>libao</tt> SVN) and <a
|
|
href="http://0pointer.de/lennart/projects/gst-pulse/">gstreamer</a>
|
|
(merged in <tt>gstreamer-plugins</tt> CVS), <a
|
|
href="http://mplayerhq.hu">MPlayer</a> (merged in MPlayer CVS) and <a
|
|
href="http://xine.sf.net/">Xine</a> (merged in Xine CVS). Drivers for
|
|
<a href="http://www.portaudio.com/">PortAudio</a> will be released
|
|
shortly.</p>
|
|
|
|
<h2><a name="status">Current Status</a></h2>
|
|
|
|
<p>Version @PACKAGE_VERSION@ is quite usable. It matches and supersedes ESOUND's feature set in nearly all areas.</p>
|
|
|
|
<h2><a name="documentation">Documentation</a></h2>
|
|
|
|
<p>There is some preliminary documentation available: <a
|
|
href="modules.html"><tt>modules.html</tt></a>, <a
|
|
href="cli.html"><tt>cli.html</tt></a>, <a
|
|
href="daemon.html"><tt>daemon.html</tt></a> and <a href="FAQ.html"><tt>FAQ.html</tt></a>.</p>
|
|
|
|
<p>There is a <a href="http://www.edgewall.com/products/trac/">Trac</a> based <a href="http://0pointer.de/trac/pulseaudio/">Wiki for Polypaudio</a> available.</p>
|
|
|
|
<h3>First Steps</h3>
|
|
|
|
<p>Simply start the pulseaudio daemon with the argument <tt>-nC</tt></p>
|
|
|
|
<pre>pulseaudio -nC</pre>
|
|
|
|
<p>This will present you a screen like this:</p>
|
|
|
|
<pre>Welcome to pulseaudio! Use "help" for usage information.
|
|
>>> </pre>
|
|
|
|
<p>Now you can issue CLI commands as described in <a
|
|
href="cli.html"><tt>cli.html</tt></a>. Another way to start
|
|
<tt>pulseaudio</tt> is by specifying a configuration script like that one included in the distribution on the
|
|
command line :</p>
|
|
|
|
<pre>pulseaudio -nF pulseaudio.pa</pre>
|
|
|
|
<p>This will load some drivers and protocols automatically.</p>
|
|
|
|
<p>The best idea is to configure your daemon in <tt>/etc/pulseaudio/daemon.conf</tt> and <tt>/etc/pulseaudio/default.pa</tt> and to run pulseaudio without any arguments.</p>
|
|
|
|
<p><b>Beware!</b> Unless you pass the option <tt>--sysconfdir=/etc</tt> to
|
|
<tt>configure</tt>, the directory <tt>/etc/pulseaudio/</tt> is really
|
|
<tt>/usr/local/etc/pulseaudio/</tt>.</p>
|
|
|
|
<h3>Developing pulseaudio Clients</h3>
|
|
|
|
<p>You may browse the <a href="http://www.doxygen.org/">Doxygen</a> generated <a
|
|
href="http://0pointer.de/lennart/projects/pulseaudio/doxygen/">programing
|
|
documentation</a> for the client API. (Run <tt>make doxygen</tt> to generate this documentation from the source tree)</p>
|
|
|
|
<h3>Developing pulseaudio Modules</h3>
|
|
|
|
<p>There are several reasons for writing loadable modules for pulseaudio:</p>
|
|
|
|
<ul>
|
|
<li>Extended device driver support</li>
|
|
<li>Protocol support beyond ESOUND's protocol and the native protocol. (such as NAS or a subset of aRts)</li>
|
|
<li>New programming interfaces such as XMLRPC or DBUS for controlling the daemon.</li>
|
|
<li>Hooking audio event sources directly into pulseaudio (similar to <tt>module-x11-bell</tt>)</li>
|
|
<li>For low latency applications such as VOIP: load the VOIP core directly into pulseaudio and have a slim GUI frontend to control it.</li>
|
|
</ul>
|
|
|
|
<p>There is currently no documentation how to write loadable modules
|
|
for pulseaudio. <i>Read the source, Luke!</i> If you are interested in
|
|
writing new modules feel free to contact the author in case you have any
|
|
questions.</p>
|
|
|
|
<h2><a name="requirements">Requirements</a></h2>
|
|
|
|
<p>Currently, <tt>pulseaudio</tt> is tested on Linux, FreeBSD, Solaris and Microsoft Windows. It requires an OSS, ALSA, Win32 or Solaris compatible soundcard.</p>
|
|
|
|
<p><tt>pulseaudio</tt> was developed and tested on Debian GNU/Linux
|
|
"testing" from November 2004, it should work on most other Linux
|
|
distributions (and maybe Unix versions) since it uses GNU autoconf and
|
|
GNU libtool for source code configuration and shared library
|
|
management.</p>
|
|
|
|
<p><tt>pulseaudio</tt> needs <a
|
|
href="http://www.mega-nerd.com/SRC/">Secret Rabbit Code (aka
|
|
<tt>libsamplerate</tt>)</a>, <a
|
|
href="http://www.mega-nerd.com/libsndfile"><tt>libsndfile</tt></a>, <a
|
|
href="http://liboil.freedesktop.org/wiki/"><tt>liboil</tt></a>.</p>
|
|
|
|
<p>Optionally it can make use of <tt>libwrap</tt>, <a
|
|
href="http://www.alsa-project.org/">alsa-lib</a>, <a
|
|
href="http://0pointer.de/lennart/projects/libasyncns/">libasyncns</a>,
|
|
<a href="http://www.lirc.org/">lirc</a>, <a href="http://www.porchdogsoft.com/products/howl/">HOWL</a> (or preferably the compatibility layer included in its superior replacement <a href="http://www.avahi.org/">Avahi</a>) and <a
|
|
href="http://www.gtk.org/">GLIB</a>. (The latter is required for
|
|
building the GLIB main loop integration module only.)</p>
|
|
|
|
<h2><a name="installation">Installation</a></h2>
|
|
|
|
<p>As this package is made with the GNU autotools you should run
|
|
<tt>./configure</tt> inside the distribution directory for configuring
|
|
the source tree. After that you should run <tt>make</tt> for
|
|
compilation and <tt>make install</tt> (as root) for installation of
|
|
<tt>pulseaudio</tt>.</p>
|
|
|
|
<h2><a name="acks">Acknowledgements</a></h2>
|
|
|
|
<p>Eric B. Mitchell for writing ESOUND</p>
|
|
|
|
<p>Jeff Waugh for creating Ubuntu packages (and hopefully soon Debian)</p>
|
|
|
|
<p>Miguel Freitas for writing a Polypaudio driver for Xine</p>
|
|
|
|
<p>Joe Marcus Clarke for porting Polypaudio to FreeBSD</p>
|
|
|
|
<p><a href="http://www.cendio.com">Cendio AB</a> for paying for Pierre's work on Polypaudio</p>
|
|
|
|
<p>Sebastien ESTIENNE for testing</p>
|
|
|
|
<p>Igor Zubkov for some portability patches</p>
|
|
|
|
<h2><a name="download">Download</a></h2>
|
|
|
|
<p>The newest release is always available from <a href="@PACKAGE_URL@">@PACKAGE_URL@</a></p>
|
|
|
|
<p>The current release is <a href="@PACKAGE_URL@pulseaudio-@PACKAGE_VERSION@.tar.gz">@PACKAGE_VERSION@</a></p>
|
|
|
|
<p>Get <tt>pulseaudio</tt>'s development sources from the <a href="http://subversion.tigris.org/">Subversion</a> <a href="svn://0pointer.de/pulseaudio">repository</a> (<a href="http://0pointer.de/cgi-bin/viewcvs.cgi/?root=pulseaudio">viewcvs</a>): </p>
|
|
|
|
<pre>svn checkout svn://0pointer.de/pulseaudio/trunk pulseaudio</pre>
|
|
|
|
<h2><a name="community">Community</a></h2>
|
|
|
|
<p>If you want to be notified whenever I release a new version of this software use the subscription feature of <a href="http://freshmeat.net/projects/pulseaudio/">Freshmeat</a>.</p>
|
|
|
|
<p>There is a general discussion <a href="https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss">mailing list for pulseaudio</a> available. In addition, you can subscribe to <a href="https://tango.0pointer.de/mailman/listinfo/pulseaudio-commits">SVN changes</a> and <a href="https://tango.0pointer.de/mailman/listinfo/pulseaudio-tickets">Trac Tickets</a>.</p>
|
|
|
|
<p>Polypaudio is being tracked at <a href="http://cia.navi.cx/stats/project/pulseaudio">CIA</a>.</p>
|
|
|
|
<p>There's a chance to meet the Polypaudio developers on our <a href="irc://irc.freenode.org/pulseaudio">IRC channel #pulseaudio on irc.freenode.org</a>.</p>
|
|
|
|
<p>There is a <a href="http://www.edgewall.com/products/trac/">Trac</a> based <a href="http://0pointer.de/trac/pulseaudio/">Wiki for Polypaudio</a> available.</p>
|
|
|
|
<p><b>Please report bugs to <a href="http://0pointer.de/trac/pulseaudio/newticket">our Trac ticket system</a>.</b></p>
|
|
|
|
<hr/>
|
|
<address class="grey">Lennart Poettering <@PACKAGE_BUGREPORT@>, June 2006</address>
|
|
<div class="grey"><i>$Id$</i></div>
|
|
|
|
</body>
|
|
</html>
|