From 420672dacb403aebffb670ff9664cb2900cfe7e9 Mon Sep 17 00:00:00 2001
From: llea <llea>
Date: Thu, 2 Jun 2005 20:50:46 +0000
Subject: [PATCH] Changes about audiodriversportaudio

---
 src/Makefile                                  |   4 +-
 src/audio/audiodriversportaudio.cpp           |  87 +-
 src/audio/audiodriversportaudio.h             |   6 +-
 src/audio/audiortp.cpp                        |  19 +-
 src/audio/codecDescriptor.cpp                 |   8 +-
 src/audio/codecDescriptor.h                   |   1 +
 src/audio/dtmfgenerator.cpp                   |   3 +-
 src/audio/portaudio/docs/index.html           |  60 ++
 src/audio/portaudio/docs/latency.html         | 192 ++++
 src/audio/portaudio/docs/pa_impl_guide.html   | 197 ++++
 .../portaudio/docs/pa_impl_startstop.html     | 190 ++++
 src/audio/portaudio/docs/pa_tut_asio.html     |  55 +
 src/audio/portaudio/docs/pa_tut_callback.html |  91 ++
 src/audio/portaudio/docs/pa_tut_devs.html     |  65 ++
 src/audio/portaudio/docs/pa_tut_explore.html  |  42 +
 src/audio/portaudio/docs/pa_tut_init.html     |  43 +
 src/audio/portaudio/docs/pa_tut_mac.html      |  41 +
 src/audio/portaudio/docs/pa_tut_mac_osx.html  |  46 +
 src/audio/portaudio/docs/pa_tut_open.html     |  52 +
 src/audio/portaudio/docs/pa_tut_oss.html      |  46 +
 src/audio/portaudio/docs/pa_tut_over.html     |  92 ++
 src/audio/portaudio/docs/pa_tut_pc.html       |  78 ++
 src/audio/portaudio/docs/pa_tut_run.html      |  56 +
 src/audio/portaudio/docs/pa_tut_rw.html       |  79 ++
 src/audio/portaudio/docs/pa_tut_term.html     |  47 +
 src/audio/portaudio/docs/pa_tut_util.html     |  55 +
 src/audio/portaudio/docs/pa_tutorial.html     |  46 +
 src/audio/portaudio/docs/portaudio_h.txt      | 425 ++++++++
 .../portaudio/docs/portaudio_icmc2001.pdf     | Bin 0 -> 50968 bytes
 src/audio/portaudio/docs/proposals.html       |  36 +
 src/audio/portaudio/docs/releases.html        | 339 ++++++
 src/audio/tonegenerator.cpp                   |  82 +-
 src/audio/tonegenerator.h                     |   7 +-
 src/global.h                                  |   2 +-
 src/gui/qt/configurationpanel.ui              | 259 ++---
 src/gui/qt/configurationpanel.ui.h            |   6 +-
 src/gui/qt/configurationpanelui.cpp           | 987 ++++++++----------
 src/gui/qt/configurationpanelui.h             |  17 +-
 src/gui/qt/qtGUImainwindow.cpp                |  29 +-
 src/gui/qt/url_inputui.cpp                    |   2 +-
 src/gui/qt/url_inputui.h                      |   2 +-
 src/manager.cpp                               |  61 +-
 src/sipvoiplink.cpp                           |   6 +-
 43 files changed, 3126 insertions(+), 835 deletions(-)
 create mode 100644 src/audio/portaudio/docs/index.html
 create mode 100644 src/audio/portaudio/docs/latency.html
 create mode 100644 src/audio/portaudio/docs/pa_impl_guide.html
 create mode 100644 src/audio/portaudio/docs/pa_impl_startstop.html
 create mode 100644 src/audio/portaudio/docs/pa_tut_asio.html
 create mode 100644 src/audio/portaudio/docs/pa_tut_callback.html
 create mode 100644 src/audio/portaudio/docs/pa_tut_devs.html
 create mode 100644 src/audio/portaudio/docs/pa_tut_explore.html
 create mode 100644 src/audio/portaudio/docs/pa_tut_init.html
 create mode 100644 src/audio/portaudio/docs/pa_tut_mac.html
 create mode 100644 src/audio/portaudio/docs/pa_tut_mac_osx.html
 create mode 100644 src/audio/portaudio/docs/pa_tut_open.html
 create mode 100644 src/audio/portaudio/docs/pa_tut_oss.html
 create mode 100644 src/audio/portaudio/docs/pa_tut_over.html
 create mode 100644 src/audio/portaudio/docs/pa_tut_pc.html
 create mode 100644 src/audio/portaudio/docs/pa_tut_run.html
 create mode 100644 src/audio/portaudio/docs/pa_tut_rw.html
 create mode 100644 src/audio/portaudio/docs/pa_tut_term.html
 create mode 100644 src/audio/portaudio/docs/pa_tut_util.html
 create mode 100644 src/audio/portaudio/docs/pa_tutorial.html
 create mode 100644 src/audio/portaudio/docs/portaudio_h.txt
 create mode 100644 src/audio/portaudio/docs/portaudio_icmc2001.pdf
 create mode 100644 src/audio/portaudio/docs/proposals.html
 create mode 100644 src/audio/portaudio/docs/releases.html

diff --git a/src/Makefile b/src/Makefile
index 4151515f31..954ef5b806 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -101,8 +101,8 @@ OBJS = \
 	udp.o 
   		
 	
-#start:	check prereq all
-start:check all
+start:	check prereq all
+#start:check all
 
 check:
 ifeq ($(CONFIGURE_CONF),../configure.conf)
diff --git a/src/audio/audiodriversportaudio.cpp b/src/audio/audiodriversportaudio.cpp
index f03effe58f..1c1e8d2ddb 100644
--- a/src/audio/audiodriversportaudio.cpp
+++ b/src/audio/audiodriversportaudio.cpp
@@ -29,10 +29,10 @@
 
 AudioDriversPortAudio::AudioDriversPortAudio (Manager* manager) {
 	_manager = manager;
-	mydata.dataToAddRem = 0;
-	mydata.dataFilled = 0;
+	mydata.urg_remain = 0;
 	mydata.dataIn = NULL;
 	mydata.dataOut = NULL;
+	mydata.urg_data = NULL;
 	this->initDevice();
 }
 
@@ -76,13 +76,13 @@ bool
 AudioDriversPortAudio::openDevice (void) {
 	int err = Pa_OpenDefaultStream (
 	&_stream,       	/* passes back stream pointer */
-	1,              	/* mono input */
-	1,              	/* mono output */
+	2,              	/* input channel */
+	2,              	/* output channel */
 	paFloat32,     		/* 32 bit float output */
 	SAMPLING_RATE,  	/* sample rate */
 	FRAME_PER_BUFFER, 	/* frames per buffer */
 	audioCallback,  	/* specify our custom callback */
-	&mydata);         	/* pass our data through to callback */
+	&mydata);         	/* pass our data through to callback */  
 
 	if (err != paNoError) {
 		_debug ("PortAudio error in Pa_OpenDefaultStream: %s\n", Pa_GetErrorText(err));
@@ -95,11 +95,15 @@ AudioDriversPortAudio::openDevice (void) {
 
 int 
 AudioDriversPortAudio::readBuffer (void *ptr, int bytes) {
+	(void) ptr;
+	(void) bytes;
 	return 1;
 }
 
 int
 AudioDriversPortAudio::writeBuffer (void *ptr, int len) {
+	(void) ptr;
+	(void) len;
 	return 1;
 }
 
@@ -107,11 +111,13 @@ int
 AudioDriversPortAudio::startStream(void) 
 {
 	int err;
-	
-	err = Pa_StartStream (_stream);
-	if( err != paNoError ) {
-		_debug ("PortAudio error in Pa_StartStream: %s\n", Pa_GetErrorText(err));
-		return 0;
+	if (!Pa_IsStreamActive(_stream)) {
+		err = Pa_StartStream (_stream);
+		if( err != paNoError ) {
+			_debug ("PortAudio error in Pa_StartStream: %s\n", 
+					Pa_GetErrorText(err));
+			return 0;
+		}
 	}
 	
 	return 1;
@@ -122,11 +128,15 @@ AudioDriversPortAudio::stopStream(void)
 {
 	int err;
 	
-	err = Pa_StopStream (_stream);
-	if( err != paNoError ) {
-		_debug ("PortAudio error in Pa_StopStream: %s\n", Pa_GetErrorText(err));
-		return 0;
+	if (!Pa_IsStreamStopped(_stream)) {
+		err = Pa_StopStream (_stream);
+		if( err != paNoError ) {
+			_debug ("PortAudio error in Pa_StopStream: %s\n", 
+					Pa_GetErrorText(err));
+			return 0;
+		}
 	}
+	
 	return 1;
 }
 
@@ -168,52 +178,31 @@ AudioDriversPortAudio::audioCallback (const void *inputBuffer,
 	float32 *out = (float32 *) outputBuffer;
 
 	paData* data = (paData*) userData;
-	unsigned int i;
+	int i;
+	int it;
 
-#if 1
 	/* Fill output buffer */
-	int j = data->dataToAddRem;
-	int k = data->dataFilled;
-	for (i = 0; i < framesPerBuffer; i++) {
-		if (j > 0 && k < j) {
-			*out++ = data->dataToAdd[i+k]; 
+	for (i = 0; i < (int)framesPerBuffer; i++) { 
+		it = 2*i;
+		if (data->urg_remain - i > 0) {
+			out[it] = out[it+1] = data->urg_ptr[i];  
 		} else {
-			*out++ = data->dataOut[i];
+			out[it] = out[it+1] = data->dataOut[i];
 		}
-    }
-	k += framesPerBuffer;
-	if (k >= j) {
-		data->dataFilled = 0;
+	}
+
+	if ((data->urg_remain -i) > 0) {
+		data->urg_ptr +=i;
+		data->urg_remain-= i;
 	} else {
-		data->dataFilled = k;
+		data->urg_remain = 0;
 	}
-#endif
 	
 	/* Read input buffer */
 	if (data->dataIn != NULL) {
-		memcpy (data->dataIn, in, sizeof(float32) * framesPerBuffer);
-	}
-	
-#if 0
-	int j = data->dataToAddRem;
-	/* Fill output buffer */
-    for (i = 0; i < framesPerBuffer; i++) {
-		if (j > 0 && j >= i) {
-			*out++ = data->dataToAdd[j-i]; 
-		} else {
-			*out++ = data->dataOut[i];
-		}
-    }
-	
-	j = j - i;
-	if (j > 0) {
-		data->dataToAddRem = j;
-	} else {
-		data->dataToAddRem = 0;
-	//	cout << "please FREE data->dataToAdd now!!!" << endl;
+		memcpy (data->dataIn, in, 2*sizeof(float32) * framesPerBuffer);
 	}
 	
-#endif
 	return paContinue;
 }
 #endif // defined(AUDIO_PORTAUDIO)
diff --git a/src/audio/audiodriversportaudio.h b/src/audio/audiodriversportaudio.h
index 4e9d1582a8..206278afdd 100644
--- a/src/audio/audiodriversportaudio.h
+++ b/src/audio/audiodriversportaudio.h
@@ -34,9 +34,9 @@ public:
 	struct paData {
 		float32 *dataIn;  	// From mic
 		float32 *dataOut;		// To spk
-		float32 *dataToAdd;		// To spk
-		int   dataToAddRem;
-		int   dataFilled;
+		float32 *urg_data;	// data in priority
+		float32 *urg_ptr;	
+		int urg_remain;		// data remained in urg_data
 	};
 	paData mydata;
 	
diff --git a/src/audio/audiortp.cpp b/src/audio/audiortp.cpp
index a4c440e0ab..c32564b4ee 100644
--- a/src/audio/audiortp.cpp
+++ b/src/audio/audiortp.cpp
@@ -150,6 +150,7 @@ AudioRtpRTX::run (void) {
 	int	 			 countTime = 0;
 	int16			*data_for_speakers = NULL;
 	float32			*data_for_speakers_float = NULL;
+	float32			*data_for_speakers_float_tmp = NULL;
 	
 	data_from_mic = new float32[1024];
 	data_from_mic_tmp = new float32[1024];
@@ -236,6 +237,7 @@ AudioRtpRTX::run (void) {
 			_manager->getAudioDriver()->mydata.dataIn = data_mute;
 		}
 		
+		// Control volume for micro
 		for (int j = 0; j < size; j++) {
 			data_from_mic_tmp[j] = data_from_mic[j] * 
 												_manager->getMicroVolume()/100;
@@ -284,9 +286,15 @@ AudioRtpRTX::run (void) {
 		data_for_speakers_float = new float32[expandedSize];
 		ac->int16ToFloat32 (data_for_speakers, data_for_speakers_float, 
 				expandedSize);
-
+		
+		// control volume for speakers
+		data_for_speakers_float_tmp = new float32[expandedSize];
+		for (int j = 0; j < expandedSize; j++) {
+			data_for_speakers_float_tmp[j] = data_for_speakers_float[j] * 
+												_manager->getSpkrVolume()/100;
+		}
 		// Set decoded data to sound device
-		_manager->getAudioDriver()->mydata.dataOut = data_for_speakers_float;
+		_manager->getAudioDriver()->mydata.dataOut =data_for_speakers_float_tmp;
 
 		// Notify (with a bip) an incoming call when there is already a call 
 		countTime += time->getSecond();
@@ -304,14 +312,13 @@ AudioRtpRTX::run (void) {
 		Thread::sleep(TimerPort::getTimer());
 		TimerPort::incTimer(frameSize); // 'frameSize' ms
 
-		if (!_manager->getAudioDriver()->isStreamActive()) {
-			_manager->getAudioDriver()->mydata.dataToAddRem = 0;
-			_manager->getAudioDriver()->startStream();
-		}
+		// Start PortAudio
+		_manager->getAudioDriver()->startStream();
 	}
 		 
 	delete[] data_for_speakers;
 	delete[] data_for_speakers_float;
+	delete[] data_for_speakers_float_tmp;
 	delete[] data_from_mic;
 	delete[] data_from_mic_int16;
 	delete[] data_from_mic_tmp;
diff --git a/src/audio/codecDescriptor.cpp b/src/audio/codecDescriptor.cpp
index 7cc255b792..60f7f13d5a 100644
--- a/src/audio/codecDescriptor.cpp
+++ b/src/audio/codecDescriptor.cpp
@@ -28,7 +28,13 @@
 CodecDescriptor::CodecDescriptor (int payload) 
 {
 	_payload = payload;
-	_codecName = "";
+	_codecName = rtpmapPayload(_payload);
+}
+
+CodecDescriptor::CodecDescriptor (const string& name) 
+{
+	_codecName = name;
+	_payload = matchPayloadCodec(name);
 }
 
 CodecDescriptor::CodecDescriptor (int payload, const string& name) 
diff --git a/src/audio/codecDescriptor.h b/src/audio/codecDescriptor.h
index e651f3727c..81370da8c3 100644
--- a/src/audio/codecDescriptor.h
+++ b/src/audio/codecDescriptor.h
@@ -45,6 +45,7 @@ class CodecDescriptor
 {
 public:
 	CodecDescriptor (int payload);
+	CodecDescriptor (const string& name);
 	CodecDescriptor (int payload, const string& name);
 	~CodecDescriptor (void);
 
diff --git a/src/audio/dtmfgenerator.cpp b/src/audio/dtmfgenerator.cpp
index 559d6b6daa..169bfc9e46 100644
--- a/src/audio/dtmfgenerator.cpp
+++ b/src/audio/dtmfgenerator.cpp
@@ -172,8 +172,7 @@ float32* DTMFGenerator::generateSample(unsigned char code) throw (DTMFException)
 			return 0;
 		}
 		  
-		generateSin(tones[code].higher, tones[code].lower, 
-					SAMPLING_RATE, ptr);
+		generateSin(tones[code].higher, tones[code].lower, ptr);
 		
 		return ptr;
 		//	} catch(...) {
diff --git a/src/audio/portaudio/docs/index.html b/src/audio/portaudio/docs/index.html
new file mode 100644
index 0000000000..7d9b248d30
--- /dev/null
+++ b/src/audio/portaudio/docs/index.html
@@ -0,0 +1,60 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.79 [en] (Windows NT 5.0; U) [Netscape]">
+   <meta name="Author" content="Phil Burk">
+   <meta name="Description" content="PortAudio Docs, a cross platform, open-source, audio I/O library.It provides a very simple API for recording and/or playing sound using a simple callback function.">
+   <meta name="KeyWords" content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
+   <title>PortAudio Docs</title>
+</head>
+<body>
+&nbsp;
+<center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
+<tr>
+<td>
+<center>
+<h1>
+PortAudio Documentation</h1></center>
+</td>
+</tr>
+</table></center>
+
+<p>Copyright 2000 Phil Burk and Ross Bencina
+<br>&nbsp;
+<h3>
+<a href="portaudio_h.txt">API Reference</a></h3>
+
+<blockquote>The Application Programmer Interface is documented in "portaudio.h".</blockquote>
+
+<h3>
+<a href="pa_tutorial.html">Tutorial</a></h3>
+
+<blockquote>Describes how to write audio programs using the PortAudio API.</blockquote>
+
+<h3>
+<a href="pa_impl_guide.html">Implementation Guide</a></h3>
+
+<blockquote>Describes how to write an implementation of PortAudio for a
+new computer platform.</blockquote>
+
+<h3>
+<a href="portaudio_icmc2001.pdf">Paper Presented at ICMC2001</a> (PDF)</h3>
+
+<blockquote>Describes the PortAudio API and discusses implementation issues.
+Written July 2001.</blockquote>
+
+<h3>
+<a href="latency.html">Improving Latency</a></h3>
+
+<blockquote>How to tune your computer to achieve the lowest possible audio
+delay.</blockquote>
+
+<h3>
+<a href="proposals.html">Proposed Changes</a></h3>
+
+<blockquote>Describes API changes being considered by the developer community.
+Feedback welcome.</blockquote>
+<a href="http://www.portaudio.com/">Return to PortAudio Home Page</a>
+</body>
+</html>
diff --git a/src/audio/portaudio/docs/latency.html b/src/audio/portaudio/docs/latency.html
new file mode 100644
index 0000000000..87f1d1222b
--- /dev/null
+++ b/src/audio/portaudio/docs/latency.html
@@ -0,0 +1,192 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.79 [en] (Windows NT 5.0; U) [Netscape]">
+   <meta name="Author" content="Phil Burk">
+   <meta name="Description" content="Internal docs. How a stream is started or stopped.">
+   <meta name="KeyWords" content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
+   <title>PortAudio Implementation - Start/Stop</title>
+</head>
+<body>
+&nbsp;
+<center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
+<tr>
+<td>
+<center>
+<h1>
+<a href="http://www.portaudio.com">PortAudio</a> Latency</h1></center>
+</td>
+</tr>
+</table></center>
+
+<p>This page discusses the issues of audio latency for <a href="http://www.portaudio.com">PortAudio</a>
+. It offers suggestions on how to lower latency to improve the responsiveness
+of applications.
+<blockquote><b><a href="#what">What is Latency?</a></b>
+<br><b><a href="#portaudio">PortAudio and Latency</a></b>
+<br><b><a href="#macintosh">Macintosh</a></b>
+<br><b><a href="#unix">Unix</a></b>
+<br><b><a href="#windows">WIndows</a></b></blockquote>
+By Phil Burk, Copyright 2002 Phil Burk and Ross Bencina
+<h2>
+<a NAME="what"></a>What is Latency?</h2>
+Latency is basically longest time that you have to wait before you obtain
+a desired result. For digital audio output it is the time between making
+a sound in software and finally hearing it.
+<p>Consider the example of pressing a key on the ASCII keyboard to play
+a note. There are several stages in this process which each contribute
+their own latency. First the operating system must respond to the keypress.
+Then the audio signal generated must work its way through the PortAudio
+buffers. Then it must work its way through the audio card hardware. Then
+it must go through the audio amplifier which is very quick and then travel
+through the air. Sound travels at abous one foot per millisecond through
+air so placing speakers across the room can add 5-20 msec of delay.
+<p>The reverse process occurs when recording or responding to audio input.
+If you are processing audio, for example if you implement a software guitar
+fuzz box, then you have both the audio input and audio output latencies
+added together.
+<p>The audio buffers are used to prevent glitches in the audio stream.
+The user software writes audio into the output buffers. That audio is read
+by the low level audio driver or by DMA and sent to the DAC. If the computer
+gets busy doing something like reading the disk or redrawing the screen,
+then it may not have time to fill the audio buffer. The audio hardware
+then runs out of audio data, which causes a glitch. By using a large enough
+buffer we can ensure that there is always enough audio data for the audio
+hardware to play. But if the buffer is too large then the latency is high
+and the system feels sluggish. If you play notes on the keyboard then the
+"instrument" will feel unresponsive. So you want the buffers to be as small
+as possible without glitching.
+<h2>
+<a NAME="portaudio"></a>PortAudio and Latency</h2>
+The only delay that PortAudio can control is the total length of its buffers.
+The Pa_OpenStream() call takes two parameters: numBuffers and framesPerBuffer.
+The latency is also affected by the sample rate which we will call framesPerSecond.
+A frame is a set of samples that occur simultaneously. For a stereo stream,
+a frame is two samples.
+<p>The latency in milliseconds due to this buffering&nbsp; is:
+<blockquote><tt>latency_msec = 1000 * numBuffers * framesPerBuffer / framesPerSecond</tt></blockquote>
+This is not the total latency, as we have seen, but it is the part we can
+control.
+<p>If you call Pa_OpenStream() with numBuffers equal to zero, then PortAudio
+will select a conservative number that will prevent audio glitches. If
+you still get glitches, then you can pass a larger value for numBuffers
+until the glitching stops. if you try to pass a numBuffers value that is
+too small, then PortAudio will use its own idea of the minimum value.
+<p>PortAudio decides on the minimum number of buffers in a conservative
+way based on the frameRate, operating system and other variables. You can
+query the value that PortAudio will use by calling:
+<blockquote><tt>int Pa_GetMinNumBuffers( int framesPerBuffer, double sampleRate
+);</tt></blockquote>
+On some systems you can override the PortAudio minimum if you know your
+system can handle a lower value. You do this by setting an environment
+variable called PA_MIN_LATENCY_MSEC which is read by PortAudio when it
+starts up. This is supported on the PortAudio implementations for Windows
+MME, Windows DirectSound, and Unix OSS.
+<h2>
+<a NAME="macintosh"></a>Macintosh</h2>
+The best thing you can do to improve latency on Mac OS 8 and 9 is to turn
+off Virtual Memory. PortAudio V18 will detect that Virtual Memory is turned
+off and use a very low latency.
+<p>For Mac OS X the latency is very low because Apple Core Audio is so
+well written. You can set the PA_MIN_LATENCY_MSEC variable using:
+<blockquote><tt>setenv PA_MIN_LATENCY_MSEC 4</tt></blockquote>
+
+<h2>
+<a NAME="unix"></a>Unix</h2>
+PortAudio under Unix currently uses a backgroud thread that reads and writes
+to OSS. This gives you decent but not great latency. But if you raise the
+priority of the background thread to a very priority then you can get under
+10 milliseconds latency. In order to raise your priority you must run the
+PortAudio program as root! You must also set PA_MIN_LATENCY_MSEC using
+the appropriate command for your shell.
+<h2>
+<a NAME="windows"></a>Windows</h2>
+Latency under Windows is a complex issue because of all the alternative
+operating system versions and device drivers. I have seen latency range
+from 8 milliseconds to 400 milliseconds. The worst case is when using Windows
+NT. Windows 98 is a little better, and Windows XP can be quite good if
+properly tuned.
+<p>The underlying audio API also makes a lot of difference. If the audio
+device has its own DirectSound driver then DirectSound can often provide
+better latency than WMME. But if a real DirectSound driver is not available
+for your device then it is emulated using WMME and the latency can be very
+high. That's where I saw the 400 millisecond latency. The ASIO implementation
+is generally very good and will give the lowest latency if available.
+<p>You can set the PA_MIN_LATENCY_MSEC variable to 50, for example, by
+entering in MS-DOS:
+<blockquote><tt>set PA_MIN_LATENCY_MSEC=50</tt></blockquote>
+If you enter this in a DOS window then you must run the PortAudio program
+from that same window for the variable to have an effect. You can add that
+line to your C:\AUTOEXEC.BAT file and reboot if you want it to affect any
+PortAudio based program.
+<p>For Windows XP, you can set environment variables as follows:
+<ol>
+<li>
+Select "Control Panel" from the "Start Menu".</li>
+
+<li>
+Launch the "System" Control Panel</li>
+
+<li>
+Click on the "Advanced" tab.</li>
+
+<li>
+Click on the "Environment Variables" button.</li>
+
+<li>
+Click "New" button under&nbsp; User Variables.</li>
+
+<li>
+Enter PA_MIN_LATENCY_MSEC for the name and some optimistic number for the
+value.</li>
+
+<li>
+Click OK, OK, OK.</li>
+</ol>
+
+<h3>
+Improving Latency on Windows</h3>
+There are several steps you can take to improve latency under windows.
+<ol>
+<li>
+Avoid reading or writng to disk when doing audio.</li>
+
+<li>
+Turn off all automated background tasks such as email clients, virus scanners,
+backup programs, FTP servers, web servers, etc. when doing audio.</li>
+
+<li>
+Disconnect from the network to prevent network traffic from interrupting
+your CPU.</li>
+</ol>
+<b>Important: </b>Windows XP users can also tune the OS to favor background
+tasks, such as audio, over foreground tasks, such as word processing. I
+lowered my latency from 40 to 10 milliseconds using this simple technique.
+<ol>
+<li>
+Select "Control Panel" from the "Start Menu".</li>
+
+<li>
+Launch the "System" Control Panel</li>
+
+<li>
+Click on the "Advanced" tab.</li>
+
+<li>
+Click on the "Settings" button in the Performance area.</li>
+
+<li>
+Click on the "Advanced" tab.</li>
+
+<li>
+Select "Background services" in the Processor Scheduling area.</li>
+
+<li>
+Click OK, OK.</li>
+</ol>
+Please let us know if you have others sugestions for lowering latency.
+<br>&nbsp;
+<br>&nbsp;
+</body>
+</html>
diff --git a/src/audio/portaudio/docs/pa_impl_guide.html b/src/audio/portaudio/docs/pa_impl_guide.html
new file mode 100644
index 0000000000..50abc30454
--- /dev/null
+++ b/src/audio/portaudio/docs/pa_impl_guide.html
@@ -0,0 +1,197 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.79 [en] (Windows NT 5.0; U) [Netscape]">
+   <meta name="Author" content="Phil Burk">
+   <meta name="Description" content="Internal docs. How a stream is started or stopped.">
+   <meta name="KeyWords" content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
+   <title>PortAudio Implementation - Start/Stop</title>
+</head>
+<body>
+&nbsp;
+<center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
+<tr>
+<td>
+<center>
+<h1>
+<a href="http://www.portaudio.com">PortAudio</a> Implementation Guide</h1></center>
+</td>
+</tr>
+</table></center>
+
+<p>This document describes how to implement the PortAudio API on a new
+computer platform. Implementing PortAudio on a new platform, makes it possible
+to port many existing audio applications to that platform.
+<p>By Phil Burk
+<br>Copyright 2000 Phil Burk and Ross Bencina
+<p>Note that the license says: <b>"Any person wishing to distribute modifications
+to the Software is requested to send the modifications to the original
+developer so that they can be incorporated into the canonical version."</b>.
+So when you have finished a new implementation, please send it back to
+us at&nbsp; "<a href="http://www.portaudio.com">http://www.portaudio.com</a>"
+so that we can make it available for other users. Thank you!
+<h2>
+Download the Latest PortAudio Implementation</h2>
+Always start with the latest implementation available at "<a href="http://www.portaudio.com">http://www.portaudio.com</a>".
+Look for the nightly snapshot under the CVS section.
+<h2>
+Select an Existing Implementation as a Basis</h2>
+The fastest way to get started is to take an existing implementation and
+translate it for your new platform. Choose an implementation whose architecture
+is as close as possible to your target.
+<ul>
+<li>
+DirectSound Implementation - pa_win_ds - Uses a timer callback for the
+background "thread". Polls a circular buffer and writes blocks of data
+to keep it full.</li>
+
+<li>
+Windows MME - pa_win_wmme - Spawns an actual Win32 thread. Writes blocks
+of data to the HW device and waits for events that signal buffer completion.</li>
+
+<li>
+Linux OSS - pa_linux - Spawns a real thread that writes to the "/dev/dsp"
+stream using blocking I/O calls.</li>
+</ul>
+When you write a new implementation, you will be using some code that is
+in common with all implementations. This code is in the folder "pa_common".
+It provides various functions such as parameter checking, error code to
+text conversion, sample format conversion, clipping and dithering, etc.
+<p>The code that you write will go into a separate folder called "pa_{os}_{api}".
+For example, code specific to the DirectSound interface for Windows goes
+in "pa_win_ds".
+<h2>
+Read Docs and Code</h2>
+Famialiarize yourself with the system by reading the documentation provided.
+here is a suggested order:
+<ol>
+<li>
+User Programming <a href="pa_tutorial.html">Tutorial</a></li>
+
+<li>
+Header file "pa_common/portaudio.h" which defines API.</li>
+
+<li>
+Header file "pa_common/pa_host.h" for host dependant code. This definces
+the routine you will need to provide.</li>
+
+<li>
+Shared code in "pa_common/pa_lib.c".</li>
+
+<li>
+Docs on Implementation of <a href="pa_impl_startstop.html">Start/Stop</a>
+code.</li>
+</ol>
+
+<h2>
+Implement&nbsp; Output to Default Device</h2>
+Now we are ready to crank some code. For instant gratification, let's try
+to play a sine wave.
+<ol>
+<li>
+Link the test program "pa_tests/patest_sine.c" with the file "pa_lib.c"
+and the implementation specific file you are creating.</li>
+
+<li>
+For now, just stub out the device query code and the audio input code.</li>
+
+<li>
+Modify PaHost_OpenStream() to open your default target device and get everything
+setup.</li>
+
+<li>
+Modify PaHost_StartOutput() to start playing audio.</li>
+
+<li>
+Modify PaHost_StopOutput() to stop audio.</li>
+
+<li>
+Modify PaHost_CloseStream() to clean up. Free all memory that you allocated
+in PaHost_OpenStream().</li>
+
+<li>
+Keep cranking until you can play a sine wave using "patest_sine.c".</li>
+
+<li>
+Once that works, try "patest_pink.c", "patest_clip.c", "patest_sine8.c".</li>
+
+<li>
+To test your Open and Close code, try "patest_many.c".</li>
+
+<li>
+Now test to make sure that the three modes of stopping are properly supported
+by running "patest_stop.c".</li>
+
+<li>
+Test your implementation of time stamping with "patest_sync.c".</li>
+</ol>
+
+<h2>
+Implement Device Queries</h2>
+Now that output is working, lets implement the code for querying what devices
+are available to the user. Run "pa_tests/pa_devs.c". It should print all
+of the devices available and their characteristics.
+<h2>
+Implement Input</h2>
+Implement audio input and test it with:
+<ol>
+<li>
+patest_record.c - record in half duplex, play back as recorded.</li>
+
+<li>
+patest_wire.c - full duplex, copies input to output. Note that some HW
+may not support full duplex.</li>
+
+<li>
+patest_fuzz.c - plug in your guitar and get a feel for why latency is an
+important issue in computer music.</li>
+
+<li>
+paqa_devs.c - try to open every device and use it with every possible format</li>
+</ol>
+
+<h2>
+Debugging Tools</h2>
+You generally cannot use printf() calls to debug real-time processes because
+they disturb the timing. Also calling printf() from your background thread
+or interrupt could crash the machine. So PA includes a tool for capturing
+events and storing the information while it is running. It then prints
+the events when Pa_Terminate() is called.
+<ol>
+<li>
+To enable trace mode, change TRACE_REALTIME_EVENTS in "pa_common/pa_trace.h"
+from a (0) to a (1).</li>
+
+<li>
+Link with "pa_common/pa_trace.c".</li>
+
+<li>
+Add trace messages to your code by calling:</li>
+
+<br><tt>&nbsp;&nbsp; void AddTraceMessage( char *msg, int data );</tt>
+<br><tt>for example</tt>
+<br><tt>&nbsp;&nbsp; AddTraceMessage("Pa_TimeSlice: past_NumCallbacks ",
+past->past_NumCallbacks );</tt>
+<li>
+Run your program. You will get a dump of events at the end.</li>
+
+<li>
+You can leave the trace messages in your code. They will turn to NOOPs
+when you change TRACE_REALTIME_EVENTS back to (0).</li>
+</ol>
+
+<h2>
+Delivery</h2>
+Please send your new code along with notes on the implementation back to
+us at "<a href="http://www.portaudio.com">http://www.portaudio.com</a>".
+We will review the implementation and post it with your name. If you had
+to make any modifications to the code in "pa_common" or "pa_tests" <b>please</b>
+send us those modifications and your notes. We will try to merge your changes
+so that the "pa_common" code works with <b>all</b> implementations.
+<p>If you have suggestions for how to make future implementations easier,
+please let us know.
+<br>THANKS!
+<br>&nbsp;
+</body>
+</html>
diff --git a/src/audio/portaudio/docs/pa_impl_startstop.html b/src/audio/portaudio/docs/pa_impl_startstop.html
new file mode 100644
index 0000000000..0f2d0ce516
--- /dev/null
+++ b/src/audio/portaudio/docs/pa_impl_startstop.html
@@ -0,0 +1,190 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.75 [en]C-gatewaynet  (Win98; U) [Netscape]">
+   <meta name="Author" content="Phil Burk">
+   <meta name="Description" content="Internal docs. How a stream is started or stopped.">
+   <meta name="KeyWords" content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
+   <title>PortAudio Implementation - Start/Stop</title>
+</head>
+<body>
+&nbsp;
+<center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
+<tr>
+<td>
+<center>
+<h1>
+PortAudio Implementation</h1></center>
+</td>
+</tr>
+</table></center>
+
+<h2>
+Starting and Stopping Streams</h2>
+PortAudio is generally executed in two "threads". The foreground thread
+is the application thread. The background "thread" may be implemented as
+an actual thread, an interrupt handler, or a callback from a timer thread.
+<p>There are three ways that PortAudio can stop a stream. In each case
+we look at the sequence of events and the messages sent between the two
+threads. The following variables are contained in the internalPortAudioStream.
+<blockquote><tt>int&nbsp;&nbsp; past_IsActive;&nbsp;&nbsp;&nbsp;&nbsp;
+/* Background is still playing. */</tt>
+<br><tt>int&nbsp;&nbsp; past_StopSoon;&nbsp;&nbsp;&nbsp;&nbsp; /* Stop
+when last buffer done. */</tt>
+<br><tt>int&nbsp;&nbsp; past_StopNow;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*
+Stop IMMEDIATELY. */</tt></blockquote>
+
+<h3>
+Pa_AbortStream()</h3>
+This function causes the background thread to terminate as soon as possible
+and audio I/O to stop abruptly.
+<br>&nbsp;
+<table BORDER COLS=2 WIDTH="60%" >
+<tr>
+<td><b>Foreground Thread</b></td>
+
+<td><b>Background Thread</b></td>
+</tr>
+
+<tr>
+<td>sets <tt>StopNow</tt></td>
+
+<td></td>
+</tr>
+
+<tr>
+<td></td>
+
+<td>sees <tt>StopNow</tt>,&nbsp;</td>
+</tr>
+
+<tr>
+<td></td>
+
+<td>clears IsActive, stops thread</td>
+</tr>
+
+<tr>
+<td>waits for thread to exit</td>
+
+<td></td>
+</tr>
+
+<tr>
+<td>turns off audio I/O</td>
+
+<td></td>
+</tr>
+</table>
+
+<h3>
+Pa_StopStream()</h3>
+This function stops the user callback function from being called and then
+waits for all audio data written to the output buffer to be played. In
+a system with very low latency, you may not hear any difference between
+<br>&nbsp;
+<table BORDER COLS=2 WIDTH="60%" >
+<tr>
+<td><b>Foreground Thread</b></td>
+
+<td><b>Background Thread</b></td>
+</tr>
+
+<tr>
+<td>sets StopSoon</td>
+
+<td></td>
+</tr>
+
+<tr>
+<td></td>
+
+<td>stops calling user callback</td>
+</tr>
+
+<tr>
+<td></td>
+
+<td>continues until output buffer empty</td>
+</tr>
+
+<tr>
+<td></td>
+
+<td>clears IsActive, stops thread</td>
+</tr>
+
+<tr>
+<td>waits for thread to exit</td>
+
+<td></td>
+</tr>
+
+<tr>
+<td>turns off audio I/O</td>
+
+<td></td>
+</tr>
+</table>
+
+<h3>
+User callback returns one.</h3>
+If the user callback returns one then the user callback function will no
+longer be called. Audio output will continue until all audio data written
+to the output buffer has been played. Then the audio I/O is stopped, the
+background thread terminates, and the stream becomes inactive.
+<br>&nbsp;
+<table BORDER COLS=2 WIDTH="60%" >
+<tr>
+<td><b>Foreground Thread</b></td>
+
+<td><b>Background Thread</b></td>
+</tr>
+
+<tr>
+<td></td>
+
+<td>callback returns 1</td>
+</tr>
+
+<tr>
+<td></td>
+
+<td>sets StopSoon</td>
+</tr>
+
+<tr>
+<td></td>
+
+<td>stops calling user callback</td>
+</tr>
+
+<tr>
+<td></td>
+
+<td>continues until output buffer empty</td>
+</tr>
+
+<tr>
+<td></td>
+
+<td>clears IsActive, stops thread</td>
+</tr>
+
+<tr>
+<td>waits for thread to exit</td>
+
+<td></td>
+</tr>
+
+<tr>
+<td>turns off audio I/O</td>
+
+<td></td>
+</tr>
+</table>
+
+<br>&nbsp;
+</body>
+</html>
diff --git a/src/audio/portaudio/docs/pa_tut_asio.html b/src/audio/portaudio/docs/pa_tut_asio.html
new file mode 100644
index 0000000000..1c3e5bfa46
--- /dev/null
+++ b/src/audio/portaudio/docs/pa_tut_asio.html
@@ -0,0 +1,55 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.77 [en]C-gatewaynet  (Win98; U) [Netscape]">
+   <meta name="Author" content="Phil Burk">
+   <meta name="Description" content="Tutorial for PortAudio, a cross platform, open-source, audio I/O library.It provides a very simple API for recording and/or playing sound using a simple callback function.">
+   <meta name="KeyWords" content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
+   <title>PortAudio Tutorial</title>
+</head>
+<body>
+&nbsp;
+<center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
+<tr>
+<td>
+<center>
+<h1>
+PortAudio Tutorial</h1></center>
+</td>
+</tr>
+</table></center>
+
+<h2>
+Compiling for ASIO (Windows or Macintosh)</h2>
+
+<blockquote>ASIO is a low latency audio API from Steinberg. To compile
+an ASIO application, you must first <a href="http://www.steinberg.net/developers/ASIO2SDKAbout.phtml">download
+the ASIO SDK</a> from Steinberg. You also need to obtain ASIO drivers for
+your audio device.
+<p>Note: I am using '/' as a file separator below. On Macintosh replace
+'/' with ':'. On Windows, replace '/' with '\'.
+<p>&nbsp;To use ASIO with the PortAudio library add the following source
+files to your project:
+<blockquote>
+<pre>pa_asio/pa_asio.cpp</pre>
+</blockquote>
+and also these files from the ASIO SDK:
+<blockquote>
+<pre>common/asio.cpp
+host/asiodrivers.cpp
+host/asiolist.cpp</pre>
+</blockquote>
+and add these directories to the path for include files
+<blockquote>
+<pre>asiosdk2/host/pc&nbsp;&nbsp; (for Windows)
+asiosdk2/common
+asiosdk2/host</pre>
+</blockquote>
+You may try compiling the "pa_tests/patest_saw.c" file first because it
+is the simplest.</blockquote>
+<font size=+2><a href="http://www.portaudio.com/">home</a> |
+<a href="pa_tutorial.html">contents</a>
+| <a href="pa_tut_over.html">previous</a> |&nbsp; <a href="pa_tut_callback.html">next</a></font>
+</body>
+</html>
diff --git a/src/audio/portaudio/docs/pa_tut_callback.html b/src/audio/portaudio/docs/pa_tut_callback.html
new file mode 100644
index 0000000000..f5ccaf0f16
--- /dev/null
+++ b/src/audio/portaudio/docs/pa_tut_callback.html
@@ -0,0 +1,91 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.77 [en]C-gatewaynet  (Win98; U) [Netscape]">
+   <meta name="Author" content="Phil Burk">
+   <meta name="Description" content="Tutorial for PortAudio, a cross platform, open-source, audio I/O library.It provides a very simple API for recording and/or playing sound using a simple callback function.">
+   <meta name="KeyWords" content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
+   <title>PortAudio Tutorial</title>
+</head>
+<body>
+&nbsp;
+<center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
+<tr>
+<td>
+<center>
+<h1>
+PortAudio Tutorial</h1></center>
+</td>
+</tr>
+</table></center>
+
+<h2>
+Writing a Callback Function</h2>
+
+<blockquote>To write a program using PortAudio, you must include the "portaudio.h"
+include file. You may wish to read "<a href="portaudio_h.txt">portaudio.h</a>"
+because it contains a complete description of the PortAudio functions and
+constants.
+<blockquote>
+<pre>#include "portaudio.h"</pre>
+</blockquote>
+The next task is to write your custom callback function. It is a function
+that is called by the PortAudio engine whenever it has captured audio data,
+or when it needs more audio data for output.
+<p>Your callback function is often called by an interrupt, or low level
+process so you should not do any complex system activities like allocating
+memory, or reading or writing files, or printf(). Just crunch numbers and
+generate audio signals. What is safe or not safe will vary from platform
+to platform. On the Macintosh, for example, you can only call "interrupt
+safe" routines. Also do not call any PortAudio functions in the callback
+except for Pa_StreamTime() and Pa_GetCPULoad().
+<p>Your callback function must return an int and accept the exact parameters
+specified in this typedef:
+<blockquote>
+<pre>typedef int (PortAudioCallback)(
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void *inputBuffer, void *outputBuffer,
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned long framesPerBuffer,
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PaTimestamp outTime, void *userData );</pre>
+</blockquote>
+Here is an example callback function from the test file "patests/patest_saw.c".
+It calculates a simple left and right sawtooth signal and writes it to
+the output buffer. Notice that in this example, the signals are of <tt>float</tt>
+data type. The signals must be between -1.0 and +1.0. You can also use
+16 bit integers or other formats which are specified during setup. You
+can pass a pointer to your data structure through PortAudio which will
+appear as <tt>userData</tt>.
+<blockquote>
+<pre>int patestCallback(&nbsp; void *inputBuffer, void *outputBuffer,
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned long framesPerBuffer,
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PaTimestamp outTime, void *userData )
+{
+&nbsp;&nbsp;&nbsp; unsigned int i;
+/* Cast data passed through stream to our structure type. */
+&nbsp;&nbsp;&nbsp; paTestData *data = (paTestData*)userData;
+&nbsp;&nbsp;&nbsp; float *out = (float*)outputBuffer;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+&nbsp;&nbsp;&nbsp; for( i=0; i&lt;framesPerBuffer; i++ )
+&nbsp;&nbsp;&nbsp; {
+&nbsp;&nbsp;&nbsp; /* Stereo channels are interleaved. */
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *out++ = data->left_phase;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* left */
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *out++ = data->right_phase;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* right */
+
+&nbsp;&nbsp;&nbsp; /* Generate simple sawtooth phaser that ranges between -1.0 and 1.0. */
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data->left_phase += 0.01f;
+&nbsp;&nbsp;&nbsp; /* When signal reaches top, drop back down. */
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( data->left_phase >= 1.0f ) data->left_phase -= 2.0f;
+
+&nbsp;&nbsp;&nbsp; /* higher pitch so we can distinguish left and right. */
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data->right_phase += 0.03f;&nbsp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( data->right_phase >= 1.0f ) data->right_phase -= 2.0f;
+&nbsp;&nbsp;&nbsp; }
+&nbsp;&nbsp;&nbsp; return 0;
+}</pre>
+</blockquote>
+</blockquote>
+<font size=+2><a href="http://www.portaudio.com/">home</a> |
+<a href="pa_tutorial.html">contents</a>
+| <a href="pa_tut_over.html">previous</a> |&nbsp; <a href="pa_tut_init.html">next</a></font>
+</body>
+</html>
diff --git a/src/audio/portaudio/docs/pa_tut_devs.html b/src/audio/portaudio/docs/pa_tut_devs.html
new file mode 100644
index 0000000000..1756992cb5
--- /dev/null
+++ b/src/audio/portaudio/docs/pa_tut_devs.html
@@ -0,0 +1,65 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.75 [en]C-gatewaynet  (Win98; U) [Netscape]">
+   <meta name="Author" content="Phil Burk">
+   <meta name="Description" content="Tutorial for PortAudio, a cross platform, open-source, audio I/O library.It provides a very simple API for recording and/or playing sound using a simple callback function.">
+   <meta name="KeyWords" content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
+   <title>PortAudio Tutorial</title>
+</head>
+<body>
+&nbsp;
+<center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
+<tr>
+<td>
+<center>
+<h1>
+PortAudio Tutorial</h1></center>
+</td>
+</tr>
+</table></center>
+
+<h2>
+Querying for Available Devices</h2>
+
+<blockquote>There are often several different audio devices available in
+a computer with different capabilities. They can differ in the sample rates
+supported, bit widths, etc. PortAudio provides a simple way to query for
+the available devices, and then pass the selected device to Pa_OpenStream().
+For an example, see the file "pa_tests/pa_devs.c".
+<p>To determine the number of devices:
+<blockquote>
+<pre>numDevices = Pa_CountDevices();</pre>
+</blockquote>
+You can then query each device in turn by calling Pa_GetDeviceInfo() with
+an index.
+<blockquote>
+<pre>for( i=0; i&lt;numDevices; i++ ) {
+&nbsp;&nbsp;&nbsp;&nbsp; pdi = Pa_GetDeviceInfo( i );</pre>
+</blockquote>
+It will return a pointer to a <tt>PaDeviceInfo</tt> structure which is
+defined as:
+<blockquote>
+<pre>typedef struct{
+&nbsp;&nbsp;&nbsp; int structVersion;&nbsp;
+&nbsp;&nbsp;&nbsp; const char *name;
+&nbsp;&nbsp;&nbsp; int maxInputChannels;
+&nbsp;&nbsp;&nbsp; int maxOutputChannels;
+/* Number of discrete rates, or -1 if range supported. */
+&nbsp;&nbsp;&nbsp; int numSampleRates;
+/* Array of supported sample rates, or {min,max} if range supported. */
+&nbsp;&nbsp;&nbsp; const double *sampleRates;
+&nbsp;&nbsp;&nbsp; PaSampleFormat nativeSampleFormat;
+}PaDeviceInfo;</pre>
+</blockquote>
+If the device supports a continuous range of sample rates, then numSampleRates
+will equal -1, and the sampleRates array will have two values, the minimum&nbsp;
+and maximum rate.
+<p>The device information is allocated by Pa_Initialize() and freed by
+Pa_Terminate() so you do not have to free() the structure returned by Pa_GetDeviceInfo().</blockquote>
+<font size=+2><a href="http://www.portaudio.com/">home</a> |
+<a href="pa_tutorial.html">contents</a>
+| <a href="pa_tut_util.html">previous</a> |&nbsp; <a href="pa_tut_rw.html">next</a></font>
+</body>
+</html>
diff --git a/src/audio/portaudio/docs/pa_tut_explore.html b/src/audio/portaudio/docs/pa_tut_explore.html
new file mode 100644
index 0000000000..91c08a5b72
--- /dev/null
+++ b/src/audio/portaudio/docs/pa_tut_explore.html
@@ -0,0 +1,42 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.73 [en]C-gatewaynet  (Win98; U) [Netscape]">
+   <meta name="Author" content="Phil Burk">
+   <meta name="Description" content="Tutorial for PortAudio, a cross platform, open-source, audio I/O library.It provides a very simple API for recording and/or playing sound using a simple callback function.">
+   <meta name="KeyWords" content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
+   <title>PortAudio Tutorial</title>
+</head>
+<body>
+&nbsp;
+<center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
+<tr>
+<td>
+<center>
+<h1>
+PortAudio Tutorial</h1></center>
+</td>
+</tr>
+</table></center>
+
+<h2>
+Exploring PortAudio</h2>
+
+<blockquote>Now that you have a good idea of how PortAudio works, you can
+try out the test programs.
+<ul>
+<li>
+For an example of playing a sine wave, see "pa_tests/patest_sine.c".</li>
+
+<li>
+For an example of recording and playing back a sound, see&nbsp; "pa_tests/patest_record.c".</li>
+</ul>
+I also encourage you to examine the source for the PortAudio libraries.
+If you have suggestions on ways to improve them, please let us know. if
+you want to implement PortAudio on a new platform, please let us know as
+well so we can coordinate people's efforts.</blockquote>
+<font size=+2><a href="http://www.portaudio.com/">home</a> | <a href="pa_tutorial.html">contents</a>
+| <a href="pa_tut_rw.html">previous</a> |&nbsp; next</font>
+</body>
+</html>
diff --git a/src/audio/portaudio/docs/pa_tut_init.html b/src/audio/portaudio/docs/pa_tut_init.html
new file mode 100644
index 0000000000..91bfa8d987
--- /dev/null
+++ b/src/audio/portaudio/docs/pa_tut_init.html
@@ -0,0 +1,43 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.73 [en]C-gatewaynet  (Win98; U) [Netscape]">
+   <meta name="Author" content="Phil Burk">
+   <meta name="Description" content="Tutorial for PortAudio, a cross platform, open-source, audio I/O library.It provides a very simple API for recording and/or playing sound using a simple callback function.">
+   <meta name="KeyWords" content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
+   <title>PortAudio Tutorial</title>
+</head>
+<body>
+&nbsp;
+<center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
+<tr>
+<td>
+<center>
+<h1>
+PortAudio Tutorial</h1></center>
+</td>
+</tr>
+</table></center>
+
+<h2>
+Initializing PortAudio</h2>
+
+<blockquote>Before making any other calls to PortAudio, you must call <tt>Pa_Initialize</tt>().
+This will trigger a scan of available devices which can be queried later.
+Like most PA functions, it will return a result of type <tt>paError</tt>.
+If the result is not <tt>paNoError</tt>, then an error has occurred.
+<blockquote>
+<pre>err = Pa_Initialize();
+if( err != paNoError ) goto error;</pre>
+</blockquote>
+You can get a text message that explains the error message by passing it
+to
+<blockquote>
+<pre>printf(&nbsp; "PortAudio error: %s\n", Pa_GetErrorText( err ) );</pre>
+</blockquote>
+</blockquote>
+<font size=+2><a href="http://www.portaudio.com/">home</a> | <a href="pa_tutorial.html">contents</a>
+| <a href="pa_tut_callback.html">previous</a> |&nbsp; <a href="pa_tut_open.html">next</a></font>
+</body>
+</html>
diff --git a/src/audio/portaudio/docs/pa_tut_mac.html b/src/audio/portaudio/docs/pa_tut_mac.html
new file mode 100644
index 0000000000..bf3dafd1ac
--- /dev/null
+++ b/src/audio/portaudio/docs/pa_tut_mac.html
@@ -0,0 +1,41 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.77 [en]C-gatewaynet  (Win98; U) [Netscape]">
+   <meta name="Author" content="Phil Burk">
+   <meta name="Description" content="Tutorial for PortAudio, a cross platform, open-source, audio I/O library.It provides a very simple API for recording and/or playing sound using a simple callback function.">
+   <meta name="KeyWords" content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
+   <title>PortAudio Tutorial</title>
+</head>
+<body>
+&nbsp;
+<center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
+<tr>
+<td>
+<center>
+<h1>
+PortAudio Tutorial</h1></center>
+</td>
+</tr>
+</table></center>
+
+<h2>
+Compiling for Macintosh</h2>
+
+<blockquote>To compile a Macintosh application with the PortAudio library,
+add the following source files to your project:
+<blockquote>
+<pre>pa_mac:pa_mac.c
+pa_common:pa_lib.c
+pa_common:portaudio.h
+pa_common:pa_host.h</pre>
+</blockquote>
+Also add the Apple <b>SoundLib</b> to your project.
+<p>You may try compiling the "pa_tests:patest_saw.c" file first because
+it is the simplest.</blockquote>
+<font size=+2><a href="http://www.portaudio.com/">home</a> |
+<a href="pa_tutorial.html">contents</a>
+| <a href="pa_tut_over.html">previous</a> |&nbsp; <a href="pa_tut_callback.html">next</a></font>
+</body>
+</html>
diff --git a/src/audio/portaudio/docs/pa_tut_mac_osx.html b/src/audio/portaudio/docs/pa_tut_mac_osx.html
new file mode 100644
index 0000000000..3af8c140ff
--- /dev/null
+++ b/src/audio/portaudio/docs/pa_tut_mac_osx.html
@@ -0,0 +1,46 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.79 [en] (Windows NT 5.0; U) [Netscape]">
+   <meta name="Author" content="Phil Burk">
+   <meta name="Description" content="Tutorial for PortAudio, a cross platform, open-source, audio I/O library.It provides a very simple API for recording and/or playing sound using a simple callback function.">
+   <meta name="KeyWords" content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
+   <title>PortAudio Tutorial</title>
+</head>
+<body>
+&nbsp;
+<center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
+<tr>
+<td>
+<center>
+<h1>
+PortAudio Tutorial</h1></center>
+</td>
+</tr>
+</table></center>
+
+<h2>
+Compiling for Macintosh OS X</h2>
+
+<blockquote>To compile a Macintosh OS X CoreAudio application with the
+PortAudio library:
+<p>Create a new ProjectBuilder project. You can use a "Tool" project to
+run the PortAudio examples.
+<p>Add the following source files to your Project:
+<blockquote>
+<pre>pa_mac_core/pa_mac_core.c
+pa_common/pa_lib.c
+pa_common/portaudio.h
+pa_common/pa_host.h
+pa_common/pa_convert.c</pre>
+</blockquote>
+Add the Apple CoreAudio.framework to your project by selecting "Add FrameWorks..."
+from the Project menu.
+<p>Compile and run the "pa_tests:patest_saw.c" file first because it is
+the simplest.</blockquote>
+<font size=+2><a href="http://www.portaudio.com/">home</a> |
+<a href="pa_tutorial.html">contents</a>
+| <a href="pa_tut_over.html">previous</a> |&nbsp; <a href="pa_tut_callback.html">next</a></font>
+</body>
+</html>
diff --git a/src/audio/portaudio/docs/pa_tut_open.html b/src/audio/portaudio/docs/pa_tut_open.html
new file mode 100644
index 0000000000..1621ef30ff
--- /dev/null
+++ b/src/audio/portaudio/docs/pa_tut_open.html
@@ -0,0 +1,52 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.73 [en]C-gatewaynet  (Win98; U) [Netscape]">
+   <meta name="Author" content="Phil Burk">
+   <meta name="Description" content="Tutorial for PortAudio, a cross platform, open-source, audio I/O library.It provides a very simple API for recording and/or playing sound using a simple callback function.">
+   <meta name="KeyWords" content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
+   <title>PortAudio Tutorial</title>
+</head>
+<body>
+&nbsp;
+<center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
+<tr>
+<td>
+<center>
+<h1>
+PortAudio Tutorial</h1></center>
+</td>
+</tr>
+</table></center>
+
+<h2>
+Opening a Stream using Defaults</h2>
+
+<blockquote>The next step is to open a stream which is similar to opening
+a file. You can specify whether you want audio input and/or output, how
+many channels, the data format, sample rate, etc. There are two calls for
+opening streams, <tt>Pa_OpenStream</tt>() and <tt>Pa_OpenDefaultStream</tt>().
+<p><tt>Pa_OpenStream()</tt> takes extra&nbsp; parameters which give you
+more control. You can normally just use <tt>Pa_OpenDefaultStream</tt>()
+which just calls <tt>Pa_OpenStream()</tt> <tt>with</tt> some reasonable
+default values.&nbsp; Let's open a stream for stereo output, using floating
+point data, at 44100 Hz.
+<blockquote>
+<pre>err = Pa_OpenDefaultStream(
+&nbsp;&nbsp;&nbsp; &amp;stream,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* passes back stream pointer */
+&nbsp;&nbsp;&nbsp; 0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* no input channels */
+&nbsp;&nbsp;&nbsp; 2,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* stereo output */
+&nbsp;&nbsp;&nbsp; paFloat32,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 32 bit floating point output */
+&nbsp;&nbsp;&nbsp; 44100,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* sample rate */
+&nbsp;&nbsp;&nbsp; 256,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* frames per buffer */
+&nbsp;&nbsp;&nbsp; 0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* number of buffers, if zero then use default minimum */
+&nbsp;&nbsp;&nbsp; patestCallback, /* specify our custom callback */
+&nbsp;&nbsp;&nbsp; &amp;data );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* pass our data through to callback */</pre>
+</blockquote>
+If you want to use 16 bit integer data, pass <tt>paInt16</tt> instead of
+<tt>paFloat32</tt>.</blockquote>
+<font size=+2><a href="http://www.portaudio.com/">home</a> | <a href="pa_tutorial.html">contents</a>
+| <a href="pa_tut_init.html">previous</a> |&nbsp; <a href="pa_tut_run.html">next</a></font>
+</body>
+</html>
diff --git a/src/audio/portaudio/docs/pa_tut_oss.html b/src/audio/portaudio/docs/pa_tut_oss.html
new file mode 100644
index 0000000000..1bb76f2592
--- /dev/null
+++ b/src/audio/portaudio/docs/pa_tut_oss.html
@@ -0,0 +1,46 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.77 [en]C-gatewaynet  (Win98; U) [Netscape]">
+   <meta name="Author" content="Phil Burk">
+   <meta name="Description" content="Tutorial for PortAudio, a cross platform, open-source, audio I/O library.It provides a very simple API for recording and/or playing sound using a simple callback function.">
+   <meta name="KeyWords" content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
+   <title>PortAudio Tutorial</title>
+</head>
+<body>
+&nbsp;
+<center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
+<tr>
+<td>
+<center>
+<h1>
+PortAudio Tutorial</h1></center>
+</td>
+</tr>
+</table></center>
+
+<h2>
+Compiling for Unix OSS</h2>
+
+<blockquote>[Skip this page if you are not using Unix and OSS]
+<p>We currently support the <a href="http://www.opensound.com/">OSS</a>
+audio drivers for Linux, Solaris, and FreeBSD. We hope to someday support
+the newer ALSA drivers.
+<ol>
+<li>
+cd to pa_unix_oss directory</li>
+
+<li>
+Edit the Makefile and uncomment one of the tests. You may try compiling
+the "patest_sine.c" file first because it is very simple.</li>
+
+<li>
+gmake run</li>
+</ol>
+</blockquote>
+<font size=+2><a href="http://www.portaudio.com/">home</a> |
+<a href="pa_tutorial.html">contents</a>
+| <a href="pa_tut_pc.html">previous</a> |&nbsp; <a href="pa_tut_callback.html">next</a></font>
+</body>
+</html>
diff --git a/src/audio/portaudio/docs/pa_tut_over.html b/src/audio/portaudio/docs/pa_tut_over.html
new file mode 100644
index 0000000000..baa99205bf
--- /dev/null
+++ b/src/audio/portaudio/docs/pa_tut_over.html
@@ -0,0 +1,92 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.79 [en] (Windows NT 5.0; U) [Netscape]">
+   <meta name="Author" content="Phil Burk">
+   <meta name="Description" content="Tutorial for PortAudio, a cross platform, open-source, audio I/O library.It provides a very simple API for recording and/or playing sound using a simple callback function.">
+   <meta name="KeyWords" content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
+   <title>PortAudio Tutorial</title>
+</head>
+<body>
+&nbsp;
+<center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
+<tr>
+<td>
+<center>
+<h1>
+PortAudio Tutorial</h1></center>
+</td>
+</tr>
+</table></center>
+
+<h2>
+Overview of PortAudio</h2>
+
+<blockquote>PortAudio is a library that provides streaming audio input
+and output. It is a cross-platform API (Application Programming Interface)
+that works on Windows, Macintosh, Unix running OSS, SGI, BeOS, and perhaps
+other platforms by the time you read this. This means that you can write
+a simple 'C' program to process or generate an audio signal, and that program
+can run on several different types of computer just by recompiling the
+source code.
+<p>Here are the steps to writing a PortAudio application:
+<ol>
+<li>
+Write a callback function that will be called by PortAudio when audio processing
+is needed.</li>
+
+<li>
+Initialize the PA library and open a stream for audio I/O.</li>
+
+<li>
+Start the stream. Your callback function will be now be called repeatedly
+by PA in the background.</li>
+
+<li>
+In your callback you can read audio data from the inputBuffer and/or write
+data to the outputBuffer.</li>
+
+<li>
+Stop the stream by returning 1 from your callback, or by calling a stop
+function.</li>
+
+<li>
+Close the stream and terminate the library.</li>
+</ol>
+</blockquote>
+
+<blockquote>There is also <a href="pa_tut_rw.html">another interface</a>
+provided that allows you to generate audio in the foreground. You then
+simply write data to the stream and the tool will not return until it is
+ready to accept more data. This interface is simpler to use but is usually
+not preferred for large applications because it requires that you launch
+a thread to perform the synthesis. Launching a thread may be difficult
+on non-multi-tasking systems such as the Macintosh prior to MacOS X.
+<p>Let's continue by building a simple application that will play a sawtooth
+wave.
+<p>Please select the page for the specific implementation you would like
+to use:
+<ul>
+<li>
+<a href="pa_tut_pc.html">Windows (WMME or DirectSound)</a></li>
+
+<li>
+<a href="pa_tut_mac.html">Macintosh SoundManager for OS 7,8,9</a></li>
+
+<li>
+<a href="pa_tut_mac_osx.html">Macintosh CoreAudio for OS X</a></li>
+
+<li>
+<a href="pa_tut_asio.html">ASIO on Windows or Macintosh</a></li>
+
+<li>
+<a href="pa_tut_oss.html">Unix OSS</a></li>
+</ul>
+or continue with the <a href="pa_tut_callback.html">next page of the programming
+tutorial</a>.</blockquote>
+<font size=+2><a href="http://www.portaudio.com/">home</a> |
+<a href="pa_tutorial.html">contents</a>
+| <a href="pa_tutorial.html">previous</a></font>
+</body>
+</html>
diff --git a/src/audio/portaudio/docs/pa_tut_pc.html b/src/audio/portaudio/docs/pa_tut_pc.html
new file mode 100644
index 0000000000..87e5f9a020
--- /dev/null
+++ b/src/audio/portaudio/docs/pa_tut_pc.html
@@ -0,0 +1,78 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.77 [en]C-gatewaynet  (Win98; U) [Netscape]">
+   <meta name="Author" content="Phil Burk">
+   <meta name="Description" content="Tutorial for PortAudio, a cross platform, open-source, audio I/O library.It provides a very simple API for recording and/or playing sound using a simple callback function.">
+   <meta name="KeyWords" content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
+   <title>PortAudio Tutorial</title>
+</head>
+<body>
+&nbsp;
+<center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
+<tr>
+<td>
+<center>
+<h1>
+PortAudio Tutorial</h1></center>
+</td>
+</tr>
+</table></center>
+
+<h2>
+Compiling for Windows (WMME or DirectSound)</h2>
+
+<blockquote>To compile PortAudio for Windows, you can choose between two
+options. One implementation uses the DirectSound API. The other uses the
+Windows MultiMedia Extensions API (aka WMME or WAVE).
+<p>Some advantages of using DirectSound are that DirectSound may have lower
+latency than WMME, and supports effects processing plugins. But one disadvantage
+is that DirectSound is not installed on all PCs, and is not well supported
+under Windows NT. So WMME is the best choice for most projects.
+<p>For either implementation add the following source files to your project:
+<blockquote>
+<pre><b>pa_common\pa_lib.c
+pa_common\portaudio.h
+pa_common\pa_host.h</b></pre>
+</blockquote>
+Link with the system library "<b>winmm.lib</b>". For Visual C++:
+<ol>
+<li>
+select "Settings..." from the "Project" menu,</li>
+
+<li>
+select the project name in the tree on the left,</li>
+
+<li>
+choose "All Configurations" in the popup menu above the tree,</li>
+
+<li>
+select the "Link" tab,</li>
+
+<li>
+enter "winmm.lib", without quotes, as the first item in the "Object/library
+modules:" field.</li>
+</ol>
+<b>WMME</b> - To use the WMME implementation, add the following source
+files to your project:
+<blockquote><b><tt>pa_win_wmme/pa_win_wmme.c</tt></b></blockquote>
+<b>DirectSound</b> - If you want to use the DirectSound implementation
+of PortAudio then you must have a recent copy of the free
+<a href="http://www.microsoft.com/directx/download.asp">DirectX</a>
+SDK for Developers from Microsoft installed on your computer. To compile
+an application add the following source files to your project:
+<blockquote>
+<pre><b>pa_win_ds\dsound_wrapper.c
+pa_win_ds\pa_dsound.c</b></pre>
+</blockquote>
+Link with the system library "<b>dsound.lib</b>" using the procedure described
+above for "winmm.lib".</blockquote>
+
+<blockquote>You might try compiling the "pa_tests\patest_saw.c" file first
+because it is the simplest.</blockquote>
+<font size=+2><a href="http://www.portaudio.com/">home</a> |
+<a href="pa_tutorial.html">contents</a>
+| <a href="pa_tut_over.html">previous</a> |&nbsp; <a href="pa_tut_callback.html">next</a></font>
+</body>
+</html>
diff --git a/src/audio/portaudio/docs/pa_tut_run.html b/src/audio/portaudio/docs/pa_tut_run.html
new file mode 100644
index 0000000000..5c70d08955
--- /dev/null
+++ b/src/audio/portaudio/docs/pa_tut_run.html
@@ -0,0 +1,56 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.73 [en]C-gatewaynet  (Win98; U) [Netscape]">
+   <meta name="Author" content="Phil Burk">
+   <meta name="Description" content="Tutorial for PortAudio, a cross platform, open-source, audio I/O library.It provides a very simple API for recording and/or playing sound using a simple callback function.">
+   <meta name="KeyWords" content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
+   <title>PortAudio Tutorial</title>
+</head>
+<body>
+&nbsp;
+<center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
+<tr>
+<td>
+<center>
+<h1>
+PortAudio Tutorial</h1></center>
+</td>
+</tr>
+</table></center>
+
+<h2>
+Starting and Stopping a Stream</h2>
+
+<blockquote>The stream will not start running until you call Pa_StartStream().
+Then it will start calling your callback function to perform the audio
+processing.
+<blockquote>
+<pre>err = Pa_StartStream( stream );
+if( err != paNoError ) goto error;</pre>
+</blockquote>
+At this point, audio is being generated. You can communicate to your callback
+routine through the data structure you passed in on the open call, or through
+global variables, or using other interprocess communication techniques.
+Please be aware that your callback function may be called at interrupt
+time when your foreground process is least expecting it. So avoid sharing
+complex data structures that are easily corrupted like double linked lists.
+<p>In many of the tests we simply sleep for a few seconds so we can hear
+the sound. This is easy to do with Pa_Sleep() which will sleep for some
+number of milliseconds. Do not rely on this function for accurate scheduling.
+it is mostly for writing examples.
+<blockquote>
+<pre>/* Sleep for several seconds. */
+Pa_Sleep(NUM_SECONDS*1000);</pre>
+</blockquote>
+When you are through, you can stop the stream from the foreground.
+<blockquote>
+<pre>err = Pa_StopStream( stream );
+if( err != paNoError ) goto error;</pre>
+</blockquote>
+You can also stop the stream by returning 1 from your custom callback function.</blockquote>
+<font size=+2><a href="http://www.portaudio.com/">home</a> | <a href="pa_tutorial.html">contents</a>
+| <a href="pa_tut_open.html">previous</a> |&nbsp; <a href="pa_tut_term.html">next</a></font>
+</body>
+</html>
diff --git a/src/audio/portaudio/docs/pa_tut_rw.html b/src/audio/portaudio/docs/pa_tut_rw.html
new file mode 100644
index 0000000000..93c7b8bb34
--- /dev/null
+++ b/src/audio/portaudio/docs/pa_tut_rw.html
@@ -0,0 +1,79 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.77 [en]C-gatewaynet  (Win98; U) [Netscape]">
+   <meta name="Author" content="Phil Burk">
+   <meta name="Description" content="Tutorial for PortAudio, a cross platform, open-source, audio I/O library.It provides a very simple API for recording and/or playing sound using a simple callback function.">
+   <meta name="KeyWords" content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
+   <title>PortAudio Tutorial</title>
+</head>
+<body>
+&nbsp;
+<center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
+<tr>
+<td>
+<center>
+<h1>
+PortAudio Tutorial</h1></center>
+</td>
+</tr>
+</table></center>
+
+<h2>
+Blocking Read/Write Functions</h2>
+
+<blockquote>[Note: These functions are not part of the official PortAudio
+API. They are simply built on top of PortAudio as an extra utility. Also
+note that they are under evaluation and their definition may change.]
+<p>There are two fundamentally different ways to design an audio API. One
+is to use callback functions the way we have already shown. The callback
+function operates under an interrupt or background thread This leaves the
+foreground application free to do other things while the audio just runs
+in the background. But this can sometimes be awkward.
+<p>So we have provided an alternative technique that lets a program generate
+audio in the foreground and then just write it to the audio stream as if
+it was a file. If there is not enough room in the audio buffer for more
+data, then the write function will just block until more room is available.
+This can make it very easy to write an audio example. To use this tool,
+you must add the files "pablio/pablio.c" and "pablio/ringbuffer.c" to your
+project. You must also:
+<blockquote>
+<pre>#include "pablio.h"</pre>
+</blockquote>
+Here is a short excerpt of a program that opens a stream for input and
+output. It then reads a block of samples from input, and writes them to
+output, in a loop.&nbsp; The complete example can be found in "pablio/test_rw.c".
+<blockquote>
+<pre>&nbsp;&nbsp;&nbsp; #define SAMPLES_PER_FRAME&nbsp;&nbsp;&nbsp;&nbsp; (2)
+&nbsp;&nbsp;&nbsp; #define FRAMES_PER_BLOCK&nbsp;&nbsp;&nbsp; (1024)
+&nbsp;&nbsp;&nbsp; SAMPLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; samples[SAMPLES_PER_FRAME * FRAMES_PER_BLOCK];
+&nbsp;&nbsp;&nbsp; PaError&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err;
+&nbsp;&nbsp;&nbsp; PABLIO_Stream&nbsp; *aStream;
+
+/* Open simplified blocking I/O layer on top of PortAudio. */
+&nbsp;&nbsp;&nbsp; err = OpenAudioStream( &amp;rwbl, SAMPLE_RATE, paFloat32,
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (PABLIO_READ_WRITE | PABLIO_STEREO) );
+&nbsp;&nbsp;&nbsp; if( err != paNoError ) goto error;
+
+/* Process samples in the foreground. */
+&nbsp;&nbsp;&nbsp; for( i=0; i&lt;(NUM_SECONDS * SAMPLE_RATE); i++ )
+&nbsp;&nbsp;&nbsp; {
+&nbsp;&nbsp;&nbsp; /* Read one block of data into sample array from audio input. */
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReadAudioStream( aStream, samples, FRAMES_PER_BLOCK );
+&nbsp;&nbsp;&nbsp; /*
+&nbsp;&nbsp;&nbsp; ** At this point you could process the data in samples array,
+&nbsp;&nbsp;&nbsp; ** and write the result back to the same samples array.
+&nbsp;&nbsp;&nbsp; */
+&nbsp;&nbsp;&nbsp; /* Write that same frame of data to output. */
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WriteAudioStream( aStream, samples, FRAMES_PER_BLOCK );
+&nbsp;&nbsp;&nbsp; }
+
+&nbsp;&nbsp;&nbsp; CloseAudioStream( aStream );</pre>
+</blockquote>
+</blockquote>
+<font size=+2><a href="http://www.portaudio.com/">home</a> |
+<a href="pa_tutorial.html">contents</a>
+| <a href="pa_tut_devs.html">previous</a> |&nbsp; <a href="pa_tut_explore.html">next</a></font>
+</body>
+</html>
diff --git a/src/audio/portaudio/docs/pa_tut_term.html b/src/audio/portaudio/docs/pa_tut_term.html
new file mode 100644
index 0000000000..1c72209f1d
--- /dev/null
+++ b/src/audio/portaudio/docs/pa_tut_term.html
@@ -0,0 +1,47 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.73 [en]C-gatewaynet  (Win98; U) [Netscape]">
+   <meta name="Author" content="Phil Burk">
+   <meta name="Description" content="Tutorial for PortAudio, a cross platform, open-source, audio I/O library.It provides a very simple API for recording and/or playing sound using a simple callback function.">
+   <meta name="KeyWords" content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
+   <title>PortAudio Tutorial</title>
+</head>
+<body>
+&nbsp;
+<center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
+<tr>
+<td>
+<center>
+<h1>
+PortAudio Tutorial</h1></center>
+</td>
+</tr>
+</table></center>
+
+<h2>
+Terminating PortAudio</h2>
+
+<blockquote>You can start and stop a stream as many times as you like.
+But when you are done using it, you should close it by calling:</blockquote>
+
+<blockquote>
+<blockquote>
+<pre>err = Pa_CloseStream( stream );
+if( err != paNoError ) goto error;</pre>
+</blockquote>
+Then when you are done using PortAudio, you should terminate the whole
+system by calling:
+<blockquote>
+<pre>Pa_Terminate();</pre>
+</blockquote>
+That's basically it. You can now write an audio program in 'C' that will
+run on multiple platforms, for example PCs and Macintosh.
+<p>In the rest of the tutorial we will look at some additional utility
+functions, and a different way of using PortAudio that does not require
+the use of a callback function.</blockquote>
+<font size=+2><a href="http://www.portaudio.com/">home</a> | <a href="pa_tutorial.html">contents</a>
+| <a href="pa_tut_run.html">previous</a> |&nbsp; <a href="pa_tut_util.html">next</a></font>
+</body>
+</html>
diff --git a/src/audio/portaudio/docs/pa_tut_util.html b/src/audio/portaudio/docs/pa_tut_util.html
new file mode 100644
index 0000000000..f4b5475013
--- /dev/null
+++ b/src/audio/portaudio/docs/pa_tut_util.html
@@ -0,0 +1,55 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.75 [en]C-gatewaynet  (Win98; U) [Netscape]">
+   <meta name="Author" content="Phil Burk">
+   <meta name="Description" content="Tutorial for PortAudio, a cross platform, open-source, audio I/O library.It provides a very simple API for recording and/or playing sound using a simple callback function.">
+   <meta name="KeyWords" content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
+   <title>PortAudio Tutorial</title>
+</head>
+<body>
+&nbsp;
+<center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
+<tr>
+<td>
+<center>
+<h1>
+PortAudio Tutorial</h1></center>
+</td>
+</tr>
+</table></center>
+
+<h2>
+Utility Functions</h2>
+
+<blockquote>Here are several more functions that are not critical, but
+may be handy when using PortAudio.
+<p>Pa_StreamActive() returns one when the stream in playing audio, zero
+when not playing, or a negative error number if the stream is invalid.
+The stream is active between calls to Pa_StartStream() and Pa_StopStream(),
+but may also become inactive if the callback returns a non-zero value.
+In the latter case, the stream is considered inactive after the last buffer
+has finished playing.
+<blockquote>
+<pre>PaError Pa_StreamActive( PortAudioStream *stream );</pre>
+</blockquote>
+Pa_StreamTime() returns the number of samples that have been generated.
+PaTimeStamp is a double precision number which is a convenient way to pass
+big numbers around even though we only need integers.
+<blockquote>
+<pre>PaTimestamp Pa_StreamTime( PortAudioStream *stream );</pre>
+</blockquote>
+The "CPU Load" is a fraction of total CPU time consumed by the stream's
+audio processing. A value of 0.5 would imply that PortAudio and the sound
+generating callback was consuming roughly 50% of the available CPU time.
+This function may be called from the callback function or the application.
+<blockquote>
+<pre>double Pa_GetCPULoad( PortAudioStream* stream );</pre>
+</blockquote>
+</blockquote>
+<font size=+2><a href="http://www.portaudio.com/">home</a> |
+<a href="pa_tutorial.html">contents</a> | <a href="pa_tut_term.html">previous</a>
+|&nbsp; <a href="pa_tut_devs.html">next</a></font>
+</body>
+</html>
diff --git a/src/audio/portaudio/docs/pa_tutorial.html b/src/audio/portaudio/docs/pa_tutorial.html
new file mode 100644
index 0000000000..1371c44f0e
--- /dev/null
+++ b/src/audio/portaudio/docs/pa_tutorial.html
@@ -0,0 +1,46 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.79 [en] (Windows NT 5.0; U) [Netscape]">
+   <meta name="Author" content="Phil Burk">
+   <meta name="Description" content="Tutorial for PortAudio, a cross platform, open-source, audio I/O library.It provides a very simple API for recording and/or playing sound using a simple callback function.">
+   <meta name="KeyWords" content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
+   <title>PortAudio Tutorial</title>
+</head>
+<body>
+&nbsp;
+<center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
+<tr>
+<td>
+<center>
+<h1>
+PortAudio Tutorial</h1></center>
+</td>
+</tr>
+</table></center>
+
+<p>Copyright 2000 Phil Burk and Ross Bencina
+<h2>
+Table of Contents</h2>
+
+<blockquote><a href="pa_tut_over.html">Overview of PortAudio</a>
+<br><a href="pa_tut_mac.html">Compiling for Macintosh OS 7,8,9</a>
+<br><a href="pa_tut_mac_osx.html">Compiling for Macintosh OS X</a>
+<br><a href="pa_tut_pc.html">Compiling for Windows (DirectSound and WMME)</a>
+<br><a href="pa_tut_asio.html">Compiling for ASIO on Windows or Mac OS
+8,9</a>
+<br><a href="pa_tut_oss.html">Compiling for Unix OSS</a>
+<br><a href="pa_tut_callback.html">Writing a Callback Function</a>
+<br><a href="pa_tut_init.html">Initializing PortAudio</a>
+<br><a href="pa_tut_open.html">Opening a Stream using Defaults</a>
+<br><a href="pa_tut_run.html">Starting and Stopping a Stream</a>
+<br><a href="pa_tut_term.html">Cleaning Up</a>
+<br><a href="pa_tut_util.html">Utilities</a>
+<br><a href="pa_tut_devs.html">Querying for Devices</a>
+<br><a href="pa_tut_rw.html">Blocking Read/Write Functions</a>
+<br><a href="pa_tut_explore.html">Exploring the PortAudio Package</a></blockquote>
+<font size=+2><a href="http://www.portaudio.com/">home</a> | contents |
+previous |&nbsp; <a href="pa_tut_over.html">next</a></font>
+</body>
+</html>
diff --git a/src/audio/portaudio/docs/portaudio_h.txt b/src/audio/portaudio/docs/portaudio_h.txt
new file mode 100644
index 0000000000..6d60086fca
--- /dev/null
+++ b/src/audio/portaudio/docs/portaudio_h.txt
@@ -0,0 +1,425 @@
+#ifndef PORT_AUDIO_H
+#define PORT_AUDIO_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ * PortAudio Portable Real-Time Audio Library
+ * PortAudio API Header File
+ * Latest version available at: http://www.audiomulch.com/portaudio/
+ *
+ * Copyright (c) 1999-2000 Ross Bencina and Phil Burk
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+typedef int PaError;
+typedef enum {
+	paNoError = 0,
+
+	paHostError = -10000,
+	paInvalidChannelCount,
+	paInvalidSampleRate,
+	paInvalidDeviceId,
+	paInvalidFlag,
+	paSampleFormatNotSupported,
+	paBadIODeviceCombination,
+	paInsufficientMemory,
+	paBufferTooBig,
+	paBufferTooSmall,
+	paNullCallback,
+	paBadStreamPtr,
+	paTimedOut,
+	paInternalError
+} PaErrorNum;
+
+/*
+	Pa_Initialize() is the library initialisation function - call this before
+	using the library.
+*/
+
+PaError Pa_Initialize( void );
+
+/*
+	Pa_Terminate() is the library termination function - call this after
+	using the library.
+*/
+
+PaError Pa_Terminate( void );
+
+/*
+	Return host specific error.
+	This can be called after receiving a paHostError.
+*/
+long Pa_GetHostError( void );
+
+/*
+	Translate the error number into a human readable message.
+*/
+const char *Pa_GetErrorText( PaError errnum );
+
+/*
+	Sample formats
+
+	These are formats used to pass sound data between the callback and the
+	stream. Each device has a "native" format which may be used when optimum
+	efficiency or control over conversion is required.
+
+	Formats marked "always available" are supported (emulated) by all devices.
+
+	The floating point representation uses +1.0 and -1.0 as the respective
+	maximum and minimum.
+	
+*/
+
+typedef unsigned long PaSampleFormat;
+#define paFloat32      ((PaSampleFormat) (1<<0))	/*always available*/
+#define paInt16        ((PaSampleFormat) (1<<1))	/*always available*/
+#define paInt32        ((PaSampleFormat) (1<<2))	/*always available*/
+#define paInt24        ((PaSampleFormat) (1<<3))
+#define paPackedInt24  ((PaSampleFormat) (1<<4))
+#define paInt8         ((PaSampleFormat) (1<<5))
+#define paUInt8        ((PaSampleFormat) (1<<6))    /* unsigned 8 bit, 128 is "ground" */
+#define paCustomFormat ((PaSampleFormat) (1<<16))
+
+/*
+	Device enumeration mechanism.
+
+   	Device ids range from 0 to Pa_CountDevices()-1.
+
+	Devices may support input, output or both. Device 0 is always the "default"
+	device and should support at least stereo in and out if that is available
+	on the taget platform _even_ if this involves kludging an input/output
+	device on platforms that usually separate input from output. Other platform
+	specific devices are specified by positive device ids.
+*/
+
+typedef int PaDeviceID;
+#define paNoDevice -1
+
+typedef struct{
+	int structVersion; 
+	const char *name;
+	int maxInputChannels;
+	int maxOutputChannels;
+/* Number of discrete rates, or -1 if range supported. */
+	int numSampleRates;
+/* Array of supported sample rates, or {min,max} if range supported. */
+	const double *sampleRates;
+	PaSampleFormat nativeSampleFormats;
+} PaDeviceInfo;
+
+
+int Pa_CountDevices();
+/*
+	Pa_GetDefaultInputDeviceID(), Pa_GetDefaultOutputDeviceID()
+
+	Return the default device ID or paNoDevice if there is no devices.
+	The result can be passed to Pa_OpenStream().
+	
+	On the PC, the user can specify a default device by
+	setting an environment variable. For example, to use device #1.
+
+		set PA_RECOMMENDED_OUTPUT_DEVICE=1
+	
+	The user should first determine the available device ID by using
+	the supplied application "pa_devs".
+*/
+PaDeviceID Pa_GetDefaultInputDeviceID( void );
+PaDeviceID Pa_GetDefaultOutputDeviceID( void );
+
+/*
+	PaTimestamp is used to represent a continuous sample clock with arbitrary
+	start time useful for syncronisation. The type is used in the outTime
+	argument to the callback function and the result of Pa_StreamTime()
+*/
+
+typedef double PaTimestamp;
+
+/*
+	Pa_GetDeviceInfo() returns a pointer to an immutable PaDeviceInfo structure
+	referring to the device specified by id.
+	If id is out of range the function returns NULL.
+
+	The returned structure is owned by the PortAudio implementation and must
+	not be manipulated or freed. The pointer is guaranteed to be valid until
+	between calls to Pa_Initialize() and Pa_Terminate().
+*/
+
+const PaDeviceInfo* Pa_GetDeviceInfo( PaDeviceID devID );
+
+/*
+	PortAudioCallback is implemented by clients of the portable audio api.
+
+	inputBuffer and outputBuffer are arrays of interleaved samples,
+	the format, packing and number of channels used by the buffers are
+	determined by parameters to Pa_OpenStream() (see below).
+
+	framesPerBuffer is the number of sample frames to be processed by the callback.
+
+	outTime is the time in samples when the buffer(s) processed by
+	this callback will begin being played at the audio output.
+	See also Pa_StreamTime()
+
+	userData is the value of a user supplied pointer passed to Pa_OpenStream()
+	intended for storing synthesis data etc.
+
+	return value:
+	The callback can return a nonzero value to stop the stream. This may be
+	useful in applications such as soundfile players where a specific duration
+	of output is required. However, it is not necessary to utilise this mechanism
+	as StopStream() will also terminate the stream. A callback returning a
+	nonzero value must fill the entire outputBuffer.
+
+	NOTE: None of the other stream functions may be called from within the
+	callback function except for Pa_GetCPULoad().
+
+*/
+
+typedef int (PortAudioCallback)(
+		void *inputBuffer, void *outputBuffer,
+		unsigned long framesPerBuffer,
+		PaTimestamp outTime, void *userData );
+
+
+/*
+	Stream flags
+
+	These flags may be supplied (ored together) in the streamFlags argument to
+	the Pa_OpenStream() function.
+
+	[ suggestions? ]
+*/
+
+#define   paNoFlag      (0)
+#define   paClipOff     (1<<0)   /* disable defult clipping of out of range samples */
+#define   paDitherOff   (1<<1)   /* disable default dithering */
+#define   paPlatformSpecificFlags (0x00010000)
+typedef   unsigned long PaStreamFlags;
+
+/*
+	A single PortAudioStream provides multiple channels of real-time
+	input and output audio streaming to a client application.
+	Pointers to PortAudioStream objects are passed between PortAudio functions.
+*/
+
+typedef void PortAudioStream;
+#define PaStream PortAudioStream
+
+/*
+	Pa_OpenStream() opens a stream for either input, output or both.
+
+	stream is the address of a PortAudioStream pointer which will receive
+	a pointer to the newly opened stream.
+
+	inputDevice is the id of the device used for input (see PaDeviceID above.)
+	inputDevice may be paNoDevice to indicate that an input device is not required.
+
+	numInputChannels is the number of channels of sound to be delivered to the
+	callback. It can range from 1 to the value of maxInputChannels in the
+	device input record for the device specified in the inputDevice parameter.
+	If inputDevice is paNoDevice numInputChannels is ignored.
+
+	inputSampleFormat is the format of inputBuffer provided to the callback
+	function. inputSampleFormat may be any of the formats described by the
+	PaSampleFormat enumeration (see above). PortAudio guarantees support for
+	the sound devices native formats (nativeSampleFormats in the device info
+	record) and additionally 16 and 32 bit integer and 32 bit floating point
+	formats. Support for other formats is implementation defined.
+
+	inputDriverInfo is a pointer to an optional driver specific data structure
+	containing additional information for device setup or stream processing.
+	inputDriverInfo is never required for correct operation. If not used
+	inputDriverInfo should be NULL.
+
+	outputDevice is the id of the device used for output (see PaDeviceID above.)
+	outputDevice may be paNoDevice to indicate that an output device is not required.
+
+	numOutputChannels is the number of channels of sound to be supplied by the
+	callback. See the definition of numInputChannels above for more details.
+
+	outputSampleFormat is the sample format of the outputBuffer filled by the
+	callback function. See the definition of inputSampleFormat above for more
+	details.
+
+	outputDriverInfo is a pointer to an optional driver specific data structure
+	containing additional information for device setup or stream processing.
+	outputDriverInfo is never required for correct operation. If not used
+	outputDriverInfo should be NULL.
+
+	sampleRate is the desired sampleRate for input and output
+
+	framesPerBuffer is the length in sample frames of all internal sample buffers
+	used for communication with platform specific audio routines. Wherever
+	possible this corresponds to the framesPerBuffer parameter passed to the
+	callback function.
+
+	numberOfBuffers is the number of buffers used for multibuffered
+	communication with the platform specific audio routines. This parameter is
+	provided only as a guide - and does not imply that an implementation must
+	use multibuffered i/o when reliable double buffering is available (such as
+	SndPlayDoubleBuffer() on the Macintosh.)
+
+	streamFlags may contain a combination of flags ORed together.
+	These flags modify the behavior of the
+	streaming process. Some flags may only be relevant to certain buffer formats.
+
+	callback is a pointer to a client supplied function that is responsible
+	for processing and filling input and output buffers (see above for details.)
+
+	userData is a client supplied pointer which is passed to the callback
+	function. It could for example, contain a pointer to instance data necessary
+	for processing the audio buffers.
+
+	return value:
+	Apon success Pa_OpenStream() returns PaNoError and places a pointer to a
+	valid PortAudioStream in the stream argument. The stream is inactive (stopped).
+	If a call to Pa_OpenStream() fails a nonzero error code is returned (see
+	PAError above) and the value of stream is invalid.
+
+*/
+
+PaError Pa_OpenStream( PortAudioStream** stream,
+				PaDeviceID inputDevice,
+				int numInputChannels,
+				PaSampleFormat inputSampleFormat,
+				void *inputDriverInfo,
+				PaDeviceID outputDevice,
+				int numOutputChannels,
+				PaSampleFormat outputSampleFormat,
+				void *outputDriverInfo,
+				double sampleRate,
+				unsigned long framesPerBuffer,
+				unsigned long numberOfBuffers,
+				PaStreamFlags streamFlags,
+				PortAudioCallback *callback,
+				void *userData );
+
+
+/*
+	Pa_OpenDefaultStream() is a simplified version of Pa_OpenStream() that
+	opens the default input and/or ouput devices. Most parameters have
+	identical meaning to their Pa_OpenStream() counterparts, with the following
+	exceptions:
+
+	If either numInputChannels or numOutputChannels is 0 the respective device
+	is not opened (same as passing paNoDevice in the device arguments to Pa_OpenStream() )
+
+	sampleFormat applies to both the input and output buffers.
+*/
+
+PaError Pa_OpenDefaultStream( PortAudioStream** stream,
+				int numInputChannels,
+				int numOutputChannels,
+				PaSampleFormat sampleFormat,
+				double sampleRate,
+				unsigned long framesPerBuffer,
+				unsigned long numberOfBuffers,
+				PortAudioCallback *callback,
+				void *userData );
+	   
+/*
+	Pa_CloseStream() closes an audio stream, flushing any pending buffers.
+*/
+
+PaError Pa_CloseStream( PortAudioStream* );
+
+/*
+ 	Pa_StartStream() and Pa_StopStream() begin and terminate audio processing.
+	Pa_StopStream() waits until all pending audio buffers have been played.
+    Pa_AbortStream() stops playing immediately without waiting for pending
+    buffers to complete.
+*/
+
+PaError Pa_StartStream( PortAudioStream *stream );
+
+PaError Pa_StopStream( PortAudioStream *stream );
+
+PaError Pa_AbortStream( PortAudioStream *stream );
+
+/*
+	Pa_StreamActive() returns one when the stream is playing audio,
+	zero when not playing, or a negative error number if the
+	stream is invalid.
+	The stream is active between calls to Pa_StartStream() and Pa_StopStream(),
+	but may also become inactive if the callback returns a non-zero value.
+	In the latter case, the stream is considered inactive after the last
+	buffer has finished playing.
+*/
+
+PaError Pa_StreamActive( PortAudioStream *stream );
+
+/*
+	Pa_StreamTime() returns the current output time for the stream in samples.
+	This time may be used as a time reference (for example syncronising audio to
+	MIDI).
+*/
+
+PaTimestamp Pa_StreamTime( PortAudioStream *stream );
+
+/*
+	The "CPU Load" is a fraction of total CPU time consumed by the
+	stream's audio processing.
+	A value of 0.5 would imply that PortAudio and the sound generating
+	callback was consuming roughly 50% of the available CPU time.
+	This function may be called from the callback function or the application.
+*/
+double Pa_GetCPULoad( PortAudioStream* stream );
+
+/*
+	Use Pa_GetMinNumBuffers() to determine minimum number of buffers required for
+	the current host based on minimum latency. 
+	On the PC, for the DirectSound implementation, latency can be optionally set
+	by user by setting an environment variable.
+	For example, to set latency to 200 msec, put:
+	
+	   set PA_MIN_LATENCY_MSEC=200
+	
+	in the AUTOEXEC.BAT file and reboot.
+	If the environment variable is not set, then the latency will be determined
+	based on the OS. Windows NT has higher latency than Win95.
+*/
+
+int Pa_GetMinNumBuffers( int framesPerBuffer, double sampleRate );
+
+/*
+	Sleep for at least 'msec' milliseconds.
+	You may sleep longer than the requested time so don't rely
+	on this for accurate musical timing.
+*/
+void Pa_Sleep( long msec );
+
+/*
+	Return size in bytes of a single sample in a given PaSampleFormat
+	or paSampleFormatNotSupported. 
+*/
+PaError Pa_GetSampleSize( PaSampleFormat format );
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* PORT_AUDIO_H */
diff --git a/src/audio/portaudio/docs/portaudio_icmc2001.pdf b/src/audio/portaudio/docs/portaudio_icmc2001.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..dd074b7d334d9b0d4415330c2a123131aa130115
GIT binary patch
literal 50968
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

literal 0
HcmV?d00001

diff --git a/src/audio/portaudio/docs/proposals.html b/src/audio/portaudio/docs/proposals.html
new file mode 100644
index 0000000000..0f9b8cb641
--- /dev/null
+++ b/src/audio/portaudio/docs/proposals.html
@@ -0,0 +1,36 @@
+<HTML>
+<HEAD>
+<TITLE>Proposed Changes to PortAudio API</TITLE>
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252">
+<META content="Phil Burk, Ross Bencina" name=Author>
+<META content="Changes being discussed by the community of PortAudio deveopers." 
+name=Description>
+<META 
+content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis," 
+name=KeyWords>
+</HEAD>
+<BODY LINK="#0000ff" VLINK="#800080">&nbsp; 
+<CENTER>
+<TABLE bgColor=#fada7a cols=1 width="100%">
+  <TBODY>
+  <TR>
+    <TD>
+      <CENTER>
+      <H1>Proposed Changes to PortAudio API</H1>
+	</CENTER>
+</TD></TR></TBODY></TABLE></CENTER>
+<P><A href="http://www.portaudio.com/">PortAudio Home Page</A></P>
+
+<P>Updated: July 27, 2002 </P>
+<H2>The Proposals Have Moved</H2>
+
+<p>
+All PortAudio Enhancement Proposal documentation has moved. On the web site, it is now located at:
+<A HREF="http://www.portaudio.com/docs/proposals">http://www.portaudio.com/docs/proposals</A>
+
+On the CVS server it is now located in a module named "pa_proposals".
+</p>
+
+
+</BODY>
+</HTML>
diff --git a/src/audio/portaudio/docs/releases.html b/src/audio/portaudio/docs/releases.html
new file mode 100644
index 0000000000..aec80a1cb9
--- /dev/null
+++ b/src/audio/portaudio/docs/releases.html
@@ -0,0 +1,339 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.79 [en] (Windows NT 5.0; U) [Netscape]">
+   <meta name="Author" content="Phil Burk">
+   <meta name="Description" content="PortAudio is a cross platform, open-source, audio I/O library.It provides a very simple API for recording and/or playing sound using a simple callback function.">
+   <meta name="KeyWords" content="audio, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
+   <title>PortAudio Release Notes</title>
+</head>
+<body>
+&nbsp;
+<center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
+<tr>
+<td>
+<center>
+<h1>
+PortAudio - Release Notes</h1></center>
+</td>
+</tr>
+</table></center>
+
+<p>Link to <a href="http://www.portaudio.com">PortAudio Home Page</a>
+<h2>
+<b>V18 - 5/6/02</b></h2>
+
+<blockquote>All source code and documentation now under <a href="http://www.portaudio.com/usingcvs.html">CVS</a>.
+<p>Ran most of the code through <a href="http://astyle.sourceforge.net/">AStyle</a>
+to cleanup ragged indentation caused by using different editors. Used this
+command:
+<br><tt>&nbsp;&nbsp; astyle --style=ansi -c -o --convert-tabs --indent-preprocessor
+*.c</tt></blockquote>
+
+<blockquote>Added "pa_common/pa_convert.c" for Mac OS X. Start of new conversion
+utilities.
+<p><b>ASIO</b>
+<ul>
+<li>
+New Pa_ASIO_Adaptor_Init function to init Callback adpatation variables,</li>
+
+<li>
+Cleanup of Pa_ASIO_Callback_Input</li>
+
+<li>
+Break apart device loading to debug random failure in Pa_ASIO_QueryDeviceInfo</li>
+
+<li>
+Deallocate all resources in PaHost_Term for cases where Pa_CloseStream
+is not called properly</li>
+
+<li>
+New Pa_ASIO_loadDriver that calls CoInitialize on each thread on Windows.
+Allows use by multiple threads.</li>
+
+<li>
+Correct error code management in PaHost_Term, removed various compiler
+warning</li>
+
+<li>
+Add Mac includes for &lt;Devices.h> and &lt;Timer.h></li>
+
+<li>
+Pa_ASIO_QueryDeviceInfo bug correction, memory allocation checking, better
+error handling</li>
+</ul>
+<b>Mac OS X</b>
+<ul>
+<li>
+Major cleanup and improvements.</li>
+
+<li>
+Fixed device queries for numChannels and sampleRates,</li>
+
+<li>
+Audio input works if using same CoreAudio device (some HW devices make
+separate CoreAudio devices).</li>
+
+<li>
+Added paInt16, paInt8, format using new "pa_common/pa_convert.c" file.</li>
+
+<li>
+Return error if opened in mono mode cuz not supported.</li>
+
+<li>
+Check for getenv("PA_MIN_LATEWNCY_MSEC") to set latency externally.</li>
+
+<li>
+Use getrusage() instead of gettimeofday() for CPU Load calculation.</li>
+</ul>
+<b>Windows MME</b>
+<ul>
+<li>
+Fixed bug that caused TIMEOUT in Pa_StopStream(). Added check for past_StopSoon()
+in Pa_TimeSlice(). Thanks Julien Maillard.</li>
+
+<li>
+Detect Win XP versus NT, use lower latency.</li>
+
+<li>
+Fix DBUG typo;</li>
+
+<li>
+removed init of CurrentCount which was not compiling on Borland</li>
+
+<li>
+general cleanup, factored streamData alloc and cpu usage initialization</li>
+
+<li>
+stopped counting WAVE_MAPPER when there were no audio cards plugged in</li>
+</ul>
+<b>Windows DirectSound</b>
+<ul>
+<li>
+Detect Win XP and Win 2K properly when determining latency.</li>
+</ul>
+<b>Unix OSS</b>
+<ul>
+<li>
+Use high real-time priority if app is running with root priveledges. Lowers
+latency.</li>
+
+<li>
+Added watch dog thread that prevents real-time thread from hogging CPU
+and hanging the computer.</li>
+
+<li>
+Check error return from read() and write().</li>
+
+<li>
+Check CPU endianness instead of assuming Little Endian.</li>
+</ul>
+</blockquote>
+
+<h2>
+<b>V17 - 10/15/01</b></h2>
+
+<blockquote><b>Unix OSS</b>
+<ul>
+<li>
+Set num channels back to two after device query for ALSA. This fixed a
+bug in V16 that sometimes caused a failure when querying for the sample
+rates. Thanks Stweart Greenhill.</li>
+</ul>
+</blockquote>
+
+<blockquote>
+<h4>
+<b>Macintosh Sound Manager</b></h4>
+
+<ul>
+<li>
+Use NewSndCallBackUPP() for CARBON compatibility.</li>
+</ul>
+</blockquote>
+
+<h2>
+<b>V16 - 9/27/01</b></h2>
+
+<blockquote><b>Added Alpha implementations for ASIO, SGI, and BeOS!</b>
+<br>&nbsp;
+<li>
+CPULoad is now calculated based on the time spent to generate a known number
+of frames. This is more accurate than a simple percentage of real-time.
+Implemented in pa_unix_oss, pa_win_wmme and pa_win_ds.</li>
+
+<li>
+Fix dither and shift for recording PaUInt8 format data.</li>
+
+<li>
+Added "patest_maxsines.c" which tests <tt>Pa_GetCPULoad().</tt></li>
+</blockquote>
+
+<blockquote>
+<h4>
+Windows WMME</h4>
+
+<ul>
+<li>
+sDevicePtrs now allocated using <tt>GlobalAlloc()</tt>. This prevents a
+crash in Pa_Terminate() on Win2000. Thanks Mike Berry for finding this.
+Thanks Mike Berry.</li>
+
+<li>
+Pass process instead of thread to <tt>SetPriorityClass</tt>(). This fixes
+a bug that caused the priority to not be increased. Thanks to Alberto di
+Bene for spotting this.</li>
+</ul>
+
+<h4>
+Windows DirectSound</h4>
+
+<ul>
+<li>
+Casts for compiling with __MWERKS__ CodeWarrior.</li>
+</ul>
+
+<h4>
+UNIX OSS</h4>
+
+<ul>
+<li>
+Derived from Linux OSS implementation.</li>
+
+<li>
+Numerous patches from Heiko Purnhagen, Stephen Brandon, etc.</li>
+
+<li>
+Improved query mechanism which often bailed out unnecessarily.</li>
+
+<li>
+Removed sNumDevices and potential related bugs,</li>
+
+<li>
+Use <tt>getenv("PA_MIN_LATENCY_MSEC")</tt> in code to set desired latency.
+User can set by entering:</li>
+
+<br>&nbsp;&nbsp;&nbsp; <tt>export PA_MIN_LATENCY_MSEC=40</tt></ul>
+
+<h4>
+Macintosh Sound Manager</h4>
+
+<ul>
+<li>
+Pass unused event to WaitNextEvent instead of NULL to prevent Mac OSX crash.
+Thanks Dominic Mazzoni.</li>
+
+<li>
+Use requested number of input channels.</li>
+
+<br>&nbsp;</ul>
+</blockquote>
+
+<h2>
+<b>V15 - 5/29/01</b></h2>
+
+<blockquote>
+<ul>
+<li>
+<b>New Linux OSS Beta</b></li>
+</ul>
+
+<h4>
+Windows WMME</h4>
+
+<ul>
+<li>
+&nbsp;sDevicePtrs now allocated based on sizeof(pointer). Was allocating
+too much space.</li>
+
+<li>
+&nbsp;Check for excessive numbers of channels. Some drivers reported bogus
+numbers.</li>
+
+<li>
+Apply Mike Berry's changes for CodeWarrior on PC including condition including
+of memory.h, and explicit typecasting on memory allocation.</li>
+</ul>
+
+<h4>
+Macintosh Sound Manager</h4>
+
+<ul>
+<li>
+ScanInputDevices was setting sDefaultOutputDeviceID instead of sDefaultInputDeviceID.</li>
+
+<li>
+Device Scan was crashing for anything other than siBadSoundInDevice, but
+some Macs may return other errors! Caused failure to init on some G4s under
+OS9.</li>
+
+<li>
+Fix TIMEOUT in record mode.</li>
+
+<li>
+Change CARBON_COMPATIBLE to TARGET_API_MAC_CARBON</li>
+</ul>
+</blockquote>
+
+<h2>
+<b>V14 - 2/6/01</b></h2>
+
+<blockquote>
+<ul>
+<li>
+Added implementation for Windows MultiMedia Extensions (WMME) by Ross and
+Phil</li>
+
+<li>
+Changed Pa_StopStream() so that it waits for the buffers to drain.</li>
+
+<li>
+Added Pa_AbortStream() that stops immediately without waiting.</li>
+
+<li>
+Added new test: patest_stop.c to test above two mods.</li>
+
+<li>
+Fixed Pa_StreamTime() so that it returns current play position instead
+of the write position. Added "patest_sync.c" to demo audio/video sync.</li>
+
+<li>
+Improved stability of Macintosh implementation. Added timeouts to prevent
+hangs.</li>
+
+<li>
+Added Pa_GetSampleSize( PaSampleFormat format );</li>
+
+<li>
+Changes some "int"s to "long"s so that PA works properly on Macintosh which
+often compiles using 16 bit ints.</li>
+
+<li>
+Added Implementation Guide</li>
+</ul>
+</blockquote>
+
+<h2>
+<b>V12 - 1/9/01</b></h2>
+
+<blockquote>
+<ul>
+<li>
+Mac now scans for and queries all devices. But it does not yet support
+selecting any other than the default device.</li>
+
+<li>
+Blocking I/O calls renamed to separate them from the PortAudio API.</li>
+
+<li>
+Cleaned up indentation problems with tabs versus spaces.</li>
+
+<li>
+Now attempts to correct bogus sample rate info returned from DirectSound
+device queries.</li>
+</ul>
+</blockquote>
+
+</body>
+</html>
diff --git a/src/audio/tonegenerator.cpp b/src/audio/tonegenerator.cpp
index 367e02d46c..a3985c07a2 100644
--- a/src/audio/tonegenerator.cpp
+++ b/src/audio/tonegenerator.cpp
@@ -41,19 +41,28 @@ ToneThread::ToneThread (Manager *mngr, float32 *buf, int size) {
 	this->mngr = mngr;
 	this->buffer = buf;
 	this->size = size;
+	this->buf_ctrl_vol = new float32[size];
 }
 
 ToneThread::~ToneThread (void) {
+	delete[] buf_ctrl_vol;
 	this->terminate();
 }
 
 void
 ToneThread::run (void) {
 	while (mngr->getTonezone()) {
-		if (mngr->getAudioDriver()->mydata.dataFilled >= 
-				mngr->getAudioDriver()->mydata.dataToAddRem) {
-			mngr->getAudioDriver()->mydata.dataFilled = 0;
+		// Control volume
+		for (int j = 0; j < size; j++) {
+			this->buf_ctrl_vol[j] = buffer[j] * mngr->getSpkrVolume()/100;
 		}
+
+		if (mngr->getAudioDriver()->mydata.urg_remain <= 160) {
+			mngr->getAudioDriver()->mydata.urg_ptr = this->buf_ctrl_vol;
+			mngr->getAudioDriver()->mydata.urg_remain = size;
+		}
+		
+		mngr->getAudioDriver()->startStream();
 	}
 }
 
@@ -128,18 +137,16 @@ ToneGenerator::initTone (void) {
  *
  * @param	lower frequency
  * @param	higher frequency
- * @param	samplingRate
  * @param	ptr for result buffer
  */
 void
-ToneGenerator::generateSin (int lowerfreq, int higherfreq, 
-												int samplingRate, float32*ptr) {
+ToneGenerator::generateSin (int lowerfreq, int higherfreq, float32*ptr) {
 	double var1, var2;
 													
-	var1 = (double)2 * (double)M_PI * (double)higherfreq / (double)samplingRate; 
-	var2 = (double)2 * (double)M_PI * (double)lowerfreq / (double)samplingRate;
+	var1 = (double)2 * (double)M_PI * (double)higherfreq / (double)SAMPLING_RATE; 
+	var2 = (double)2 * (double)M_PI * (double)lowerfreq / (double)SAMPLING_RATE;
 	
-	for(int t = 0; t < samplingRate; t++) {
+	for(int t = 0; t < SAMPLING_RATE; t++) {
 		ptr[t] = DTMF_FREQ_MIX_RATE * (float32)(sin(var1 * t) + sin(var2 * t));
 	}
 }
@@ -150,12 +157,10 @@ ToneGenerator::generateSin (int lowerfreq, int higherfreq,
  *
  * @param	idCountry		
  * @param	idTones			
- * @param 	samplingRate	
  * @param	ns				section number of format tone
  */
 void
-ToneGenerator::buildTone (int idCountry, int idTones, int samplingRate, 
-							float32* temp) {
+ToneGenerator::buildTone (int idCountry, int idTones, float32* temp) {
 	string s;
 	int count = 0;
 	int	byte = 0,
@@ -178,13 +183,13 @@ ToneGenerator::buildTone (int idCountry, int idTones, int samplingRate,
 		time = atoi((s.substr(pos + 1, s.length())).data());
 		
 		// Generate sinus, buffer is the result
-		generateSin(freq1, freq2, samplingRate, buffer);
+		generateSin(freq1, freq2, buffer);
 		
 		// If there is time or if it's unlimited
 		if (time) {
-			byte = (samplingRate*2*time)/1000;
+			byte = (SAMPLING_RATE*2*time)/1000;
 		} else {
-			byte = samplingRate;
+			byte = SAMPLING_RATE;
 		}
 		
 		// To concatenate the different buffers for each section.
@@ -237,25 +242,34 @@ ToneGenerator::idZoneName (const string& name) {
  */
 void
 ToneGenerator::toneHandle (int idr) {
+	manager->getAudioDriver()->mydata.urg_remain = 0;
+	
 	int idz = idZoneName(get_config_fields_str(PREFERENCES, ZONE_TONE));
 	
 	if (idz != -1) {
-		buildTone (idz, idr, SAMPLING_RATE, buf);
+		buildTone (idz, idr, buf);
 
-		manager->getAudioDriver()->mydata.dataToAdd = buf;
-		manager->getAudioDriver()->mydata.dataToAddRem = totalbytes;
+		float32* tmp_urg_data;
+		// Free urg_data pointer
+		tmp_urg_data = manager->getAudioDriver()->mydata.urg_data;
+		if (tmp_urg_data != NULL) {
+			free (tmp_urg_data);
+		}
+
+		// Init struct mydata
+		tmp_urg_data = buf;
+		manager->getAudioDriver()->mydata.urg_ptr = tmp_urg_data;
+		manager->getAudioDriver()->mydata.urg_remain = totalbytes;
 		
 		// New thread for the tone
 		if (tonethread == NULL) {
-			tonethread = new ToneThread (manager, buf, totalbytes);
-			if (!manager->getAudioDriver()->isStreamActive()) {
-				manager->getAudioDriver()->startStream();
-			}
+			tonethread = new ToneThread (manager, tmp_urg_data, totalbytes);
 			tonethread->start();
 		}
 
 		if (!manager->getTonezone()) {
 			manager->getAudioDriver()->stopStream();
+			manager->getAudioDriver()->mydata.urg_remain = 0;	
 			if (tonethread != NULL) {	
 				delete tonethread;
 				tonethread = NULL;
@@ -297,23 +311,29 @@ ToneGenerator::playRingtone (const char *fileName) {
 	
 	// Decode file.ul
 	expandedsize = ulaw->codecDecode (dst, (unsigned char *)src, length);
-	
+		
 	floatdst = new float32[expandedsize];
 	ulaw->int16ToFloat32 (dst, floatdst, expandedsize);
-	
-	manager->getAudioDriver()->mydata.dataToAdd = floatdst;
-	manager->getAudioDriver()->mydata.dataToAddRem = expandedsize;
-	
+			
+	float32* tmp_urg_data;
+	// Free urg_data pointer
+	tmp_urg_data = manager->getAudioDriver()->mydata.urg_data;
+	if (tmp_urg_data != NULL) {
+		free (tmp_urg_data);
+	}
+
+	// Init struct mydata
+	tmp_urg_data = floatdst;
+	manager->getAudioDriver()->mydata.urg_ptr = tmp_urg_data;
+	manager->getAudioDriver()->mydata.urg_remain = expandedsize;
 	// Start tone thread
 	if (tonethread == NULL) {
-		tonethread = new ToneThread (manager, floatdst, expandedsize);
-		if (!manager->getAudioDriver()->isStreamActive()) {
-			manager->getAudioDriver()->startStream();
-		}
+		tonethread = new ToneThread (manager, tmp_urg_data, expandedsize);
 		tonethread->start();
 	}
 	if (!manager->getTonezone()) {
 		manager->getAudioDriver()->stopStream();
+		manager->getAudioDriver()->mydata.urg_remain = 0;
 		if (tonethread != NULL) {	
 			delete tonethread;
 			tonethread = NULL;
diff --git a/src/audio/tonegenerator.h b/src/audio/tonegenerator.h
index 9dae275525..7243514cf0 100644
--- a/src/audio/tonegenerator.h
+++ b/src/audio/tonegenerator.h
@@ -56,7 +56,8 @@ public:
 	virtual void run ();
 private:
 	Manager*	mngr;
-	float32*		buffer;
+	float32*	buffer;
+	float32*	buf_ctrl_vol;
 	int			size;
 };
 
@@ -73,8 +74,8 @@ public:
 
 	int idZoneName 		(const string &);
 			
-	void generateSin	(int, int, int, float32 *);
-	void buildTone		(int, int, int, float32*);
+	void generateSin	(int, int, float32 *);
+	void buildTone		(int, int, float32*);
 	void toneHandle 	(int);
 	int  playRingtone		(const char*);
 	
diff --git a/src/global.h b/src/global.h
index 03eff32dac..6f420daccf 100644
--- a/src/global.h
+++ b/src/global.h
@@ -57,7 +57,7 @@ typedef short int16;
 #define MONO					1
 #define	SAMPLING_RATE 			8000
 #define SIZEBUF 				1024*1024
-#define	FORMAT					2			// for 16 bits format
+#define	FORMAT					4			// for 16 bits format
 #define OCTETS					SAMPLING_RATE * FORMAT	// Number of writen 
 														// bytes in buffer
 #define OSS_DRIVER              0
diff --git a/src/gui/qt/configurationpanel.ui b/src/gui/qt/configurationpanel.ui
index c02d0e9d4c..9b402883c7 100644
--- a/src/gui/qt/configurationpanel.ui
+++ b/src/gui/qt/configurationpanel.ui
@@ -156,7 +156,7 @@
         </widget>
         <widget class="QLayoutWidget" row="0" column="1">
             <property name="name">
-                <cstring>layout17</cstring>
+                <cstring>layout19</cstring>
             </property>
             <vbox>
                 <property name="name">
@@ -730,188 +730,135 @@
                                 <rect>
                                     <x>20</x>
                                     <y>10</y>
-                                    <width>126</width>
-                                    <height>196</height>
+                                    <width>133</width>
+                                    <height>157</height>
                                 </rect>
                             </property>
                             <property name="title">
                                 <string>Supported codecs</string>
                             </property>
-                            <grid>
+                            <widget class="QLayoutWidget">
                                 <property name="name">
-                                    <cstring>unnamed</cstring>
+                                    <cstring>layout18</cstring>
                                 </property>
-                                <widget class="QLayoutWidget" row="0" column="0">
+                                <property name="geometry">
+                                    <rect>
+                                        <x>10</x>
+                                        <y>20</y>
+                                        <width>110</width>
+                                        <height>120</height>
+                                    </rect>
+                                </property>
+                                <grid>
                                     <property name="name">
-                                        <cstring>layout11</cstring>
+                                        <cstring>unnamed</cstring>
                                     </property>
-                                    <hbox>
+                                    <widget class="QLayoutWidget" row="0" column="0">
                                         <property name="name">
-                                            <cstring>unnamed</cstring>
+                                            <cstring>layout17</cstring>
                                         </property>
-                                        <widget class="QLayoutWidget">
+                                        <vbox>
                                             <property name="name">
-                                                <cstring>layout9</cstring>
+                                                <cstring>unnamed</cstring>
                                             </property>
-                                            <vbox>
-                                                <property name="name">
-                                                    <cstring>unnamed</cstring>
-                                                </property>
-                                                <widget class="QComboBox">
-                                                    <item>
-                                                        <property name="text">
-                                                            <string>G711u</string>
-                                                        </property>
-                                                    </item>
-                                                    <item>
-                                                        <property name="text">
-                                                            <string>G711a</string>
-                                                        </property>
-                                                    </item>
-                                                    <item>
-                                                        <property name="text">
-                                                            <string>GSM</string>
-                                                        </property>
-                                                    </item>
-                                                    <property name="name">
-                                                        <cstring>codec1</cstring>
-                                                    </property>
-                                                </widget>
-                                                <widget class="QComboBox">
-                                                    <item>
-                                                        <property name="text">
-                                                            <string>G711a</string>
-                                                        </property>
-                                                    </item>
-                                                    <item>
-                                                        <property name="text">
-                                                            <string>G711u</string>
-                                                        </property>
-                                                    </item>
-                                                    <item>
-                                                        <property name="text">
-                                                            <string>GSM</string>
-                                                        </property>
-                                                    </item>
-                                                    <property name="name">
-                                                        <cstring>codec2</cstring>
-                                                    </property>
-                                                </widget>
-                                                <widget class="QComboBox">
-                                                    <item>
-                                                        <property name="text">
-                                                            <string>G711u</string>
-                                                        </property>
-                                                    </item>
-                                                    <item>
-                                                        <property name="text">
-                                                            <string>G711a</string>
-                                                        </property>
-                                                    </item>
-                                                    <item>
-                                                        <property name="text">
-                                                            <string>GSM</string>
-                                                        </property>
-                                                    </item>
-                                                    <property name="name">
-                                                        <cstring>codec3</cstring>
+                                            <widget class="QComboBox">
+                                                <item>
+                                                    <property name="text">
+                                                        <string>G711u</string>
                                                     </property>
-                                                </widget>
-                                                <widget class="QComboBox">
-                                                    <item>
-                                                        <property name="text">
-                                                            <string>G711u</string>
-                                                        </property>
-                                                    </item>
-                                                    <item>
-                                                        <property name="text">
-                                                            <string>G711a</string>
-                                                        </property>
-                                                    </item>
-                                                    <item>
-                                                        <property name="text">
-                                                            <string>GSM</string>
-                                                        </property>
-                                                    </item>
-                                                    <property name="name">
-                                                        <cstring>codec4</cstring>
+                                                </item>
+                                                <item>
+                                                    <property name="text">
+                                                        <string>G711a</string>
                                                     </property>
-                                                </widget>
-                                                <widget class="QComboBox">
-                                                    <item>
-                                                        <property name="text">
-                                                            <string>G711u</string>
-                                                        </property>
-                                                    </item>
-                                                    <item>
-                                                        <property name="text">
-                                                            <string>G711a</string>
-                                                        </property>
-                                                    </item>
-                                                    <item>
-                                                        <property name="text">
-                                                            <string>GSM</string>
-                                                        </property>
-                                                    </item>
-                                                    <property name="name">
-                                                        <cstring>codec5</cstring>
+                                                </item>
+                                                <item>
+                                                    <property name="text">
+                                                        <string>GSM</string>
                                                     </property>
-                                                </widget>
-                                            </vbox>
-                                        </widget>
-                                        <widget class="QLayoutWidget">
-                                            <property name="name">
-                                                <cstring>layout10</cstring>
-                                            </property>
-                                            <vbox>
+                                                </item>
                                                 <property name="name">
-                                                    <cstring>unnamed</cstring>
+                                                    <cstring>codec1</cstring>
                                                 </property>
-                                                <widget class="QLabel">
-                                                    <property name="name">
-                                                        <cstring>textLabel1_4</cstring>
-                                                    </property>
+                                            </widget>
+                                            <widget class="QComboBox">
+                                                <item>
                                                     <property name="text">
-                                                        <string>1</string>
-                                                    </property>
-                                                </widget>
-                                                <widget class="QLabel">
-                                                    <property name="name">
-                                                        <cstring>textLabel1_4_2</cstring>
+                                                        <string>G711a</string>
                                                     </property>
+                                                </item>
+                                                <item>
                                                     <property name="text">
-                                                        <string>2</string>
-                                                    </property>
-                                                </widget>
-                                                <widget class="QLabel">
-                                                    <property name="name">
-                                                        <cstring>textLabel1_4_3</cstring>
+                                                        <string>G711u</string>
                                                     </property>
+                                                </item>
+                                                <item>
                                                     <property name="text">
-                                                        <string>3</string>
-                                                    </property>
-                                                </widget>
-                                                <widget class="QLabel">
-                                                    <property name="name">
-                                                        <cstring>textLabel1_4_4</cstring>
+                                                        <string>GSM</string>
                                                     </property>
+                                                </item>
+                                                <property name="name">
+                                                    <cstring>codec2</cstring>
+                                                </property>
+                                            </widget>
+                                            <widget class="QComboBox">
+                                                <item>
                                                     <property name="text">
-                                                        <string>4</string>
+                                                        <string>G711u</string>
                                                     </property>
-                                                </widget>
-                                                <widget class="QLabel">
-                                                    <property name="name">
-                                                        <cstring>textLabel1_4_5</cstring>
+                                                </item>
+                                                <item>
+                                                    <property name="text">
+                                                        <string>G711a</string>
                                                     </property>
+                                                </item>
+                                                <item>
                                                     <property name="text">
-                                                        <string>5</string>
+                                                        <string>GSM</string>
                                                     </property>
-                                                </widget>
-                                            </vbox>
-                                        </widget>
-                                    </hbox>
-                                </widget>
-                            </grid>
+                                                </item>
+                                                <property name="name">
+                                                    <cstring>codec3</cstring>
+                                                </property>
+                                            </widget>
+                                        </vbox>
+                                    </widget>
+                                    <widget class="QLayoutWidget" row="0" column="1">
+                                        <property name="name">
+                                            <cstring>layout18</cstring>
+                                        </property>
+                                        <vbox>
+                                            <property name="name">
+                                                <cstring>unnamed</cstring>
+                                            </property>
+                                            <widget class="QLabel">
+                                                <property name="name">
+                                                    <cstring>textLabel1_4</cstring>
+                                                </property>
+                                                <property name="text">
+                                                    <string>1</string>
+                                                </property>
+                                            </widget>
+                                            <widget class="QLabel">
+                                                <property name="name">
+                                                    <cstring>textLabel1_4_2</cstring>
+                                                </property>
+                                                <property name="text">
+                                                    <string>2</string>
+                                                </property>
+                                            </widget>
+                                            <widget class="QLabel">
+                                                <property name="name">
+                                                    <cstring>textLabel1_4_3</cstring>
+                                                </property>
+                                                <property name="text">
+                                                    <string>3</string>
+                                                </property>
+                                            </widget>
+                                        </vbox>
+                                    </widget>
+                                </grid>
+                            </widget>
                         </widget>
                     </widget>
                     <widget class="QWidget">
@@ -1248,7 +1195,7 @@ Montreal, Quebec H2T 1S6&lt;/p&gt;</string>
         <data format="XPM.GZ" length="58862">789ced5d596fe3b8b27e9f5f114cbd0d0eea6475625cdc878eb3b4b34ca72799e9745f9c07c74b76c776363b07e7bfdf629194488ad49249e4f40151109292488a923e7dac85a2fff9dbc2e9d1e1c26ffffce5fea1f370d95de85e74260bbff51e6f6f67fff7affffdf72fbfae2c2d2f34971696165717967ffdc72fbfe21f0bdd05682c37d61a52ffcc7a87f40eebbb4a6f2a7d47e93da57f17fafa4aa3b7be2274e8487d7d49eab8a4f43575fc96f533d2cf58df547a53e953a5f794fe22f48d95f5de866caf2df58d25a9c34ce96beaf8b9d4cf96cf56f9f890f5333a2edb1b2bbd29757c547a4f1d1f495dd7c78b44efb13e507a43e9db426fae6ef49af27c7da93797943e50fa9ad4f145ea49fd65a577947ea8f5ee1ad7df557a5f1e872dadcbe3f8c47a97daefb2fea0f4a6d2ef95de53faa5d4757de849bdbbacf496d03babcd5e47f6ff52ea9d25a583d2d7a48e7da927f59f125d5ecf27a537947ec47a97eacbfe4c94de51fab1d2fb528767a927f5af94de913a74b5de93e7df577a5f955f14fad96aa7af9ee758eac9f36d28bda1f0b22775dd1e9e28bdaff403a9f79695bece7a2f799e23a5ebe7f9ac74f5fc7045eaba3e7c4af43e1f5f557a43eac0f8eaae25cffb4eeafa7ee354e90da5f7a4aeebe3b5d23baa3d7e3fba3d7d3fe14ee9ea7ee250e9eafec195d4757dfc5debfd06eb6b4aefabf62fb42e8fc367a9f79795ceef5b6f2db99f33a927f7734fe90da57f937a52ff20d1657fba4a6fa8fefc99e8f238bf2fd43b7d3f51e9fa7a6e95aefa8f9b52d7f5e14ce91dd5de86d0fb0d7d7df855eaba7fd854baea0fec285dd587b6d607f2f8b5d2fbaafd2f5a57c7f97dee27fdc153a5ebf6264ad7f5ffd2baac8f37521f2c2bfd4ce90da5ff10fa20391fee4b3d29df52ba2edf49f4019fff46e91da533df0c06fa3882d2d5f1af0f4a1f683d4a94fa24622e4add123117a56e89988b52b744cc45a95b22e6a2d42d117351ea9688b928754bc45c94ba25622e4add123117a56e89988b52b744cc45a95b22e6a2d42d7f177308d821399bf77544f979e4b598c32ef6b08f033cc70bb55de2155ee3cdbcafe8e30bdee210ef7084639ce03d3ee0233ed1df09e9cf38c519decebb87ef2bd53147ac768d2f8cb601612dfbf7136ecefbaa3ea2600bb70855dbb883bbf8b960dbc5366171847bb83fef7ebfbd54c51c1e58dc16da0e3f0eeef81df91dbfbc4bdbfb848b23622d282cf99570f4c7abb6e379dfc1b7962a98c31b1a3ffddce6fb7b52aac53f091107344a5ff2d87c42e8f8eb2daf0fbf25fd7973d4e1293392e0a5eff8a3a0ec6221b785b6a5b7eef7bca53ce6e8e915f39bbd2de7f916c43f57c17a2b7ebb903c966f6447ae166c6b29be08cdbaddde5bdf3b6c187c342a28bbe4e1b0255c278edcc0267e05c42d00e8f8b80ef0ad7b3e5f298b39465c96cb06849b2b42c8359ce1267433c797b1e36d0d88db2e0ab8f2c41db108a56539f602bfa9f324fbe1cd31077d838f724740ea4786bf60e02b07e7597b0fcedfbae7f3957298f372dc00d7ac327f911597e5ac818fb108a7699915dc14c8c40e9cc105f48cba874ead9ea7fdd0c67da3676df8d56f7defc8df4cb928b7751a855deeea602b507694e1bac5b7eef97ca50ce6f08b974baecd32c47321cec93c0db2e0521f37c38364e3ad32838ae3dfac73749df69709bb3d204e931bc915fd774dffabbec14d5e3ffeae900f9a72513ee6006e1d9edb0a9786a1c373776fddf3f94a29cc2dfbb8c4ba4b6730cae19c15abb52fc9fee073a267744163ab331a1242cd7657a13016581fcf6151d99151760727b9656fd9fa53e561f8d6fd9eb714638ec63eafdd649559ceb7afe0dadb5ec5f8b1652f96b2ce98e7743fde97e7c685a587e42734b3f13698900771ef29dfa211f9166790d766618c46956bc2234ee9fca76f7d0f5e234598a3912ec45f3725caa80d9e8c7bfca4f62f57ed2b3c57e5ac6a3c87fb70477e64533c49dcc7198ef101a6f81d66788477d9676ff1dc1fd2d2a7e7fa0c973084195c12b70523bad4b3676a7da6f90c3a30a61acd40e91f7847e567844260940e71421ecc928e1e877009f7e40bbfa49c293816c80dae7ae7df568a30079fcac4df380b96ef4b265137b6d5c4fe4f55fb6ad87307256b54b0e70861a94fd9f1c6ca1c5bdee439e6ba4e12af4bda8147efb9a6b0e9cf3f402bcb4584c5cf057ddbf58dd6701eb80eb204ca32e47b4821cf0d82fc3548fb4dcfd66bf319db956a2fe144c8b1a2037d49ec39b82859a302cf116b14e604888b8c676bf35cb0ceb6739e0d62a6dc3a84310311706ff154f83cb6853d8171ee39a64551ecf7937ccc4149eee2d859418e425bfc894ffa37ecb9b29833edb97c8cc343b9bc00f99f498cc3e539ff465c6322085d2ef46e064e7156a65fcca98955483ed8b0b04e7b5e5c5780b96e0e772dbb1126f20ef2b84e656089add27c43a5ab4eed3928392e97e7395f3e1436c9f619e13d8f50e9fe84e9caf11c6d897f41c8dec91cff4ee36cb64edab359e9dc6ce2e11253da1cb8497bc66401dad7f72131c7fe68c817ddf194ff421e4288eb5655995563ff7295b900863d57d287b0ecb9c3dc92599e3347d16d63ffae1e95b23c0703c2e83159edf6fe84b518a5d639a4f5c6734edaceb199aa93e1397811ef029dcbe52e957f33f2c09f79144d7c06f2904d3bf27b282efdbe92873908fba397e18c395c046cc0849bac5cc33969d7e5f2ef567ceeba548dd7f39ce32fc038cb412ecfe9d82db6c0e226d00c3fb4b8a7a351a5fbca2832b849ed77788ed84af11379d98e1da86a3c18fb3fdb769b7d9daead598fe4610ebf0438ab2036a66c3bb75e12d123241c7a8ef7b1879b79715e279fbb92df0bae61c6e772633336cfd93618f779cb3caef6d93c67645c9969b2e56d2ef5cc0ae051362dc3fce4f09cc54d60e571a1aff6764c4ecc9c636a5c67e6681d928bb96e96af60b7242765e78c185164c2c20a86e6e1898cd6375f9b467c4ee57269cf09b1a42d9be96c1693e7f27d0887e71a9eb34f8de3724434796ed78ec5391cc8c74c5b0ebc36059c5b9cc628b679ce9e1940bd36cb735c86fc629b17ad5929ecc398c7e71025ce1d5bcf325c5421a606570e9739f32838bf15f6750fb3a36726df1afeab50f76a7bce1335b5388547c5bc3c04581c28222c840593af02790b93a3a41de8f09c937b25de73cb8f1c3b8fd80cef69ef049f4c8e53dbccdf8ff7945c9edb7478a56214173edbf5bde7001ac1d788ad2e3dbce7ccb374f2ad79db4dd27aba2f17738e9de3cb45ad1bfcf0cc7bcc7925ce1be5d85a6453c1a3c55781f94966ec0ea6bcc7b6e79cecabe5f34a9e9b94f673c5f6fc1628aa26b93cd7b6b8a354ae8afcd6d574ae0878edb990e00d95bfb238cb9a7f97999f774863ab98a3796d6e84f4c4267c9d3d07de397f8c22cd5b6ced59f69c930720567379cea8af6d35cf3dc8f4c3e1b90da757e30ccfdd67b82c67f3e749de577279cef65bd3b9b7c44df464fd3697f4493fe9a33c37d3f15bf385ce7a62d88f8615e6d873d725be427815cff96d2df23a537e38e23da6cde662ceb60f7f64e6c505ec28b8346d446ec9e63907ab561f183fe4d796e5b85d7a6be610a32b88cfa5398313b56713b59de68d3d305e64fcaec7333121c9af96f0339356560dae4bfc34d39e2b9789b0ecb9f27eab27f2e8f014fb9c16cfb9b195877c9e0bcd37b7da6cf31e8be7dc6cbe555ef2dc83cd6564cd1d1147cf5c216fe263c68493f9bc623612f9142f066f9c786b98b9089e73492894ba971773ceece42fac7c6bc95cadc573b963bbc34b9ef920786c1c67abaa22cfd97c159887697d3721f754e4393cb2ec46af9d305f29c0dcb5b68792586f9abff4320d5c383ee441e29b56fad69ff854b7b39ab49dda732539d3b2e7cef3de6b87973c2c0426dfb0556571cc716e7b82e79a165f79470998581cb5ce67a9ca730dab8dc2797df54b01e63a094f64e36dde6f02c907f5fb92157d5e6c2575137e34f2adaf9957720139b90bc76fcde484a83fd9785b259e7338cc6bd1d9795299d7a8cc73b7561b7e0b08e6397bb370fedc5e300ee6650d62466f79a8b8a289f18d57ea8526f65cd9d62c7bee22ef8b5b273eb7eb8eae3831b84667a52ad9733cea99e7c85eb39527d57da8ca734e1ee2366b27e0a2884e136fcf213627a4107367c118981f7327deb2b93ea3b79d6b6d131afbd2f85cc9595036cfe5f1a39b6fd579247517d0e21a9d4bafca734de71c1607e186fd0dace6daaa3ca7a2d7693b632b5b36219426b6dec7cbf1ababfa1488f5fba3584f5e4eec5a2d7e29c20c8d6487b23e18350d7baee437f98e3d27da7bc26bfe4aec0c76f026b5313df34a1e93f9235bc416296725b9d86af61cd77062678487a9980bcf2b99d8f3eabeeb79ead5790ef7ed6f64a9f777c4a12d7a73d6ad3cc72eeebd359eca4809cc75d03f4fe44f4fd91b1f278215eb861ecab973413f965a39d4fc68bda3697cae24e65c9ef36df024d8cfbf9e08bc40dfcab38a2dc9c556e539f12e79e7cae5e607aaf31cc7654a9c43e639ea9752df1afee9e52e8f756ac5d5923cab3d57c498537268e62cd4d18ecafecbfa16b68cf85ce9b547f025688f5a9c5d7a9ef0d8988d6bd671fc43e215b3debeb17fa9c479ccb97b95798ef717ae8f42e89fd3ecf492dff11f7839c2f10369b4cae44c61e4ceedc41bd8b2ca5c72066b8dc6bc7dec9bf1347b44b66276a5a39999b928be6d10e2b90cefb5cc33e3c4389659338e9ea93e66dd01f12d56ee7976ecd89df33d843b37fbd8386665897196c7a9e4417cd0ef218c2b58f172841127232bed30cb21bed9c41cc53bcce59e174260c6e6c3dfd5f10a1e49609d15fbef75a9ef2176325fd3fc20ab4b1e6b7bce7cac8e7dcfe6f3f1ab9527357dd5a32c16f029e1a6ec9a08a9afbbebe662bf8a6fd9be67cf43e79e8b1da7a5c2ba4c2b7e8e202611ab21f9befbbac89b794e185dc1cb6c7be4b3acf96b243c7a55e50af10b5c65e6d8a5f24d62db89cf6d8ad506f116ce0939c46770e7fff29438eb0e4710f2e167b01d5ef781fcd4291e93bdb8091db21bc70070e79bcfc2e74142cfc8df07f2b7ee704cfdf0f7615f7c718b47d4fe0c0506a7f3febab5e2fa73df8cfc6be15ff2154a45d1e89e7dc12e1c10a20af334342e1f54cba1951587e7d6dfe31c51a4545b67932cfcb273d856e77d65d5c4b1e7fecb57f49daf545f4f18ce3cebcc59f3e4b057cc581f4d2c9efb3ecfafdcfffbe575eba613dfadaa58b1c96dcb7812b2c53eba58f3e7e6f265cacf254994fb156b6cffbddf87c01659619bbcc666096bec230b790c29cfcdbd37957b7f1b9a1bf54ee79b605bcc3026ff7b884fc15253ff4c82f83b385ae025b1e77e8a95cac9537dd4cf148f0803019ff75dcedda7bbb52efa407f3d7122eed30f98fa675245cc6949e69ded64e35c1f51a08f6d9d8703a0ff6bf47b08ed7c6e62b2761073b774ccfbf646cca5c22b03ce7e8e5f01c12631db4b92d53f224ea9317b8adb74be06af36360dadb543e3ee4be4b9aa8220a2baf82c249d394c96df3eaf8ad8247c9a6b81006ee008c5bccb75f5053e582b324d6cfe34d6779af1d7a723dc4a66ac00b5b108e7380cc589517c952884bf06123c074311b9a636c4b70fd64a50740d47b84eef53c1db04f738c6276a690cad74bd46c2ce3936685ba7f6f5fcaa323c774ac7bcbf60103117161abd8e047a080153fdcee20f7a26e24edf132a1e04d7c84c83989706537af6e2c91fd3336b094b3bcd55c13d3dc9699a3d23dc3e0a1c93d5d3a2273862643cc240cdeedc127692380fb5ef99274f3d7a54fd78e49537c56a9a6dfebda60798d179fa12a9544eac43774c489ca2f82e312707c1f938d9c63db5a1381487b84d75c53b764af7635baf6020ed39be2f219e8310f746cc85c5e405badb6da103f38bcea0121bb465665d7872aebf4b8c933c0f40ae97cc04854769f513e2da3ac34a3ca34ac09d6431f20a037379457d3ece7599e7668a5d9b023bb28764a3b6d3160889399683b8428d4a14efceb6ea53bab2a5e895fc46a304cf718b5e8c47cc95131ecbf6388ed74e5732a7777906721d89470fe6c8e6d2775da09339418f4e13815562b7a9594bd86522064123aae0b87e78ee07f1a4e04048eb19ebe22d4aeb9d38746622826c84b66f25163ec69c9a9ffbc73d7d8d65ec3931c3c0bf3f62ae8c306371448a79cef8f681ac37f915ea3a3353c35979eb51e7f84539168dc16dc144b2969e1387fb0223e249499ecbff5d0818a4f612fbad49691a0fd9cee335eddae96a13c2560bc51e39da92fb8d188fad8a87cbf15c287a1331972fbc7afabde4288101c173e69a21642bb5d53aeb6c0d11f7b4d2df39c4b1b4e8041f12beee68ec92df729dca919af889ed3042e494acf47b14489ae9b857becd0f2de2448d6830ed3ee6e24bf9a6703bf41fa1f888da7e0afd2e19db0ea17b704a0c3911f6a8b01f794f097b2e2c117321c1167b09fcf536bde3438939e639e38b6ec154fa7fb27deea43f49a5e52a3a5bd25aa367ced8a3b148f2c4a2fcc2465873f42cd14597e4b982fedda74cc83c675a9fcc73b0adbcd912d11fb6e63c5fe4d01508bbe007db78e2ad929e45299e0b49c45c48c4334d474acef69c2b9e33ec7ab6d2adf71c26621c250e427e4ec2b34cd0c156d8808f4b5d708767652469cf15f58fb84dfb32c29e4b7a21ceca3c37947fcb5e6d766c657b33b100c5fb26cb94b3e7421231e717810ecbba9f04786e94c58688a7249ee391b2e3b46fda521ea9f47685e5e5fb6587923c67d973e6ac7969cf9d9a9e72416b23ee97b326077be3497e83af3df2dcbb094cf819682ff394b5a987e746ca9e33c625b6a75ea4b720d0435c90c6e59e9903d3b89df00492f9bf34864ba40ec379cca4ec84da51dfae727c2ec3733c86bfa4ab7d91b5300dfa98fb6caf6d2719dc0deaa988eebda416204764c6b2d7ca9e1be6d97310f855b388b990f00828be09ddc031fb93722685e00e234a4b969a8c9534e8dd5f17bf8e04d2a6532312790f633342c1f113834f84374825d6a9ddafb00d331561c6222f52fbd26a55b2a30ccfc9d8728bfde545dc00b16eec76deec059cb1cd3aa41a138ef08937e996e37e77e25de0b743c70f5b9263a5671c686f3fe621aa0bee894c02bdef7b34aaece9cc8fbd8616dd5995d1a2e313fe052f61bf19712ef1bcac1a5fed118cd8846a127300e156b10c79230d7745cdac48bb51b02e21d62a0d8f464e6e28fa457d1a17fdde35e1f252bc5d847cd01904eafdb6f88e82aeee2b217028475a7a0ff95706443fc3bf688c81bc47c4dccf2c345abef91783ef3fc721622e4add123117a56e89988b52b744cc45a95b22e6a2d42d117351ea9688b928754bc45c94ba25622e4add123117a56e89988b52b744cc45a95b22e6a2d42d117351ea9688b928754bc45c94ba25622e4add123117a56e89988b52b744cc45a95b7efdcffffcf2ff6d14cd7e</data>
     </image>
     <image name="image1">
-        <data format="PNG" length="5550">89504e470d0a1a0a0000000d49484452000000ad0000003008060000006357fade0000157549444154789ced5d7f6c53d7bdff1cd42107a5d57545a7eb48ab6c34d09cae6836655a9cb5aa6fd56a38a41a71fb24926c15b940d525ddb497b0e975091525ddf40a2e6a9bac1ae020ba38480f0c4f908427aa5e57f4c5792a2ff64437bb2a15b660c21645b14523624593beef8f1b5ffbdad73fae03234fcdf9e743b8e77ccff79cfb3d9ff33ddf73ee31ae02380ae06e2111115d2322229a5a445a20badbf5ace03717d951000200a906148968e24a028009030109e1a4ad6c09a7d90dbb2984fd4fdb31b69ab15aeb5dc16f36b2ab35149cbf49144e023de7fd48f302109700b33ee4ac02da0c46785b012f5b31e015ac1e7531ad4844c2071202f1f28caa179d66377cdbe69179680dbbdf1db282cb1f575593d1b240c47f41c4def023804583350b770d03713f1ace64e0bbf837badf1db282cb1f2b32edfccd59ea3c634438e9ffa7a864e3c308ed16565c86152c896599d67293a8f963c8066b5e7c728f316cb0c1f8961f22112d870e5ac1e587259976fee62c351f03d2199d22d70681075a94bf5d8f8430fa133ba478020683095bff5c1d63730609a9dfb897c4b822110d1ff622f4bf411426ebf7ace87eb61be9b569641a1afe5ff8d222114d9c9b40cb8f5be07df8eecc44fced3b347c6418d1cfa3885e89c1bade82a1578730b6718d6ef9f7423f2dd48c1e586e12193f4e211d95aa8b062425ccfccc0d7b3d80078bec4349c118d0fc49aaea280397accd702db789a43341f4bcd70327040420293a68fd6d6ce530b8b77fd9bb24de7dfb29752e8d0024442e84ee8a6118de1ca537cf7854fd0127d077c0a37b20df0bfdb4b08869f905a28643295d0c3bbbc70d631dca26f17c0823972cba55ac857183bbba683a1c56eae67913dcad6de8de22c2f7890fd6a4157d810124930925cfe8e1a330da372d6bc61589c837e643c7931df03eba748310af1135b6d955efa9c96683f7b0b7a6017cb7f5ab9a697d178902017ff571d7cd2ed096f2166b1f0b22fc0f6b4df15c9805381186f7a567aa32287181a8d161571875ff8efd48776fd5ec40cb1744895b09846e85d0f8fcd692f22d5f1061fdd2e2c92211952b2fce12d5ca4c961b44304017b3890b448ee704a4e7d2007233d0e86b47116edb54b2bf621b98ee81ad573fcb0d22984af7b78a699b6e123df6bebe2841d7e618bc5bd4a3353fd5cab08538ba2d0dc7c675153b2c159aa1cedd3b95fa9d4e41f754275e2372ffb603d12b51cd36399d02fa7675031bd6b18ea79d949e4b83abe710fc402a6298d8c529eadfdb8ff45c1ad6f556b84e8cb1ac9ede1309842f7914c3c926eb7a2b9a9eb0a1ef5ffb542fcee699a1ce1372db86de1e82e5a96636f9a7a3347c645829cbf3266506f9e8d71398ec68d07cf159bdb5d2ccc814c636ae61ed97ef50cb6b2fa866a46ce2ea390c3a0761dd6551d604d5e8c7d5734a7bb3fa65d71efe73a78beae27913865a8760d9ce23b918c757a2072211351fd31f2510cca50d36180346beb2e892570a7b3ee76059a08a715cbbad409f00206e7591edf40cc52e4e91385b392ad1d86647f44a145c3d8799912944c642885c08c1e91464460a48e8d82dc2729b4880000048cfa521fca2a5485ef0ada0f292525fa72100f07b0e50e7ee9d080406609bb383e74df8ddb65e34d96c68ab6f43f44a142327c6d0b8d98ef6cb77147d3b4fec947d4e007cc604090077cba06aae356955fe3dfca5b7643bfdbff70180222f9bf6efd88f3a731d04009bba9a614d5ac1f326cc8c4c61f4f051a51fd27369f49ceb8177b70f7af4b3cde5decff0975e99f19d02868f0c23994ca09d6f475b6b1b465f3b0aeb7a2bac492b5e38e2c633cfb7c0f285fcfe15a61d3c3b4323e11a18910f8376ab1b9e4d6214183979f7e2bbfb77b861aac2576abf7c873675356bea944d5c3d07eb7a0b84a70574b477a8184d5c200afd35a4e9e3b63c61a3ac8cc88510864f7a91cf241f9d9d509827ebaa64d3ccc814a4b8843d6f0c283a74ef12e1e8e854d5e3f2dda0670eb528e522a743f03eca9827afeeee5ddd70bdbc930d16f8ef80ccd45ddbdbd1f8fc5616f48d52f02f1c32e9d30000fb130e74ef16e1658c15d6d3d6da06cbeb0315fb4124a2c6cdb97665175d7af56b696d81b85b44f6b9d329c07ec0a37abfde7dfbe9f43959f7269b0d8e23236c950079c7eb74a6464634d810f9aac8260000deb5b8ab715ccf89eae2b7631bd7b0c8a510bab6b7a3fbd96eb9430a18c53667c774388c370f79d0b8d98ea60b5715b9ded58ce5bfa85468865cc11b246e75292fc509018803ddbb4570f59c223ff5d78ca247ff1f0695fadaf9768c6d5cc33c87a34a792d8315004c7634b0a1578794b2ddeff515680f382d829cdf2ca8da77eaf77eb84e8cb1ac8ffee6210f02810118c2464c87c3183e320cdf980f020093d59493070183adfd2a3d0afbc1122272056f90d0daa2eacf503c54937eb8829cc14240f2ef0988d78852a1191267892c17894c1993f27c3a1c8648440f48009ad290c35b10e4c58f4eecfcd08d503b8ad323c081f569ec89d726b710d310e0fb2c56152f7b1963eec5bf2700186e4cd0b0e120a4bf06c1474d18f8b81fb89253f585d7dc882c10795733d67ef90ef5fd7900e14b2178e6d2409e8f9c4d01488059aea7cd7380464e8c010076fe5e44908862576290768b4a7edb6e2b1ac7014f724c293fdc7e10de8e4e4dfd63965c5de14b214885f5c724b8000cc6a59c3e00a69f5ba7f6a95bdb90f87b0c19a4d0041b0c9c519e593a3a219a8bdb533863a9fb21c7ae49e47c4fbbd90e6f0dfa896b0beabf22bb665a2900095c3d87f9afe7f18000c07d0635adeab318fed20fc0ad59595f93dcfb7baed42e3f1fc3493732286fb09ad8d0c0bc797f1f0410393b4e936f04940e1d3ee685f5f894e25a70f51c3e7a770226b3093001be311f8287c24afe2cc358b6f7216bb4b6393bf2a74e270444f9a8129dc88f1387c2a1d22e0e67cb95af8f4200e0c92b9fcf64f9d36fa11cf1f5812226f71ef04058d45fa54f3ca78fe1cd51dad4d50c270418f83accbc3b81bab5754a3fbc79c8a3e887386ad2afb0feb6d6360cbeda5f36ca907c680d56196edfa17032b56426f4478b5798d9d4d7049cda9c010c4b675ccf746517415c589c622ae46bf9718b6aa3617e2e859ef77a00c8061b0c48987434b05803635ec698a3a39345f95c44c16eb64302106b60acadb50d0054f2b27f0fb50e29f5666c29e599f7c458c981d6f9879d4af9fecdbf53a466e50762929c3faeae4fcf40b69bed2a7db3ed11af91b2e110ae0f413a3781b18d6b947ee868ef50b52fcbd07af5b3dbd4f50fee286db0861b379445f8aa54a60e4bf639d706e1cef38fb492db6a02bd62c4e88bee25d7e7fbacbcc1363aecf0ee9657dfdcf038057da3b28f749b485c208a5d9c22cbf1296a7c2ec788ed7c3bfa36f7297fdbe6ec4058bdf838b8a797b221997c8691000ceeed57b537ebc371f51c1ab75b947cde7ff72acf030109dcf0386557c55983e9dbde4efc1593525ed8e558949627bf84cfa8670642bc40dfc5f64cfc6542edb3e6cd082211b9db3b6af669558ccf181b7deda8f2dcf17341152db1dc266aba70953a9e76d2e0f39e5cf4a0abd6a84116d70641bfc8ad40ab4decb00454f8d2a114f66e77c3ba417b44f2b7ef50e7cb3b4bc658b59275bd1507f70dc2b2de0277bb3a3ecbf32664e6e68b62a9008ab62a2dfba6a8e75c8f2a4f7615ad1a58d788845fb468c63ff313cf9be07d7b08d820c7a7bd79b155add539cf9bd0313e59fd0643611420188277356322c961a8fc3657d30fbead2e65506be9c7d573103f0e14e997ca5b13944ad6f556f8c77cf032c6d8fe8b44037a76c0f2d0f5600c13db4ac7692ba5be40049eeba61a76c88cf0be547e6746bc4674f0e44198322614eead0720a1fbd96e240c09fc6e5bafea7048762b1271796a13cc0282e930fab7f5226148c070cb88404c42dbe32e98be6f42eca19c1ed9330fbefff642300b48181270f7ee29a967e4ec38d5a58c4afe6c7d0943027d2ff6156d5444ce8e53fab33482e93086df3a082f634c5c2012bb45086601a6272db03cd5ac7b2365f8bc176d8fbb30e96850f5c3f0612fb85b0645afe83f62e87e5684c96042e4564ce9876cb94afa718f7325771eb5ea93e2123a7e2c42b038107b2ad7cf0cfb4e916e86ad77e1d496744597a09a148ca5d07cde00dc9aacba7ece20e0e06f1f5ed6875b56f0dee12abd3ee58156376857dd5d31580070588ca09fd5a1f7d9ea7ddd74462adb30cb0251d34da2e10b44be8b44c31766a8e92651353b6a2bb8fcb17aa63548987db5f269aea5a48918aa3e6f7bf4f5d24c3bf8ce1d8aa78b99dbc6bbd1fdf2d24e1ff10b4475df0282d753707cc7a879a84324a2ecf3e0f5144c8f3e7cd74e8ff10b44c9d5c5ae51e2da2c014648f108606e842d9340e386a59f139efcf42a850c16c4c212069d0238430a75dfceb527f2c50df24c9b542505a70091abed9bbff99bb3743a638414c83d315a050c7d2f278fe1f82c55f425e76a5b6cd592420960d391ca3ef6d5d75f28d921ebf69da25aca5583d10b449ee99c7eb4577d6cb27d8168cd1f8af51fdfee46b2c4e2b11a1489c8f896fcf5b32d6384ff65b52fcdce149f539e721a617a54ffa9ac9cc112f544d57239ab8083ff92238ccca7443de7b5df57af2986eee7aa3bee291291fb6410a7e7b54f03e6f7f3aa8af1d1a4f44f335800b09b80995dee8af1da721d506bb96ad033ed57c91bfc24a27adef99f41cd7ab79ef0c3779c88afd14519be14433a232c6eb0a4d4ed7d109aed9596d04e09408a2f969b8e4aaa3879d70f00a759fb7d79a62d70ffe9a38af17291882cef4ee074d4aa29677cbb9a182afab4b3af6aef742d2545be02faa6017f89a89462b865f42ad7e1b596ab068be4991b0b5eb4a364fd81b81fcd1fcbf746e8add7c6abcf86e43f0f5e2fd64b66a8a50d50c4b5e506afe7f2255733d6f112637f7bc50dce50dceeec377faedbda86db74539e41e25c71bf99b920686ff10cb5ca9cd66606c425d8be7b6f7cd8c64700cf877ebc703205f6c7091c4c0089afe75579ec26c0d5aa3d826dbcfbbe316d91bcb89a6911d3ae378be1693f9a8fa590b836abcf70e39192ed707ca7582fc42508e6a50d50c1ac2dd7f19de2fcd3df662cf51b376c997051fe744640c3213f06dfb943be8b7fa3c43579713cf8ce1d7aec7dbf3283e497eb35c510fb658be69a6195685bfc08b170445905845a8b0d2e96025ace00ec4380bde507fb2005f64171be8a69b34baea7de813d47e47b0fd807ea0f1027be0be07157917e166305c3ba8f4c2b58b4eb2d8c7e340780e0651d8c6b6e2cd90e9460dac201a51be311ed765cd7ceef658cf95f7e86ed771a35cbc5d3931888993070cc0f4fc282787ab2281f6715403b8ce87e6e132bf5e5c22a403d82b3e87a20a6fa48b12f10017b7b1eebdef363f2b31430ed071647c8f89385165945ba3e5d5c6fdc0af6961fa92ce93e08b8102dcad7fba30a86751f9956aac0b4f9d8792685c1b333d5196e19a64509a645e180d28930376acbd560da7cec788ab12927c0e93c6b62e3ddb8f153236215168fab7a7fa41ec159ccdfe9627f9c9077aee68a4706cc023219e84fa5188917f0f0013f428b3b9c434fdb35f22d5fa62d6c97adc98df1ed46d05e378ebefe30a3bd6eec7726c059e5e723290bfafe63aae262a51cd3de4f9fb6149a1e7d98a576189576565a3b996d2e8476c83e7225bd568dad664cd3f21713fbe30470cb517684b8735f78549f2a30d2a6237ed8c7807527d5ffcf25a58a619cfbc9b485ed9a7a1a68dcc094a9cecb18eb78ea3176e3a746b46d917df6d3512bec87a5b2a7d74e7f1e2ad98ee5e0d36abe8747749cd38e49c0b7aa93bb4a00d0662df6417c5180bd3d01d4975e0d03d2a26f5a43aac2f70b7fe9070ceabbc386b6945f84dd6fa6cdf7699de67049e648ae66ccf543c6c6b7cb5192b0c106f6861ffc17f269b46c3e9188263f25f2244a470f968b4f9b8fd9b872353b9c808438e7a8387015a69500f85f4491e5779ef40373e519161080afd4dfff549d74f87ef968e152950dab4c79c3ed3b4bdacad5ebd3569297dcc0d88d5fbbc125e5ffd97ac20f76288575fb4ed1ce7db3c4def0a3e77cf17967557bef914f9be6f5fbb47cde65855a518172184ecae1b1a69be50d77950079ca32db8a57e9d5e0e8664769c32c97aa60da42749a8d556d89969393cad4dd53a655b7ab3ab9930fc9e122ad3867353346e4ab62bd601620056a6fa700c07f7e42536ea955bde51a51e37fcd63eb096d86b5f1464ced907dfaf1ed6e98b96051be342fe0b1f7fd485c54cf38454c2b00183427510bf38d7d1e2a69976553c1ce523528fdbc4ac32a23e7b1f7fd085e264a5c9badbcf8d1407d3e6df572bdac749c530bf3cbd77d9b31ad787b209eaaf9fad4c1b333144f17cfb45dc6e26ff44492e3aeec580af1f064911e36de8d2927e07f99b1e8a3b24f9fdcc098f4abad6cc89ad68c320c04fc30be9fc2e4a7578bf457ee3d706c5cc79ce6b06ea69dacafe13c6d0cbaeb713aabbf1aa992bc91337e340700f6861f3b8fcfd2ba7da7a814262e1245f2be2cd01ba7d56328d93867974d3bce594e6eec972d9a4c3d1033413c4ee4ba5df9949b6541ce27bc334e23a9e2afb36d7c18de567b91c15ade9d40a1cf9dc5f1edf221a55233a4eb87eb58ea15236c4dc53ba0e98c849e2807f138a9084675c38c48b22fa27732a1bdfab67af5de87c01904445e31547d6a68e7be59aa7d52d4c6eca9b27505a7e2f63b13e878ea3145affcfb239c66373a5eaaed904cf0f255ea3cc355d447cb80e26947c9724e731846ab005b26b218878d408a35229d29ff9b194e7318d2cf73ae01bf403410073c27b4df2367901079c58dc98774dcc1769968e44c6579aafb69bd4cde43d6c380300be80b44b46cb3641a29e12b95c2a12d465dc7dc7a9b62ba99bc1cee772614f94ea7ba7ffa9f5433edd04f727165bba9f661e2d8b88ed10e6d06b2f1e1924c2dfd6a2b1bdd6644af4639404200369c3eef5776a606622604e27e840dda37bc0f6d71636a8711de979e51ed508dfc65d16035facb690e23f51b7d062b00706c64eccebf69fbf6695ede0a76dd26d2bc9fb69cc56ba241c0d48bf281ee4a49efdd5e5db618fa9fd77f9b61e1b9d75ab1d279d952cf135fdfbddf90a8f57cae4844becf62887116e57c6a2cadcdc4363e0cce20c0581784ed470ed83209b4ac379574c98297af92376c4138294709b20cdec52dfd1caf4844c39762f047653b09c46d30734158b816f8b6cd97b89f7681c8fe31109ed6f1edd86617a6be570747de251385e9e034b0e74af5f7d3eab92d7105bf3958f226707e81a8f91874ffd682eb71ed8f1ded634184bfb4562da7cd1a85ff45c7b2bfe87805fff958f177c40c97893acfd4f6b56eadd865accd2558c16f0656f53b624d37e56b40d3997bab12671030b4a5ba7b6857f09b8b55fd8e58f6806f2d715c3d71d8d42bc615835dc18aa8fbb77113d766a93f6044207e77ee9d2d8cffddef0e59c1e58f35fd36ae04392cd1f721e0cfcccb5b7766a16a9fd59c0e62684b0b5a78a86e6859c115ac0697f42be4f906ecfb2c060b6781e77f8248cdabe380d91d18f1078d00567e0377059786ff07eb0134671ac4ce230000000049454e44ae426082</data>
+        <data format="PNG" length="4951">89504e470d0a1a0a0000000d49484452000000ad0000003008060000006357fade0000131e49444154789ced5d7f681b579eff3c735be4e02d52d91629d062972658de6341da181a850d917a85ad1c173aba5d88eddd522949c93a774b6ba770e44771ec72248e127267efe2247230b565c8462a38b67364b1547cc85e925a2a592c19a7d8c1596ce32eb6d01ad79883effd31d64823cd483392b34db77a603e4de7bdeffb7edf7cdfe77ddf77de8cb00ae006809d4222225a2022220a6d236d11ed743f25fcfe62d10e3a3cbb48a1052253cf18a18d086db765d1da47d4726f8a8888be6dc34bf8ddc5821a4eaf100dcf12692fdc26dcda764c95a81d22720e51c9814ba81a55352022b2f6e56754b568ed235a4c6c944288122a424515698b8f4f0b615435d83e3e5d72dc12e6c5bc15a65756c9d4b3b3cc9a0b4d3d63a590a184393167055a21d20e3d7d86cd44ed85db25c72da12cca5e985e5925ed850218b37b98d043849e31420f91ddcf670b6e471729b4a85cce4e382e115157cf0d721e7366fd75ba3b896689161717bf33210911d1f0d030d1c6ce4de88dc40675ba3bc979cc49fb0f59c979cc49345b98fca7a19f14ee0cc35eb84d73ab4494a09c2534477f17c6a504d1d4ad6932ee33d1e97ded64dc6712fea4fe7dbaadfd3bc1eca7dbda05fd77ca3186ddc359e3f19b532d054de4a7a19f22a6ddd822d50caba43847a70a8a710b715ce731a7e846580fdba9abe706d10a51ff403fcdb9e7c87ad82eaa33159e7ae6199788d79f5676c6216885446360dc67e299b6c009bcd3fa29665aeb7d95316820bfc39a064245c5b8d6be31c50e454422461df384640790668936c21b343c349c533ecdd28e842a39af17c14cb448aa998d8868ff216bd60a34373a9773bcfe1efad162eef16637007000fc00ec09a2dd577c001c0094a1b3360ccf5b66c815d7dd307a1f9815cb93c3fe77e661ffc9abcc9fa6af14ce87a7a8e9f851a17fabd5868e4e77de76e9e85a2172fcb611b14731499bac561b5a8f3543bbf7555677c84af1f538b4155a4cdc0ac0f31263e9f222e3213a73ee0ce2eb7118f718611ff4b2a49e9ec14d441ef0d7d28b718f11fbf799d0fa612b3c2c25cfe69ea3ba410700a0eb72174c070f306fcf0deabede2db4d5eb0d585e5e02004c7d1082b7711793b233a9b754897ac3f0ec65cc354b64fbb04e90975eb4155a7459bb6038a68366f76ea6543f6d8556b037a99f8b88baaf79e0bbe3cfea4baf3760a0be1fda231a6c3ebf8bf9019409378a886a7eef038cdb8ea210b96a79879d98077ad7cdaae4c9e1c9c755d06d11e57338b349ac8f2ea885e3b09d6ca37314190f916b83289fe3d6d8cd883d8a415ba145d41be6ffc6c3b05a6de0c021180ca0f1b80bba041107fe26c5d7e3b039ebb2e4c52ec6849bb4f6b73838001e7727351d3f8a60f0246ceb36e8f506741e69c77e9309ce0a17628f62e81df4a2a6d60cd76c4adfba410738700000238cf003a85cd78becb52cef17fefb93afdcb2768e5d1e0100415eb2749de802f4dbe3d0608665793ff47a03a2de30faafdd10c621be1e47d39d26f88f8f428d7eb6759b483f171159ac36745fefc6f2f2129af5cde0ea398c9cf7c1b8c708cbf27ebc71fd0dbcf1761d74b3fcfd1798b675688a7a230530a23e003a6e835471cd03bd9f16c7b0e9d87ec2014306934932e52c514d83fc6402f8196fdc5305db211b1a1b1a458ce622a270248c2af34fb318fac03e13256544c7c3e8fed4837426191b1a1198c7454435b5293da2de3046664670eafc594187e6632ed81b9b44fd340c6cd04faf1c48b51b0dc3f31263eeb4be9b8f35a3e1fda3acf59893262311916dc63d46388f34c0f2f661363ad04f135f566133ee010098f759d07cdc050f632cb31fae9e43d5c767f38e43965de3617876a9d7afaebe0eaee32e24af5bad36983bdda2fbeb6e6b27ff1d3f0060bfc904cbf55e56c601d06d11f9512023ea6c887e9de51300004f058a66d87474dff4c145f999d2b397b1e883309c471a70bafe347f433218c5b66ec36424824faeb851536b867d7c5590eb618ca5dfa8f9f014358437c871d82edc140e1c3003341f77415ba14dc9ff4a23e871e67c87d05fb3be199ebd8cb9af2d0beda51c9603e06ddcc5fa3fea4fb5ed6ccdd01ee08c1c5fbf9a13d93776790cf6412fb3bc7d98f9017c72c58d60f0240c912a4c4622e8bede8d01ef003800e5c6f2943c70e8a83f231ec78c71d085891ac21b64abaf138d6778265c907e7804c161397058fecb125c2b44f3e129726d10e9c6898c300ad7272311b88888dd4061b16c3a9a5e7320dc00c97269721ea7fe585590dc6262db4cdc5c5c2483d680c0171330c68c38f9f9c9ac9835fa200c0fe363b9e6ebad883c0867c59ba2fadb0cb3e6eea4de412f009e3d278201cc3f9a47e37197d0bef35c3b2c6f1f6622a6deee4f4adfc878884e7e785290e9fa3ca888c95abe886431d5d25fe685eb1aad0edd172ff1766e10d51ccc66ccf4154bcd38a8d52fb3ff7c455ba1c5d8d0081fd3d60da228068c7ce593eda8757f153adf2c4e7e3acec7ab143b6a3a6a76ef669e5d8c990e1e60a3efbfc06e0c7a59e7b9761163745ff3c0746b9a6a1acc0806030080a96b214487c2883e08e3f4072d920cd37aa455f87fb6751b6a6acda86b7020be1e07070e7abd0149e613b58f8465f5b5e92dc0767d4d45b9d02ad93e93c9205c17cb69f9f82cb35cef6597aef732cbf55ed6d1e966c989c2eb9f6d8f1f80de3d4c350d66e8825a682acaf9b83e6d1c52fdf12b4e21fa65f6cfd573888e87d1f2458485be88b04c747d1e649bcfef62659b890d8a2c03886d335a81e88b65ef3093a5753f70fb9f97004de1f2937836983f4470d1f61293a75eddbfd4c10fbfa0e737eb6b68bad80420c5985ef32eb6b69b310f63ccded8c426f493427d73b5197e006bbb19e3eaf9c14f9797fcf7407dbfd0ef9229c57a9e41afec44737cdc28b4bf54db29484dcaf7c7fc7cfd99ccfe944f645eff54fba43dae15a253837cdc1da808207067049ebd4c1887c68646917da84641fa994de2fe3b4e9c11317de64a99fc7719508ea219f0472370180dc8551c4603e80430fcabe21977e0cfb91db6a6d60cfff151d4d49a51e509d1e8403f1f2325885c4414190f91e9d6b468696ad637a3b556cc988888e59e39d542c9944c3ac3f801749c3b23b237c920da0a2d0c4774423dcf558f703d180ca0ca13a2e4ae38e930478f3490f19151686f3e56a3386654b302612643df6d7b46fe3422bb22b888c8d1d058704c9b19338f9cf709d72dbfb489b225ba04917d7c95ea0e59a9fb6d4f2a7be02c346b90c41f8d807e5307b5855d0b00cbb682fa6d79cf01e32bd2335293d8a0a6f78fcae658a58a718f1197da3a50b5a70a8e06717e56af376073fd1bc9982e330634b54d53d39d26519d646c279a582b4436a774fe33bde8f506782e7741bb978fe13d69b955a99851af37a07178346f762573820bf62463faed3454bacd4ac661e0b05d98d452fa2563f34c3dd2f70472c5b8c7089f77001ec618ebba4f74f2ee3693c5d4a1fd9fc218794779209d595a8351b8ff5aa3ba5feb3780ef5d967333e65a21baf4e92518614472a903f819ed871fa7eb4f2386183a8e9c8167af38dd35e01d8076590bff8c1f5c3587d1e5202e1d69470c3118d6abe08ff9e1ac6d40f96be5587b3ea5872e4114fe9f28baffe80657cd2186185c2da764f59c181a26c36695503fd95f0c31b4feaa35eb41c5c4d030e11130ba1c4c6da688c875dc05ae9a4379ad0ea68307543f48e9fecc03676d03bce65da271e8bee641e5ba5ed06b723d82d3f52d28473996d6d7847148b6cba71ff6202db6cf9e4099fdf967fc687eb305667d0dd60ea6c619059d7b75f3a7b676a284e65609ddeafad75e78f60fb794f0299e3d507b16e04694f29ee6525d1244ed61757ae4328cb6881613442df788acf7f997291713547a2bf81f0419da6e93a25852e3037dc43fb27c5a65620938705d596c7be363f927631d57891ec725f2c97a079adfcfff442d176ab688ca7f004c3c5983e5659d649ed54544c9eb134fd6607ce505d579e55cfd6f3e971d1ac5165649abd1c13f1305aa6b608a2fc1b27777d1fd7aefcf51585b85f9c900badeb2015883e1a5943d13b38be49e34000800b00108c0f6960d2ecd37d06c9f1550d3dfd2ca2af9a143e06e4a9ece644357654a9e32a6ed1ede616a952f73abc5336da1ed9460fbb8581e9138542192ee37b450fc29b1e4dbcfa61ef18a4109e973caa185e25696aefbd972b543623bfa1fcadfa7967bca8f7b121171b7e44f03a68f7359defce8bcafa0ec40a1a54a07ccfd5bfe7c6dae195b683b2578362896d7f1bf51717ef50f1392fd1eb8e9c3401f9146c1a11f29ec7e308ff8262f2fb29c61ef0f21696f40531cb3af5566cb8d47c47972ae1ab0564a8fb77bd28c377ac6f2e6cb5d4454f55f23f0c72c927242ef39442b5a59bebce8d30809a25f031d11c0279395121c37d7e9329901e0779785b55382d9a7dc6a326eb445b6ffe0631f0efc09585a51efb8d6ca2a593b269e64eb05a34394472e0431232d77e249aadee6738c35becbd8e2070e6835d976477436e82efad0b025edb8f60491eea20f8f0d7559fd546a4740e71c8865a437cb2a974620c74ca6d79e4e0c5bf32270f68e0ffffa0780fd6e0497d680a5bf7d23aa53a503ecbf90d14bffed316d96bc9968c6f540cefe23411f0edce4635055fdcf4465edb0bc9cad17623e70d545c6d0d5d2722d2f67d71f7d9eb1b58f1c30ad65db1fdf7460d77ffad07195a87b7c9a9656883eb937451d57f9332fc91524bd5d8b368cf97faf93dc33f0718b544c3244925982d50d22bb9f08e3fcbb61b845843ef5b12b0212fdf685c495124418cdaec7ddca1dab3dcd983653de74c6ab25b2e32981fd0f95c79cd32bf276d082744c5bec7724dac7a725e5529e58b97d5cddbb809931733ef9656b9be2199c44fbff85f95869bbb406a3609781173a7d18fd3380a00fd89e21a137a1be3c9260a4c716b08bbe549d1f02f6cd7056bdf6437996f06f91697d7998361d9b3ee3cf3117cbb490615a64842eaa43a1ea1a69b9124c9b8ecd07190bbdbe06adcab32626bd038b3f07d65ec9fde04876b72b62c5eee19c33e476b400a61dcf3de3e65653ccae7657fc6d326de63b76a671febb67447c3d229e01d3df76e66e8584eb85306d4896698bcb1ec831a6d2ac849ab7ba2bef91e23c7a99873126e9f9db85fd6e04f86b5dce19e230427dc9c348affeb70f662ff0c2a7e27ada791f8cf966e23314d3865e072c7b99701cd0c3186b3ef863b6f873807b87afe78f5960be16c8797aadf74bf18a937efd59886925efc38b403ca2946947801f28935bc601e08cc8daf58dcc03ecf208f062f6ae4e843f2b70b366b4e5969b3ca7ab13d7eb7f27bfe37d9bd903479a5dd6ca00a41e04f8c1efbaed3f612cf45e6a97cdcefb605ce04fa325ebb988c87b9fc81d37cbda0199ec41e684528d3351e9717c92bfbd8bf8ac80d2d37b8f0d7579276e12cbfc007cbf4096e71ffed407ace76658c0013c9990f5cb9c4545ec978e3acd5a7ec7cad17e33b151509e5429d38a635a5b5e79b15718dbf80f7e0549e673d915e085b6db74b48d889df7e1e45d897ed3ed7d4a316dbc527d4cabd922322ef07a4b6505726164994f8fd913b91db72cb96455ee5736233271f8671659bfcc5914306d265a2ba1e891684e39287faa4c2bb64b995cef737cba482acfa964c5887e9dad178c0e04ee16170af93e1b91942bf78a906e81a8e673e0c04d69bd4d7a60fa8403edd62842eff179d8cc7af12a07765ff161f3be78c5c9625a0e40877e1e8530dfefbe0c4bfa64de1254d70f623e047eadd0b172c8d97dc5878959a2d8c26ade27358530ad7805512ed7c3e4f39cf96273c34b8c49e5db838f81eef1e9825696d6a1297a1ccf5e699d9aec57845cc4e75dd94de0f164b6be26bd03a1d7d730f63e63932ff1317dec15c6c2bf3dccba2ae725b30c27effaa0fb3d7ff621ebfeae22b52bb3f68da9cfaf8dabcf1c90ca6f7aa1ed3659ef2b7f765f487e500ebbeef3bbffa47c35795a355fc64947e750fef1c96c4724ff65766b1fd1c656fedd396df1f52aaf4a678ba43ec34a245f5fe9990b4a1099726493ac7d24ea57f4851917f1b1089f3d508e744edd664cedf710b41a07a227949f1a3ada4654c81b11b93079aaec8536f1a9b8766b14cd077f2ce895fefd086ba5038def1676aa6cf4e11c357d26ff16b3d429b7e433fcc7f13ad976d64afed49429ce9f06c34c1481f91ac4370388e47893c45a1940e0d7362134d06c119d5d06dc37a5eb6b353e2c7ee080f739e5f64fcc12f50ee69797e5f98b09f58cd412985697a375e7cefb16f3e4681540cbbda91d63dacc274b99795829e6499d722a2e4f4a0bd20c64eac9cde0fd0ff91ced4ed8dfff503a2f9beb7497b5aff00f63e75a31d0769b36b688241b3a67b72b2a7d93e102ff068292a2f6eb89cea1c2be66b8b1c5f7175a582d0ae50636dff59dfc0d894cbdd4b4eb7f3847ed2bbc2359fbb69772992fb05bfbf8071ded2bfcaf16e572bcfe877364eddb76b0365e3ef7906fb713f676dde7e5277fe3a3f2eab0f0db1cb2b14dae18431203fcf7677395ce0975b16ca1316109ffb131275315f25b0bc92f7f6716d34048951c258f364bf8fdc4bc1586675532ee0e60a1214109bf1fa8a8e2622215bba8655e35a8bdc0c760cfc2c094f0d945c51589b683e2a7c4b0d6fb449428bd2d5bc2fca8ba41686195ac7d3bc7b0c5a4474af8fdc4821b12f179c8ca7bea99b5f2ea30ff0be525662d6101b8238292f9c0e9157ed79fccaf25917bc827e837b64abf815bc2e2f1ff01e7c125e6c297007b0000000049454e44ae426082</data>
     </image>
 </images>
 <connections>
@@ -1330,8 +1277,6 @@ Montreal, Quebec H2T 1S6&lt;/p&gt;</string>
     <tabstop>codec1</tabstop>
     <tabstop>codec2</tabstop>
     <tabstop>codec3</tabstop>
-    <tabstop>codec4</tabstop>
-    <tabstop>codec5</tabstop>
     <tabstop>Tab_Preferences</tabstop>
     <tabstop>Tab_About</tabstop>
     <tabstop>Register</tabstop>
diff --git a/src/gui/qt/configurationpanel.ui.h b/src/gui/qt/configurationpanel.ui.h
index 4ca9ba90b2..f28ff03da7 100644
--- a/src/gui/qt/configurationpanel.ui.h
+++ b/src/gui/qt/configurationpanel.ui.h
@@ -77,8 +77,7 @@ void ConfigurationPanel::init()
    codec1->setCurrentText(QString(get_config_fields_str(AUDIO, CODEC1)));
    codec2->setCurrentText(QString(get_config_fields_str(AUDIO, CODEC2)));
    codec3->setCurrentText(QString(get_config_fields_str(AUDIO, CODEC3)));
-   codec4->setCurrentText(QString(get_config_fields_str(AUDIO, CODEC4)));
-   codec5->setCurrentText(QString(get_config_fields_str(AUDIO, CODEC5)));
+
    ringsChoice->setCurrentText(QString(get_config_fields_str(AUDIO, RING_CHOICE)));
    
    // For preferences tab
@@ -132,8 +131,7 @@ void ConfigurationPanel::saveSlot()
    Config::set("Audio", "Codecs.codec1", string(codec1->currentText().ascii()));
    Config::set("Audio", "Codecs.codec2", string(codec2->currentText().ascii()));
    Config::set("Audio", "Codecs.codec3", string(codec3->currentText().ascii()));
-   Config::set("Audio", "Codecs.codec4", string(codec4->currentText().ascii()));
-   Config::set("Audio", "Codecs.codec5", string(codec5->currentText().ascii()));
+
    if (ringsChoice->currentText() != NULL)
      Config::set("Audio", "Rings.ringChoice", 
          string(ringsChoice->currentText().ascii()));
diff --git a/src/gui/qt/configurationpanelui.cpp b/src/gui/qt/configurationpanelui.cpp
index 118928c752..02e8613e25 100644
--- a/src/gui/qt/configurationpanelui.cpp
+++ b/src/gui/qt/configurationpanelui.cpp
@@ -1,7 +1,7 @@
 /****************************************************************************
 ** Form implementation generated from reading ui file 'gui/qt/configurationpanel.ui'
 **
-** Created: Mon May 30 14:35:17 2005
+** Created: Thu Jun 2 11:14:54 2005
 **      by: The User Interface Compiler ($Id$)
 **
 ** WARNING! All changes made in this file will be lost!
@@ -322,467 +322,417 @@ static const char* const image0_data[] = {
 static const unsigned char image1_data[] = { 
     0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
     0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, 0x30,
-    0x08, 0x06, 0x00, 0x00, 0x00, 0x63, 0x57, 0xfa, 0xde, 0x00, 0x00, 0x15,
-    0x75, 0x49, 0x44, 0x41, 0x54, 0x78, 0x9c, 0xed, 0x5d, 0x7f, 0x6c, 0x53,
-    0xd7, 0xbd, 0xff, 0x1c, 0xd4, 0x21, 0x07, 0xa5, 0xd5, 0x75, 0x45, 0xa7,
-    0xeb, 0x48, 0xab, 0x6c, 0x34, 0xd0, 0x9c, 0xae, 0x68, 0x36, 0x65, 0x5a,
-    0x9c, 0xb5, 0xaa, 0x6f, 0xd5, 0x6a, 0x38, 0xa4, 0x1a, 0x71, 0xfb, 0x24,
-    0x92, 0x6c, 0x15, 0xb9, 0x40, 0xd5, 0x25, 0xdd, 0xb4, 0x97, 0xb0, 0xe9,
-    0x75, 0x09, 0x15, 0x25, 0xdd, 0xf4, 0x0a, 0x2e, 0x6a, 0x9b, 0xac, 0x1a,
-    0xe0, 0x20, 0xba, 0x38, 0x48, 0x0f, 0x0c, 0x4f, 0x90, 0x84, 0x27, 0xaa,
-    0x5e, 0x57, 0xf4, 0xc5, 0x79, 0x2a, 0x2f, 0xf6, 0x44, 0x37, 0xbb, 0x2a,
-    0x15, 0xb6, 0x60, 0xc2, 0x16, 0x45, 0xb1, 0x45, 0x23, 0x62, 0x45, 0x93,
-    0xbe, 0xef, 0x8f, 0x1b, 0x5f, 0xfb, 0xda, 0xd7, 0x3f, 0xae, 0x03, 0x23,
-    0x4f, 0xcd, 0xf9, 0xe7, 0x43, 0xb8, 0xe7, 0x7c, 0xcf, 0xf7, 0x9c, 0xfb,
-    0x3d, 0x9f, 0xf3, 0x3d, 0xdf, 0x73, 0xee, 0x31, 0xae, 0x02, 0x38, 0x0a,
-    0xe0, 0x6e, 0x21, 0x11, 0x11, 0x5d, 0x23, 0x22, 0x22, 0x9a, 0x5a, 0x44,
-    0x5a, 0x20, 0xba, 0xdb, 0xf5, 0xac, 0xe0, 0x37, 0x17, 0xd9, 0x51, 0x00,
-    0x02, 0x00, 0xa9, 0x06, 0x14, 0x89, 0x68, 0xe2, 0x4a, 0x02, 0x80, 0x09,
-    0x03, 0x01, 0x09, 0xe1, 0xa4, 0xad, 0x6c, 0x09, 0xa7, 0xd9, 0x0d, 0xbb,
-    0x29, 0x84, 0xfd, 0x4f, 0xdb, 0x31, 0xb6, 0x9a, 0xb1, 0x5a, 0xeb, 0x5d,
-    0xc1, 0x6f, 0x36, 0xb2, 0xab, 0x35, 0x14, 0x9c, 0xbf, 0x49, 0x14, 0x4e,
-    0x02, 0x3d, 0xe7, 0xfd, 0x48, 0xf3, 0x02, 0x10, 0x97, 0x00, 0xb3, 0x3e,
-    0xe4, 0xac, 0x02, 0xda, 0x0c, 0x46, 0x78, 0x5b, 0x01, 0x2f, 0x5b, 0x31,
-    0xe0, 0x15, 0xac, 0x1e, 0x75, 0x31, 0xad, 0x48, 0x44, 0xc2, 0x07, 0x12,
-    0x02, 0xf1, 0xf2, 0x8c, 0xaa, 0x17, 0x9d, 0x66, 0x37, 0x7c, 0xdb, 0xe6,
-    0x91, 0x79, 0x68, 0x0d, 0xbb, 0xdf, 0x1d, 0xb2, 0x82, 0xcb, 0x1f, 0x57,
-    0x55, 0x93, 0xd1, 0xb2, 0x40, 0xc4, 0x7f, 0x41, 0xc4, 0xde, 0xf0, 0x23,
-    0x80, 0x45, 0x83, 0x35, 0x0b, 0x77, 0x0d, 0x03, 0x71, 0x3f, 0x1a, 0xce,
-    0x64, 0xe0, 0xbb, 0xf8, 0x37, 0xba, 0xdf, 0x1d, 0xb2, 0x82, 0xcb, 0x1f,
-    0x2b, 0x32, 0xed, 0xfc, 0xcd, 0x59, 0xea, 0x3c, 0x63, 0x44, 0x38, 0xe9,
-    0xff, 0xa7, 0xa8, 0x64, 0xe3, 0xc3, 0x08, 0xed, 0x16, 0x56, 0x5c, 0x86,
-    0x15, 0x2c, 0x89, 0x65, 0x99, 0xd6, 0x72, 0x93, 0xa8, 0xf9, 0x63, 0xc8,
-    0x06, 0x6b, 0x5e, 0x7c, 0x72, 0x8f, 0x31, 0x6c, 0xb0, 0xc1, 0xf8, 0x96,
-    0x1f, 0x22, 0x11, 0x2d, 0x87, 0x0e, 0x5a, 0xc1, 0xe5, 0x87, 0x25, 0x99,
-    0x76, 0xfe, 0xe6, 0x2c, 0x35, 0x1f, 0x03, 0xd2, 0x19, 0x9d, 0x22, 0xd7,
-    0x06, 0x81, 0x07, 0x5a, 0x94, 0xbf, 0x5d, 0x8f, 0x84, 0x30, 0xfa, 0x13,
-    0x3b, 0xa4, 0x78, 0x02, 0x06, 0x83, 0x09, 0x5b, 0xff, 0x5c, 0x1d, 0x63,
-    0x73, 0x06, 0x09, 0xa9, 0xdf, 0xb8, 0x97, 0xc4, 0xb8, 0x22, 0x11, 0x0d,
-    0x1f, 0xf6, 0x22, 0xf4, 0xbf, 0x41, 0x14, 0x26, 0xeb, 0xf7, 0xac, 0xe8,
-    0x7e, 0xb6, 0x1b, 0xe9, 0xb5, 0x69, 0x64, 0x1a, 0x1a, 0xfe, 0x5f, 0xf8,
-    0xd2, 0x22, 0x11, 0x4d, 0x9c, 0x9b, 0x40, 0xcb, 0x8f, 0x5b, 0xe0, 0x7d,
-    0xf8, 0xee, 0xcc, 0x44, 0xfc, 0xed, 0x3b, 0x34, 0x7c, 0x64, 0x18, 0xd1,
-    0xcf, 0xa3, 0x88, 0x5e, 0x89, 0xc1, 0xba, 0xde, 0x82, 0xa1, 0x57, 0x87,
-    0x30, 0xb6, 0x71, 0x8d, 0x6e, 0xf9, 0xf7, 0x42, 0x3f, 0x2d, 0xd4, 0x8c,
-    0x1e, 0x58, 0x6e, 0x12, 0x19, 0x3f, 0x4e, 0x21, 0x1d, 0x95, 0xaa, 0x8b,
-    0x06, 0x24, 0x25, 0xcc, 0xfc, 0xcc, 0x0d, 0x7b, 0x3d, 0x80, 0x07, 0x8b,
-    0xec, 0x43, 0x49, 0xc1, 0x18, 0xd0, 0xfc, 0x49, 0xaa, 0xea, 0x28, 0x03,
-    0x97, 0xac, 0xcd, 0x70, 0x2d, 0xb7, 0x89, 0xa4, 0x33, 0x41, 0xf4, 0xbc,
-    0xd7, 0x03, 0x27, 0x04, 0x04, 0x20, 0x29, 0x3a, 0x68, 0xfd, 0x6d, 0x6c,
-    0xe5, 0x30, 0xb8, 0xb7, 0x7f, 0xd9, 0xbb, 0x24, 0xde, 0x7d, 0xfb, 0x29,
-    0x75, 0x2e, 0x8d, 0x00, 0x24, 0x44, 0x2e, 0x84, 0xee, 0x8a, 0x61, 0x18,
-    0xde, 0x1c, 0xa5, 0x37, 0xcf, 0x78, 0x54, 0xfd, 0x01, 0x27, 0xd0, 0x77,
-    0xc0, 0xa3, 0x7b, 0x20, 0xdf, 0x0b, 0xfd, 0xb4, 0xb0, 0x88, 0x69, 0xf9,
-    0x05, 0xa2, 0x86, 0x43, 0x29, 0x5d, 0x0c, 0x3b, 0xbb, 0xc7, 0x0d, 0x63,
-    0x1d, 0xca, 0x26, 0xf1, 0x7c, 0x08, 0x23, 0x97, 0x2c, 0xba, 0x55, 0xac,
-    0x85, 0x71, 0x83, 0xbb, 0xba, 0x68, 0x3a, 0x1c, 0x56, 0xea, 0xe6, 0x79,
-    0x13, 0xdc, 0xad, 0x6d, 0xe8, 0xde, 0x22, 0xc2, 0xf7, 0x89, 0x0f, 0xd6,
-    0xa4, 0x15, 0x7d, 0x81, 0x01, 0x24, 0x93, 0x09, 0x25, 0xcf, 0xe8, 0xe1,
-    0xa3, 0x30, 0xda, 0x37, 0x2d, 0x6b, 0xc6, 0x15, 0x89, 0xc8, 0x37, 0xe6,
-    0x43, 0xc7, 0x93, 0x1d, 0xf0, 0x3e, 0xba, 0x74, 0x83, 0x10, 0xaf, 0x11,
-    0x35, 0xb6, 0xd9, 0x55, 0xef, 0xa9, 0xc9, 0x66, 0x83, 0xf7, 0xb0, 0xb7,
-    0xa6, 0x01, 0x7c, 0xb7, 0xf5, 0xab, 0x9a, 0x69, 0x7d, 0x17, 0x89, 0x02,
-    0x01, 0x7f, 0xf5, 0x71, 0xd7, 0xcd, 0x2e, 0xd0, 0x96, 0xf2, 0x16, 0x6b,
-    0x1f, 0x0b, 0x22, 0xfc, 0x0f, 0x6b, 0x4d, 0xf1, 0x5c, 0x98, 0x05, 0x38,
-    0x11, 0x86, 0xf7, 0xa5, 0x67, 0xaa, 0x32, 0x28, 0x71, 0x81, 0xa8, 0xd1,
-    0x61, 0x57, 0x18, 0x75, 0xff, 0x8e, 0xfd, 0x48, 0x77, 0x6f, 0xd5, 0xec,
-    0x40, 0xcb, 0x17, 0x44, 0x89, 0x5b, 0x09, 0x84, 0x6e, 0x85, 0xd0, 0xf8,
-    0xfc, 0xd6, 0x92, 0xf2, 0x2d, 0x5f, 0x10, 0x61, 0xfd, 0xd2, 0xe2, 0xc9,
-    0x22, 0x11, 0x95, 0x2b, 0x2f, 0xce, 0x12, 0xd5, 0xca, 0x4c, 0x96, 0x1b,
-    0x44, 0x30, 0x40, 0x17, 0xb3, 0x89, 0x0b, 0x44, 0x8e, 0xe7, 0x04, 0xa4,
-    0xe7, 0xd2, 0x00, 0x72, 0x33, 0xd0, 0xe8, 0x6b, 0x47, 0x11, 0x6e, 0xdb,
-    0x54, 0xb2, 0xbf, 0x62, 0x1b, 0x98, 0xee, 0x81, 0xad, 0x57, 0x3f, 0xcb,
-    0x0d, 0x22, 0x98, 0x4a, 0xf7, 0xb7, 0x8a, 0x69, 0x9b, 0x6e, 0x12, 0x3d,
-    0xf6, 0xbe, 0xbe, 0x28, 0x41, 0xd7, 0xe6, 0x18, 0xbc, 0x5b, 0xd4, 0xa3,
-    0x35, 0x3f, 0xd5, 0xca, 0xb0, 0x85, 0x38, 0xba, 0x2d, 0x0d, 0xc7, 0xc6,
-    0x75, 0x15, 0x3b, 0x2c, 0x15, 0x9a, 0xa1, 0xce, 0xdd, 0x3b, 0x95, 0xfa,
-    0x9d, 0x4e, 0x41, 0xf7, 0x54, 0x27, 0x5e, 0x23, 0x72, 0xff, 0xb6, 0x03,
-    0xd1, 0x2b, 0x51, 0xcd, 0x36, 0x39, 0x9d, 0x02, 0xfa, 0x76, 0x75, 0x03,
-    0x1b, 0xd6, 0xb1, 0x8e, 0xa7, 0x9d, 0x94, 0x9e, 0x4b, 0x83, 0xab, 0xe7,
-    0x10, 0xfc, 0x40, 0x2a, 0x62, 0x98, 0xd8, 0xc5, 0x29, 0xea, 0xdf, 0xdb,
-    0x8f, 0xf4, 0x5c, 0x1a, 0xd6, 0xf5, 0x56, 0xb8, 0x4e, 0x8c, 0xb1, 0xac,
-    0x9e, 0xde, 0x13, 0x09, 0x84, 0x2f, 0x79, 0x14, 0xc3, 0xc9, 0x26, 0xeb,
-    0x7a, 0x2b, 0x9a, 0x9e, 0xb0, 0xa1, 0xef, 0x5f, 0xfb, 0x54, 0x2f, 0xce,
-    0xe6, 0x99, 0xa1, 0xce, 0x13, 0x72, 0xdb, 0x86, 0xde, 0x1e, 0x82, 0xe5,
-    0xa9, 0x66, 0x36, 0xf9, 0xa7, 0xa3, 0x34, 0x7c, 0x64, 0x58, 0x29, 0xcb,
-    0xf3, 0x26, 0x65, 0x06, 0xf9, 0xe8, 0xd7, 0x13, 0x98, 0xec, 0x68, 0xd0,
-    0x7c, 0xf1, 0x59, 0xbd, 0xb5, 0xd2, 0xcc, 0xc8, 0x14, 0xc6, 0x36, 0xae,
-    0x61, 0xed, 0x97, 0xef, 0x50, 0xcb, 0x6b, 0x2f, 0xa8, 0x66, 0xa4, 0x6c,
-    0xe2, 0xea, 0x39, 0x0c, 0x3a, 0x07, 0x61, 0xdd, 0x65, 0x51, 0xd6, 0x04,
-    0xd5, 0xe8, 0xc7, 0xd5, 0x73, 0x4a, 0x7b, 0xb3, 0xfa, 0x65, 0xd7, 0x1e,
-    0xfe, 0x73, 0xa7, 0x8b, 0xea, 0xe2, 0x79, 0x13, 0x86, 0x5a, 0x87, 0x60,
-    0xd9, 0xce, 0x23, 0xb9, 0x18, 0xc7, 0x57, 0xa2, 0x07, 0x22, 0x11, 0x35,
-    0x1f, 0xd3, 0x1f, 0x25, 0x10, 0xcc, 0xa5, 0x0d, 0x36, 0x18, 0x03, 0x46,
-    0xbe, 0xb2, 0xe8, 0x92, 0x57, 0x0a, 0x7b, 0x3e, 0xe7, 0x60, 0x59, 0xa0,
-    0x8a, 0x71, 0x5c, 0xbb, 0xad, 0x40, 0x9f, 0x00, 0x20, 0x6e, 0x75, 0x91,
-    0xed, 0xf4, 0x0c, 0xc5, 0x2e, 0x4e, 0x91, 0x38, 0x5b, 0x39, 0x2a, 0xd1,
-    0xd8, 0x66, 0x47, 0xf4, 0x4a, 0x14, 0x5c, 0x3d, 0x87, 0x99, 0x91, 0x29,
-    0x44, 0xc6, 0x42, 0x88, 0x5c, 0x08, 0xc1, 0xe9, 0x14, 0x64, 0x46, 0x0a,
-    0x48, 0xe8, 0xd8, 0x2d, 0xc2, 0x72, 0x9b, 0x48, 0x80, 0x00, 0x00, 0x48,
-    0xcf, 0xa5, 0x21, 0xfc, 0xa2, 0xa5, 0x48, 0x5e, 0xf0, 0xad, 0xa0, 0xf2,
-    0x92, 0x52, 0x5f, 0xa7, 0x21, 0x00, 0xf0, 0x7b, 0x0e, 0x50, 0xe7, 0xee,
-    0x9d, 0x08, 0x04, 0x06, 0x60, 0x9b, 0xb3, 0x83, 0xe7, 0x4d, 0xf8, 0xdd,
-    0xb6, 0x5e, 0x34, 0xd9, 0x6c, 0x68, 0xab, 0x6f, 0x43, 0xf4, 0x4a, 0x14,
-    0x23, 0x27, 0xc6, 0xd0, 0xb8, 0xd9, 0x8e, 0xf6, 0xcb, 0x77, 0x14, 0x7d,
-    0x3b, 0x4f, 0xec, 0x94, 0x7d, 0x4e, 0x00, 0x7c, 0xc6, 0x04, 0x09, 0x00,
-    0x77, 0xcb, 0xa0, 0x6a, 0xae, 0x35, 0x69, 0x55, 0xfe, 0x3d, 0xfc, 0xa5,
-    0xb7, 0x64, 0x3b, 0xfd, 0xbf, 0xf7, 0x01, 0x80, 0x22, 0x2f, 0x9b, 0xf6,
-    0xef, 0xd8, 0x8f, 0x3a, 0x73, 0x1d, 0x04, 0x00, 0x9b, 0xba, 0x9a, 0x61,
-    0x4d, 0x5a, 0xc1, 0xf3, 0x26, 0xcc, 0x8c, 0x4c, 0x61, 0xf4, 0xf0, 0x51,
-    0xa5, 0x1f, 0xd2, 0x73, 0x69, 0xf4, 0x9c, 0xeb, 0x81, 0x77, 0xb7, 0x0f,
-    0x7a, 0xf4, 0xb3, 0xcd, 0xe5, 0xde, 0xcf, 0xf0, 0x97, 0x5e, 0x99, 0xf1,
-    0x9d, 0x02, 0x86, 0x8f, 0x0c, 0x23, 0x99, 0x4c, 0xa0, 0x9d, 0x6f, 0x47,
-    0x5b, 0x6b, 0x1b, 0x46, 0x5f, 0x3b, 0x0a, 0xeb, 0x7a, 0x2b, 0xac, 0x49,
-    0x2b, 0x5e, 0x38, 0xe2, 0xc6, 0x33, 0xcf, 0xb7, 0xc0, 0xf2, 0x85, 0xfc,
-    0xfe, 0x15, 0xa6, 0x1d, 0x3c, 0x3b, 0x43, 0x23, 0xe1, 0x1a, 0x18, 0x91,
-    0x0f, 0x83, 0x76, 0xab, 0x1b, 0x9e, 0x4d, 0x62, 0x14, 0x18, 0x39, 0x79,
-    0xf7, 0xe2, 0xbb, 0xfb, 0x77, 0xb8, 0x61, 0xaa, 0xc2, 0x57, 0x6a, 0xbf,
-    0x7c, 0x87, 0x36, 0x75, 0x35, 0x6b, 0xea, 0x94, 0x4d, 0x5c, 0x3d, 0x07,
-    0xeb, 0x7a, 0x0b, 0x84, 0xa7, 0x05, 0x74, 0xb4, 0x77, 0xa8, 0x18, 0x4d,
-    0x5c, 0x20, 0x0a, 0xfd, 0x35, 0xa4, 0xe9, 0xe3, 0xb6, 0x3c, 0x61, 0xa3,
-    0xac, 0x8c, 0xc8, 0x85, 0x10, 0x86, 0x4f, 0x7a, 0x91, 0xcf, 0x24, 0x1f,
-    0x9d, 0x9d, 0x50, 0x98, 0x27, 0xeb, 0xaa, 0x64, 0xd3, 0xcc, 0xc8, 0x14,
-    0xa4, 0xb8, 0x84, 0x3d, 0x6f, 0x0c, 0x28, 0x3a, 0x74, 0xef, 0x12, 0xe1,
-    0xe8, 0xe8, 0x54, 0xd5, 0xe3, 0xf2, 0xdd, 0xa0, 0x67, 0x0e, 0xb5, 0x28,
-    0xe5, 0x22, 0xa7, 0x43, 0xf0, 0x3e, 0xca, 0x98, 0x27, 0xaf, 0xee, 0xee,
-    0x5d, 0xdd, 0x70, 0xbd, 0xbc, 0x93, 0x0d, 0x16, 0xf8, 0xef, 0x80, 0xcc,
-    0xd4, 0x5d, 0xdb, 0xdb, 0xd1, 0xf8, 0xfc, 0x56, 0x16, 0xf4, 0x8d, 0x52,
-    0xf0, 0x2f, 0x1c, 0x32, 0xe9, 0xd3, 0x00, 0x00, 0xfb, 0x13, 0x0e, 0x74,
-    0xef, 0x16, 0xe1, 0x65, 0x8c, 0x15, 0xd6, 0xd3, 0xd6, 0xda, 0x06, 0xcb,
-    0xeb, 0x03, 0x15, 0xfb, 0x41, 0x24, 0xa2, 0xc6, 0xcd, 0xb9, 0x76, 0x65,
-    0x17, 0x5d, 0x7a, 0xf5, 0x6b, 0x69, 0x6d, 0x81, 0xb8, 0x5b, 0x44, 0xf6,
-    0xb9, 0xd3, 0x29, 0xc0, 0x7e, 0xc0, 0xa3, 0x7a, 0xbf, 0xde, 0x7d, 0xfb,
-    0xe9, 0xf4, 0x39, 0x59, 0xf7, 0x26, 0x9b, 0x0d, 0x8e, 0x23, 0x23, 0x6c,
-    0x95, 0x00, 0x79, 0xc7, 0xeb, 0x74, 0xa6, 0x46, 0x46, 0x34, 0xd8, 0x10,
-    0xf9, 0xaa, 0xc8, 0x26, 0x00, 0x00, 0xde, 0xb5, 0xb8, 0xab, 0x71, 0x5c,
-    0xcf, 0x89, 0xea, 0xe2, 0xb7, 0x63, 0x1b, 0xd7, 0xb0, 0xc8, 0xa5, 0x10,
-    0xba, 0xb6, 0xb7, 0xa3, 0xfb, 0xd9, 0x6e, 0xb9, 0x43, 0x0a, 0x18, 0xc5,
-    0x36, 0x67, 0xc7, 0x74, 0x38, 0x8c, 0x37, 0x0f, 0x79, 0xd0, 0xb8, 0xd9,
-    0x8e, 0xa6, 0x0b, 0x57, 0x15, 0xb9, 0xde, 0xd5, 0x8c, 0xe5, 0xbf, 0xa8,
-    0x54, 0x68, 0x86, 0x5c, 0xc1, 0x1b, 0x24, 0x6e, 0x75, 0x29, 0x2f, 0xc5,
-    0x09, 0x01, 0x88, 0x03, 0xdd, 0xbb, 0x45, 0x70, 0xf5, 0x9c, 0x22, 0x3f,
-    0xf5, 0xd7, 0x8c, 0xa2, 0x47, 0xff, 0x1f, 0x06, 0x95, 0xfa, 0xda, 0xf9,
-    0x76, 0x8c, 0x6d, 0x5c, 0xc3, 0x3c, 0x87, 0xa3, 0x4a, 0x79, 0x2d, 0x83,
-    0x15, 0x00, 0x4c, 0x76, 0x34, 0xb0, 0xa1, 0x57, 0x87, 0x94, 0xb2, 0xdd,
-    0xef, 0xf5, 0x15, 0x68, 0x0f, 0x38, 0x2d, 0x82, 0x9c, 0xdf, 0x2c, 0xa8,
-    0xda, 0x77, 0xea, 0xf7, 0x7e, 0xb8, 0x4e, 0x8c, 0xb1, 0xac, 0x8f, 0xfe,
-    0xe6, 0x21, 0x0f, 0x02, 0x81, 0x01, 0x18, 0xc2, 0x46, 0x4c, 0x87, 0xc3,
-    0x18, 0x3e, 0x32, 0x0c, 0xdf, 0x98, 0x0f, 0x02, 0x00, 0x93, 0xd5, 0x94,
-    0x93, 0x07, 0x01, 0x83, 0xad, 0xfd, 0x2a, 0x3d, 0x0a, 0xfb, 0xc1, 0x12,
-    0x22, 0x72, 0x05, 0x6f, 0x90, 0xd0, 0xda, 0xa2, 0xea, 0xcf, 0x50, 0x3c,
-    0x54, 0x93, 0x7e, 0xb8, 0x82, 0x9c, 0xc1, 0x42, 0x40, 0xf2, 0xef, 0x09,
-    0x88, 0xd7, 0x88, 0x52, 0xa1, 0x19, 0x12, 0x67, 0x89, 0x2c, 0x17, 0x89,
-    0x4c, 0x19, 0x93, 0xf2, 0x7c, 0x3a, 0x1c, 0x86, 0x48, 0x44, 0x0f, 0x48,
-    0x00, 0x9a, 0xd2, 0x90, 0xc3, 0x5b, 0x10, 0xe4, 0xc5, 0x8f, 0x4e, 0xec,
-    0xfc, 0xd0, 0x8d, 0x50, 0x3b, 0x8a, 0xd3, 0x23, 0xc0, 0x81, 0xf5, 0x69,
-    0xec, 0x89, 0xd7, 0x26, 0xb7, 0x10, 0xd3, 0x10, 0xe0, 0xfb, 0x2c, 0x56,
-    0x15, 0x2f, 0x7b, 0x19, 0x63, 0xee, 0xc5, 0xbf, 0x27, 0x00, 0x18, 0x6e,
-    0x4c, 0xd0, 0xb0, 0xe1, 0x20, 0xa4, 0xbf, 0x06, 0xc1, 0x47, 0x4d, 0x18,
-    0xf8, 0xb8, 0x1f, 0xb8, 0x92, 0x53, 0xf5, 0x85, 0xd7, 0xdc, 0x88, 0x2c,
-    0x10, 0x79, 0x57, 0x33, 0xd6, 0x7e, 0xf9, 0x0e, 0xf5, 0xfd, 0x79, 0x00,
-    0xe1, 0x4b, 0x21, 0x78, 0xe6, 0xd2, 0x40, 0x9e, 0x8f, 0x9c, 0x4d, 0x01,
-    0x48, 0x80, 0x59, 0xae, 0xa7, 0xcd, 0x73, 0x80, 0x46, 0x4e, 0x8c, 0x01,
-    0x00, 0x76, 0xfe, 0x5e, 0x44, 0x90, 0x88, 0x62, 0x57, 0x62, 0x90, 0x76,
-    0x8b, 0x4a, 0x7e, 0xdb, 0x6e, 0x2b, 0x1a, 0xc7, 0x01, 0x4f, 0x72, 0x4c,
-    0x29, 0x3f, 0xdc, 0x7e, 0x10, 0xde, 0x8e, 0x4e, 0x4d, 0xfd, 0x63, 0x96,
-    0x5c, 0x5d, 0xe1, 0x4b, 0x21, 0x48, 0x85, 0xf5, 0xc7, 0x24, 0xb8, 0x00,
-    0x0c, 0xc6, 0xa5, 0x9c, 0x3e, 0x00, 0xa6, 0x9f, 0x5b, 0xa7, 0xf6, 0xa9,
-    0x5b, 0xdb, 0x90, 0xf8, 0x7b, 0x0c, 0x19, 0xa4, 0xd0, 0x04, 0x1b, 0x0c,
-    0x9c, 0x51, 0x9e, 0x59, 0x3a, 0x3a, 0x21, 0x9a, 0x8b, 0xdb, 0x53, 0x38,
-    0x63, 0xa9, 0xfb, 0x21, 0xc7, 0xae, 0x49, 0xe4, 0x7c, 0x4f, 0xbb, 0xd9,
-    0x0e, 0x6f, 0x0d, 0xfa, 0x89, 0x6b, 0x0b, 0xea, 0xbf, 0x22, 0xbb, 0x66,
-    0x5a, 0x29, 0x00, 0x09, 0x5c, 0x3d, 0x87, 0xf9, 0xaf, 0xe7, 0xf1, 0x80,
-    0x00, 0xc0, 0x7d, 0x06, 0x35, 0xad, 0xea, 0xb3, 0x18, 0xfe, 0xd2, 0x0f,
-    0xc0, 0xad, 0x59, 0x59, 0x5f, 0x93, 0xdc, 0xfb, 0x7b, 0xae, 0xd4, 0x2e,
-    0x3f, 0x1f, 0xc3, 0x49, 0x37, 0x32, 0x28, 0x6f, 0xb0, 0x9a, 0xd8, 0xd0,
-    0xc0, 0xbc, 0x79, 0x7f, 0x1f, 0x04, 0x10, 0x39, 0x3b, 0x4e, 0x93, 0x6f,
-    0x04, 0x94, 0x0e, 0x1d, 0x3e, 0xe6, 0x85, 0xf5, 0xf8, 0x94, 0xe2, 0x5a,
-    0x70, 0xf5, 0x1c, 0x3e, 0x7a, 0x77, 0x02, 0x26, 0xb3, 0x09, 0x30, 0x01,
-    0xbe, 0x31, 0x1f, 0x82, 0x87, 0xc2, 0x4a, 0xfe, 0x2c, 0xc3, 0x58, 0xb6,
-    0xf7, 0x21, 0x6b, 0xb4, 0xb6, 0x39, 0x3b, 0xf2, 0xa7, 0x4e, 0x27, 0x04,
-    0x44, 0xf9, 0xa8, 0x12, 0x9d, 0xc8, 0x8f, 0x13, 0x87, 0xc2, 0xa1, 0xd2,
-    0x2e, 0x0e, 0x67, 0xcb, 0x95, 0xaf, 0x8f, 0x42, 0x00, 0xe0, 0xc9, 0x2b,
-    0x9f, 0xcf, 0x64, 0xf9, 0xd3, 0x6f, 0xa1, 0x1c, 0xf1, 0xf5, 0x81, 0x22,
-    0x26, 0xf7, 0x1e, 0xf0, 0x40, 0x58, 0xd4, 0x5f, 0xa5, 0x4f, 0x3c, 0xa7,
-    0x8f, 0xe1, 0xcd, 0x51, 0xda, 0xd4, 0xd5, 0x0c, 0x27, 0x04, 0x18, 0xf8,
-    0x3a, 0xcc, 0xbc, 0x3b, 0x81, 0xba, 0xb5, 0x75, 0x4a, 0x3f, 0xbc, 0x79,
-    0xc8, 0xa3, 0xe8, 0x87, 0x38, 0x6a, 0xd2, 0xaf, 0xb0, 0xfe, 0xb6, 0xd6,
-    0x36, 0x0c, 0xbe, 0xda, 0x5f, 0x36, 0xca, 0x90, 0x7c, 0x68, 0x0d, 0x56,
-    0x19, 0x6e, 0xdf, 0xa1, 0x70, 0x32, 0xb5, 0x64, 0x26, 0xf4, 0x47, 0x8b,
-    0x57, 0x98, 0xd9, 0xd4, 0xd7, 0x04, 0x9c, 0xda, 0x9c, 0x01, 0x0c, 0x4b,
-    0x67, 0x5c, 0xcf, 0x74, 0x65, 0x17, 0x41, 0x5c, 0x58, 0x9c, 0x62, 0x2a,
-    0xe4, 0x6b, 0xf9, 0x71, 0x8b, 0x6a, 0xa3, 0x61, 0x7e, 0x2e, 0x85, 0x9e,
-    0xf7, 0x7a, 0x00, 0xc8, 0x06, 0x1b, 0x0c, 0x48, 0x98, 0x74, 0x34, 0xb0,
-    0x58, 0x03, 0x63, 0x5e, 0xc6, 0x98, 0xa3, 0xa3, 0x93, 0x45, 0xf9, 0x5c,
-    0x44, 0xc1, 0x6e, 0xb6, 0x43, 0x02, 0x10, 0x6b, 0x60, 0xac, 0xad, 0xb5,
-    0x0d, 0x00, 0x54, 0xf2, 0xb2, 0x7f, 0x0f, 0xb5, 0x0e, 0x29, 0xf5, 0x66,
-    0x6c, 0x29, 0xe5, 0x99, 0xf7, 0xc4, 0x58, 0xc9, 0x81, 0xd6, 0xf9, 0x87,
-    0x9d, 0x4a, 0xf9, 0xfe, 0xcd, 0xbf, 0x53, 0xa4, 0x66, 0xe5, 0x07, 0x62,
-    0x92, 0x9c, 0x3f, 0xae, 0xae, 0x4f, 0xcf, 0x40, 0xb6, 0x9b, 0xed, 0x2a,
-    0x7d, 0xb3, 0xed, 0x11, 0xaf, 0x91, 0xb2, 0xe1, 0x10, 0xae, 0x0f, 0x41,
-    0x3a, 0x37, 0x81, 0xb1, 0x8d, 0x6b, 0x94, 0x7e, 0xe8, 0x68, 0xef, 0x50,
-    0xb5, 0x2f, 0xcb, 0xd0, 0x7a, 0xf5, 0xb3, 0xdb, 0xd4, 0xf5, 0x0f, 0xee,
-    0x28, 0x6d, 0xb0, 0x86, 0x1b, 0x37, 0x94, 0x45, 0xf8, 0xaa, 0x54, 0xa6,
-    0x0e, 0x4b, 0xf6, 0x39, 0xd7, 0x06, 0xe1, 0xce, 0xf3, 0x8f, 0xb4, 0x92,
-    0xdb, 0x6a, 0x02, 0xbd, 0x62, 0xc4, 0xe8, 0x8b, 0xee, 0x25, 0xd7, 0xe7,
-    0xfb, 0xac, 0xbc, 0xc1, 0x36, 0x3a, 0xec, 0xf0, 0xee, 0x96, 0x57, 0xdf,
-    0xdc, 0xf0, 0x38, 0x05, 0x7d, 0xa3, 0xb2, 0x8f, 0x74, 0x9b, 0x48, 0x5c,
-    0x20, 0x8a, 0x5d, 0x9c, 0x22, 0xcb, 0xf1, 0x29, 0x6a, 0x7c, 0x2e, 0xc7,
-    0x88, 0xed, 0x7c, 0x3b, 0xfa, 0x36, 0xf7, 0x29, 0x7f, 0xdb, 0xe6, 0xec,
-    0x40, 0x58, 0xbd, 0xf8, 0x38, 0xb8, 0xa7, 0x97, 0xb2, 0x21, 0x99, 0x7c,
-    0x86, 0x91, 0x00, 0x0c, 0xee, 0xed, 0x57, 0xb5, 0x37, 0xeb, 0xc3, 0x71,
-    0xf5, 0x1c, 0x1a, 0xb7, 0x5b, 0x94, 0x7c, 0xde, 0x7f, 0xf7, 0x2a, 0xcf,
-    0x03, 0x01, 0x09, 0xdc, 0xf0, 0x38, 0x65, 0x57, 0xc5, 0x59, 0x83, 0xe9,
-    0xdb, 0xde, 0x4e, 0xfc, 0x15, 0x93, 0x52, 0x5e, 0xd8, 0xe5, 0x58, 0x94,
-    0x96, 0x27, 0xbf, 0x84, 0xcf, 0xa8, 0x67, 0x06, 0x42, 0xbc, 0x40, 0xdf,
-    0xc5, 0xf6, 0x4c, 0xfc, 0x65, 0x42, 0xed, 0xb3, 0xe6, 0xcd, 0x08, 0x22,
-    0x11, 0xb9, 0xdb, 0x3b, 0x6a, 0xf6, 0x69, 0x55, 0x8c, 0xcf, 0x18, 0x1b,
-    0x7d, 0xed, 0xa8, 0xf2, 0xdc, 0xf1, 0x73, 0x41, 0x15, 0x2d, 0xb1, 0xdc,
-    0x26, 0x6a, 0xba, 0x70, 0x95, 0x3a, 0x9e, 0x76, 0xd2, 0xe0, 0xf3, 0x9e,
-    0x5c, 0xf4, 0xa0, 0xab, 0xd6, 0xa8, 0x41, 0x16, 0xd7, 0x06, 0x41, 0xbf,
-    0xc8, 0xad, 0x40, 0xab, 0x4d, 0xec, 0xb0, 0x04, 0x54, 0xf8, 0xd2, 0xa1,
-    0x14, 0xf6, 0x6e, 0x77, 0xc3, 0xba, 0x41, 0x7b, 0x44, 0xf2, 0xb7, 0xef,
-    0x50, 0xe7, 0xcb, 0x3b, 0x4b, 0xc6, 0x58, 0xb5, 0x92, 0x75, 0xbd, 0x15,
-    0x07, 0xf7, 0x0d, 0xc2, 0xb2, 0xde, 0x02, 0x77, 0xbb, 0x3a, 0x3e, 0xcb,
-    0xf3, 0x26, 0x64, 0xe6, 0xe6, 0x8b, 0x62, 0xa9, 0x00, 0x8a, 0xb6, 0x2a,
-    0x2d, 0xfb, 0xa6, 0xa8, 0xe7, 0x5c, 0x8f, 0x2a, 0x4f, 0x76, 0x15, 0xad,
-    0x1a, 0x58, 0xd7, 0x88, 0x84, 0x5f, 0xb4, 0x68, 0xc6, 0x3f, 0xf3, 0x13,
-    0xcf, 0x9b, 0xe0, 0x7d, 0x7b, 0x08, 0xd8, 0x20, 0xc7, 0xa7, 0xbd, 0x79,
-    0xb1, 0x55, 0xad, 0xd5, 0x39, 0xcf, 0x9b, 0xd0, 0x31, 0x3e, 0x59, 0xfd,
-    0x06, 0x43, 0x61, 0x14, 0x20, 0x18, 0x82, 0x77, 0x35, 0x63, 0x22, 0xc9,
-    0x61, 0xa8, 0xfc, 0x36, 0x57, 0xd3, 0x0f, 0xbe, 0xad, 0x2e, 0x65, 0x50,
-    0x6b, 0xe9, 0xc7, 0xd5, 0x73, 0x10, 0x3f, 0x0e, 0x14, 0xe9, 0x97, 0xca,
-    0x5b, 0x13, 0x94, 0x4a, 0xd6, 0xf5, 0x56, 0xf8, 0xc7, 0x7c, 0xf0, 0x32,
-    0xc6, 0xd8, 0xfe, 0x8b, 0x44, 0x03, 0x7a, 0x76, 0xc0, 0xf2, 0xd0, 0xf5,
-    0x60, 0x0c, 0x13, 0xdb, 0x4a, 0xc7, 0x69, 0x2b, 0xa5, 0xbe, 0x40, 0x04,
-    0x9e, 0xeb, 0xa6, 0x1a, 0x76, 0xc8, 0x8c, 0xf0, 0xbe, 0x54, 0x7e, 0x67,
-    0x46, 0xbc, 0x46, 0x74, 0xf0, 0xe4, 0x41, 0x98, 0x32, 0x26, 0x14, 0xee,
-    0xad, 0x07, 0x20, 0xa1, 0xfb, 0xd9, 0x6e, 0x24, 0x0c, 0x09, 0xfc, 0x6e,
-    0x5b, 0xaf, 0xea, 0x70, 0x48, 0x76, 0x2b, 0x12, 0x71, 0x79, 0x6a, 0x13,
-    0xcc, 0x02, 0x82, 0xe9, 0x30, 0xfa, 0xb7, 0xf5, 0x22, 0x61, 0x48, 0xc0,
-    0x70, 0xcb, 0x88, 0x40, 0x4c, 0x42, 0xdb, 0xe3, 0x2e, 0x98, 0xbe, 0x6f,
-    0x42, 0xec, 0xa1, 0x9c, 0x1e, 0xd9, 0x33, 0x0f, 0xbe, 0xff, 0xf6, 0x42,
-    0x30, 0x0b, 0x48, 0x18, 0x12, 0x70, 0xf7, 0xee, 0x29, 0xa9, 0x67, 0xe4,
-    0xec, 0x38, 0xd5, 0xa5, 0x8c, 0x4a, 0xfe, 0x6c, 0x7d, 0x09, 0x43, 0x02,
-    0x7d, 0x2f, 0xf6, 0x15, 0x6d, 0x54, 0x44, 0xce, 0x8e, 0x53, 0xfa, 0xb3,
-    0x34, 0x82, 0xe9, 0x30, 0x86, 0xdf, 0x3a, 0x08, 0x2f, 0x63, 0x4c, 0x5c,
-    0x20, 0x12, 0xbb, 0x45, 0x08, 0x66, 0x01, 0xa6, 0x27, 0x2d, 0xb0, 0x3c,
-    0xd5, 0xac, 0x7b, 0x23, 0x65, 0xf8, 0xbc, 0x17, 0x6d, 0x8f, 0xbb, 0x30,
-    0xe9, 0x68, 0x50, 0xf5, 0xc3, 0xf0, 0x61, 0x2f, 0xb8, 0x5b, 0x06, 0x45,
-    0xaf, 0xe8, 0x3f, 0x62, 0xe8, 0x7e, 0x56, 0x84, 0xc9, 0x60, 0x42, 0xe4,
-    0x56, 0x4c, 0xe9, 0x87, 0x6c, 0xb9, 0x4a, 0xfa, 0x71, 0x8f, 0x73, 0x25,
-    0x77, 0x1e, 0xb5, 0xea, 0x93, 0xe2, 0x12, 0x3a, 0x7e, 0x2c, 0x42, 0xb0,
-    0x38, 0x10, 0x7b, 0x2a, 0xd7, 0xcf, 0x0c, 0xfb, 0x4e, 0x91, 0x6e, 0x86,
-    0xad, 0x77, 0xe1, 0xd4, 0x96, 0x74, 0x45, 0x97, 0xa0, 0x9a, 0x14, 0x8c,
-    0xa5, 0xd0, 0x7c, 0xde, 0x00, 0xdc, 0x9a, 0xac, 0xba, 0x7e, 0xce, 0x20,
-    0xe0, 0xe0, 0x6f, 0x1f, 0x5e, 0xd6, 0x87, 0x5b, 0x56, 0xf0, 0xde, 0xe1,
-    0x2a, 0xbd, 0x3e, 0xe5, 0x81, 0x56, 0x37, 0x68, 0x57, 0xdd, 0x5d, 0x31,
-    0x58, 0x00, 0x70, 0x58, 0x8c, 0xa0, 0x9f, 0xd5, 0xa1, 0xf7, 0xd9, 0xea,
-    0x7d, 0xdd, 0x74, 0x46, 0x2a, 0xdb, 0x30, 0xcb, 0x02, 0x51, 0xd3, 0x4d,
-    0xa2, 0xe1, 0x0b, 0x44, 0xbe, 0x8b, 0x44, 0xc3, 0x17, 0x66, 0xa8, 0xe9,
-    0x26, 0x51, 0x35, 0x3b, 0x6a, 0x2b, 0xb8, 0xfc, 0xb1, 0x7a, 0xa6, 0x35,
-    0x48, 0x98, 0x7d, 0xb5, 0xf2, 0x69, 0xae, 0xa5, 0xa4, 0x89, 0x18, 0xaa,
-    0x3e, 0x6f, 0x7b, 0xf4, 0xf5, 0xd2, 0x4c, 0x3b, 0xf8, 0xce, 0x1d, 0x8a,
-    0xa7, 0x8b, 0x99, 0xdb, 0xc6, 0xbb, 0xd1, 0xfd, 0xf2, 0xd2, 0x4e, 0x1f,
-    0xf1, 0x0b, 0x44, 0x75, 0xdf, 0x02, 0x82, 0xd7, 0x53, 0x70, 0x7c, 0xc7,
-    0xa8, 0x79, 0xa8, 0x43, 0x24, 0xa2, 0xec, 0xf3, 0xe0, 0xf5, 0x14, 0x4c,
-    0x8f, 0x3e, 0x7c, 0xd7, 0x4e, 0x8f, 0xf1, 0x0b, 0x44, 0xc9, 0xd5, 0xc5,
-    0xae, 0x51, 0xe2, 0xda, 0x2c, 0x01, 0x46, 0x48, 0xf1, 0x08, 0x60, 0x6e,
-    0x84, 0x2d, 0x93, 0x40, 0xe3, 0x86, 0xa5, 0x9f, 0x13, 0x9e, 0xfc, 0xf4,
-    0x2a, 0x85, 0x0c, 0x16, 0xc4, 0xc2, 0x12, 0x06, 0x9d, 0x02, 0x38, 0x43,
-    0x0a, 0x75, 0xdf, 0xce, 0xb5, 0x27, 0xf2, 0xc5, 0x0d, 0xf2, 0x4c, 0x9b,
-    0x54, 0x25, 0x05, 0xa7, 0x00, 0x91, 0xab, 0xed, 0x9b, 0xbf, 0xf9, 0x9b,
-    0xb3, 0x74, 0x3a, 0x63, 0x84, 0x14, 0xc8, 0x3d, 0x31, 0x5a, 0x05, 0x0c,
-    0x7d, 0x2f, 0x27, 0x8f, 0xe1, 0xf8, 0x2c, 0x55, 0xf4, 0x25, 0xe7, 0x6a,
-    0x5b, 0x6c, 0xd5, 0x92, 0x42, 0x09, 0x60, 0xd3, 0x91, 0xca, 0x3e, 0xf6,
-    0xd5, 0xd7, 0x5f, 0x28, 0xd9, 0x21, 0xeb, 0xf6, 0x9d, 0xa2, 0x5a, 0xca,
-    0x55, 0x83, 0xd1, 0x0b, 0x44, 0x9e, 0xe9, 0x9c, 0x7e, 0xb4, 0x57, 0x7d,
-    0x6c, 0xb2, 0x7d, 0x81, 0x68, 0xcd, 0x1f, 0x8a, 0xf5, 0x1f, 0xdf, 0xee,
-    0x46, 0xb2, 0xc4, 0xe2, 0xb1, 0x1a, 0x14, 0x89, 0xc8, 0xf8, 0x96, 0xfc,
-    0xf5, 0xb3, 0x2d, 0x63, 0x84, 0xff, 0x65, 0xb5, 0x2f, 0xcd, 0xce, 0x14,
-    0x9f, 0x53, 0x9e, 0x72, 0x1a, 0x61, 0x7a, 0x54, 0xff, 0xa9, 0xac, 0x9c,
-    0xc1, 0x12, 0xf5, 0x44, 0xd5, 0x72, 0x39, 0xab, 0x80, 0x83, 0xff, 0x92,
-    0x23, 0x8c, 0xcc, 0xa7, 0x44, 0x3d, 0xe7, 0xb5, 0xdf, 0x57, 0xaf, 0x29,
-    0x86, 0xee, 0xe7, 0xaa, 0x3b, 0xee, 0x29, 0x12, 0x91, 0xfb, 0x64, 0x10,
-    0xa7, 0xe7, 0xb5, 0x4f, 0x03, 0xe6, 0xf7, 0xf3, 0xaa, 0x8a, 0xf1, 0xd1,
-    0xa4, 0xf4, 0x4f, 0x33, 0x58, 0x00, 0xb0, 0x9b, 0x80, 0x99, 0x5d, 0xee,
-    0x8a, 0xf1, 0xda, 0x72, 0x1d, 0x50, 0x6b, 0xb9, 0x6a, 0xd0, 0x33, 0xed,
-    0x57, 0xc9, 0x1b, 0xfc, 0x24, 0xa2, 0x7a, 0xde, 0xf9, 0x9f, 0x41, 0xcd,
-    0x7a, 0xb7, 0x9e, 0xf0, 0xc3, 0x77, 0x9c, 0x88, 0xaf, 0xd1, 0x45, 0x19,
-    0xbe, 0x14, 0x43, 0x3a, 0x23, 0x2c, 0x6e, 0xb0, 0xa4, 0xd4, 0xed, 0x7d,
-    0x10, 0x9a, 0xed, 0x95, 0x96, 0xd0, 0x4e, 0x09, 0x40, 0x8a, 0x2f, 0x96,
-    0x9b, 0x8e, 0x4a, 0xaa, 0x38, 0x79, 0xd7, 0x0f, 0x00, 0xa7, 0x59, 0xfb,
-    0x7d, 0x79, 0xa6, 0x2d, 0x70, 0xff, 0xe9, 0xa3, 0x8a, 0xf1, 0x72, 0x91,
-    0x88, 0x2c, 0xef, 0x4e, 0xe0, 0x74, 0xd4, 0xaa, 0x29, 0x67, 0x7c, 0xbb,
-    0x9a, 0x18, 0x2a, 0xfa, 0xb4, 0xb3, 0xaf, 0x6a, 0xef, 0x74, 0x2d, 0x25,
-    0x45, 0xbe, 0x02, 0xfa, 0xa6, 0x01, 0x7f, 0x89, 0xa8, 0x94, 0x62, 0xb8,
-    0x65, 0xf4, 0x2a, 0xd7, 0xe1, 0xb5, 0x96, 0xab, 0x06, 0x8b, 0xe4, 0x99,
-    0x1b, 0x0b, 0x5e, 0xb4, 0xa3, 0x64, 0xfd, 0x81, 0xb8, 0x1f, 0xcd, 0x1f,
-    0xcb, 0xf7, 0x46, 0xe8, 0xad, 0xd7, 0xc6, 0xab, 0xcf, 0x86, 0xe4, 0x3f,
-    0x0f, 0x5e, 0x2f, 0xd6, 0x4b, 0x66, 0xa8, 0xa5, 0x0d, 0x50, 0xc4, 0xb5,
-    0xe5, 0x06, 0xaf, 0xe7, 0xf2, 0x25, 0x57, 0x33, 0xd6, 0xf1, 0x12, 0x63,
-    0x7f, 0x7b, 0xc5, 0x0d, 0xce, 0x50, 0xdc, 0xee, 0xec, 0x37, 0x7f, 0xae,
-    0xdb, 0xda, 0x86, 0xdb, 0x74, 0x53, 0x9e, 0x41, 0xe2, 0x5c, 0x71, 0xbf,
-    0x99, 0xb9, 0x20, 0x68, 0x6f, 0xf1, 0x0c, 0xb5, 0xca, 0x9c, 0xd6, 0x66,
-    0x06, 0xc4, 0x25, 0xd8, 0xbe, 0x7b, 0x6f, 0x7c, 0xd8, 0xc6, 0x47, 0x00,
-    0xcf, 0x87, 0x7e, 0xbc, 0x70, 0x32, 0x05, 0xf6, 0xc7, 0x09, 0x1c, 0x4c,
-    0x00, 0x89, 0xaf, 0xe7, 0x55, 0x79, 0xec, 0x26, 0xc0, 0xd5, 0xaa, 0x3d,
-    0x82, 0x6d, 0xbc, 0xfb, 0xbe, 0x31, 0x6d, 0x91, 0xbc, 0xb8, 0x9a, 0x69,
-    0x11, 0xd3, 0xae, 0x37, 0x8b, 0xe1, 0x69, 0x3f, 0x9a, 0x8f, 0xa5, 0x90,
-    0xb8, 0x36, 0xab, 0xcf, 0x70, 0xe3, 0x91, 0x92, 0xed, 0x70, 0x7c, 0xa7,
-    0x58, 0x2f, 0xc4, 0x25, 0x08, 0xe6, 0xa5, 0x0d, 0x50, 0xc1, 0xac, 0x2d,
-    0xd7, 0xf1, 0x9d, 0xe2, 0xfc, 0xd3, 0xdf, 0x66, 0x2c, 0xf5, 0x1b, 0x37,
-    0x6c, 0x99, 0x70, 0x51, 0xfe, 0x74, 0x46, 0x40, 0xc3, 0x21, 0x3f, 0x06,
-    0xdf, 0xb9, 0x43, 0xbe, 0x8b, 0x7f, 0xa3, 0xc4, 0x35, 0x79, 0x71, 0x3c,
-    0xf8, 0xce, 0x1d, 0x7a, 0xec, 0x7d, 0xbf, 0x32, 0x83, 0xe4, 0x97, 0xeb,
-    0x35, 0xc5, 0x10, 0xfb, 0x65, 0x8b, 0xe6, 0x9a, 0x61, 0x95, 0x68, 0x5b,
-    0xfc, 0x08, 0xb1, 0x70, 0x44, 0x59, 0x05, 0x84, 0x5a, 0x8b, 0x0d, 0x2e,
-    0x96, 0x02, 0x5a, 0xce, 0x00, 0xec, 0x43, 0x80, 0xbd, 0xe5, 0x07, 0xfb,
-    0x20, 0x05, 0xf6, 0x41, 0x71, 0xbe, 0x8a, 0x69, 0xb3, 0x4b, 0xae, 0xa7,
-    0xde, 0x81, 0x3d, 0x47, 0xe4, 0x7b, 0x0f, 0xd8, 0x07, 0xea, 0x0f, 0x10,
-    0x27, 0xbe, 0x0b, 0xe0, 0x71, 0x57, 0x91, 0x7e, 0x16, 0x63, 0x05, 0xc3,
-    0xba, 0x8f, 0x4c, 0x2b, 0x58, 0xb4, 0xeb, 0x2d, 0x8c, 0x7e, 0x34, 0x07,
-    0x80, 0xe0, 0x65, 0x1d, 0x8c, 0x6b, 0x6e, 0x2c, 0xd9, 0x0e, 0x94, 0x60,
-    0xda, 0xc2, 0x01, 0xa5, 0x1b, 0xe3, 0x11, 0xed, 0x76, 0x5c, 0xd7, 0xce,
-    0xef, 0x65, 0x8c, 0xf9, 0x5f, 0x7e, 0x86, 0xed, 0x77, 0x1a, 0x35, 0xcb,
-    0xc5, 0xd3, 0x93, 0x18, 0x88, 0x99, 0x30, 0x70, 0xcc, 0x0f, 0x4f, 0xc2,
-    0x82, 0x78, 0x7a, 0xb2, 0x28, 0x1f, 0x67, 0x15, 0x40, 0x3b, 0x8c, 0xe8,
-    0x7e, 0x6e, 0x13, 0x2b, 0xf5, 0xe5, 0xc2, 0x2a, 0x40, 0x3d, 0x82, 0xb3,
-    0xe8, 0x7a, 0x20, 0xa6, 0xfa, 0x48, 0xb1, 0x2f, 0x10, 0x01, 0x7b, 0x7b,
-    0x1e, 0xeb, 0xde, 0xf3, 0x63, 0xf2, 0xb3, 0x14, 0x30, 0xed, 0x07, 0x16,
-    0x47, 0xc8, 0xf8, 0x93, 0x85, 0x16, 0x59, 0x45, 0xba, 0x3e, 0x5d, 0x5c,
-    0x6f, 0xdc, 0x0a, 0xf6, 0x96, 0x1f, 0xa9, 0x2c, 0xe9, 0x3e, 0x08, 0xb8,
-    0x10, 0x2d, 0xca, 0xd7, 0xfb, 0xa3, 0x0a, 0x86, 0x75, 0x1f, 0x99, 0x56,
-    0xaa, 0xc0, 0xb4, 0xf9, 0xd8, 0x79, 0x26, 0x85, 0xc1, 0xb3, 0x33, 0xd5,
-    0x19, 0x6e, 0x19, 0xa6, 0x45, 0x09, 0xa6, 0x45, 0xe1, 0x80, 0xd2, 0x89,
-    0x30, 0x37, 0x6a, 0xcb, 0xd5, 0x60, 0xda, 0x7c, 0xec, 0x78, 0x8a, 0xb1,
-    0x29, 0x27, 0xc0, 0xe9, 0x3c, 0x6b, 0x62, 0xe3, 0xdd, 0xb8, 0xf1, 0x53,
-    0x23, 0x62, 0x15, 0x16, 0x8f, 0xab, 0x7a, 0x7f, 0xa4, 0x1e, 0xc1, 0x59,
-    0xcc, 0xdf, 0xe9, 0x62, 0x7f, 0x9c, 0x90, 0x77, 0xae, 0xe6, 0x8a, 0x47,
-    0x06, 0xcc, 0x02, 0x32, 0x19, 0xe8, 0x4f, 0xa5, 0x18, 0x89, 0x17, 0xf0,
-    0xf0, 0x01, 0x3f, 0x42, 0x8b, 0x3b, 0x9c, 0x43, 0x4f, 0xdb, 0x35, 0xf2,
-    0x2d, 0x5f, 0xa6, 0x2d, 0x6c, 0x97, 0xad, 0xc9, 0x8d, 0xf1, 0xed, 0x46,
-    0xd0, 0x5e, 0x37, 0x8e, 0xbe, 0xfe, 0x30, 0xa3, 0xbd, 0x6e, 0xec, 0x77,
-    0x26, 0xc0, 0x59, 0xe5, 0xe7, 0x23, 0x29, 0x0b, 0xfa, 0xfe, 0x63, 0xaa,
-    0xe2, 0x62, 0xa5, 0x1c, 0xd3, 0xde, 0x4f, 0x9f, 0xb6, 0x14, 0x9a, 0x1e,
-    0x7d, 0x98, 0xa5, 0x76, 0x18, 0x95, 0x76, 0x56, 0x5a, 0x3b, 0x99, 0x6d,
-    0x2e, 0x84, 0x76, 0xc8, 0x3e, 0x72, 0x25, 0xbd, 0x56, 0x8d, 0xad, 0x66,
-    0x4c, 0xd3, 0xf2, 0x17, 0x13, 0xfb, 0xe3, 0x04, 0x70, 0xcb, 0x51, 0x76,
-    0x84, 0xb8, 0x73, 0x5f, 0x78, 0x54, 0x9f, 0x2a, 0x30, 0xd2, 0xa6, 0x23,
-    0x7e, 0xd8, 0xc7, 0x80, 0x75, 0x27, 0xd5, 0xff, 0xcf, 0x25, 0xa5, 0x8a,
-    0x61, 0x9c, 0xfb, 0xc9, 0xb4, 0x85, 0xed, 0x9a, 0x7a, 0x1a, 0x68, 0xdc,
-    0xc0, 0x94, 0xa9, 0xce, 0xcb, 0x18, 0xeb, 0x78, 0xea, 0x31, 0x76, 0xe3,
-    0xa7, 0x46, 0xb4, 0x6d, 0x91, 0x7d, 0xf6, 0xd3, 0x51, 0x2b, 0xec, 0x87,
-    0xa5, 0xb2, 0xa7, 0xd7, 0x4e, 0x7f, 0x1e, 0x2a, 0xd9, 0x8e, 0xe5, 0xe0,
-    0xd3, 0x6a, 0xbe, 0x87, 0x47, 0x74, 0x9c, 0xd3, 0x8e, 0x49, 0xc0, 0xb7,
-    0xaa, 0x93, 0xbb, 0x4a, 0x00, 0xd0, 0x66, 0x2d, 0xf6, 0x41, 0x7c, 0x51,
-    0x80, 0xbd, 0x3d, 0x01, 0xd4, 0x97, 0x5e, 0x0d, 0x03, 0xd2, 0xa2, 0x6f,
-    0x5a, 0x43, 0xaa, 0xc2, 0xf7, 0x0b, 0x7f, 0xe9, 0x07, 0x0c, 0xea, 0xbb,
-    0xc3, 0x86, 0xb6, 0x94, 0x5f, 0x84, 0xdd, 0x6f, 0xa6, 0xcd, 0xf7, 0x69,
-    0x9d, 0xe6, 0x70, 0x49, 0xe6, 0x48, 0xae, 0x66, 0xcc, 0xf5, 0x43, 0xc6,
-    0xc6, 0xb7, 0xcb, 0x51, 0x92, 0xb0, 0xc1, 0x06, 0xf6, 0x86, 0x1f, 0xfc,
-    0x17, 0xf2, 0x69, 0xb4, 0x6c, 0x3e, 0x91, 0x88, 0x26, 0x3f, 0x25, 0xf2,
-    0x24, 0x4a, 0x47, 0x0f, 0x96, 0x8b, 0x4f, 0x9b, 0x8f, 0xd9, 0xb8, 0x72,
-    0x35, 0x3b, 0x9c, 0x80, 0x84, 0x38, 0xe7, 0xa8, 0x38, 0x70, 0x15, 0xa6,
-    0x95, 0x00, 0xf8, 0x5f, 0x44, 0x91, 0xe5, 0x77, 0x9e, 0xf4, 0x03, 0x73,
-    0xe5, 0x19, 0x16, 0x10, 0x80, 0xaf, 0xd4, 0xdf, 0xff, 0x54, 0x9d, 0x74,
-    0xf8, 0x7e, 0xf9, 0x68, 0xe1, 0x52, 0x95, 0x0d, 0xab, 0x4c, 0x79, 0xc3,
-    0xed, 0x3b, 0x4b, 0xda, 0xca, 0xd5, 0xeb, 0xd3, 0x56, 0x92, 0x97, 0xdc,
-    0xc0, 0xd8, 0x8d, 0x5f, 0xbb, 0xc1, 0x25, 0xe5, 0xff, 0xd9, 0x7a, 0xc2,
-    0x0f, 0x76, 0x28, 0x85, 0x75, 0xfb, 0x4e, 0xd1, 0xce, 0x7d, 0xb3, 0xc4,
-    0xde, 0xf0, 0xa3, 0xe7, 0x7c, 0xf1, 0x79, 0x67, 0x55, 0x7b, 0xef, 0x91,
-    0x4f, 0x9b, 0xe6, 0xf5, 0xfb, 0xb4, 0x7c, 0xde, 0x65, 0x85, 0x5a, 0x51,
-    0x81, 0x72, 0x18, 0x4e, 0xca, 0xe1, 0xb1, 0xa6, 0x9b, 0xe5, 0x0d, 0x77,
-    0x95, 0x00, 0x79, 0xca, 0x32, 0xdb, 0x8a, 0x57, 0xe9, 0xd5, 0xe0, 0xe8,
-    0x66, 0x47, 0x69, 0xc3, 0x2c, 0x97, 0xaa, 0x60, 0xda, 0x42, 0x74, 0x9a,
-    0x8d, 0x55, 0x6d, 0x89, 0x96, 0x93, 0x93, 0xca, 0xd4, 0xdd, 0x53, 0xa6,
-    0x55, 0xb7, 0xab, 0x3a, 0xb9, 0x93, 0x0f, 0xc9, 0xe1, 0x22, 0xad, 0x38,
-    0x67, 0x35, 0x33, 0x46, 0xe4, 0xab, 0x62, 0xbd, 0x60, 0x16, 0x20, 0x05,
-    0x6a, 0x6f, 0xa7, 0x00, 0xc0, 0x7f, 0x7e, 0x42, 0x53, 0x6e, 0xa9, 0x55,
-    0xbd, 0xe5, 0x1a, 0x51, 0xe3, 0x7f, 0xcd, 0x63, 0xeb, 0x09, 0x6d, 0x86,
-    0xb5, 0xf1, 0x46, 0x4c, 0xed, 0x90, 0x7d, 0xfa, 0xf1, 0xed, 0x6e, 0x98,
-    0xb9, 0x60, 0x51, 0xbe, 0x34, 0x2f, 0xe0, 0xb1, 0xf7, 0xfd, 0x48, 0x5c,
-    0x54, 0xcf, 0x38, 0x45, 0x4c, 0x2b, 0x00, 0x18, 0x34, 0x27, 0x51, 0x0b,
-    0xf3, 0x8d, 0x7d, 0x1e, 0x2a, 0x69, 0x97, 0x65, 0x53, 0xc1, 0xce, 0x52,
-    0x35, 0x28, 0xfd, 0xbc, 0x4a, 0xc3, 0x2a, 0x23, 0xe7, 0xb1, 0xf7, 0xfd,
-    0x08, 0x5e, 0x26, 0x4a, 0x5c, 0x9b, 0xad, 0xbc, 0xf8, 0xd1, 0x40, 0x7d,
-    0x3e, 0x6d, 0xf5, 0x72, 0xbd, 0xac, 0x74, 0x9c, 0x53, 0x0b, 0xf3, 0xcb,
-    0xd7, 0x7d, 0x9b, 0x31, 0xad, 0x78, 0x7b, 0x20, 0x9e, 0xaa, 0xf9, 0xfa,
-    0xd4, 0xc1, 0xb3, 0x33, 0x14, 0x4f, 0x17, 0xcf, 0xb4, 0x5d, 0xc6, 0xe2,
-    0x6f, 0xf4, 0x44, 0x92, 0xe3, 0xae, 0xec, 0x58, 0x0a, 0xf1, 0xf0, 0x64,
-    0x91, 0x1e, 0x36, 0xde, 0x8d, 0x29, 0x27, 0xe0, 0x7f, 0x99, 0xb1, 0xe8,
-    0xa3, 0xb2, 0x4f, 0x9f, 0xdc, 0xc0, 0x98, 0xf4, 0xab, 0xad, 0x6c, 0xc8,
-    0x9a, 0xd6, 0x8c, 0x32, 0x0c, 0x04, 0xfc, 0x30, 0xbe, 0x9f, 0xc2, 0xe4,
-    0xa7, 0x57, 0x8b, 0xf4, 0x57, 0xee, 0x3d, 0x70, 0x6c, 0x5c, 0xc7, 0x9c,
-    0xe6, 0xb0, 0x6e, 0xa6, 0x9d, 0xac, 0xaf, 0xe1, 0x3c, 0x6d, 0x0c, 0xba,
-    0xeb, 0x71, 0x3a, 0xab, 0xbf, 0x1a, 0xa9, 0x92, 0xbc, 0x91, 0x33, 0x7e,
-    0x34, 0x07, 0x00, 0xf6, 0x86, 0x1f, 0x3b, 0x8f, 0xcf, 0xd2, 0xba, 0x7d,
-    0xa7, 0xa8, 0x14, 0x26, 0x2e, 0x12, 0x45, 0xf2, 0xbe, 0x2c, 0xd0, 0x1b,
-    0xa7, 0xd5, 0x63, 0x28, 0xd9, 0x38, 0x67, 0x97, 0x4d, 0x3b, 0xce, 0x59,
-    0x4e, 0x6e, 0xec, 0x97, 0x2d, 0x9a, 0x4c, 0x3d, 0x10, 0x33, 0x41, 0x3c,
-    0x4e, 0xe4, 0xba, 0x5d, 0xf9, 0x94, 0x9b, 0x65, 0x41, 0xce, 0x27, 0xbc,
-    0x33, 0x4e, 0x23, 0xa9, 0xe2, 0xaf, 0xb3, 0x6d, 0x7c, 0x18, 0xde, 0x56,
-    0x7b, 0x91, 0xc1, 0x5a, 0xde, 0x9d, 0x40, 0xa1, 0xcf, 0x9d, 0xc5, 0xf1,
-    0xed, 0xf2, 0x21, 0xa5, 0x52, 0x33, 0xa4, 0xeb, 0x87, 0xeb, 0x58, 0xea,
-    0x15, 0x23, 0x6c, 0x4d, 0xc5, 0x3b, 0xa0, 0xe9, 0x8c, 0x84, 0x9e, 0x28,
-    0x07, 0xf1, 0x38, 0xa9, 0x08, 0x46, 0x75, 0xc3, 0x8c, 0x48, 0xb2, 0x2f,
-    0xa2, 0x77, 0x32, 0xa1, 0xbd, 0xfa, 0xb6, 0x7a, 0xf5, 0xde, 0x87, 0xc0,
-    0x19, 0x04, 0x44, 0x5e, 0x31, 0x54, 0x7d, 0x6a, 0x68, 0xe7, 0xbe, 0x59,
-    0xaa, 0x7d, 0x52, 0xd4, 0xc6, 0xec, 0xa9, 0xb2, 0x75, 0x05, 0xa7, 0xe2,
-    0xf6, 0x3b, 0x13, 0xe8, 0x78, 0xea, 0x31, 0x45, 0xaf, 0xfc, 0xfb, 0x23,
-    0x9c, 0x66, 0x37, 0x3a, 0x5e, 0xaa, 0xed, 0x90, 0x4c, 0xf0, 0xf2, 0x55,
-    0xea, 0x3c, 0xc3, 0x55, 0xd4, 0x47, 0xcb, 0x80, 0xe2, 0x69, 0x47, 0xc9,
-    0x72, 0x4e, 0x73, 0x18, 0x46, 0xab, 0x00, 0x5b, 0x26, 0xb2, 0x18, 0x87,
-    0x8d, 0x40, 0x8a, 0x35, 0x22, 0x9d, 0x29, 0xff, 0x9b, 0x19, 0x4e, 0x73,
-    0x18, 0xd2, 0xcf, 0x73, 0xae, 0x01, 0xbf, 0x40, 0x34, 0x10, 0x07, 0x3c,
-    0x27, 0xb4, 0xdf, 0x23, 0x67, 0x90, 0x10, 0x79, 0xc5, 0x8d, 0xc9, 0x87,
-    0x74, 0xdc, 0xc1, 0x76, 0x99, 0x68, 0xe4, 0x4c, 0x65, 0x79, 0xaa, 0xfb,
-    0x69, 0xbd, 0x4c, 0xde, 0x43, 0xd6, 0xc3, 0x80, 0x30, 0x0b, 0xe8, 0x0b,
-    0x44, 0xb4, 0x6c, 0xb3, 0x64, 0x1a, 0x29, 0xe1, 0x2b, 0x95, 0xc2, 0xa1,
-    0x2d, 0x46, 0x5d, 0xc7, 0xdc, 0x7a, 0x9b, 0x62, 0xba, 0x99, 0xbc, 0x1c,
-    0xee, 0x77, 0x26, 0x14, 0xf9, 0x4e, 0xa7, 0xba, 0x7f, 0xfa, 0x9f, 0x54,
-    0x33, 0xed, 0xd0, 0x4f, 0x72, 0x71, 0x65, 0xbb, 0xa9, 0xf6, 0x61, 0xe2,
-    0xd8, 0xb8, 0x8e, 0xd1, 0x0e, 0x6d, 0x06, 0xb2, 0xf1, 0xe1, 0x92, 0x4c,
-    0x2d, 0xfd, 0x6a, 0x2b, 0x1b, 0xdd, 0x66, 0x44, 0xaf, 0x46, 0x39, 0x40,
-    0x42, 0x00, 0x36, 0x9c, 0x3e, 0xef, 0x57, 0x76, 0xa6, 0x06, 0x62, 0x26,
-    0x04, 0xe2, 0x7e, 0x84, 0x0d, 0xda, 0x37, 0xbc, 0x0f, 0x6d, 0x71, 0x63,
-    0x6a, 0x87, 0x11, 0xde, 0x97, 0x9e, 0x51, 0xed, 0x50, 0x8d, 0xfc, 0x65,
-    0xd1, 0x60, 0x35, 0xfa, 0xcb, 0x69, 0x0e, 0x23, 0xf5, 0x1b, 0x7d, 0x06,
-    0x2b, 0x00, 0x70, 0x6c, 0x64, 0xec, 0xce, 0xbf, 0x69, 0xfb, 0xf6, 0x69,
-    0x5e, 0xde, 0x0a, 0x76, 0xdd, 0x26, 0xd2, 0xbc, 0x9f, 0xb6, 0x9c, 0xc5,
-    0x6b, 0xa2, 0x41, 0xc0, 0xd4, 0x8b, 0xf2, 0x81, 0xee, 0x4a, 0x49, 0xef,
-    0xdd, 0x5e, 0x5d, 0xb6, 0x18, 0xfa, 0x9f, 0xd7, 0x7f, 0x9b, 0x61, 0xe1,
-    0xb9, 0xd7, 0x5a, 0xb1, 0xd2, 0x79, 0xd9, 0x52, 0xcf, 0x13, 0x5f, 0xdf,
-    0xbd, 0xdf, 0x90, 0xa8, 0xf5, 0x7c, 0xae, 0x48, 0x44, 0xbe, 0xcf, 0x62,
-    0x88, 0x71, 0x16, 0xe5, 0x7c, 0x6a, 0x2c, 0xad, 0xcd, 0xc4, 0x36, 0x3e,
-    0x0c, 0xce, 0x20, 0xc0, 0x58, 0x17, 0x84, 0xed, 0x47, 0x0e, 0xd8, 0x32,
-    0x09, 0xb4, 0xac, 0x37, 0x95, 0x74, 0xc9, 0x82, 0x97, 0xaf, 0x92, 0x37,
-    0x6c, 0x41, 0x38, 0x29, 0x47, 0x09, 0xb2, 0x0c, 0xde, 0xc5, 0x2d, 0xfd,
-    0x1c, 0xaf, 0x48, 0x44, 0xc3, 0x97, 0x62, 0xf0, 0x47, 0x65, 0x3b, 0x09,
-    0xc4, 0x6d, 0x30, 0x73, 0x41, 0x58, 0xb8, 0x16, 0xf8, 0xb6, 0xcd, 0x97,
-    0xb8, 0x9f, 0x76, 0x81, 0xc8, 0xfe, 0x31, 0x10, 0x9e, 0xd6, 0xf1, 0xed,
-    0xd8, 0x66, 0x17, 0xa6, 0xbe, 0x57, 0x07, 0x47, 0xde, 0x25, 0x13, 0x85,
-    0xe9, 0xe0, 0x34, 0xb0, 0xe7, 0x4a, 0xf5, 0xf7, 0xd3, 0xea, 0xb9, 0x2d,
-    0x71, 0x05, 0xbf, 0x39, 0x58, 0xf2, 0x26, 0x70, 0x7e, 0x81, 0xa8, 0xf9,
-    0x18, 0x74, 0xff, 0xd6, 0x82, 0xeb, 0x71, 0xed, 0x8f, 0x1d, 0xed, 0x63,
-    0x41, 0x84, 0xbf, 0xb4, 0x56, 0x2d, 0xa7, 0xcd, 0x1a, 0x85, 0xff, 0x45,
-    0xc7, 0xb2, 0xbf, 0xe8, 0x78, 0x05, 0xff, 0xf9, 0x58, 0xf1, 0x77, 0xc4,
-    0x0c, 0x97, 0x89, 0x3a, 0xcf, 0xd4, 0xf6, 0xb5, 0x6e, 0xad, 0xd8, 0x65,
-    0xac, 0xcd, 0x25, 0x58, 0xc1, 0x6f, 0x06, 0x56, 0xf5, 0x3b, 0x62, 0x4d,
-    0x37, 0xe5, 0x6b, 0x40, 0xd3, 0x99, 0x7b, 0xab, 0x12, 0x67, 0x10, 0x30,
-    0xb4, 0xa5, 0xba, 0x7b, 0x68, 0x57, 0xf0, 0x9b, 0x8b, 0x55, 0xfd, 0x8e,
-    0x58, 0xf6, 0x80, 0x6f, 0x2d, 0x71, 0x5c, 0x3d, 0x71, 0xd8, 0xd4, 0x2b,
-    0xc6, 0x15, 0x83, 0x5d, 0xc1, 0x8a, 0xa8, 0xfb, 0xb7, 0x71, 0x13, 0xd7,
-    0x66, 0xa9, 0x3f, 0x60, 0x44, 0x20, 0x7e, 0x77, 0xee, 0x9d, 0x2d, 0x8c,
-    0xff, 0xdd, 0xef, 0x0e, 0x59, 0xc1, 0xe5, 0x8f, 0x35, 0xfd, 0x36, 0xae,
-    0x04, 0x39, 0x2c, 0xd1, 0xf7, 0x21, 0xe0, 0xcf, 0xcc, 0xcb, 0x5b, 0x77,
-    0x66, 0xa1, 0x6a, 0x9f, 0xd5, 0x9c, 0x0e, 0x62, 0x68, 0x4b, 0x0b, 0x5a,
-    0x78, 0xa8, 0x6e, 0x68, 0x59, 0xc1, 0x15, 0xac, 0x06, 0x97, 0xf4, 0x2b,
-    0xe4, 0xf9, 0x06, 0xec, 0xfb, 0x2c, 0x06, 0x0b, 0x67, 0x81, 0xe7, 0x7f,
-    0x82, 0x48, 0xcd, 0xab, 0xe3, 0x80, 0xd9, 0x1d, 0x18, 0xf1, 0x07, 0x8d,
-    0x00, 0x56, 0x7e, 0x03, 0x77, 0x05, 0x97, 0x86, 0xff, 0x07, 0xeb, 0x01,
-    0x34, 0x67, 0x1a, 0xc4, 0xce, 0x23, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45,
-    0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
+    0x08, 0x06, 0x00, 0x00, 0x00, 0x63, 0x57, 0xfa, 0xde, 0x00, 0x00, 0x13,
+    0x1e, 0x49, 0x44, 0x41, 0x54, 0x78, 0x9c, 0xed, 0x5d, 0x7f, 0x68, 0x1b,
+    0x57, 0x9e, 0xff, 0x3c, 0x73, 0x5b, 0xe4, 0xe0, 0x2d, 0x52, 0xd9, 0x16,
+    0x29, 0xd0, 0x62, 0x97, 0x26, 0x58, 0xde, 0x63, 0x41, 0xda, 0x18, 0x1a,
+    0x85, 0x0d, 0x91, 0x7a, 0x85, 0xad, 0x1c, 0x17, 0x3a, 0xba, 0x5d, 0x88,
+    0xed, 0xdd, 0x52, 0x29, 0x49, 0xc9, 0x3a, 0x77, 0x4b, 0x6b, 0xa7, 0x70,
+    0xe4, 0x47, 0x71, 0xec, 0x72, 0x24, 0x8e, 0x12, 0x72, 0x67, 0xef, 0xe2,
+    0x24, 0x72, 0x30, 0xb5, 0x65, 0xc8, 0x46, 0x2a, 0x38, 0xb6, 0x73, 0x64,
+    0xb1, 0x54, 0x7c, 0xc8, 0x5e, 0x92, 0x5a, 0x2a, 0x59, 0x2c, 0x19, 0xa7,
+    0xd8, 0xc1, 0x59, 0x6c, 0xe3, 0x2e, 0xb6, 0xd0, 0x1a, 0xd7, 0x98, 0x83,
+    0xef, 0xfd, 0x31, 0xd6, 0x48, 0x23, 0xcd, 0x48, 0x33, 0x92, 0xb3, 0x4d,
+    0xb7, 0x7a, 0x60, 0x3e, 0x4d, 0xe7, 0xbd, 0xef, 0xfb, 0x7e, 0xdf, 0x7c,
+    0xdf, 0xe7, 0x7d, 0xdf, 0x77, 0xde, 0x8c, 0xb0, 0x0a, 0xe0, 0x06, 0x80,
+    0x9d, 0x42, 0x22, 0x22, 0x5a, 0x20, 0x22, 0x22, 0x0a, 0x6d, 0x23, 0x6d,
+    0x11, 0xed, 0x74, 0x3f, 0x25, 0xfc, 0xfe, 0x62, 0xd1, 0x0e, 0x3a, 0x3c,
+    0xbb, 0x48, 0xa1, 0x05, 0x22, 0x53, 0xcf, 0x18, 0xa1, 0x8d, 0x08, 0x6d,
+    0xb7, 0x65, 0xd1, 0xda, 0x47, 0xd4, 0x72, 0x6f, 0x8a, 0x88, 0x88, 0xbe,
+    0x6d, 0xc3, 0x4b, 0xf8, 0xdd, 0xc5, 0x82, 0x1a, 0x4e, 0xaf, 0x10, 0x0d,
+    0xcf, 0x12, 0x69, 0x2f, 0xdc, 0x26, 0xdc, 0xda, 0x76, 0x4c, 0x95, 0xa8,
+    0x1d, 0x22, 0x72, 0x0e, 0x51, 0xc9, 0x81, 0x4b, 0xa8, 0x1a, 0x55, 0x35,
+    0x20, 0x22, 0xb2, 0xf6, 0xe5, 0x67, 0x54, 0xb5, 0x68, 0xed, 0x23, 0x5a,
+    0x4c, 0x6c, 0x94, 0x42, 0x88, 0x12, 0x2a, 0x42, 0x45, 0x15, 0x69, 0x8b,
+    0x8f, 0x4f, 0x0b, 0x61, 0x54, 0x35, 0xd8, 0x3e, 0x3e, 0x5d, 0x72, 0xdc,
+    0x12, 0xe6, 0xc5, 0xbc, 0x15, 0xa6, 0x57, 0x56, 0xc9, 0xd4, 0xb3, 0xb3,
+    0xcc, 0x9a, 0x0b, 0x4d, 0x3d, 0x63, 0xa5, 0x90, 0xa1, 0x84, 0x39, 0x31,
+    0x67, 0x05, 0x5a, 0x21, 0xd2, 0x0e, 0x3d, 0x7d, 0x86, 0xcd, 0x44, 0xed,
+    0x85, 0xdb, 0x25, 0xc7, 0x2d, 0xa1, 0x2c, 0xca, 0x5e, 0x98, 0x5e, 0x59,
+    0x25, 0xed, 0x85, 0x02, 0x18, 0xb3, 0x7b, 0x98, 0xd0, 0x43, 0x84, 0x9e,
+    0x31, 0x42, 0x0f, 0x91, 0xdd, 0xcf, 0x67, 0x0b, 0x6e, 0x47, 0x17, 0x29,
+    0xb4, 0xa8, 0x5c, 0xce, 0x4e, 0x38, 0x2e, 0x11, 0x51, 0x57, 0xcf, 0x0d,
+    0x72, 0x1e, 0x73, 0x66, 0xfd, 0x75, 0xba, 0x3b, 0x89, 0x66, 0x89, 0x16,
+    0x17, 0x17, 0xbf, 0x33, 0x21, 0x09, 0x11, 0xd1, 0xf0, 0xd0, 0x30, 0xd1,
+    0xc6, 0xce, 0x4d, 0xe8, 0x8d, 0xc4, 0x06, 0x75, 0xba, 0x3b, 0xc9, 0x79,
+    0xcc, 0x49, 0xfb, 0x0f, 0x59, 0xc9, 0x79, 0xcc, 0x49, 0x34, 0x5b, 0x98,
+    0xfc, 0xa7, 0xa1, 0x9f, 0x14, 0xee, 0x0c, 0xc3, 0x5e, 0xb8, 0x4d, 0x73,
+    0xab, 0x44, 0x94, 0xa0, 0x9c, 0x25, 0x34, 0x47, 0x7f, 0x17, 0xc6, 0xa5,
+    0x04, 0xd1, 0xd4, 0xad, 0x69, 0x32, 0xee, 0x33, 0xd1, 0xe9, 0x7d, 0xed,
+    0x64, 0xdc, 0x67, 0x12, 0xfe, 0xa4, 0xfe, 0x7d, 0xba, 0xad, 0xfd, 0x3b,
+    0xc1, 0xec, 0xa7, 0xdb, 0xda, 0x05, 0xfd, 0x77, 0xca, 0x31, 0x86, 0xdd,
+    0xc3, 0x59, 0xe3, 0xf1, 0x9b, 0x53, 0x2d, 0x05, 0x4d, 0xe4, 0xa7, 0xa1,
+    0x9f, 0x22, 0xa6, 0xdd, 0xd8, 0x22, 0xd5, 0x0c, 0xab, 0xa4, 0x38, 0x47,
+    0xa7, 0x0a, 0x8a, 0x71, 0x0b, 0x71, 0x5c, 0xe7, 0x31, 0xa7, 0xe8, 0x46,
+    0x58, 0x0f, 0xdb, 0xa9, 0xab, 0xe7, 0x06, 0xd1, 0x0a, 0x51, 0xff, 0x40,
+    0x3f, 0xcd, 0xb9, 0xe7, 0xc8, 0x7a, 0xd8, 0x2e, 0xaa, 0x33, 0x15, 0x9e,
+    0x7a, 0xe6, 0x19, 0x97, 0x88, 0xd7, 0x9f, 0x56, 0x76, 0xc6, 0x21, 0x68,
+    0x85, 0x44, 0x63, 0x60, 0xdc, 0x67, 0xe2, 0x99, 0xb6, 0xc0, 0x09, 0xbc,
+    0xd3, 0xfa, 0x29, 0x66, 0x5a, 0xeb, 0x7d, 0x95, 0x31, 0x68, 0x20, 0xbf,
+    0xc3, 0x9a, 0x06, 0x42, 0x45, 0xc5, 0xb8, 0xd6, 0xbe, 0x31, 0xc5, 0x0e,
+    0x45, 0x44, 0x22, 0x46, 0x1d, 0xf3, 0x84, 0x64, 0x07, 0x90, 0x66, 0x89,
+    0x36, 0xc2, 0x1b, 0x34, 0x3c, 0x34, 0x9c, 0x53, 0x3e, 0xcd, 0xd2, 0x8e,
+    0x84, 0x2a, 0x39, 0xaf, 0x17, 0xc1, 0x4c, 0xb4, 0x48, 0xaa, 0x99, 0x8d,
+    0x88, 0x68, 0xff, 0x21, 0x6b, 0xd6, 0x0a, 0x34, 0x37, 0x3a, 0x97, 0x73,
+    0xbc, 0xfe, 0x1e, 0xfa, 0xd1, 0x62, 0xee, 0xf1, 0x66, 0x37, 0x00, 0x70,
+    0x00, 0xfc, 0x00, 0xec, 0x09, 0xa2, 0xdd, 0x57, 0x7c, 0x00, 0x1c, 0x00,
+    0x94, 0xa1, 0xb3, 0x36, 0x0c, 0xcf, 0x5b, 0x66, 0xc8, 0x15, 0xd7, 0xdd,
+    0x30, 0x7a, 0x1f, 0x98, 0x15, 0xcb, 0x93, 0xc3, 0xfe, 0x77, 0xe6, 0x61,
+    0xff, 0xc9, 0xab, 0xcc, 0x9f, 0xa6, 0xaf, 0x14, 0xce, 0x87, 0xa7, 0xa8,
+    0xe9, 0xf8, 0x51, 0xa1, 0x7f, 0xab, 0xd5, 0x86, 0x8e, 0x4e, 0x77, 0xde,
+    0x76, 0xe9, 0xe8, 0x5a, 0x21, 0x72, 0xfc, 0xb6, 0x11, 0xb1, 0x47, 0x31,
+    0x49, 0x9b, 0xac, 0x56, 0x1b, 0x5a, 0x8f, 0x35, 0x43, 0xbb, 0xf7, 0x55,
+    0x56, 0x77, 0xc8, 0x4a, 0xf1, 0xf5, 0x38, 0xb4, 0x15, 0x5a, 0x4c, 0xdc,
+    0x0a, 0xc0, 0xf3, 0x12, 0x63, 0xe9, 0xf2, 0x22, 0xe3, 0x21, 0x3a, 0x73,
+    0xee, 0x0c, 0xe2, 0xeb, 0x71, 0x18, 0xf7, 0x18, 0x61, 0x1f, 0xf4, 0xb2,
+    0xa4, 0x9e, 0x9e, 0xc1, 0x4d, 0x44, 0x1e, 0xf0, 0xd7, 0xd2, 0x8b, 0x71,
+    0x8f, 0x11, 0xfb, 0xf7, 0x99, 0xd0, 0xfa, 0x61, 0x2b, 0x3c, 0x2c, 0x25,
+    0xcf, 0xe6, 0x9e, 0xa3, 0xba, 0x41, 0x07, 0x00, 0xa0, 0xeb, 0x72, 0x17,
+    0x4c, 0x07, 0x0f, 0x30, 0x6f, 0xcf, 0x0d, 0xea, 0xbe, 0xde, 0x2d, 0xb4,
+    0xd5, 0xeb, 0x0d, 0x58, 0x5e, 0x5e, 0x02, 0x00, 0x4c, 0x7d, 0x10, 0x82,
+    0xb7, 0x71, 0x17, 0x93, 0xb2, 0x33, 0xa9, 0xb7, 0x54, 0x89, 0x7a, 0xc3,
+    0xf0, 0xec, 0x65, 0xcc, 0x35, 0x4b, 0x64, 0xfb, 0xb0, 0x4e, 0x90, 0x97,
+    0x5e, 0xb4, 0x15, 0x5a, 0x74, 0x59, 0xbb, 0x60, 0x38, 0xa6, 0x83, 0x66,
+    0xf7, 0x6e, 0xa6, 0x54, 0x3f, 0x6d, 0x85, 0x56, 0xb0, 0x37, 0xa9, 0x9f,
+    0x8b, 0x88, 0xba, 0xaf, 0x79, 0xe0, 0xbb, 0xe3, 0xcf, 0xea, 0x4b, 0xaf,
+    0x37, 0x60, 0xa0, 0xbe, 0x1f, 0xda, 0x23, 0x1a, 0x6c, 0x3e, 0xbf, 0x8b,
+    0xf9, 0x01, 0x94, 0x09, 0x37, 0x8a, 0x88, 0x6a, 0x7e, 0xef, 0x03, 0x8c,
+    0xdb, 0x8e, 0xa2, 0x10, 0xb9, 0x6a, 0x79, 0x87, 0x9d, 0x98, 0x07, 0x7a,
+    0xd7, 0xcd, 0xaa, 0xe4, 0xc9, 0xe1, 0xc9, 0xc7, 0x55, 0xd0, 0x6d, 0x11,
+    0xe5, 0x73, 0x38, 0xb3, 0x49, 0xac, 0x8f, 0x2e, 0xa8, 0x85, 0xe3, 0xb0,
+    0x9d, 0x6c, 0xa3, 0x73, 0x14, 0x19, 0x0f, 0x91, 0x6b, 0x83, 0x28, 0x9f,
+    0xe3, 0xd6, 0xd8, 0xcd, 0x88, 0x3d, 0x8a, 0x41, 0x5b, 0xa1, 0x45, 0xd4,
+    0x1b, 0xe6, 0xff, 0xc6, 0xc3, 0xb0, 0x5a, 0x6d, 0xe0, 0xc0, 0x21, 0x18,
+    0x0c, 0xa0, 0xf1, 0xb8, 0x0b, 0xba, 0x04, 0x11, 0x07, 0xfe, 0x26, 0xc5,
+    0xd7, 0xe3, 0xb0, 0x39, 0xeb, 0xb2, 0xe4, 0xc5, 0x2e, 0xc6, 0x84, 0x9b,
+    0xb4, 0xf6, 0xb7, 0x38, 0x38, 0x00, 0x1e, 0x77, 0x27, 0x35, 0x1d, 0x3f,
+    0x8a, 0x60, 0xf0, 0x24, 0x6c, 0xeb, 0x36, 0xe8, 0xf5, 0x06, 0x74, 0x1e,
+    0x69, 0xc7, 0x7e, 0x93, 0x09, 0xce, 0x0a, 0x17, 0x62, 0x8f, 0x62, 0xe8,
+    0x1d, 0xf4, 0xa2, 0xa6, 0xd6, 0x0c, 0xd7, 0x6c, 0x4a, 0xdf, 0xba, 0x41,
+    0x07, 0x38, 0x70, 0x00, 0x00, 0x23, 0x8c, 0xf0, 0x03, 0xa8, 0x5c, 0xd7,
+    0x8b, 0xec, 0xb5, 0x2c, 0xef, 0x17, 0xfe, 0xfb, 0x93, 0xaf, 0xdc, 0xb2,
+    0x76, 0x8e, 0x5d, 0x1e, 0x01, 0x00, 0x41, 0x5e, 0xb2, 0x74, 0x9d, 0xe8,
+    0x02, 0xf4, 0xdb, 0xe3, 0xd0, 0x60, 0x86, 0x65, 0x79, 0x3f, 0xf4, 0x7a,
+    0x03, 0xa2, 0xde, 0x30, 0xfa, 0xaf, 0xdd, 0x10, 0xc6, 0x21, 0xbe, 0x1e,
+    0x47, 0xd3, 0x9d, 0x26, 0xf8, 0x8f, 0x8f, 0x42, 0x8d, 0x7e, 0xb6, 0x75,
+    0x9b, 0x48, 0x3f, 0x17, 0x11, 0x59, 0xac, 0x36, 0x74, 0x5f, 0xef, 0xc6,
+    0xf2, 0xf2, 0x12, 0x9a, 0xf5, 0xcd, 0xe0, 0xea, 0x39, 0x8c, 0x9c, 0xf7,
+    0xc1, 0xb8, 0xc7, 0x08, 0xcb, 0xf2, 0x7e, 0xbc, 0x71, 0xfd, 0x0d, 0xbc,
+    0xf1, 0x76, 0x1d, 0x74, 0xb3, 0xfc, 0xfd, 0x17, 0x98, 0xb6, 0x75, 0x68,
+    0x8a, 0x7a, 0x23, 0x05, 0x30, 0xa2, 0x3e, 0x00, 0x3a, 0x6e, 0x83, 0x54,
+    0x71, 0xcd, 0x03, 0xbd, 0x9f, 0x16, 0xc7, 0xb0, 0xe9, 0xd8, 0x7e, 0xc2,
+    0x01, 0x43, 0x06, 0x93, 0x49, 0x32, 0xe5, 0x2c, 0x51, 0x4d, 0x83, 0xfc,
+    0x64, 0x02, 0xf8, 0x19, 0x6f, 0xdc, 0x53, 0x05, 0xdb, 0x21, 0x1b, 0x1a,
+    0x1b, 0x1a, 0x45, 0x8c, 0xe6, 0x22, 0xa2, 0x70, 0x24, 0x8c, 0x2a, 0xf3,
+    0x4f, 0xb3, 0x18, 0xfa, 0xc0, 0x3e, 0x13, 0x25, 0x65, 0x44, 0xc7, 0xc3,
+    0xe8, 0xfe, 0xd4, 0x83, 0x74, 0x26, 0x19, 0x1b, 0x1a, 0x11, 0x98, 0xc7,
+    0x45, 0x44, 0x35, 0xb5, 0x29, 0x3d, 0xa2, 0xde, 0x30, 0x46, 0x66, 0x46,
+    0x70, 0xea, 0xfc, 0x59, 0x41, 0x87, 0xe6, 0x63, 0x2e, 0xd8, 0x1b, 0x9b,
+    0x44, 0xfd, 0x34, 0x0c, 0x6c, 0xd0, 0x4f, 0xaf, 0x1c, 0x48, 0xb5, 0x1b,
+    0x0d, 0xc3, 0xf3, 0x12, 0x63, 0xee, 0xb4, 0xbe, 0x9b, 0x8f, 0x35, 0xa3,
+    0xe1, 0xfd, 0xa3, 0xac, 0xf5, 0x98, 0x93, 0x26, 0x23, 0x11, 0x91, 0x6d,
+    0xc6, 0x3d, 0x46, 0x38, 0x8f, 0x34, 0xc0, 0xf2, 0xf6, 0x61, 0x36, 0x3a,
+    0xd0, 0x4f, 0x13, 0x5f, 0x56, 0x61, 0x33, 0xee, 0x01, 0x00, 0x98, 0xf7,
+    0x59, 0xd0, 0x7c, 0xdc, 0x05, 0x0f, 0x63, 0x2c, 0xb3, 0x1f, 0xae, 0x9e,
+    0x43, 0xd5, 0xc7, 0x67, 0xf3, 0x8e, 0x43, 0x96, 0x5d, 0xe3, 0x61, 0x78,
+    0x76, 0xa9, 0xd7, 0xaf, 0xae, 0xbe, 0x0e, 0xae, 0xe3, 0x2e, 0x24, 0xaf,
+    0x5b, 0xad, 0x36, 0x98, 0x3b, 0xdd, 0xa2, 0xfb, 0xeb, 0x6e, 0x6b, 0x27,
+    0xff, 0x1d, 0x3f, 0x00, 0x60, 0xbf, 0xc9, 0x04, 0xcb, 0xf5, 0x5e, 0x56,
+    0xc6, 0x01, 0xd0, 0x6d, 0x11, 0xf9, 0x51, 0x20, 0x23, 0xea, 0x6c, 0x88,
+    0x7e, 0x9d, 0xe5, 0x13, 0x00, 0x00, 0x4f, 0x05, 0x8a, 0x66, 0xd8, 0x74,
+    0x74, 0xdf, 0xf4, 0xc1, 0x45, 0xf9, 0x99, 0xd2, 0xb3, 0x97, 0xb1, 0xe8,
+    0x83, 0x30, 0x9c, 0x47, 0x1a, 0x70, 0xba, 0xfe, 0x34, 0x7f, 0x43, 0x32,
+    0x18, 0xc5, 0xb6, 0x6e, 0xc3, 0x64, 0x24, 0x82, 0x4f, 0xae, 0xb8, 0x51,
+    0x53, 0x6b, 0x86, 0x7d, 0x7c, 0x55, 0x90, 0xeb, 0x61, 0x8c, 0xa5, 0xdf,
+    0xa8, 0xf9, 0xf0, 0x14, 0x35, 0x84, 0x37, 0xc8, 0x71, 0xd8, 0x2e, 0xdc,
+    0x14, 0x0e, 0x1c, 0x30, 0x03, 0x34, 0x1f, 0x77, 0x41, 0x5b, 0xa1, 0x4d,
+    0xc9, 0xff, 0x4a, 0x23, 0xe8, 0x71, 0xe6, 0x7c, 0x87, 0xd0, 0x5f, 0xb3,
+    0xbe, 0x19, 0x9e, 0xbd, 0x8c, 0xb9, 0xaf, 0x2d, 0x0b, 0xed, 0xa5, 0x1c,
+    0x96, 0x03, 0xe0, 0x6d, 0xdc, 0xc5, 0xfa, 0x3f, 0xea, 0x4f, 0xb5, 0xed,
+    0x6c, 0xcd, 0xd0, 0x1e, 0xe0, 0x8c, 0x1c, 0x5f, 0xbf, 0x9a, 0x13, 0xd9,
+    0x37, 0x76, 0x79, 0x0c, 0xf6, 0x41, 0x2f, 0xb3, 0xbc, 0x7d, 0x98, 0xf9,
+    0x01, 0x7c, 0x72, 0xc5, 0x8d, 0x60, 0xf0, 0x24, 0x0c, 0x91, 0x2a, 0x4c,
+    0x46, 0x22, 0xe8, 0xbe, 0xde, 0x8d, 0x01, 0xef, 0x00, 0x38, 0x00, 0xe5,
+    0xc6, 0xf2, 0x94, 0x3c, 0x70, 0xe8, 0xa8, 0x3f, 0x23, 0x1e, 0xc7, 0x8c,
+    0x71, 0xd0, 0x85, 0x89, 0x1a, 0xc2, 0x1b, 0x64, 0xab, 0xaf, 0x13, 0x8d,
+    0x67, 0x78, 0x26, 0x5c, 0x90, 0x7e, 0x78, 0x04, 0xc1, 0x61, 0x39, 0x70,
+    0x58, 0xfe, 0xcb, 0x12, 0x5c, 0x2b, 0x44, 0xf3, 0xe1, 0x29, 0x72, 0x6d,
+    0x10, 0xe9, 0xc6, 0x89, 0x8c, 0x30, 0x0a, 0xd7, 0x27, 0x23, 0x11, 0xb8,
+    0x88, 0x88, 0xdd, 0x40, 0x61, 0xb1, 0x6c, 0x3a, 0x9a, 0x5e, 0x73, 0x20,
+    0xdc, 0x00, 0xc9, 0x72, 0x69, 0x72, 0x1e, 0xa7, 0xfe, 0x58, 0x55, 0x90,
+    0xdc, 0x62, 0x62, 0xdb, 0x4c, 0xdc, 0x5c, 0x5c, 0x24, 0x83, 0xd6, 0x80,
+    0xc0, 0x17, 0x13, 0x30, 0xc6, 0x8c, 0x38, 0xf9, 0xf9, 0xc9, 0xac, 0x98,
+    0x35, 0xfa, 0x20, 0x0c, 0x0f, 0xe3, 0x63, 0xb9, 0xe6, 0xeb, 0xad, 0x88,
+    0x3c, 0x08, 0x67, 0xc5, 0x9b, 0xa2, 0xfa, 0xdb, 0x0c, 0xb3, 0xe6, 0xee,
+    0xa4, 0xde, 0x41, 0x2f, 0x00, 0x9e, 0x3d, 0x27, 0x82, 0x01, 0xcc, 0x3f,
+    0x9a, 0x47, 0xe3, 0x71, 0x97, 0xd0, 0xbe, 0xf3, 0x5c, 0x3b, 0x2c, 0x6f,
+    0x1f, 0x66, 0x22, 0xa6, 0xde, 0xee, 0x4f, 0x4a, 0xdf, 0xc8, 0x78, 0x88,
+    0x4e, 0x7e, 0x78, 0x52, 0x90, 0xe9, 0xfa, 0x3c, 0xa8, 0x88, 0xc9, 0x5a,
+    0xbe, 0x88, 0x64, 0x31, 0xd5, 0xd2, 0x5f, 0xe6, 0x85, 0xeb, 0x1a, 0xad,
+    0x0e, 0xdd, 0x17, 0x2f, 0xf1, 0x76, 0x6e, 0x10, 0xd5, 0x1c, 0xcc, 0x66,
+    0xcc, 0xf4, 0x15, 0x4b, 0xcd, 0x38, 0xa8, 0xd5, 0x2f, 0xb3, 0xff, 0x7c,
+    0x45, 0x5b, 0xa1, 0xc5, 0xd8, 0xd0, 0x08, 0x1f, 0xd3, 0xd6, 0x0d, 0xa2,
+    0x28, 0x06, 0x8c, 0x7c, 0xe5, 0x93, 0xed, 0xa8, 0x75, 0x7f, 0x15, 0x3a,
+    0xdf, 0x2c, 0x4e, 0x7e, 0x3a, 0xce, 0xc7, 0xab, 0x14, 0x3b, 0x6a, 0x3a,
+    0x6a, 0x76, 0xef, 0x66, 0x9e, 0x5d, 0x8c, 0x99, 0x0e, 0x1e, 0x60, 0xa3,
+    0xef, 0xbf, 0xc0, 0x6e, 0x0c, 0x7a, 0x59, 0xe7, 0xb9, 0x76, 0x11, 0x63,
+    0x74, 0x5f, 0xf3, 0xc0, 0x74, 0x6b, 0x9a, 0x6a, 0x1a, 0xcc, 0x08, 0x06,
+    0x03, 0x00, 0x80, 0xa9, 0x6b, 0x21, 0x44, 0x87, 0xc2, 0x88, 0x3e, 0x08,
+    0xe3, 0xf4, 0x07, 0x2d, 0x92, 0x0c, 0xd3, 0x7a, 0xa4, 0x55, 0xf8, 0x7f,
+    0xb6, 0x75, 0x1b, 0x6a, 0x6a, 0xcd, 0xa8, 0x6b, 0x70, 0x20, 0xbe, 0x1e,
+    0x07, 0x07, 0x0e, 0x7a, 0xbd, 0x01, 0x49, 0xe6, 0x13, 0xb5, 0x8f, 0x84,
+    0x65, 0xf5, 0xb5, 0xe9, 0x2d, 0xc0, 0x76, 0x7d, 0x4d, 0x45, 0xb9, 0xd0,
+    0x2a, 0xd9, 0x3e, 0x93, 0xc9, 0x20, 0x5c, 0x17, 0xcb, 0x69, 0xf9, 0xf8,
+    0x2c, 0xb3, 0x5c, 0xef, 0x65, 0x97, 0xae, 0xf7, 0x32, 0xcb, 0xf5, 0x5e,
+    0xd6, 0xd1, 0xe9, 0x66, 0xc9, 0x89, 0xc2, 0xeb, 0x9f, 0x6d, 0x8f, 0x1f,
+    0x80, 0xde, 0x3d, 0x4c, 0x35, 0x0d, 0x66, 0xe8, 0x82, 0x5a, 0x68, 0x2a,
+    0xca, 0xf9, 0xb8, 0x3e, 0x6d, 0x1c, 0x52, 0xfd, 0xf1, 0x2b, 0x4e, 0x21,
+    0xfa, 0x65, 0xf6, 0xcf, 0xd5, 0x73, 0x88, 0x8e, 0x87, 0xd1, 0xf2, 0x45,
+    0x84, 0x85, 0xbe, 0x88, 0xb0, 0x4c, 0x74, 0x7d, 0x1e, 0x64, 0x9b, 0xcf,
+    0xef, 0x62, 0x65, 0x9b, 0x89, 0x0d, 0x8a, 0x2c, 0x03, 0x88, 0x6d, 0x33,
+    0x5a, 0x81, 0xe8, 0x8b, 0x65, 0xef, 0x30, 0x93, 0xa5, 0x75, 0x3f, 0x70,
+    0xfb, 0x9f, 0x97, 0x00, 0x4d, 0xe1, 0xf2, 0x93, 0x78, 0x36, 0x98, 0x3f,
+    0x44, 0x70, 0xd1, 0xf6, 0x12, 0x93, 0xa7, 0x5e, 0xdd, 0xbf, 0xd4, 0xc1,
+    0x0f, 0xbf, 0xa0, 0xe7, 0x37, 0xeb, 0x6b, 0x68, 0xba, 0xd8, 0x04, 0x20,
+    0xc5, 0x98, 0x5e, 0xf3, 0x2e, 0xb6, 0xb6, 0x9b, 0x31, 0x0f, 0x63, 0xcc,
+    0xde, 0xd8, 0xc4, 0x26, 0xf4, 0x93, 0x42, 0x7d, 0x73, 0xb5, 0x19, 0x7e,
+    0x00, 0x6b, 0xbb, 0x19, 0xe3, 0xea, 0xf9, 0xc1, 0x4f, 0x97, 0x97, 0xfc,
+    0xf7, 0x40, 0x7d, 0xbf, 0xd0, 0xef, 0x92, 0x29, 0xc5, 0x7a, 0x9e, 0x41,
+    0xaf, 0xec, 0x44, 0x73, 0x7c, 0xdc, 0x28, 0xb4, 0xbf, 0x54, 0xdb, 0x29,
+    0x48, 0x4d, 0xca, 0xf7, 0xc7, 0xfc, 0x7c, 0xfd, 0x99, 0xcc, 0xfe, 0x94,
+    0x4f, 0x64, 0x5e, 0xff, 0x54, 0xfb, 0xa4, 0x3d, 0xae, 0x15, 0xa2, 0x53,
+    0x83, 0x7c, 0xdc, 0x1d, 0xa8, 0x08, 0x20, 0x70, 0x67, 0x04, 0x9e, 0xbd,
+    0x4c, 0x18, 0x87, 0xc6, 0x86, 0x46, 0x91, 0x7d, 0xa8, 0x46, 0x41, 0xfa,
+    0x99, 0x4d, 0xe2, 0xfe, 0x3b, 0x4e, 0x9c, 0x11, 0x31, 0x7d, 0xe6, 0x4a,
+    0x99, 0xfc, 0x77, 0x19, 0x50, 0x8e, 0xa2, 0x19, 0xf0, 0x47, 0x23, 0x70,
+    0x18, 0x0d, 0xc8, 0x55, 0x1c, 0x46, 0x03, 0xe8, 0x04, 0x30, 0xfc, 0xab,
+    0xe2, 0x19, 0x77, 0xe0, 0xcf, 0xb9, 0x1d, 0xb6, 0xa6, 0xd6, 0x0c, 0xff,
+    0xf1, 0x51, 0xd4, 0xd4, 0x9a, 0x51, 0xe5, 0x09, 0xd1, 0xe8, 0x40, 0x3f,
+    0x1f, 0x23, 0x25, 0x88, 0x5c, 0x44, 0x14, 0x19, 0x0f, 0x91, 0xe9, 0xd6,
+    0xb4, 0x68, 0x69, 0x6a, 0xd6, 0x37, 0xa3, 0xb5, 0x56, 0xcc, 0x98, 0x88,
+    0x88, 0xe5, 0x9e, 0x39, 0xd5, 0x42, 0xc9, 0x94, 0x4c, 0x3a, 0xc3, 0xf8,
+    0x01, 0x74, 0x9c, 0x3b, 0x23, 0xb2, 0x37, 0xc9, 0x20, 0xda, 0x0a, 0x2d,
+    0x0c, 0x47, 0x74, 0x42, 0x3d, 0xcf, 0x55, 0x8f, 0x70, 0x3d, 0x18, 0x0c,
+    0xa0, 0xca, 0x13, 0xa2, 0xe4, 0xae, 0x38, 0xe9, 0x30, 0x47, 0x8f, 0x34,
+    0x90, 0xf1, 0x91, 0x51, 0x68, 0x6f, 0x3e, 0x56, 0xa3, 0x38, 0x66, 0x54,
+    0xb3, 0x02, 0x61, 0x26, 0x43, 0xdf, 0x6d, 0x7b, 0x46, 0xfe, 0x34, 0x22,
+    0xbb, 0x22, 0xb8, 0x88, 0xc8, 0xd1, 0xd0, 0x58, 0x70, 0x4c, 0x9b, 0x19,
+    0x33, 0x8f, 0x9c, 0xf7, 0x09, 0xd7, 0x2d, 0xbf, 0xb4, 0x89, 0xb2, 0x25,
+    0xba, 0x04, 0x91, 0x7d, 0x7c, 0x95, 0xea, 0x0e, 0x59, 0xa9, 0xfb, 0x6d,
+    0x4f, 0x2a, 0x7b, 0xe0, 0x2c, 0x34, 0x6b, 0x90, 0xc4, 0x1f, 0x8d, 0x80,
+    0x7e, 0x53, 0x07, 0xb5, 0x85, 0x5d, 0x0b, 0x00, 0xcb, 0xb6, 0x82, 0xfa,
+    0x6d, 0x79, 0xcf, 0x01, 0xe3, 0x2b, 0xd2, 0x33, 0x52, 0x93, 0xd8, 0xa0,
+    0xa6, 0xf7, 0x8f, 0xca, 0xe6, 0x58, 0xa5, 0x8a, 0x71, 0x8f, 0x11, 0x97,
+    0xda, 0x3a, 0x50, 0xb5, 0xa7, 0x0a, 0x8e, 0x06, 0x71, 0x7e, 0x56, 0xaf,
+    0x37, 0x60, 0x73, 0xfd, 0x1b, 0xc9, 0x98, 0x2e, 0x33, 0x06, 0x34, 0xb5,
+    0x4d, 0x53, 0xd3, 0x9d, 0x26, 0x51, 0x9d, 0x64, 0x6c, 0x27, 0x9a, 0x58,
+    0x2b, 0x44, 0x36, 0xa7, 0x74, 0xfe, 0x33, 0xbd, 0xe8, 0xf5, 0x06, 0x78,
+    0x2e, 0x77, 0x41, 0xbb, 0x97, 0x8f, 0xe1, 0x3d, 0x69, 0xb9, 0x55, 0xa9,
+    0x98, 0x51, 0xaf, 0x37, 0xa0, 0x71, 0x78, 0x34, 0x6f, 0x76, 0x25, 0x73,
+    0x82, 0x0b, 0xf6, 0x24, 0x63, 0xfa, 0xed, 0x34, 0x54, 0xba, 0xcd, 0x4a,
+    0xc6, 0x61, 0xe0, 0xb0, 0x5d, 0x98, 0xd4, 0x52, 0xfa, 0x25, 0x63, 0xf3,
+    0x4c, 0x3d, 0xd2, 0xf7, 0x04, 0x72, 0xc5, 0xb8, 0xc7, 0x08, 0x9f, 0x77,
+    0x00, 0x1e, 0xc6, 0x18, 0xeb, 0xba, 0x4f, 0x74, 0xf2, 0xee, 0x36, 0x93,
+    0xc5, 0xd4, 0xa1, 0xfd, 0x9f, 0xc2, 0x18, 0x79, 0x47, 0x79, 0x20, 0x9d,
+    0x59, 0x5a, 0x83, 0x51, 0xb8, 0xff, 0x5a, 0xa3, 0xba, 0x5f, 0xeb, 0x37,
+    0x80, 0xef, 0x5d, 0x96, 0x73, 0x33, 0xe6, 0x5a, 0x21, 0xba, 0xf4, 0xe9,
+    0x25, 0x18, 0x61, 0x44, 0x72, 0xa9, 0x03, 0xf8, 0x19, 0xed, 0x87, 0x1f,
+    0xa7, 0xeb, 0x4f, 0x23, 0x86, 0x18, 0x3a, 0x8e, 0x9c, 0x81, 0x67, 0xaf,
+    0x38, 0xdd, 0x35, 0xe0, 0x1d, 0x80, 0x76, 0x59, 0x0b, 0xff, 0x8c, 0x1f,
+    0x5c, 0x35, 0x87, 0xd1, 0xe5, 0x20, 0x2e, 0x1d, 0x69, 0x47, 0x0c, 0x31,
+    0x18, 0xd6, 0xab, 0xe0, 0x8f, 0xf9, 0xe1, 0xac, 0x6d, 0x40, 0xf9, 0x6b,
+    0xe5, 0x58, 0x7b, 0x3e, 0xa5, 0x87, 0x2e, 0x41, 0x14, 0xfe, 0x9f, 0x28,
+    0xba, 0xff, 0xe8, 0x06, 0x57, 0xcd, 0x21, 0x86, 0x18, 0x5c, 0x2d, 0xa7,
+    0x64, 0xf5, 0x9c, 0x18, 0x1a, 0x26, 0xc3, 0x66, 0x95, 0x50, 0x3f, 0xd9,
+    0x5f, 0x0c, 0x31, 0xb4, 0xfe, 0xaa, 0x35, 0xeb, 0x41, 0xc5, 0xc4, 0xd0,
+    0x30, 0xe1, 0x11, 0x30, 0xba, 0x1c, 0x4c, 0x6d, 0xa6, 0x88, 0xc8, 0x75,
+    0xdc, 0x05, 0xae, 0x9a, 0x43, 0x79, 0xad, 0x0e, 0xa6, 0x83, 0x07, 0x54,
+    0x3f, 0x48, 0xe9, 0xfe, 0xcc, 0x03, 0x67, 0x6d, 0x03, 0xbc, 0xe6, 0x5d,
+    0xa2, 0x71, 0xe8, 0xbe, 0xe6, 0x41, 0xe5, 0xba, 0x5e, 0xd0, 0x6b, 0x72,
+    0x3d, 0x82, 0xd3, 0xf5, 0x2d, 0x28, 0x47, 0x39, 0x96, 0xd6, 0xd7, 0x84,
+    0x71, 0x48, 0xb6, 0xcb, 0xa7, 0x1f, 0xf6, 0x20, 0x2d, 0xb6, 0xcf, 0x9e,
+    0x40, 0x99, 0xfd, 0xf9, 0x67, 0xfc, 0x68, 0x7e, 0xb3, 0x05, 0x66, 0x7d,
+    0x0d, 0xd6, 0x0e, 0xa6, 0xc6, 0x19, 0x05, 0x9d, 0x7b, 0x75, 0xf3, 0xa7,
+    0xb6, 0x76, 0xa2, 0x84, 0xe6, 0x56, 0x09, 0xdd, 0xea, 0xfa, 0xd7, 0x5e,
+    0x78, 0xf6, 0x0f, 0xb7, 0x94, 0xf0, 0x29, 0x9e, 0x3d, 0x50, 0x7b, 0x16,
+    0xe0, 0x46, 0x94, 0xf2, 0x9e, 0xe6, 0x52, 0x5d, 0x12, 0x44, 0xed, 0x61,
+    0x75, 0x7a, 0xe4, 0x32, 0x8c, 0xb6, 0x88, 0x16, 0x13, 0x44, 0x2d, 0xf7,
+    0x88, 0xac, 0xf7, 0xf9, 0x97, 0x29, 0x17, 0x13, 0x54, 0x7a, 0x2b, 0xf8,
+    0x1f, 0x04, 0x19, 0xda, 0x6e, 0x93, 0xa2, 0x58, 0x52, 0xe3, 0x03, 0x7d,
+    0xc4, 0x3f, 0xb2, 0x7c, 0x5a, 0x65, 0x62, 0x09, 0x38, 0x70, 0x5d, 0x59,
+    0x6c, 0x7b, 0xe3, 0x63, 0xf9, 0x27, 0x63, 0x1d, 0x57, 0x89, 0x1e, 0xc7,
+    0x25, 0xf2, 0xc9, 0x7a, 0x07, 0x9a, 0xdf, 0xcf, 0xff, 0x44, 0x2d, 0x17,
+    0x6a, 0xb6, 0x88, 0xca, 0x7f, 0x00, 0x4c, 0x3c, 0x59, 0x83, 0xe5, 0x65,
+    0x9d, 0x64, 0x9e, 0xd5, 0x45, 0x44, 0xc9, 0xeb, 0x13, 0x4f, 0xd6, 0x60,
+    0x7c, 0xe5, 0x05, 0xd5, 0x79, 0xe5, 0x5c, 0xfd, 0x6f, 0x3e, 0x97, 0x1d,
+    0x1a, 0xc5, 0x16, 0x56, 0x49, 0xab, 0xd1, 0xc1, 0x3f, 0x13, 0x05, 0xaa,
+    0x6b, 0x60, 0x8a, 0x2f, 0xc1, 0xb2, 0x77, 0x77, 0xd1, 0xfd, 0x7a, 0xef,
+    0xcf, 0x51, 0x58, 0x5b, 0x85, 0xf9, 0xc9, 0x00, 0xba, 0xde, 0xb2, 0x01,
+    0x58, 0x83, 0xe1, 0xa5, 0x94, 0x3d, 0x13, 0xb3, 0x8b, 0xe4, 0x9e, 0x34,
+    0x00, 0x08, 0x00, 0xb0, 0x01, 0x08, 0xc0, 0xf6, 0x96, 0x0d, 0x2e, 0xcd,
+    0x37, 0xd0, 0x6c, 0x9f, 0x15, 0x50, 0xd3, 0xdf, 0xd2, 0xca, 0x2a, 0xf9,
+    0xa1, 0x43, 0xe0, 0x6e, 0x4a, 0x9e, 0xce, 0x64, 0x43, 0x57, 0x65, 0x4a,
+    0x9e, 0x32, 0xa6, 0xed, 0x1e, 0xde, 0x61, 0x6a, 0x95, 0x2f, 0x73, 0xab,
+    0xc5, 0x33, 0x6d, 0xa1, 0xed, 0x94, 0x60, 0xfb, 0xb8, 0x58, 0x1e, 0x91,
+    0x38, 0x54, 0x21, 0x92, 0xee, 0x37, 0xb4, 0x50, 0xfc, 0x29, 0xb1, 0xe4,
+    0xdb, 0xcf, 0xa6, 0x1e, 0xf1, 0x8a, 0x41, 0x09, 0xe9, 0x73, 0xca, 0xa1,
+    0x85, 0xe2, 0x56, 0x96, 0xae, 0xfb, 0xd9, 0x72, 0xb5, 0x43, 0x62, 0x3b,
+    0xfa, 0x1f, 0xca, 0xdf, 0xa7, 0x96, 0x7b, 0xca, 0x8f, 0x7b, 0x12, 0x11,
+    0x71, 0xb7, 0xe4, 0x4f, 0x03, 0xa6, 0x8f, 0x73, 0x59, 0xde, 0xfc, 0xe8,
+    0xbc, 0xaf, 0xa0, 0xec, 0x40, 0xa1, 0xa5, 0x4a, 0x07, 0xcc, 0xfd, 0x5b,
+    0xfe, 0x7c, 0x6d, 0xae, 0x19, 0x5b, 0x68, 0x3b, 0x25, 0x78, 0x36, 0x28,
+    0x96, 0xd7, 0xf1, 0xbf, 0x51, 0x71, 0x7e, 0xf5, 0x0f, 0x13, 0x92, 0xfd,
+    0x1e, 0xb8, 0xe9, 0xc3, 0x40, 0x1f, 0x91, 0x46, 0xc1, 0xa1, 0x1f, 0x29,
+    0xec, 0x7e, 0x30, 0x8f, 0xf8, 0x26, 0x2f, 0x2f, 0xb2, 0x9c, 0x61, 0xef,
+    0x0f, 0x21, 0x69, 0x6f, 0x40, 0x53, 0x1c, 0xb3, 0xaf, 0x55, 0x66, 0xcb,
+    0x8d, 0x47, 0xc4, 0x79, 0x72, 0xae, 0x1a, 0xb0, 0x56, 0x4a, 0x8f, 0xb7,
+    0x7b, 0xd2, 0x8c, 0x37, 0x7a, 0xc6, 0xf2, 0xe6, 0xcb, 0x5d, 0x44, 0x54,
+    0xf5, 0x5f, 0x23, 0xf0, 0xc7, 0x2c, 0x92, 0x72, 0x42, 0xef, 0x39, 0x44,
+    0x2b, 0x5a, 0x59, 0xbe, 0xbc, 0xe8, 0xd3, 0x08, 0x09, 0xa2, 0x5f, 0x03,
+    0x1d, 0x11, 0xc0, 0x27, 0x93, 0x95, 0x12, 0x1c, 0x37, 0xd7, 0xe9, 0x32,
+    0x99, 0x01, 0xe0, 0x77, 0x97, 0x85, 0xb5, 0x53, 0x82, 0xd9, 0xa7, 0xdc,
+    0x6a, 0x32, 0x6e, 0xb4, 0x45, 0xb6, 0xff, 0xe0, 0x63, 0x1f, 0x0e, 0xfc,
+    0x09, 0x58, 0x5a, 0x51, 0xef, 0xb8, 0xd6, 0xca, 0x2a, 0x59, 0x3b, 0x26,
+    0x9e, 0x64, 0xeb, 0x05, 0xa3, 0x43, 0x94, 0x47, 0x2e, 0x04, 0x31, 0x23,
+    0x2d, 0x77, 0xe2, 0x49, 0xaa, 0xde, 0xe6, 0x73, 0x8c, 0x35, 0xbe, 0xcb,
+    0xd8, 0xe2, 0x07, 0x0e, 0x68, 0x35, 0xd9, 0x76, 0x47, 0x74, 0x36, 0xe8,
+    0x2e, 0xfa, 0xd0, 0xb0, 0x25, 0xed, 0xb8, 0xf6, 0x04, 0x91, 0xee, 0xa2,
+    0x0f, 0x8f, 0x0d, 0x75, 0x59, 0xfd, 0x54, 0x6a, 0x47, 0x40, 0xe7, 0x1c,
+    0x88, 0x65, 0xa4, 0x37, 0xcb, 0x2a, 0x97, 0x46, 0x20, 0xc7, 0x4c, 0xa6,
+    0xd7, 0x9e, 0x4e, 0x0c, 0x5b, 0xf3, 0x22, 0x70, 0xf6, 0x8e, 0x0f, 0xff,
+    0xfa, 0x07, 0x80, 0xfd, 0x6e, 0x04, 0x97, 0xd6, 0x80, 0xa5, 0xbf, 0x7d,
+    0x23, 0xaa, 0x53, 0xa5, 0x03, 0xec, 0xbf, 0x90, 0xd1, 0x4b, 0xff, 0xed,
+    0x31, 0x6d, 0x96, 0xbc, 0x99, 0x68, 0xc6, 0xf5, 0x40, 0xce, 0xfe, 0x23,
+    0x41, 0x1f, 0x0e, 0xdc, 0xe4, 0x63, 0x50, 0x55, 0xfd, 0xcf, 0x44, 0x65,
+    0xed, 0xb0, 0xbc, 0x9c, 0xad, 0x17, 0x62, 0x3e, 0x70, 0xd5, 0x45, 0xc6,
+    0xd0, 0xd5, 0xd2, 0x72, 0x2d, 0x2f, 0x67, 0xd7, 0x1f, 0x7d, 0x9e, 0xb1,
+    0xb5, 0x8f, 0x1c, 0x30, 0xad, 0x65, 0xdb, 0x1f, 0xdf, 0x74, 0x60, 0xd7,
+    0x7f, 0xfa, 0xd0, 0x71, 0x95, 0xa8, 0x7b, 0x7c, 0x9a, 0x96, 0x56, 0x88,
+    0x3e, 0xb9, 0x37, 0x45, 0x1d, 0x57, 0xf9, 0x33, 0x2f, 0xc9, 0x15, 0x24,
+    0xbd, 0x5d, 0x8b, 0x36, 0x8c, 0xf9, 0x7f, 0xaf, 0x93, 0xdc, 0x33, 0xf0,
+    0x71, 0x8b, 0x54, 0x4c, 0x32, 0x44, 0x92, 0x59, 0x82, 0xd5, 0x0d, 0x22,
+    0xbb, 0x9f, 0x08, 0xe3, 0xfc, 0xbb, 0x61, 0xb8, 0x45, 0x84, 0x3e, 0xf5,
+    0xb1, 0x2b, 0x02, 0x12, 0xfd, 0xf6, 0x85, 0xc4, 0x95, 0x12, 0x44, 0x18,
+    0xcd, 0xae, 0xc7, 0xdd, 0xca, 0x1d, 0xab, 0x3d, 0xcd, 0x98, 0x36, 0x53,
+    0xde, 0x74, 0xc6, 0xab, 0x25, 0xb2, 0xe3, 0x29, 0x81, 0xfd, 0x0f, 0x95,
+    0xc7, 0x9c, 0xd3, 0x2b, 0xf2, 0x76, 0xd0, 0x82, 0x74, 0x4c, 0x5b, 0xec,
+    0x77, 0x24, 0xda, 0xc7, 0xa7, 0x25, 0xe5, 0x52, 0x9e, 0x58, 0xb9, 0x7d,
+    0x5c, 0xdd, 0xbb, 0x80, 0x99, 0x31, 0x73, 0x3e, 0xf9, 0x65, 0x6b, 0x9b,
+    0xe2, 0x19, 0x9c, 0x44, 0xfb, 0xff, 0x85, 0xf9, 0x58, 0x69, 0xbb, 0xb4,
+    0x06, 0xa3, 0x60, 0x97, 0x81, 0x17, 0x3a, 0x7d, 0x18, 0xfd, 0x33, 0x80,
+    0xa0, 0x0f, 0xd8, 0x9e, 0x21, 0xa1, 0x37, 0xa1, 0xbe, 0x3c, 0x92, 0x60,
+    0xa4, 0xc7, 0x16, 0xb0, 0x8b, 0xbe, 0x54, 0x9d, 0x1f, 0x02, 0xf6, 0xcd,
+    0x70, 0x56, 0xbd, 0xf6, 0x43, 0x79, 0x96, 0xf0, 0x6f, 0x91, 0x69, 0x7d,
+    0x79, 0x98, 0x36, 0x1d, 0x9b, 0x3e, 0xe3, 0xcf, 0x31, 0x17, 0xcb, 0xb4,
+    0x90, 0x61, 0x5a, 0x64, 0x84, 0x2e, 0xaa, 0x43, 0xa1, 0xea, 0x1a, 0x69,
+    0xb9, 0x12, 0x4c, 0x9b, 0x8e, 0xcd, 0x07, 0x19, 0x0b, 0xbd, 0xbe, 0x06,
+    0xad, 0xca, 0xb3, 0x26, 0x26, 0xbd, 0x03, 0x8b, 0x3f, 0x07, 0xd6, 0x5e,
+    0xc9, 0xfd, 0xe0, 0x48, 0x76, 0xb7, 0x2b, 0x62, 0xc5, 0xee, 0xe1, 0x9c,
+    0x33, 0xe4, 0x76, 0xb4, 0x00, 0xa6, 0x1d, 0xcf, 0x3d, 0xe3, 0xe6, 0x56,
+    0x53, 0xcc, 0xae, 0x76, 0x57, 0xfc, 0x6d, 0x32, 0x6d, 0xe6, 0x3b, 0x76,
+    0xa6, 0x71, 0xfe, 0xbb, 0x67, 0x44, 0x7c, 0x3d, 0x22, 0x9e, 0x01, 0xd3,
+    0xdf, 0x76, 0xe6, 0x6e, 0x85, 0x84, 0xeb, 0x85, 0x30, 0x6d, 0x48, 0x96,
+    0x69, 0x8b, 0xcb, 0x1e, 0xc8, 0x31, 0xa6, 0xd2, 0xac, 0x84, 0x9a, 0xb7,
+    0xba, 0x2b, 0xef, 0x91, 0xe2, 0x3c, 0x7a, 0x99, 0x87, 0x31, 0x26, 0xe9,
+    0xf9, 0xdb, 0x85, 0xfd, 0x6e, 0x04, 0xf8, 0x6b, 0x5d, 0xce, 0x19, 0xe2,
+    0x30, 0x42, 0x7d, 0xc9, 0xc3, 0x48, 0xaf, 0xfe, 0xb7, 0x0f, 0x66, 0x2f,
+    0xf0, 0xc2, 0xa7, 0xe2, 0x7a, 0xda, 0x79, 0x1f, 0x8c, 0xf9, 0x66, 0xe2,
+    0x33, 0x14, 0xd3, 0x86, 0x5e, 0x07, 0x2c, 0x7b, 0x99, 0x70, 0x1c, 0xd0,
+    0xc3, 0x18, 0x6b, 0x3e, 0xf8, 0x63, 0xb6, 0xf8, 0x73, 0x80, 0x7b, 0x87,
+    0xaf, 0xe7, 0x8f, 0x59, 0x60, 0xbe, 0x16, 0xc8, 0x79, 0x7a, 0xad, 0xf7,
+    0x4b, 0xf1, 0x8a, 0x93, 0x7e, 0xfd, 0x59, 0x88, 0x69, 0x25, 0xef, 0xc3,
+    0x8b, 0x40, 0x3c, 0xa2, 0x94, 0x69, 0x47, 0x80, 0x1f, 0x28, 0x93, 0x5b,
+    0xc6, 0x01, 0xe0, 0x8c, 0xc8, 0xda, 0xf5, 0x8d, 0xcc, 0x03, 0xec, 0xf2,
+    0x08, 0xf0, 0x62, 0xf6, 0xae, 0x4e, 0x84, 0x3f, 0x2b, 0x70, 0xb3, 0x66,
+    0xb4, 0xe5, 0x96, 0x9b, 0x3c, 0xa7, 0xab, 0x13, 0xd7, 0xeb, 0x7f, 0x27,
+    0xbf, 0xe3, 0x7d, 0x9b, 0xd9, 0x03, 0x47, 0x9a, 0x5d, 0xd6, 0xca, 0x00,
+    0xa4, 0x1e, 0x04, 0xf8, 0xc1, 0xef, 0xba, 0xed, 0x3f, 0x61, 0x2c, 0xf4,
+    0x5e, 0x6a, 0x97, 0xcd, 0xce, 0xfb, 0x60, 0x5c, 0xe0, 0x4f, 0xa3, 0x25,
+    0xeb, 0xb9, 0x88, 0xc8, 0x7b, 0x9f, 0xc8, 0x1d, 0x37, 0xcb, 0xda, 0x01,
+    0x99, 0xec, 0x41, 0xe6, 0x84, 0x52, 0x8d, 0x33, 0x51, 0xe9, 0x71, 0x7c,
+    0x92, 0xbf, 0xbd, 0x8b, 0xf8, 0xac, 0x80, 0xd2, 0xd3, 0x7b, 0x8f, 0x0d,
+    0x75, 0x79, 0x27, 0x6e, 0x12, 0xcb, 0xfc, 0x00, 0x7c, 0xbf, 0x40, 0x96,
+    0xe7, 0x1f, 0xfe, 0xd4, 0x07, 0xac, 0xe7, 0x66, 0x58, 0xc0, 0x01, 0x3c,
+    0x99, 0x90, 0xf5, 0xcb, 0x9c, 0x45, 0x45, 0xec, 0x97, 0x8e, 0x3a, 0xcd,
+    0x5a, 0x7e, 0xc7, 0xca, 0xd1, 0x7e, 0x33, 0xb1, 0x51, 0x50, 0x9e, 0x54,
+    0x29, 0xd3, 0x8a, 0x63, 0x5a, 0x5b, 0x5e, 0x79, 0xb1, 0x57, 0x18, 0xdb,
+    0xf8, 0x0f, 0x7e, 0x05, 0x49, 0xe6, 0x73, 0xd9, 0x15, 0xe0, 0x85, 0xb6,
+    0xdb, 0x74, 0xb4, 0x8d, 0x88, 0x9d, 0xf7, 0xe1, 0xe4, 0x5d, 0x89, 0x7e,
+    0xd3, 0xed, 0x7d, 0x4a, 0x31, 0x6d, 0xbc, 0x52, 0x7d, 0x4c, 0xab, 0xd9,
+    0x22, 0x32, 0x2e, 0xf0, 0x7a, 0x4b, 0x65, 0x05, 0x72, 0x61, 0x64, 0x99,
+    0x4f, 0x8f, 0xd9, 0x13, 0xb9, 0x1d, 0xb7, 0x2c, 0xb9, 0x64, 0x55, 0xee,
+    0x57, 0x36, 0x23, 0x32, 0x71, 0xf8, 0x67, 0x16, 0x59, 0xbf, 0xcc, 0x59,
+    0x14, 0x30, 0x6d, 0x26, 0x5a, 0x2b, 0xa1, 0xe8, 0x91, 0x68, 0x4e, 0x39,
+    0x28, 0x7f, 0xaa, 0x4c, 0x2b, 0xb6, 0x4b, 0x99, 0x5c, 0xef, 0x73, 0x7c,
+    0xba, 0x48, 0x2a, 0xcf, 0xa9, 0x64, 0xc5, 0x88, 0x7e, 0x9d, 0xad, 0x17,
+    0x8c, 0x0e, 0x04, 0xee, 0x16, 0x17, 0x0a, 0xf9, 0x3e, 0x1b, 0x91, 0x94,
+    0x2b, 0xf7, 0x8a, 0x90, 0x6e, 0x81, 0xa8, 0xe6, 0x73, 0xe0, 0xc0, 0x4d,
+    0x69, 0xbd, 0x4d, 0x7a, 0x60, 0xfa, 0x84, 0x03, 0xed, 0xd6, 0x28, 0x42,
+    0xef, 0xf1, 0x79, 0xd8, 0xcc, 0x7a, 0xf1, 0x2a, 0x07, 0x76, 0x5f, 0xf1,
+    0x61, 0xf3, 0xbe, 0x78, 0xc5, 0xc9, 0x62, 0x5a, 0x0e, 0x40, 0x87, 0x7e,
+    0x1e, 0x85, 0x30, 0xdf, 0xef, 0xbe, 0x0c, 0x4b, 0xfa, 0x64, 0xde, 0x12,
+    0x54, 0xd7, 0x0f, 0x62, 0x3e, 0x04, 0x7e, 0xad, 0xd0, 0xb1, 0x72, 0xc8,
+    0xd9, 0x7d, 0xc5, 0x87, 0x89, 0x59, 0xa2, 0xd8, 0xc2, 0x6a, 0xde, 0x27,
+    0x35, 0x85, 0x30, 0xad, 0x78, 0x05, 0x51, 0x2e, 0xd7, 0xc3, 0xe4, 0xf3,
+    0x9c, 0xf9, 0x62, 0x73, 0xc3, 0x4b, 0x8c, 0x49, 0xe5, 0xdb, 0x83, 0x8f,
+    0x81, 0xee, 0xf1, 0xe9, 0x82, 0x56, 0x96, 0xd6, 0xa1, 0x29, 0x7a, 0x1c,
+    0xcf, 0x5e, 0x69, 0x9d, 0x9a, 0xec, 0x57, 0x84, 0x5c, 0xc4, 0xe7, 0x5d,
+    0xd9, 0x4d, 0xe0, 0xf1, 0x64, 0xb6, 0xbe, 0x26, 0xbd, 0x03, 0xa1, 0xd7,
+    0xd7, 0x30, 0xf6, 0x3e, 0x63, 0x93, 0x2f, 0xf1, 0x31, 0x7d, 0xec, 0x15,
+    0xc6, 0xc2, 0xbf, 0x3d, 0xcc, 0xba, 0x2a, 0xe7, 0x25, 0xb3, 0x0c, 0x27,
+    0xef, 0xfa, 0xa0, 0xfb, 0x3d, 0x7f, 0xf6, 0x21, 0xeb, 0xfe, 0xae, 0x22,
+    0xb5, 0x2b, 0xb3, 0xf6, 0x8d, 0xa9, 0xcf, 0xaf, 0x8d, 0xab, 0xcf, 0x1c,
+    0x90, 0xca, 0x6f, 0x7a, 0xa1, 0xed, 0x36, 0x59, 0xef, 0x2b, 0x7f, 0x76,
+    0x5f, 0x48, 0x7e, 0x50, 0x0e, 0xbb, 0xee, 0xf3, 0xbb, 0xff, 0xa4, 0x7c,
+    0x35, 0x79, 0x5a, 0x35, 0x5f, 0xc6, 0x49, 0x47, 0xe7, 0x50, 0xfe, 0xf1,
+    0xc9, 0x6c, 0x47, 0x24, 0xff, 0x65, 0x76, 0x6b, 0x1f, 0xd1, 0xc6, 0x56,
+    0xfe, 0xdd, 0x39, 0x6d, 0xf1, 0xf5, 0x2a, 0xaf, 0x4a, 0x67, 0x8b, 0xa4,
+    0x3e, 0xc3, 0x4a, 0x24, 0x5f, 0x5f, 0xe9, 0x99, 0x0b, 0x4a, 0x10, 0x99,
+    0x72, 0x64, 0x93, 0xac, 0x7d, 0x24, 0xea, 0x57, 0xf4, 0x85, 0x19, 0x17,
+    0xf1, 0xb1, 0x08, 0x9f, 0x3d, 0x50, 0x8e, 0x74, 0x4e, 0xdd, 0x66, 0x4c,
+    0xed, 0xf7, 0x10, 0xb4, 0x1a, 0x07, 0xa2, 0x27, 0x94, 0x9f, 0x1a, 0x3a,
+    0xda, 0x46, 0x54, 0xc8, 0x1b, 0x11, 0xb9, 0x30, 0x79, 0xaa, 0xec, 0x85,
+    0x36, 0xf1, 0xa9, 0xb8, 0x76, 0x6b, 0x14, 0xcd, 0x07, 0x7f, 0x2c, 0xe8,
+    0x95, 0xfe, 0xfd, 0x08, 0x6b, 0xa5, 0x03, 0x8d, 0xef, 0x16, 0x76, 0xaa,
+    0x6c, 0xf4, 0xe1, 0x1c, 0x35, 0x7d, 0x26, 0xff, 0x16, 0xb3, 0xd4, 0x29,
+    0xb7, 0xe4, 0x33, 0xfc, 0xc7, 0xf1, 0x3a, 0xd9, 0x76, 0xd6, 0x4a, 0xfe,
+    0xd4, 0x94, 0x29, 0xce, 0x9f, 0x06, 0xc3, 0x4c, 0x14, 0x81, 0xf9, 0x1a,
+    0xc4, 0x37, 0x03, 0x88, 0xe4, 0x78, 0x93, 0xc4, 0x5a, 0x19, 0x40, 0xe0,
+    0xd7, 0x36, 0x21, 0x34, 0xd0, 0x6c, 0x11, 0x9d, 0x5d, 0x06, 0xdc, 0x37,
+    0xa5, 0xeb, 0x6b, 0x35, 0x3e, 0x2c, 0x7e, 0xe0, 0x80, 0xf7, 0x39, 0xe5,
+    0xf6, 0x4f, 0xcc, 0x12, 0xf5, 0x0e, 0xe6, 0x97, 0x97, 0xe5, 0xf9, 0x8b,
+    0x09, 0xf5, 0x8c, 0xd4, 0x12, 0x98, 0x56, 0x97, 0xa3, 0x75, 0xe7, 0xce,
+    0xfb, 0x16, 0xf3, 0xe4, 0x68, 0x15, 0x40, 0xcb, 0xbd, 0xa9, 0x1d, 0x63,
+    0xda, 0xcc, 0x27, 0x4b, 0x99, 0x79, 0x58, 0x29, 0xe6, 0x49, 0x9d, 0x72,
+    0x2a, 0x2e, 0x4f, 0x4a, 0x0b, 0xd2, 0x0c, 0x64, 0xea, 0xc9, 0xcd, 0xe0,
+    0xfd, 0x0f, 0xf9, 0x1c, 0xed, 0x4e, 0xd8, 0xdf, 0xff, 0x50, 0x3a, 0x2f,
+    0x9b, 0xeb, 0x74, 0x97, 0xb5, 0xaf, 0xf0, 0x0f, 0x63, 0xe7, 0x5a, 0x31,
+    0xd0, 0x76, 0x9b, 0x36, 0xb6, 0x88, 0x24, 0x1b, 0x3a, 0x67, 0xb7, 0x2b,
+    0x2a, 0x7d, 0x93, 0xe1, 0x02, 0xff, 0x06, 0x82, 0x92, 0xa2, 0xf6, 0xeb,
+    0x89, 0xce, 0xa1, 0xc2, 0xbe, 0x66, 0xb8, 0xb1, 0xc5, 0xf7, 0x17, 0x5a,
+    0x58, 0x2d, 0x0a, 0xe5, 0x06, 0x36, 0xdf, 0xf5, 0x9d, 0xfc, 0x0d, 0x89,
+    0x4c, 0xbd, 0xd4, 0xb4, 0xeb, 0x7f, 0x38, 0x47, 0xed, 0x2b, 0xbc, 0x23,
+    0x59, 0xfb, 0xb6, 0x97, 0x72, 0x99, 0x2f, 0xb0, 0x5b, 0xfb, 0xf8, 0x07,
+    0x1d, 0xed, 0x2b, 0xfc, 0xaf, 0x16, 0xe5, 0x72, 0xbc, 0xfe, 0x87, 0x73,
+    0x64, 0xed, 0xdb, 0x76, 0xb0, 0x36, 0x5e, 0x3e, 0xf7, 0x90, 0x6f, 0xb7,
+    0x13, 0xf6, 0x76, 0xdd, 0xe7, 0xe5, 0x27, 0x7f, 0xe3, 0xa3, 0xf2, 0xea,
+    0xb0, 0xf0, 0xdb, 0x1c, 0xb2, 0xb1, 0x4d, 0xae, 0x18, 0x43, 0x12, 0x03,
+    0xfc, 0xf7, 0x67, 0x73, 0x95, 0xce, 0x09, 0x75, 0xb1, 0x6c, 0xa1, 0x31,
+    0x61, 0x09, 0xff, 0xb1, 0x31, 0x27, 0x53, 0x15, 0xf2, 0x5b, 0x0b, 0xc9,
+    0x2f, 0x7f, 0x67, 0x16, 0xd3, 0x40, 0x48, 0x95, 0x1c, 0x25, 0x8f, 0x36,
+    0x4b, 0xf8, 0xfd, 0xc4, 0xbc, 0x15, 0x86, 0x67, 0x55, 0x32, 0xee, 0x0e,
+    0x60, 0xa1, 0x21, 0x41, 0x09, 0xbf, 0x1f, 0xa8, 0xa8, 0xe2, 0x62, 0x22,
+    0x15, 0xbb, 0xa8, 0x65, 0x5e, 0x35, 0xa8, 0xbd, 0xc0, 0xc7, 0x60, 0xcf,
+    0xc2, 0xc0, 0x94, 0xf0, 0xd9, 0x45, 0xc5, 0x15, 0x89, 0xb6, 0x83, 0xe2,
+    0xa7, 0xc4, 0xb0, 0xd6, 0xfb, 0x44, 0x94, 0x28, 0xbd, 0x2d, 0x5b, 0xc2,
+    0xfc, 0xa8, 0xba, 0x41, 0x68, 0x61, 0x95, 0xac, 0x7d, 0x3b, 0xc7, 0xb0,
+    0xc5, 0xa4, 0x47, 0x4a, 0xf8, 0xfd, 0xc4, 0x82, 0x1b, 0x12, 0xf1, 0x79,
+    0xc8, 0xca, 0x7b, 0xea, 0x99, 0xb5, 0xf2, 0xea, 0x30, 0xff, 0x0b, 0xe5,
+    0x25, 0x66, 0x2d, 0x61, 0x01, 0xb8, 0x23, 0x82, 0x92, 0xf9, 0xc0, 0xe9,
+    0x15, 0x7e, 0xd7, 0x9f, 0xcc, 0xaf, 0x25, 0x91, 0x7b, 0xc8, 0x27, 0xe8,
+    0x37, 0xb6, 0x4a, 0xbf, 0x81, 0x5b, 0xc2, 0xe2, 0xf1, 0xff, 0x01, 0xe7,
+    0xc1, 0x25, 0xe6, 0xc2, 0x97, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x49,
+    0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
 };
 
 
@@ -844,19 +794,19 @@ ConfigurationPanel::ConfigurationPanel( QWidget* parent, const char* name, bool
 
     ConfigurationPanelLayout->addWidget( Menu, 0, 0 );
 
-    layout17 = new QVBoxLayout( 0, 0, 6, "layout17"); 
+    layout19_2 = new QVBoxLayout( 0, 0, 6, "layout19_2"); 
 
     TitleTab = new QLabel( this, "TitleTab" );
     QFont TitleTab_font(  TitleTab->font() );
     TitleTab_font.setBold( TRUE );
     TitleTab->setFont( TitleTab_font ); 
-    layout17->addWidget( TitleTab );
+    layout19_2->addWidget( TitleTab );
 
     line2 = new QFrame( this, "line2" );
     line2->setFrameShape( QFrame::HLine );
     line2->setFrameShadow( QFrame::Sunken );
     line2->setFrameShape( QFrame::HLine );
-    layout17->addWidget( line2 );
+    layout19_2->addWidget( line2 );
 
     Tab_Signalisations = new QTabWidget( this, "Tab_Signalisations" );
 
@@ -925,17 +875,17 @@ ConfigurationPanel::ConfigurationPanel( QWidget* parent, const char* name, bool
 
     layout23 = new QVBoxLayout( 0, 0, 6, "layout23"); 
 
-    layout19_2 = new QHBoxLayout( 0, 0, 6, "layout19_2"); 
+    layout19_3 = new QHBoxLayout( 0, 0, 6, "layout19_3"); 
 
     autoregister = new QCheckBox( privateLayoutWidget, "autoregister" );
     autoregister->setChecked( TRUE );
-    layout19_2->addWidget( autoregister );
+    layout19_3->addWidget( autoregister );
     spacer7 = new QSpacerItem( 201, 21, QSizePolicy::Expanding, QSizePolicy::Minimum );
-    layout19_2->addItem( spacer7 );
+    layout19_3->addItem( spacer7 );
 
     Register = new QPushButton( privateLayoutWidget, "Register" );
-    layout19_2->addWidget( Register );
-    layout23->addLayout( layout19_2 );
+    layout19_3->addWidget( Register );
+    layout23->addLayout( layout19_3 );
     spacer9 = new QSpacerItem( 20, 21, QSizePolicy::Minimum, QSizePolicy::Expanding );
     layout23->addItem( spacer9 );
     layout24->addLayout( layout23 );
@@ -1017,7 +967,7 @@ ConfigurationPanel::ConfigurationPanel( QWidget* parent, const char* name, bool
 
     SettingsDTMFLayout->addLayout( layout11, 0, 0 );
     Tab_Signalisations->insertTab( DTMFPage, QString("") );
-    layout17->addWidget( Tab_Signalisations );
+    layout19_2->addWidget( Tab_Signalisations );
 
     Tab_Audio = new QTabWidget( this, "Tab_Audio" );
 
@@ -1043,52 +993,37 @@ ConfigurationPanel::ConfigurationPanel( QWidget* parent, const char* name, bool
     CodecsPage = new QWidget( Tab_Audio, "CodecsPage" );
 
     CodecsChoice = new QButtonGroup( CodecsPage, "CodecsChoice" );
-    CodecsChoice->setGeometry( QRect( 20, 10, 126, 196 ) );
-    CodecsChoice->setColumnLayout(0, Qt::Vertical );
-    CodecsChoice->layout()->setSpacing( 6 );
-    CodecsChoice->layout()->setMargin( 11 );
-    CodecsChoiceLayout = new QGridLayout( CodecsChoice->layout() );
-    CodecsChoiceLayout->setAlignment( Qt::AlignTop );
-
-    layout11_2 = new QHBoxLayout( 0, 0, 6, "layout11_2"); 
-
-    layout9 = new QVBoxLayout( 0, 0, 6, "layout9"); 
+    CodecsChoice->setGeometry( QRect( 20, 10, 133, 157 ) );
 
-    codec1 = new QComboBox( FALSE, CodecsChoice, "codec1" );
-    layout9->addWidget( codec1 );
+    QWidget* privateLayoutWidget_2 = new QWidget( CodecsChoice, "layout18" );
+    privateLayoutWidget_2->setGeometry( QRect( 10, 20, 110, 120 ) );
+    layout18 = new QGridLayout( privateLayoutWidget_2, 1, 1, 11, 6, "layout18"); 
 
-    codec2 = new QComboBox( FALSE, CodecsChoice, "codec2" );
-    layout9->addWidget( codec2 );
-
-    codec3 = new QComboBox( FALSE, CodecsChoice, "codec3" );
-    layout9->addWidget( codec3 );
+    layout17 = new QVBoxLayout( 0, 0, 6, "layout17"); 
 
-    codec4 = new QComboBox( FALSE, CodecsChoice, "codec4" );
-    layout9->addWidget( codec4 );
+    codec1 = new QComboBox( FALSE, privateLayoutWidget_2, "codec1" );
+    layout17->addWidget( codec1 );
 
-    codec5 = new QComboBox( FALSE, CodecsChoice, "codec5" );
-    layout9->addWidget( codec5 );
-    layout11_2->addLayout( layout9 );
+    codec2 = new QComboBox( FALSE, privateLayoutWidget_2, "codec2" );
+    layout17->addWidget( codec2 );
 
-    layout10_2 = new QVBoxLayout( 0, 0, 6, "layout10_2"); 
+    codec3 = new QComboBox( FALSE, privateLayoutWidget_2, "codec3" );
+    layout17->addWidget( codec3 );
 
-    textLabel1_4 = new QLabel( CodecsChoice, "textLabel1_4" );
-    layout10_2->addWidget( textLabel1_4 );
+    layout18->addLayout( layout17, 0, 0 );
 
-    textLabel1_4_2 = new QLabel( CodecsChoice, "textLabel1_4_2" );
-    layout10_2->addWidget( textLabel1_4_2 );
+    layout18_2 = new QVBoxLayout( 0, 0, 6, "layout18_2"); 
 
-    textLabel1_4_3 = new QLabel( CodecsChoice, "textLabel1_4_3" );
-    layout10_2->addWidget( textLabel1_4_3 );
+    textLabel1_4 = new QLabel( privateLayoutWidget_2, "textLabel1_4" );
+    layout18_2->addWidget( textLabel1_4 );
 
-    textLabel1_4_4 = new QLabel( CodecsChoice, "textLabel1_4_4" );
-    layout10_2->addWidget( textLabel1_4_4 );
+    textLabel1_4_2 = new QLabel( privateLayoutWidget_2, "textLabel1_4_2" );
+    layout18_2->addWidget( textLabel1_4_2 );
 
-    textLabel1_4_5 = new QLabel( CodecsChoice, "textLabel1_4_5" );
-    layout10_2->addWidget( textLabel1_4_5 );
-    layout11_2->addLayout( layout10_2 );
+    textLabel1_4_3 = new QLabel( privateLayoutWidget_2, "textLabel1_4_3" );
+    layout18_2->addWidget( textLabel1_4_3 );
 
-    CodecsChoiceLayout->addLayout( layout11_2, 0, 0 );
+    layout18->addLayout( layout18_2, 0, 1 );
     Tab_Audio->insertTab( CodecsPage, QString("") );
 
     RingPage = new QWidget( Tab_Audio, "RingPage" );
@@ -1096,7 +1031,7 @@ ConfigurationPanel::ConfigurationPanel( QWidget* parent, const char* name, bool
     ringsChoice = new QComboBox( FALSE, RingPage, "ringsChoice" );
     ringsChoice->setGeometry( QRect( 20, 21, 150, 30 ) );
     Tab_Audio->insertTab( RingPage, QString("") );
-    layout17->addWidget( Tab_Audio );
+    layout19_2->addWidget( Tab_Audio );
 
     Tab_Preferences = new QTabWidget( this, "Tab_Preferences" );
 
@@ -1111,40 +1046,40 @@ ConfigurationPanel::ConfigurationPanel( QWidget* parent, const char* name, bool
 
     TabPage = new QWidget( Tab_Preferences, "TabPage" );
 
-    QWidget* privateLayoutWidget_2 = new QWidget( TabPage, "layout17" );
-    privateLayoutWidget_2->setGeometry( QRect( 10, 10, 262, 200 ) );
-    layout17_2 = new QVBoxLayout( privateLayoutWidget_2, 11, 6, "layout17_2"); 
+    QWidget* privateLayoutWidget_3 = new QWidget( TabPage, "layout17" );
+    privateLayoutWidget_3->setGeometry( QRect( 10, 10, 262, 200 ) );
+    layout17_2 = new QVBoxLayout( privateLayoutWidget_3, 11, 6, "layout17_2"); 
 
     layout16 = new QHBoxLayout( 0, 0, 6, "layout16"); 
 
-    textLabel1_2 = new QLabel( privateLayoutWidget_2, "textLabel1_2" );
+    textLabel1_2 = new QLabel( privateLayoutWidget_3, "textLabel1_2" );
     layout16->addWidget( textLabel1_2 );
 
-    zoneToneChoice = new QComboBox( FALSE, privateLayoutWidget_2, "zoneToneChoice" );
+    zoneToneChoice = new QComboBox( FALSE, privateLayoutWidget_3, "zoneToneChoice" );
     layout16->addWidget( zoneToneChoice );
     spacer5 = new QSpacerItem( 31, 21, QSizePolicy::Expanding, QSizePolicy::Minimum );
     layout16->addItem( spacer5 );
     layout17_2->addLayout( layout16 );
 
-    confirmationToQuit = new QCheckBox( privateLayoutWidget_2, "confirmationToQuit" );
+    confirmationToQuit = new QCheckBox( privateLayoutWidget_3, "confirmationToQuit" );
     confirmationToQuit->setChecked( TRUE );
     layout17_2->addWidget( confirmationToQuit );
 
-    checkedTray = new QCheckBox( privateLayoutWidget_2, "checkedTray" );
+    checkedTray = new QCheckBox( privateLayoutWidget_3, "checkedTray" );
     layout17_2->addWidget( checkedTray );
 
     layout16_2 = new QHBoxLayout( 0, 0, 6, "layout16_2"); 
 
-    textLabel1_6 = new QLabel( privateLayoutWidget_2, "textLabel1_6" );
+    textLabel1_6 = new QLabel( privateLayoutWidget_3, "textLabel1_6" );
     layout16_2->addWidget( textLabel1_6 );
 
-    voicemailNumber = new QLineEdit( privateLayoutWidget_2, "voicemailNumber" );
+    voicemailNumber = new QLineEdit( privateLayoutWidget_3, "voicemailNumber" );
     layout16_2->addWidget( voicemailNumber );
     spacer6_2 = new QSpacerItem( 61, 21, QSizePolicy::Expanding, QSizePolicy::Minimum );
     layout16_2->addItem( spacer6_2 );
     layout17_2->addLayout( layout16_2 );
     Tab_Preferences->insertTab( TabPage, QString("") );
-    layout17->addWidget( Tab_Preferences );
+    layout19_2->addWidget( Tab_Preferences );
 
     Tab_About = new QTabWidget( this, "Tab_About" );
 
@@ -1169,9 +1104,9 @@ ConfigurationPanel::ConfigurationPanel( QWidget* parent, const char* name, bool
     pixmapLabel2->setPixmap( image1 );
     pixmapLabel2->setScaledContents( TRUE );
     Tab_About->insertTab( CodecsPage_2, QString("") );
-    layout17->addWidget( Tab_About );
+    layout19_2->addWidget( Tab_About );
 
-    ConfigurationPanelLayout->addLayout( layout17, 0, 1 );
+    ConfigurationPanelLayout->addLayout( layout19_2, 0, 1 );
     languageChange();
     resize( QSize(561, 552).expandedTo(minimumSizeHint()) );
     clearWState( WState_Polished );
@@ -1214,9 +1149,7 @@ ConfigurationPanel::ConfigurationPanel( QWidget* parent, const char* name, bool
     setTabOrder( ossButton, codec1 );
     setTabOrder( codec1, codec2 );
     setTabOrder( codec2, codec3 );
-    setTabOrder( codec3, codec4 );
-    setTabOrder( codec4, codec5 );
-    setTabOrder( codec5, Tab_Preferences );
+    setTabOrder( codec3, Tab_Preferences );
     setTabOrder( Tab_Preferences, Tab_About );
     setTabOrder( Tab_About, Register );
     setTabOrder( Register, useStunNo );
@@ -1292,19 +1225,9 @@ void ConfigurationPanel::languageChange()
     codec3->insertItem( tr( "G711u" ) );
     codec3->insertItem( tr( "G711a" ) );
     codec3->insertItem( tr( "GSM" ) );
-    codec4->clear();
-    codec4->insertItem( tr( "G711u" ) );
-    codec4->insertItem( tr( "G711a" ) );
-    codec4->insertItem( tr( "GSM" ) );
-    codec5->clear();
-    codec5->insertItem( tr( "G711u" ) );
-    codec5->insertItem( tr( "G711a" ) );
-    codec5->insertItem( tr( "GSM" ) );
     textLabel1_4->setText( tr( "1" ) );
     textLabel1_4_2->setText( tr( "2" ) );
     textLabel1_4_3->setText( tr( "3" ) );
-    textLabel1_4_4->setText( tr( "4" ) );
-    textLabel1_4_5->setText( tr( "5" ) );
     Tab_Audio->changeTab( CodecsPage, tr( "Codecs" ) );
     Tab_Audio->changeTab( RingPage, tr( "Ringtones" ) );
     buttonApplySkin->setText( tr( "&Apply" ) );
diff --git a/src/gui/qt/configurationpanelui.h b/src/gui/qt/configurationpanelui.h
index 0441341e73..069f5dead4 100644
--- a/src/gui/qt/configurationpanelui.h
+++ b/src/gui/qt/configurationpanelui.h
@@ -1,7 +1,7 @@
 /****************************************************************************
 ** Form interface generated from reading ui file 'gui/qt/configurationpanel.ui'
 **
-** Created: Mon May 30 14:35:17 2005
+** Created: Thu Jun 2 11:14:54 2005
 **      by: The User Interface Compiler ($Id$)
 **
 ** WARNING! All changes made in this file will be lost!
@@ -90,13 +90,9 @@ public:
     QComboBox* codec1;
     QComboBox* codec2;
     QComboBox* codec3;
-    QComboBox* codec4;
-    QComboBox* codec5;
     QLabel* textLabel1_4;
     QLabel* textLabel1_4_2;
     QLabel* textLabel1_4_3;
-    QLabel* textLabel1_4_4;
-    QLabel* textLabel1_4_5;
     QWidget* RingPage;
     QComboBox* ringsChoice;
     QTabWidget* Tab_Preferences;
@@ -130,12 +126,12 @@ protected:
     QVBoxLayout* layout19;
     QHBoxLayout* layout28;
     QSpacerItem* Horizontal_Spacing2;
-    QVBoxLayout* layout17;
+    QVBoxLayout* layout19_2;
     QVBoxLayout* layout24;
     QGridLayout* groupBox1Layout;
     QVBoxLayout* layout23;
     QSpacerItem* spacer9;
-    QHBoxLayout* layout19_2;
+    QHBoxLayout* layout19_3;
     QSpacerItem* spacer7;
     QVBoxLayout* stunButtonGroupLayout;
     QGridLayout* SettingsDTMFLayout;
@@ -147,10 +143,9 @@ protected:
     QHBoxLayout* layout8;
     QSpacerItem* spacer4;
     QVBoxLayout* DriverChoiceLayout;
-    QGridLayout* CodecsChoiceLayout;
-    QHBoxLayout* layout11_2;
-    QVBoxLayout* layout9;
-    QVBoxLayout* layout10_2;
+    QGridLayout* layout18;
+    QVBoxLayout* layout17;
+    QVBoxLayout* layout18_2;
     QVBoxLayout* layout17_2;
     QHBoxLayout* layout16;
     QSpacerItem* spacer5;
diff --git a/src/gui/qt/qtGUImainwindow.cpp b/src/gui/qt/qtGUImainwindow.cpp
index 27eebb746a..b04b81aeb9 100644
--- a/src/gui/qt/qtGUImainwindow.cpp
+++ b/src/gui/qt/qtGUImainwindow.cpp
@@ -1428,8 +1428,9 @@ void
 QtGUIMainWindow::pressedKeySlot (int id) {
 	char code = 0;
     int pulselen = 0;
-    int a = 0;
 	int callid;
+	float32* tmp_urg_data;
+	float32* buf_ctrl_vol;
                                                                                 
     // Stop dial tone
     if (_dialtone) {
@@ -1464,16 +1465,30 @@ QtGUIMainWindow::pressedKeySlot (int id) {
 			
 	pulselen = get_config_fields_int(SIGNALISATION, PULSE_LENGTH);
 	int size = pulselen * (OCTETS/1000);
+
+	// Control volume
+	buf_ctrl_vol = new float32[size];
+	for (int j = 0; j < size; j++) {
+		buf_ctrl_vol[j] = _buf[j] * _callmanager->getSpkrVolume()/100;
+	}
 	
-	_callmanager->getAudioDriver()->mydata.dataToAdd = _buf;
-	_callmanager->getAudioDriver()->mydata.dataToAddRem = size;
-	_callmanager->getAudioDriver()->mydata.dataFilled = 0;
-	
-	if (!_callmanager->getAudioDriver()->isStreamActive()) {
-		_callmanager->getAudioDriver()->startStream();
+	// Free urg_data pointer
+	tmp_urg_data = _callmanager->getAudioDriver()->mydata.urg_data;
+	if (tmp_urg_data != NULL) {
+		free (tmp_urg_data);
 	}
+
+	// Init struct mydata
+	tmp_urg_data = buf_ctrl_vol;
+	_callmanager->getAudioDriver()->mydata.urg_ptr = tmp_urg_data;
+	_callmanager->getAudioDriver()->mydata.urg_remain = size;
+	
+	_callmanager->getAudioDriver()->startStream();
 	_callmanager->getAudioDriver()->sleep(pulselen);
 	_callmanager->getAudioDriver()->stopStream();
+	_callmanager->getAudioDriver()->mydata.urg_remain = 0;
+	
+	delete[] buf_ctrl_vol;
 }
 
 // Save settings in config-file
diff --git a/src/gui/qt/url_inputui.cpp b/src/gui/qt/url_inputui.cpp
index 645486ae01..807502944b 100644
--- a/src/gui/qt/url_inputui.cpp
+++ b/src/gui/qt/url_inputui.cpp
@@ -1,7 +1,7 @@
 /****************************************************************************
 ** Form implementation generated from reading ui file 'gui/qt/url_input.ui'
 **
-** Created: Mon May 30 14:35:16 2005
+** Created: Thu Jun 2 11:14:54 2005
 **      by: The User Interface Compiler ($Id$)
 **
 ** WARNING! All changes made in this file will be lost!
diff --git a/src/gui/qt/url_inputui.h b/src/gui/qt/url_inputui.h
index 94ee317cdc..a147bba7d9 100644
--- a/src/gui/qt/url_inputui.h
+++ b/src/gui/qt/url_inputui.h
@@ -1,7 +1,7 @@
 /****************************************************************************
 ** Form interface generated from reading ui file 'gui/qt/url_input.ui'
 **
-** Created: Mon May 30 14:35:16 2005
+** Created: Thu Jun 2 11:14:54 2005
 **      by: The User Interface Compiler ($Id$)
 **
 ** WARNING! All changes made in this file will be lost!
diff --git a/src/manager.cpp b/src/manager.cpp
index f582e24977..f78a4cb5f6 100644
--- a/src/manager.cpp
+++ b/src/manager.cpp
@@ -446,8 +446,8 @@ Manager::peerAnsweredCall (short id)
 	call = getCall(id);
 	call->setStatus(string(CONNECTED_STATUS));
 	call->setState(Answered);
-	_gui->peerAnsweredCall(id);
 	ringback(false);
+	_gui->peerAnsweredCall(id);
 	displayStatus(CONNECTED_STATUS);
 	return 1;
 }
@@ -460,8 +460,8 @@ Manager::peerRingingCall (short id)
 	call = getCall(id);
 	call->setStatus(string(RINGING_STATUS));
 	call->setState(Ringing);
-	_gui->peerRingingCall(id);
 	ringback(true);
+	_gui->peerRingingCall(id);
 	displayStatus(RINGING_STATUS);	
 	return 1;
 }
@@ -551,14 +551,37 @@ Manager::ringtone (bool var) {
 
 void
 Manager::notificationIncomingCall (void) {
-    float32 *buffer = new float32[SAMPLING_RATE];
+	float32* tmp_urg_data;
+    float32* buf_ctrl_vol;
+    float32* buffer = new float32[SAMPLING_RATE];
+	int size = SAMPLING_RATE/2;
                                                                                 
-    _tone->generateSin(440, 0, SAMPLING_RATE, buffer);
-                                                                                
-	getAudioDriver()->mydata.dataToAdd = buffer;
-	getAudioDriver()->mydata.dataToAddRem = SAMPLING_RATE/2;
+    _tone->generateSin(440, 0, buffer);
+           
+	// Control volume
+	buf_ctrl_vol = new float32[size];
+	for (int j = 0; j < size; j++) {
+		buf_ctrl_vol[j] = buffer[j] * getSpkrVolume()/100;
+	}
+	
+	// Free urg_data pointer
+	tmp_urg_data = getAudioDriver()->mydata.urg_data;
+	if (tmp_urg_data != NULL) {
+		free (tmp_urg_data);
+	}
+
+	// Init struct mydata
+	tmp_urg_data = buf_ctrl_vol;
+	getAudioDriver()->mydata.urg_ptr = tmp_urg_data;
+	getAudioDriver()->mydata.urg_remain = size;
+
+	getAudioDriver()->startStream();
+	getAudioDriver()->sleep(250);
+	getAudioDriver()->stopStream();
+	getAudioDriver()->mydata.urg_remain = 0;
 	
     delete[] buffer;
+    delete[] buf_ctrl_vol;
 }
 
 void
@@ -694,21 +717,17 @@ Manager::initConfigFile (void)
 void
 Manager::initAudioCodec (void)
 {
-	_nCodecs = 3;//get_config_fields_int(AUDIO, NB_CODEC);
+	_nCodecs = get_config_fields_int(AUDIO, NB_CODEC);
 	_codecDescVector = new CodecDescriptorVector();
-	_codecDescVector->push_back(new CodecDescriptor(PAYLOAD_CODEC_ULAW, 
-				CODEC_ULAW));
-	_codecDescVector->push_back(new CodecDescriptor(PAYLOAD_CODEC_ALAW, 
-				CODEC_ALAW));
-	_codecDescVector->push_back(new CodecDescriptor(PAYLOAD_CODEC_GSM, 
-				CODEC_GSM));
-	// TODO: When these codec will be implemented, remove comment
-#if 0
-	_codecDescVector->push_back(new CodecDescriptor(PAYLOAD_CODEC_ILBC, 
-				CODEC_ILBC));
-	_codecDescVector->push_back(new CodecDescriptor(PAYLOAD_CODEC_SPEEX, 
-				CODEC_SPEEX));
-#endif
+	
+	_codecDescVector->push_back(new CodecDescriptor(
+				get_config_fields_str(AUDIO, CODEC1)));
+
+	_codecDescVector->push_back(new CodecDescriptor(
+				get_config_fields_str(AUDIO, CODEC2)));
+	
+	_codecDescVector->push_back(new CodecDescriptor(
+				get_config_fields_str(AUDIO, CODEC3)));
 }
 
 void
diff --git a/src/sipvoiplink.cpp b/src/sipvoiplink.cpp
index e790c49bb7..6d80f13621 100644
--- a/src/sipvoiplink.cpp
+++ b/src/sipvoiplink.cpp
@@ -145,8 +145,7 @@ SipVoIPLink::initRtpmapCodec (void)
 		// Add payload to rtpmap if it is not already added
 		if (!isInRtpmap(i, payload, _manager->getCodecDescVector())) {
 			snprintf(rtpmap, 127, "%d %s/%d", payload, 
-				_manager->getCodecDescVector()->at(i)->rtpmapPayload(payload).data(), 
-				SAMPLING_RATE);
+				_manager->getCodecDescVector()->at(i)->rtpmapPayload(payload).data(), SAMPLING_RATE);
 			snprintf(tmp, 63, "%d", payload);
 			
 			eXosip_sdp_negotiation_add_codec( osip_strdup(tmp), NULL,
@@ -373,8 +372,9 @@ SipVoIPLink::getEvent (void)
 	char *name;
 	static int countReg = 0;
 
-	event = eXosip_event_wait (0, 50);
+	
 	eXosip_automatic_refresh();
+	event = eXosip_event_wait (0, 50);
 	if (event == NULL) {
 		return -1;
 	}	
-- 
GitLab