From nobody@FreeBSD.org  Mon Oct 15 04:35:46 2007
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id EFA8F16A419
	for <freebsd-gnats-submit@FreeBSD.org>; Mon, 15 Oct 2007 04:35:46 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21])
	by mx1.freebsd.org (Postfix) with ESMTP id D6E8213C474
	for <freebsd-gnats-submit@FreeBSD.org>; Mon, 15 Oct 2007 04:35:46 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.14.1/8.14.1) with ESMTP id l9F4Zd5q007982
	for <freebsd-gnats-submit@FreeBSD.org>; Mon, 15 Oct 2007 04:35:39 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.14.1/8.14.1/Submit) id l9F4ZdHP007981;
	Mon, 15 Oct 2007 04:35:39 GMT
	(envelope-from nobody)
Message-Id: <200710150435.l9F4ZdHP007981@www.freebsd.org>
Date: Mon, 15 Oct 2007 04:35:39 GMT
From: Vladimir Korkodinov <viper@perm.raid.ru>
To: freebsd-gnats-submit@FreeBSD.org
Subject: [UPDATE] net/asterisk to 1.4.13
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         117199
>Category:       ports
>Synopsis:       [UPDATE] net/asterisk to 1.4.13
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    sobomax
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          update
>Submitter-Id:   current-users
>Arrival-Date:   Mon Oct 15 04:40:02 UTC 2007
>Closed-Date:    Sat Jan 12 00:29:58 UTC 2008
>Last-Modified:  Sat Jan 12 00:29:58 UTC 2008
>Originator:     Vladimir Korkodinov
>Release:        FreeBSD 6.2-STABLE
>Organization:
>Environment:
FreeBSD monitor4 6.2-STABLE FreeBSD 6.2-STABLE #3: Wed Aug 29 14:50:03 YEKST 2007     viper@monitor4:/usr/obj/usr/src/sys/viper2  i386

>Description:
http://www.asterisk.org/node/48390
"The Asterisk Development Team has released version 1.4.13.

This release fixes a couple of security issues in the implementation of IMAP
storage for voicemail. One of the issues is remotely exploitable. Any systems
that do not use IMAP storage for voicemail are not affected by these issues.
For more details on this issue, see the Asterisk security advisory here:

    * http://downloads.digium.com/pub/asa/AST-2007-022.pdf

This release also contains some other bug fixes that have been merged in the
past week or so. The other fixes include resolutions for a few different
deadlocks, a couple of problems in res_jabber, chan_sip and RTP fixes, and a few
more minor issues. See the ChangeLog for a full listing of the changes:

    * http://downloads.digium.com/pub/telephony/asterisk/ChangeLog-1.4.13
"


From page http://www.soft-switch.org/spandsp-known-issues.html
"spandsp-0.0.2pre4

The following are known issues with version 0.0.2pre4 of spandsp.

    * The FAX image handling in libtiff 3.6.1 is broken, so this version of libtiff will not function correctly with spandsp (or HylaFAX, or any other FAX software, I guess).
    * It seems possible for the libtiff library to fall over when handling some bad TIFF files. If spandsp is being used with Asterisk, this might bring the entire PBX down. So far only one person has reported this. Recent security update patches for libtiff 3.5.7, 3.6.0, and 3.6.1 hopefully correct this problem."
Now is present in the ports version 0.3 of spandsp and version 3.8.2 of libtiff.

>How-To-Repeat:

>Fix:
Apply patch
What makes this patch.
1. Adds support for faxes(rxfax and txfax). Compiled only with spandsp> 0.0.3
2. Adds option to build asterisk with the option IMAP STORAGE.
3. Upgrading to version 1.4.13


Patch attached with submission follows:

diff -ruN asterisk.old/Makefile asterisk/Makefile
--- asterisk.old/Makefile	2007-10-09 09:33:47.000000000 +0600
+++ asterisk/Makefile	2007-10-15 10:11:25.000000000 +0600
@@ -6,8 +6,8 @@
 #
 
 PORTNAME=	asterisk
-PORTVERSION=	1.4.11
-PORTREVISION=	2
+PORTVERSION=	1.4.13
+PORTREVISION=	1
 CATEGORIES=	net
 MASTER_SITES=	http://ftp.digium.com/pub/asterisk/ \
 		http://ftp.digium.com/pub/asterisk/old-releases/
@@ -48,7 +48,10 @@
 		FREETDS		"Enable FreeTDS support" on \
 		JABBER		"Enable Jabber and Gtalk support" on \
 		SQLITE          "Enable SQLITE support" on \
-		CODEC_PATCH	"Apply codec negotiation patch" off
+		IMAP            "Enable IMAP support" off \
+		FAX             "Enable FAX support" on	
+
+##		CODEC_PATCH	"Apply codec negotiation patch" off
 
 .include <bsd.port.pre.mk>
 
@@ -156,16 +159,60 @@
 LIB_DEPENDS+=	sqlite:${PORTSDIR}/databases/sqlite2
 .endif
 
-.if defined(WITH_CODEC_PATCH)
-PATCHFILES=	asterisk-1.4.11-codec-negotiation-20070831.diff.gz
-PATCH_SITES=	http://b2bua.org/chrome/site/
-EXTRA_PATCHES+=	${PATCHDIR}/codecnego-patch-Makefile
-.else
-EXTRA_PATCHES+=	${PATCHDIR}/nocodecnego-patch-Makefile
+#.if defined(WITH_CODEC_PATCH)
+#PATCHFILES=	asterisk-1.4.11-codec-negotiation-20070831.diff.gz
+#PATCH_SITES=	http://b2bua.org/chrome/site/
+#EXTRA_PATCHES+=	${PATCHDIR}/codecnego-patch-Makefile
+#.else
+#EXTRA_PATCHES+=	${PATCHDIR}/nocodecnego-patch-Makefile
+#.endif
+
+.if defined(WITHOUT_FAX)
+PLIST_SUB+=    WITH_FAX="@comment "
+.else
+MAKE_ENV+=     WITH_FAX=yes
+CONFIGURE_ARGS+= --with-spandsp=yes
+BUILD_DEPENDS+= spandsp>=0.0.3:${PORTSDIR}/comms/spandsp
+LIB_DEPENDS+=  spandsp.0:${PORTSDIR}/comms/spandsp
+PLIST_SUB+=    WITH_FAX=""
+.endif
+
+.if defined(WITHOUT_IMAP)
+PLIST_SUB+=    WITH_IMAP="@comment "
+.else
+MAKE_ENV+=     WITH_IMAP=yes
+CONFIGURE_ARGS+= --with-imap=${LOCALBASE}
+LIB_DEPENDS+=  c-client4.9:${PORTSDIR}/mail/cclient
+PLIST_SUB+=    WITH_IMAP=""
 .endif
 
 
 post-patch:
 	${REINPLACE_CMD} -e 's|/var/lib|${PREFIX}/share|g' ${WRKSRC}/configs/musiconhold.conf.sample
 
+pre-configure:
+
+.if defined(WITH_ODBC) && defined(WITH_IMAP)
+	@${ECHO_MSG}    ""
+	@${ECHO_MSG}    "WARNING!!! You can choose only one option for build app_voicemail"
+	@${ECHO_MSG}    ""
+.endif
+.if defined(WITH_ODBC)
+	@${ECHO_MSG}    ""
+	@${ECHO_MSG}    "If necessary, build  with the option ODBC_STORAGE"
+	@${ECHO_MSG}    "press Ctrl-C and run following command:"
+	@${ECHO_MSG}    "1. cd work/asterisk-1.4.x"
+	@${ECHO_MSG}    "2. gmake menuselect"
+	@${ECHO_MSG}    "3. Select 'Voicemail Build Options->ODBC_STORAGE'"
+.endif
+
+.if defined(WITH_IMAP)
+	@${ECHO_MSG}    ""
+	@${ECHO_MSG}    "If necessary, build  with the option IMAP_STORAGE"
+	@${ECHO_MSG}    "press Ctrl-C and run following command:"
+	@${ECHO_MSG}    "1. cd work/asterisk-1.4.x"
+	@${ECHO_MSG}    "2. gmake menuselect"
+	@${ECHO_MSG}    "3. Select 'Voicemail Build Options->IMAP_STORAGE'"
+.endif
+
 .include <bsd.port.post.mk>
diff -ruN asterisk.old/distinfo asterisk/distinfo
--- asterisk.old/distinfo	2007-09-03 14:18:57.000000000 +0600
+++ asterisk/distinfo	2007-10-12 12:00:44.000000000 +0600
@@ -1,6 +1,3 @@
-MD5 (asterisk-1.4.11.tar.gz) = 3ba9b399fedc68de4845b1c5603d167c
-SHA256 (asterisk-1.4.11.tar.gz) = 99928f8aab62e532e71fdecbd18d5af2d211f1bbce27cf9cf2efc34e57a20101
-SIZE (asterisk-1.4.11.tar.gz) = 11218944
-MD5 (asterisk-1.4.11-codec-negotiation-20070831.diff.gz) = cf2385047d55ffffcff7197480e54c79
-SHA256 (asterisk-1.4.11-codec-negotiation-20070831.diff.gz) = 9d6b6efcbf20b35f407aa53320b649c0d884cce9b519435c7ea3aa8a51b2b42f
-SIZE (asterisk-1.4.11-codec-negotiation-20070831.diff.gz) = 37651
+MD5 (asterisk-1.4.13.tar.gz) = 49b73114831c21cc9784d3b3f4fb5bec
+SHA256 (asterisk-1.4.13.tar.gz) = 0bea2f612c7b6ebcfb97c77d473a45018a3e112e5610ff7fab83561be7b19449
+SIZE (asterisk-1.4.13.tar.gz) = 11257579
diff -ruN asterisk.old/files/patch-apps::app_rxfax.c asterisk/files/patch-apps::app_rxfax.c
--- asterisk.old/files/patch-apps::app_rxfax.c	1970-01-01 05:00:00.000000000 +0500
+++ asterisk/files/patch-apps::app_rxfax.c	2007-07-23 15:01:57.000000000 +0600
@@ -0,0 +1,383 @@
+--- apps/app_rxfax.c.orig	Tue Jul 10 15:28:04 2007
++++ apps/app_rxfax.c	Tue Jul 10 15:27:28 2007
+@@ -0,0 +1,380 @@
++/*
++ * Asterisk -- A telephony toolkit for Linux.
++ *
++ * Trivial application to receive a TIFF FAX file
++ * 
++ * Copyright (C) 2003, Steve Underwood
++ *
++ * Steve Underwood <steveu@coppice.org>
++ *
++ * This program is free software, distributed under the terms of
++ * the GNU General Public License
++ */
++
++/*** MODULEINFO
++         <depend>spandsp</depend>
++***/
++ 
++#include "asterisk.h"
++
++ASTERISK_FILE_VERSION(__FILE__, "$Revision:$")
++
++#include <string.h>
++#include <stdlib.h>
++#include <stdio.h>
++#include <inttypes.h>
++#include <pthread.h>
++#include <errno.h>
++#include <tiffio.h>
++
++#include <spandsp.h>
++
++#include "asterisk/lock.h"
++#include "asterisk/file.h"
++#include "asterisk/logger.h"
++#include "asterisk/channel.h"
++#include "asterisk/pbx.h"
++#include "asterisk/module.h"
++#include "asterisk/manager.h"
++
++#ifndef AST_MODULE
++#define AST_MODULE "app_rxfax"
++#endif
++
++static char *app = "RxFAX";
++
++static char *synopsis = "Receive a FAX to a file";
++
++static char *descrip = 
++"  RxFAX(filename[|caller][|debug]): Receives a FAX from the channel into the\n"
++"given filename. If the file exists it will be overwritten. The file\n"
++"should be in TIFF/F format.\n"
++"The \"caller\" option makes the application behave as a calling machine,\n"
++"rather than the answering machine. The default behaviour is to behave as\n"
++"an answering machine.\n"
++"Uses LOCALSTATIONID to identify itself to the remote end.\n"
++"     LOCALHEADERINFO to generate a header line on each page.\n"
++"Sets REMOTESTATIONID to the sender CSID.\n"
++"     FAXPAGES to the number of pages received.\n"
++"     FAXBITRATE to the transmition rate.\n"
++"     FAXRESOLUTION to the resolution.\n"
++"Returns -1 when the user hangs up.\n"
++"Returns 0 otherwise.\n";
++
++#define MAX_BLOCK_SIZE 240
++
++static void span_message(int level, const char *msg)
++{
++    int ast_level;
++    
++    if (level == SPAN_LOG_WARNING)
++        ast_level = __LOG_WARNING;
++    else if (level == SPAN_LOG_WARNING)
++        ast_level = __LOG_WARNING;
++    else
++        ast_level = __LOG_DEBUG;
++    ast_log(ast_level, __FILE__, __LINE__, __PRETTY_FUNCTION__, msg);
++}
++/*- End of function --------------------------------------------------------*/
++
++#if 0
++static void t30_flush(t30_state_t *s, int which)
++{
++    /* TODO: */
++}
++/*- End of function --------------------------------------------------------*/
++#endif
++
++static void phase_e_handler(t30_state_t *s, void *user_data, int result)
++{
++    struct ast_channel *chan;
++    t30_stats_t t;
++    char local_ident[21];
++    char far_ident[21];
++    char buf[11];
++    
++    chan = (struct ast_channel *) user_data;
++    if (result == T30_ERR_OK)
++    {
++        t30_get_transfer_statistics(s, &t);
++        t30_get_far_ident(s, far_ident);
++        t30_get_local_ident(s, local_ident);
++        ast_log(LOG_DEBUG, "==============================================================================\n");
++        ast_log(LOG_DEBUG, "Fax successfully received.\n");
++        ast_log(LOG_DEBUG, "Remote station id: %s\n", far_ident);
++        ast_log(LOG_DEBUG, "Local station id:  %s\n", local_ident);
++        ast_log(LOG_DEBUG, "Pages transferred: %i\n", t.pages_transferred);
++        ast_log(LOG_DEBUG, "Image resolution:  %i x %i\n", t.x_resolution, t.y_resolution);
++        ast_log(LOG_DEBUG, "Transfer Rate:     %i\n", t.bit_rate);
++        ast_log(LOG_DEBUG, "==============================================================================\n");
++        manager_event(EVENT_FLAG_CALL,
++                      "FaxReceived", "Channel: %s\nExten: %s\nCallerID: %s\nRemoteStationID: %s\nLocalStationID: %s\nPagesTransferred: %i\nResolution: %i\nTransferRate: %i\nFileName: %s\n",
++                      chan->name,
++                      chan->exten,
++                      (chan->cid.cid_num)  ?  chan->cid.cid_num  :  "",
++                      far_ident,
++                      local_ident,
++                      t.pages_transferred,
++                      t.y_resolution,
++                      t.bit_rate,
++                      s->rx_file);
++        pbx_builtin_setvar_helper(chan, "REMOTESTATIONID", far_ident);
++        snprintf(buf, sizeof(buf), "%i", t.pages_transferred);
++        pbx_builtin_setvar_helper(chan, "FAXPAGES", buf);
++        snprintf(buf, sizeof(buf), "%i", t.y_resolution);
++        pbx_builtin_setvar_helper(chan, "FAXRESOLUTION", buf);
++        snprintf(buf, sizeof(buf), "%i", t.bit_rate);
++        pbx_builtin_setvar_helper(chan, "FAXBITRATE", buf);
++    }
++    else
++    {
++        ast_log(LOG_DEBUG, "==============================================================================\n");
++        ast_log(LOG_DEBUG, "Fax receive not successful - result (%d) %s.\n", result, t30_completion_code_to_str(result));
++        ast_log(LOG_DEBUG, "==============================================================================\n");
++    }
++}
++/*- End of function --------------------------------------------------------*/
++
++static void phase_d_handler(t30_state_t *s, void *user_data, int result)
++{
++    struct ast_channel *chan;
++    t30_stats_t t;
++    
++    chan = (struct ast_channel *) user_data;
++    if (result)
++    {
++        t30_get_transfer_statistics(s, &t);
++        ast_log(LOG_DEBUG, "==============================================================================\n");
++        ast_log(LOG_DEBUG, "Pages transferred:  %i\n", t.pages_transferred);
++        ast_log(LOG_DEBUG, "Image size:         %i x %i\n", t.width, t.length);
++        ast_log(LOG_DEBUG, "Image resolution    %i x %i\n", t.x_resolution, t.y_resolution);
++        ast_log(LOG_DEBUG, "Transfer Rate:      %i\n", t.bit_rate);
++        ast_log(LOG_DEBUG, "Bad rows            %i\n", t.bad_rows);
++        ast_log(LOG_DEBUG, "Longest bad row run %i\n", t.longest_bad_row_run);
++        ast_log(LOG_DEBUG, "Compression type    %i\n", t.encoding);
++        ast_log(LOG_DEBUG, "Image size (bytes)  %i\n", t.image_size);
++        ast_log(LOG_DEBUG, "==============================================================================\n");
++    }
++}
++/*- End of function --------------------------------------------------------*/
++
++static int rxfax_exec(struct ast_channel *chan, void *data)
++{
++    int res = 0;
++    char template_file[256];
++    char target_file[256];
++    char *s;
++    char *t;
++    char *v;
++    const char *x;
++    int option;
++    int len;
++    int i;
++    fax_state_t fax;
++    int calling_party;
++    int verbose;
++    int samples;
++
++    struct ast_module_user *u;
++    struct ast_frame *inf = NULL;
++    struct ast_frame outf;
++
++    int original_read_fmt;
++    int original_write_fmt;
++    
++    uint8_t __buf[sizeof(uint16_t)*MAX_BLOCK_SIZE + 2*AST_FRIENDLY_OFFSET];
++    uint8_t *buf = __buf + AST_FRIENDLY_OFFSET;
++
++    if (chan == NULL)
++    {
++        ast_log(LOG_WARNING, "Fax receive channel is NULL. Giving up.\n");
++        return -1;
++    }
++
++    span_set_message_handler(span_message);
++
++    /* The next few lines of code parse out the filename and header from the input string */
++    if (data == NULL)
++    {
++        /* No data implies no filename or anything is present */
++        ast_log(LOG_WARNING, "Rxfax requires an argument (filename)\n");
++        return -1;
++    }
++    
++    calling_party = FALSE;
++    verbose = FALSE;
++    target_file[0] = '\0';
++
++    for (option = 0, v = s = data;  v;  option++, s++)
++    {
++        t = s;
++        v = strchr(s, '|');
++        s = (v)  ?  v  :  s + strlen(s);
++        strncpy((char *) buf, t, s - t);
++        buf[s - t] = '\0';
++        if (option == 0)
++        {
++            /* The first option is always the file name */
++            len = s - t;
++            if (len > 255)
++                len = 255;
++            strncpy(target_file, t, len);
++            target_file[len] = '\0';
++            /* Allow the use of %d in the file name for a wild card of sorts, to
++               create a new file with the specified name scheme */
++            if ((x = strchr(target_file, '%'))  &&  x[1] == 'd')
++            {
++                strcpy(template_file, target_file);
++                i = 0;
++                do
++                {
++                    snprintf(target_file, 256, template_file, 1);
++                    i++;
++                }
++                while (ast_fileexists(target_file, "", chan->language) != -1);
++            }
++        }
++        else if (strncmp("caller", t, s - t) == 0)
++        {
++            calling_party = TRUE;
++        }
++        else if (strncmp("debug", t, s - t) == 0)
++        {
++            verbose = TRUE;
++        }
++    }
++
++    /* Done parsing */
++
++    u = ast_module_user_add(chan);
++
++    if (chan->_state != AST_STATE_UP)
++    {
++        /* Shouldn't need this, but checking to see if channel is already answered
++         * Theoretically asterisk should already have answered before running the app */
++        res = ast_answer(chan);
++    }
++    
++    if (!res)
++    {
++        original_read_fmt = chan->readformat;
++        if (original_read_fmt != AST_FORMAT_SLINEAR)
++        {
++            res = ast_set_read_format(chan, AST_FORMAT_SLINEAR);
++            if (res < 0)
++            {
++                ast_log(LOG_WARNING, "Unable to set to linear read mode, giving up\n");
++                return -1;
++            }
++        }
++        original_write_fmt = chan->writeformat;
++        if (original_write_fmt != AST_FORMAT_SLINEAR)
++        {
++            res = ast_set_write_format(chan, AST_FORMAT_SLINEAR);
++            if (res < 0)
++            {
++                ast_log(LOG_WARNING, "Unable to set to linear write mode, giving up\n");
++                res = ast_set_read_format(chan, original_read_fmt);
++                if (res)
++                    ast_log(LOG_WARNING, "Unable to restore read format on '%s'\n", chan->name);
++                return -1;
++            }
++        }
++        fax_init(&fax, calling_party);
++        if (verbose)
++            fax.logging.level = SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_FLOW;
++        x = pbx_builtin_getvar_helper(chan, "LOCALSTATIONID");
++        if (x  &&  x[0])
++            t30_set_local_ident(&fax.t30_state, x);
++        x = pbx_builtin_getvar_helper(chan, "LOCALHEADERINFO");
++        if (x  &&  x[0])
++            t30_set_header_info(&fax.t30_state, x);
++        t30_set_rx_file(&fax.t30_state, target_file, -1);
++        //t30_set_phase_b_handler(&fax.t30_state, phase_b_handler, chan);
++        t30_set_phase_d_handler(&fax.t30_state, phase_d_handler, chan);
++        t30_set_phase_e_handler(&fax.t30_state, phase_e_handler, chan);
++        t30_set_ecm_capability(&fax.t30_state, TRUE);
++        t30_set_supported_compressions(&fax.t30_state, T30_SUPPORT_T4_1D_COMPRESSION | T30_SUPPORT_T4_2D_COMPRESSION | T30_SUPPORT_T6_COMPRESSION);
++        while (ast_waitfor(chan, -1) > -1)
++        {
++            inf = ast_read(chan);
++            if (inf == NULL)
++            {
++                res = -1;
++                break;
++            }
++            if (inf->frametype == AST_FRAME_VOICE)
++            {
++                if (fax_rx(&fax, inf->data, inf->samples))
++                    break;
++                samples = (inf->samples <= MAX_BLOCK_SIZE)  ?  inf->samples  :  MAX_BLOCK_SIZE;
++                len = fax_tx(&fax, (int16_t *) &buf[AST_FRIENDLY_OFFSET], samples);
++                if (len)
++                {
++                    memset(&outf, 0, sizeof(outf));
++                    outf.frametype = AST_FRAME_VOICE;
++                    outf.subclass = AST_FORMAT_SLINEAR;
++                    outf.datalen = len*sizeof(int16_t);
++                    outf.samples = len;
++                    outf.data = &buf[AST_FRIENDLY_OFFSET];
++                    outf.offset = AST_FRIENDLY_OFFSET;
++                    outf.src = "RxFAX";
++                    if (ast_write(chan, &outf) < 0)
++                    {
++                        ast_log(LOG_WARNING, "Unable to write frame to channel; %s\n", strerror(errno));
++                        break;
++                    }
++                }
++            }
++            ast_frfree(inf);
++        }
++        if (inf == NULL)
++        {
++            ast_log(LOG_DEBUG, "Got hangup\n");
++            res = -1;
++        }
++        if (original_read_fmt != AST_FORMAT_SLINEAR)
++        {
++            res = ast_set_read_format(chan, original_read_fmt);
++            if (res)
++                ast_log(LOG_WARNING, "Unable to restore read format on '%s'\n", chan->name);
++        }
++        if (original_write_fmt != AST_FORMAT_SLINEAR)
++        {
++            res = ast_set_write_format(chan, original_write_fmt);
++            if (res)
++                ast_log(LOG_WARNING, "Unable to restore write format on '%s'\n", chan->name);
++        }
++        t30_terminate(&fax.t30_state);
++    }
++    else
++    {
++        ast_log(LOG_WARNING, "Could not answer channel '%s'\n", chan->name);
++    }
++    ast_module_user_remove(u);
++    return res;
++}
++/*- End of function --------------------------------------------------------*/
++
++static int unload_module(void)
++{
++	int res;
++
++	ast_module_user_hangup_all();
++
++	res = ast_unregister_application(app);	
++	
++
++	return res;
++}
++/*- End of function --------------------------------------------------------*/
++
++static int load_module(void)
++{
++	return ast_register_application(app, rxfax_exec, synopsis, descrip);
++}
++/*- End of function --------------------------------------------------------*/
++
++AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Trivial FAX Receive Application");
++
++/*- End of file ------------------------------------------------------------*/
diff -ruN asterisk.old/files/patch-apps::app_txfax.c asterisk/files/patch-apps::app_txfax.c
--- asterisk.old/files/patch-apps::app_txfax.c	1970-01-01 05:00:00.000000000 +0500
+++ asterisk/files/patch-apps::app_txfax.c	2007-07-23 15:01:57.000000000 +0600
@@ -0,0 +1,309 @@
+--- apps/app_txfax.c.orig	Tue Jul 10 15:28:13 2007
++++ apps/app_txfax.c	Tue Jul 10 15:27:37 2007
+@@ -0,0 +1,306 @@
++/*
++ * Asterisk -- A telephony toolkit for Linux.
++ *
++ * Trivial application to send a TIFF file as a FAX
++ * 
++ * Copyright (C) 2003, Steve Underwood
++ *
++ * Steve Underwood <steveu@coppice.org>
++ *
++ * This program is free software, distributed under the terms of
++ * the GNU General Public License
++ */
++
++/*** MODULEINFO
++         <depend>spandsp</depend>
++***/
++ 
++#include "asterisk.h"
++
++ASTERISK_FILE_VERSION(__FILE__, "$Revision:$")
++
++#include <string.h>
++#include <stdlib.h>
++#include <stdio.h>
++#include <inttypes.h>
++#include <pthread.h>
++#include <errno.h>
++#include <tiffio.h>
++
++#include <spandsp.h>
++
++#include "asterisk/lock.h"
++#include "asterisk/file.h"
++#include "asterisk/logger.h"
++#include "asterisk/channel.h"
++#include "asterisk/pbx.h"
++#include "asterisk/module.h"
++
++#ifndef AST_MODULE
++#define AST_MODULE "app_txfax"
++#endif
++
++static char *app = "TxFAX";
++
++static char *synopsis = "Send a FAX file";
++
++static char *descrip = 
++"  TxFAX(filename[|caller][|debug]):  Send a given TIFF file to the channel as a FAX.\n"
++"The \"caller\" option makes the application behave as a calling machine,\n"
++"rather than the answering machine. The default behaviour is to behave as\n"
++"an answering machine.\n"
++"Uses LOCALSTATIONID to identify itself to the remote end.\n"
++"     LOCALHEADERINFO to generate a header line on each page.\n"
++"Sets REMOTESTATIONID to the receiver CSID.\n"
++"Returns -1 when the user hangs up, or if the file does not exist.\n"
++"Returns 0 otherwise.\n";
++
++#define MAX_BLOCK_SIZE 240
++
++static void span_message(int level, const char *msg)
++{
++    int ast_level;
++    
++    if (level == SPAN_LOG_WARNING)
++        ast_level = __LOG_WARNING;
++    else if (level == SPAN_LOG_WARNING)
++        ast_level = __LOG_WARNING;
++    else
++        ast_level = __LOG_DEBUG;
++    ast_log(ast_level, __FILE__, __LINE__, __PRETTY_FUNCTION__, msg);
++}
++/*- End of function --------------------------------------------------------*/
++
++#if 0
++static void t30_flush(t30_state_t *s, int which)
++{
++    /* TODO: */
++}
++/*- End of function --------------------------------------------------------*/
++#endif
++
++static void phase_e_handler(t30_state_t *s, void *user_data, int result)
++{
++    struct ast_channel *chan;
++    char far_ident[21];
++    
++    chan = (struct ast_channel *) user_data;
++    if (result == T30_ERR_OK)
++    {
++        t30_get_far_ident(s, far_ident);
++        pbx_builtin_setvar_helper(chan, "REMOTESTATIONID", far_ident);
++    }
++    else
++    {
++        ast_log(LOG_DEBUG, "==============================================================================\n");
++        ast_log(LOG_DEBUG, "Fax send not successful - result (%d) %s.\n", result, t30_completion_code_to_str(result));
++        ast_log(LOG_DEBUG, "==============================================================================\n");
++    }
++}
++/*- End of function --------------------------------------------------------*/
++
++static int txfax_exec(struct ast_channel *chan, void *data)
++{
++    int res = 0;
++    char source_file[256];
++    char *s;
++    char *t;
++    char *v;
++    const char *x;
++    int option;
++    int len;
++    fax_state_t fax;
++    int calling_party;
++    int verbose;
++    int samples;
++    
++    struct ast_module_user *u;
++    struct ast_frame *inf = NULL;
++    struct ast_frame outf;
++
++    int original_read_fmt;
++    int original_write_fmt;
++    
++    uint8_t __buf[sizeof(uint16_t)*MAX_BLOCK_SIZE + 2*AST_FRIENDLY_OFFSET];
++    uint8_t *buf = __buf + AST_FRIENDLY_OFFSET;
++
++    if (chan == NULL)
++    {
++        ast_log(LOG_WARNING, "Fax transmit channel is NULL. Giving up.\n");
++        return -1;
++    }
++
++    span_set_message_handler(span_message);
++
++    /* The next few lines of code parse out the filename and header from the input string */
++    if (data == NULL)
++    {
++        /* No data implies no filename or anything is present */
++        ast_log(LOG_WARNING, "Txfax requires an argument (filename)\n");
++        return -1;
++    }
++    
++    calling_party = FALSE;
++    verbose = FALSE;
++    source_file[0] = '\0'; 
++
++    for (option = 0, v = s = data;  v;  option++, s++)
++    {
++        t = s;
++        v = strchr(s, '|');
++        s = (v)  ?  v  :  s + strlen(s);
++        strncpy((char *) buf, t, s - t);
++        buf[s - t] = '\0';
++        if (option == 0)
++        {
++            /* The first option is always the file name */
++            len = s - t;
++            if (len > 255)
++                len = 255;
++            strncpy(source_file, t, len);
++            source_file[len] = '\0';
++        }
++        else if (strncmp("caller", t, s - t) == 0)
++        {
++            calling_party = TRUE;
++        }
++        else if (strncmp("debug", t, s - t) == 0)
++        {
++            verbose = TRUE;
++        }
++    }
++
++    /* Done parsing */
++
++    u = ast_module_user_add(chan);
++
++    if (chan->_state != AST_STATE_UP)
++    {
++        /* Shouldn't need this, but checking to see if channel is already answered
++         * Theoretically asterisk should already have answered before running the app */
++        res = ast_answer(chan);
++    }
++    
++    if (!res)
++    {
++        original_read_fmt = chan->readformat;
++        if (original_read_fmt != AST_FORMAT_SLINEAR)
++        {
++            res = ast_set_read_format(chan, AST_FORMAT_SLINEAR);
++            if (res < 0)
++            {
++                ast_log(LOG_WARNING, "Unable to set to linear read mode, giving up\n");
++                return -1;
++            }
++        }
++        original_write_fmt = chan->writeformat;
++        if (original_write_fmt != AST_FORMAT_SLINEAR)
++        {
++            res = ast_set_write_format(chan, AST_FORMAT_SLINEAR);
++            if (res < 0)
++            {
++                ast_log(LOG_WARNING, "Unable to set to linear write mode, giving up\n");
++                res = ast_set_read_format(chan, original_read_fmt);
++                if (res)
++                    ast_log(LOG_WARNING, "Unable to restore read format on '%s'\n", chan->name);
++                return -1;
++            }
++        }
++        fax_init(&fax, calling_party);
++        if (verbose)
++	    fax.logging.level = SPAN_LOG_SHOW_SEVERITY | SPAN_LOG_SHOW_PROTOCOL | SPAN_LOG_FLOW;
++
++        x = pbx_builtin_getvar_helper(chan, "LOCALSTATIONID");
++        if (x  &&  x[0])
++            t30_set_local_ident(&fax.t30_state, x);
++        x = pbx_builtin_getvar_helper(chan, "LOCALHEADERINFO");
++        if (x  &&  x[0])
++            t30_set_header_info(&fax.t30_state, x);
++        t30_set_tx_file(&fax.t30_state, source_file, -1, -1);
++        //t30_set_phase_b_handler(&fax.t30_state, phase_b_handler, chan);
++        //t30_set_phase_d_handler(&fax.t30_state, phase_d_handler, chan);
++        t30_set_phase_e_handler(&fax.t30_state, phase_e_handler, chan);
++        t30_set_ecm_capability(&fax.t30_state, TRUE);
++        t30_set_supported_compressions(&fax.t30_state, T30_SUPPORT_T4_1D_COMPRESSION | T30_SUPPORT_T4_2D_COMPRESSION | T30_SUPPORT_T6_COMPRESSION);
++        while (ast_waitfor(chan, -1) > -1)
++        {
++            inf = ast_read(chan);
++            if (inf == NULL)
++            {
++                res = -1;
++                break;
++            }
++            if (inf->frametype == AST_FRAME_VOICE)
++            {
++                if (fax_rx(&fax, inf->data, inf->samples))
++                    break;
++                samples = (inf->samples <= MAX_BLOCK_SIZE)  ?  inf->samples  :  MAX_BLOCK_SIZE;
++                len = fax_tx(&fax, (int16_t *) &buf[AST_FRIENDLY_OFFSET], samples);
++                if (len)
++                {
++                    memset(&outf, 0, sizeof(outf));
++                    outf.frametype = AST_FRAME_VOICE;
++                    outf.subclass = AST_FORMAT_SLINEAR;
++                    outf.datalen = len*sizeof(int16_t);
++                    outf.samples = len;
++                    outf.data = &buf[AST_FRIENDLY_OFFSET];
++                    outf.offset = AST_FRIENDLY_OFFSET;
++                    if (ast_write(chan, &outf) < 0)
++                    {
++                        ast_log(LOG_WARNING, "Unable to write frame to channel; %s\n", strerror(errno));
++                        break;
++                    }
++                }
++            }
++            ast_frfree(inf);
++        }
++        if (inf == NULL)
++        {
++            ast_log(LOG_DEBUG, "Got hangup\n");
++            res = -1;
++        }
++        if (original_read_fmt != AST_FORMAT_SLINEAR)
++        {
++            res = ast_set_read_format(chan, original_read_fmt);
++            if (res)
++                ast_log(LOG_WARNING, "Unable to restore read format on '%s'\n", chan->name);
++        }
++        if (original_write_fmt != AST_FORMAT_SLINEAR)
++        {
++            res = ast_set_write_format(chan, original_write_fmt);
++            if (res)
++                ast_log(LOG_WARNING, "Unable to restore write format on '%s'\n", chan->name);
++        }
++        t30_terminate(&fax.t30_state);
++    }
++    else
++    {
++        ast_log(LOG_WARNING, "Could not answer channel '%s'\n", chan->name);
++    }
++    ast_module_user_remove(u);
++    return res;
++}
++/*- End of function --------------------------------------------------------*/
++
++static int unload_module(void)
++{
++	int res;
++
++	ast_module_user_hangup_all();
++
++	res = ast_unregister_application(app);	
++	
++
++	return res;
++}
++/*- End of function --------------------------------------------------------*/
++
++static int load_module(void)
++{
++    return ast_register_application(app, txfax_exec, synopsis, descrip);
++}
++/*- End of function --------------------------------------------------------*/
++
++AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Trivial FAX Transmit Application");
++
++/*- End of file ------------------------------------------------------------*/
diff -ruN asterisk.old/files/patch-build_tools::menuselect-deps.in asterisk/files/patch-build_tools::menuselect-deps.in
--- asterisk.old/files/patch-build_tools::menuselect-deps.in	1970-01-01 05:00:00.000000000 +0500
+++ asterisk/files/patch-build_tools::menuselect-deps.in	2007-10-09 21:26:38.000000000 +0600
@@ -0,0 +1,10 @@
+--- build_tools/menuselect-deps.in.orig	2007-10-09 21:26:02.000000000 +0600
++++ build_tools/menuselect-deps.in	2007-10-09 21:26:19.000000000 +0600
+@@ -22,6 +22,7 @@
+ PRI=@PBX_PRI@
+ QT=@PBX_QT@
+ RADIUS=@PBX_RADIUS@
++SPANDSP=@PBX_SPANDSP@
+ SPEEX=@PBX_SPEEX@
+ SQLITE=@PBX_SQLITE@
+ SSL=@PBX_OPENSSL@
diff -ruN asterisk.old/files/patch-configure asterisk/files/patch-configure
--- asterisk.old/files/patch-configure	2007-08-10 22:30:40.000000000 +0600
+++ asterisk/files/patch-configure	2007-10-09 21:18:55.000000000 +0600
@@ -1,9 +1,25 @@
-
-$FreeBSD: ports/net/asterisk/files/patch-configure,v 1.3 2007/08/10 16:30:40 sobomax Exp $
-
---- configure.orig
-+++ configure
-@@ -3926,8 +3926,6 @@
+--- configure.orig	2007-09-14 21:50:49.000000000 +0600
++++ configure	2007-10-09 21:18:50.000000000 +0600
+@@ -820,6 +820,10 @@
+ RADIUS_INCLUDE
+ RADIUS_DIR
+ PBX_RADIUS
++SPANDSP_LIB
++SPANDSP_INCLUDE
++SPANDSP_DIR
++PBX_SPANDSP
+ SPEEX_LIB
+ SPEEX_INCLUDE
+ SPEEX_DIR
+@@ -1530,6 +1534,7 @@
+   --with-qt=PATH          use Qt files in PATH
+   --with-radius=PATH      use Radius Client files in PATH
+   --with-speex=PATH       use Speex files in PATH
++  --with-spandsp=PATH     use Spandsp library files in PATH
+   --with-sqlite=PATH      use SQLite files in PATH
+   --with-suppserv=PATH    use mISDN Supplemental Services files in PATH
+   --with-ssl=PATH         use OpenSSL files in PATH
+@@ -3931,8 +3936,6 @@
  case "${host_os}" in
       freebsd*)
       ac_default_prefix=/usr/local
@@ -12,7 +28,69 @@
       ;;
       *)
       ac_default_prefix=/usr
-@@ -26228,6 +26226,7 @@
+@@ -8302,8 +8305,34 @@
+ 
+ PBX_RADIUS=0
+ 
++SPNDSP_DESCRIP="Spandsp Library"
++SPANDSP_OPTION="spandsp"
+ 
++# Check whether --with-spandsp was given.
++if test "${with_spandsp+set}" = set; then
++  withval=$with_spandsp;
++case ${withval} in
++     n|no)
++     USE_SPANDSP=no
++     PBX_SPANDSP=0
++     ;;
++     y|ye|yes)
++     SPANDSP_DIR="/usr/local"
++     SPANDSP_LIB="-L/usr/local/lib -lspandsp"
++     SPANDSP_INCLUDE="-I${SPANDSP_DIR}/include"
++     SPANDSP_MANDATORY="yes"
++     PBX_SPANDSP=1
++     ;;
++     *)
++     SPANDSP_DIR="${withval}"
++     SPANDSP_LIB="-L${SPANDSP_DIR}/lib -lspandsp"
++     SPANDSP_INCLUDE="-I${SPANDSP_DIR}/include"
++     SPANDSP_MANDATORY="yes"
++     PBX_SPANDSP=1
++     ;;
++esac
+ 
++fi
+ 
+ 
+ 
+@@ -18464,11 +18493,11 @@
+ echo $ECHO_N "checking for UW IMAP Toolkit c-client library... $ECHO_C" >&6; }
+    saved_cppflags="${CPPFLAGS}"
+    saved_libs="${LIBS}"
+-   if test -f ${IMAP_TK_DIR}/c-client/LDFLAGS ; then
+-      imap_ldflags=`cat ${IMAP_TK_DIR}/c-client/LDFLAGS`
++   if test -f ${IMAP_TK_DIR}/include/c-client/LDFLAGS ; then
++      imap_ldflags=`cat ${IMAP_TK_DIR}/include/c-client/LDFLAGS`
+    fi
+-   CPPFLAGS="${CPPFLAGS} -I${IMAP_TK_DIR}/c-client"
+-   LIBS="${LIBS} ${IMAP_TK_DIR}/c-client/c-client.a "`echo ${imap_ldflags}`
++   CPPFLAGS="${CPPFLAGS} -I${IMAP_TK_DIR}/include/c-client"
++   LIBS="${LIBS} ${IMAP_TK_DIR}/lib/libc-client4.a "`echo ${imap_ldflags}`
+    cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+@@ -18660,8 +18689,8 @@
+    if test "${ac_cv_imap_tk}" = "yes"; then
+       { echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6; }
+-      IMAP_TK_LIB="${IMAP_TK_DIR}/c-client/c-client.a "`echo ${imap_ldflags}`
+-      IMAP_TK_INCLUDE="-I${IMAP_TK_DIR}/c-client"
++      IMAP_TK_LIB="${IMAP_TK_DIR}/lib/libc-client4.a "`echo ${imap_ldflags}`
++      IMAP_TK_INCLUDE="-I${IMAP_TK_DIR}/include/c-client"
+       PBX_IMAP_TK=1
+ 
+ cat >>confdefs.h <<\_ACEOF
+@@ -26261,6 +26290,7 @@
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
  $ac_includes_default
@@ -20,7 +98,7 @@
  #include <${HOME}/openh323/include/h323.h>
  _ACEOF
  rm -f conftest.$ac_objext
-@@ -26268,6 +26267,7 @@
+@@ -26301,6 +26331,7 @@
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
@@ -28,7 +106,7 @@
  #include <${HOME}/openh323/include/h323.h>
  _ACEOF
  if { (ac_try="$ac_cpp conftest.$ac_ext"
-@@ -26365,6 +26365,7 @@
+@@ -26398,6 +26429,7 @@
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
  $ac_includes_default
@@ -36,7 +114,7 @@
  #include </usr/local/include/openh323/h323.h>
  _ACEOF
  rm -f conftest.$ac_objext
-@@ -26405,6 +26406,7 @@
+@@ -26438,6 +26470,7 @@
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
@@ -44,7 +122,7 @@
  #include </usr/local/include/openh323/h323.h>
  _ACEOF
  if { (ac_try="$ac_cpp conftest.$ac_ext"
-@@ -26652,7 +26654,7 @@
+@@ -26685,7 +26718,7 @@
  
  	fi
  
@@ -53,7 +131,7 @@
  
  	if test "${HAS_OPENH323:-unset}" != "unset"; then
  	   { echo "$as_me:$LINENO: checking OpenH323 installation validity" >&5
-@@ -31800,6 +31802,7 @@
+@@ -32232,6 +32265,7 @@
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
  $ac_includes_default
@@ -61,7 +139,7 @@
  #include <h323.h>
  _ACEOF
  rm -f conftest.$ac_objext
-@@ -31840,6 +31843,7 @@
+@@ -32272,6 +32306,7 @@
  cat confdefs.h >>conftest.$ac_ext
  cat >>conftest.$ac_ext <<_ACEOF
  /* end confdefs.h.  */
@@ -69,3 +147,23 @@
  #include <h323.h>
  _ACEOF
  if { (ac_try="$ac_cpp conftest.$ac_ext"
+@@ -33842,6 +33877,10 @@
+ RADIUS_INCLUDE!$RADIUS_INCLUDE$ac_delim
+ RADIUS_DIR!$RADIUS_DIR$ac_delim
+ PBX_RADIUS!$PBX_RADIUS$ac_delim
++SPANDSP_LIB!$SPANDSP_LIB$ac_delim
++SPANDSP_INCLUDE!$SPANDSP_INCLUDE$ac_delim
++SPANDSP_DIR!$SPANDSP_DIR$ac_delim
++PBX_SPANDSP!$PBX_SPANDSP$ac_delim
+ SPEEX_LIB!$SPEEX_LIB$ac_delim
+ SPEEX_INCLUDE!$SPEEX_INCLUDE$ac_delim
+ SPEEX_DIR!$SPEEX_DIR$ac_delim
+@@ -33933,7 +33972,7 @@
+ LTLIBOBJS!$LTLIBOBJS$ac_delim
+ _ACEOF
+ 
+-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 96; then
++  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 100; then
+     break
+   elif $ac_last_try; then
+     { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
diff -ruN asterisk.old/files/patch-configure.ac asterisk/files/patch-configure.ac
--- asterisk.old/files/patch-configure.ac	1970-01-01 05:00:00.000000000 +0500
+++ asterisk/files/patch-configure.ac	2007-10-09 21:09:46.000000000 +0600
@@ -0,0 +1,19 @@
+--- configure.ac.orig	2007-10-09 21:08:41.000000000 +0600
++++ configure.ac	2007-10-09 21:09:29.000000000 +0600
+@@ -196,6 +196,7 @@
+ AST_EXT_LIB_SETUP([OPENH323], [OpenH323], [h323])
+ AST_EXT_LIB_SETUP([QT], [Qt], [qt])
+ AST_EXT_LIB_SETUP([RADIUS], [Radius Client], [radius])
++AST_EXT_LIB_SETUP([SPANDSP], [Spandsp Library], [spandsp])
+ AST_EXT_LIB_SETUP([SPEEX], [Speex], [speex])
+ AST_EXT_LIB_SETUP([SQLITE], [SQLite], [sqlite])
+ AST_EXT_LIB_SETUP([SUPPSERV], [mISDN Supplemental Services], [suppserv])
+@@ -942,6 +943,8 @@
+ 
+ AST_EXT_LIB_CHECK([RADIUS], [radiusclient-ng], [rc_read_config], [radiusclient-ng.h])
+ 
++AST_EXT_LIB_CHECK([SPANDSP], [spandsp], [fax_init], [spandsp.h], [-ltiff])
++
+ AST_EXT_LIB_CHECK([SPEEX], [speex], [speex_encode], [speex/speex.h], [-lm])
+ 
+ AST_EXT_LIB_CHECK([SQLITE], [sqlite], [sqlite_exec], [sqlite.h])
diff -ruN asterisk.old/files/patch-makeopts.in asterisk/files/patch-makeopts.in
--- asterisk.old/files/patch-makeopts.in	1970-01-01 05:00:00.000000000 +0500
+++ asterisk/files/patch-makeopts.in	2007-10-09 21:07:30.000000000 +0600
@@ -0,0 +1,12 @@
+--- makeopts.in.orig	2007-09-14 21:50:49.000000000 +0600
++++ makeopts.in	2007-10-09 21:06:46.000000000 +0600
+@@ -140,6 +140,9 @@
+ RADIUS_INCLUDE=@RADIUS_INCLUDE@
+ RADIUS_LIB=@RADIUS_LIB@
+ 
++SPANDSP_INCLUDE=@SPANDSP_INCLUDE@
++SPANDSP_LIB=@SPANDSP_LIB@
++
+ SPEEX_INCLUDE=@SPEEX_INCLUDE@
+ SPEEX_LIB=@SPEEX_LIB@
+ 
diff -ruN asterisk.old/pkg-plist asterisk/pkg-plist
--- asterisk.old/pkg-plist	2007-07-27 08:41:09.000000000 +0600
+++ asterisk/pkg-plist	2007-10-12 12:16:47.000000000 +0600
@@ -58,8 +58,6 @@
 etc/asterisk/mgcp.conf-dist
 @unexec if cmp -s %D/etc/asterisk/misdn.conf %D/etc/asterisk/misdn.conf-dist; then rm -f %D/etc/asterisk/misdn.conf; fi
 etc/asterisk/misdn.conf-dist
-@unexec if cmp -s %D/etc/asterisk/modem.conf %D/etc/asterisk/modem.conf-dist; then rm -f %D/etc/asterisk/modem.conf; fi
-etc/asterisk/modem.conf-dist
 @unexec if cmp -s %D/etc/asterisk/modules.conf %D/etc/asterisk/modules.conf-dist; then rm -f %D/etc/asterisk/modules.conf; fi
 etc/asterisk/modules.conf-dist
 @unexec if cmp -s %D/etc/asterisk/musiconhold.conf %D/etc/asterisk/musiconhold.conf-dist; then rm -f %D/etc/asterisk/musiconhold.conf; fi
@@ -137,6 +135,7 @@
 include/asterisk/astdb.h
 include/asterisk/astmm.h
 include/asterisk/astobj.h
+include/asterisk/astobj2.h
 include/asterisk/astosp.h
 include/asterisk/autoconfig.h
 include/asterisk/build.h
@@ -768,6 +767,8 @@
 %%WITH_ZAPTEL%%lib/asterisk/modules/codec_zap.so
 %%WITH_ODBC%%lib/asterisk/modules/res_config_odbc.so
 %%WITH_ODBC%%lib/asterisk/modules/res_odbc.so
+%%WITH_FAX%%lib/asterisk/modules/app_rxfax.so
+%%WITH_FAX%%lib/asterisk/modules/app_txfax.so
 @dirrm share/asterisk/static-http
 @dirrm share/asterisk/sounds/silence
 @dirrm share/asterisk/sounds/phonetic


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-ports-bugs->sobomax 
Responsible-Changed-By: edwin 
Responsible-Changed-When: Mon Oct 15 04:40:08 UTC 2007 
Responsible-Changed-Why:  
Over to maintainer (via the GNATS Auto Assign Tool) 

http://www.freebsd.org/cgi/query-pr.cgi?pr=117199 

From: "Vladimir Korkodinov" <viper@perm.raid.ru>
To: FreeBSD-gnats-submit@FreeBSD.org,
 freebsd-ports-bugs@FreeBSD.org
Cc:  
Subject: Re: ports/117199: [UPDATE] net/asterisk to 1.4.13
Date: Wed, 17 Oct 2007 18:22:55 +0600 (YEKST)

 ------=_20071017182255_85090
 Content-Type: text/plain; charset="utf-8"
 Content-Transfer-Encoding: 8bit
 
 Mistake in a patch.
 Сonfiguration files were not copied during installation.
 Below corrected a patch.
 
 ------=_20071017182255_85090
 Content-Type: application/octet-stream; name="asterisk_1.4.13"
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment; filename="asterisk_1.4.13"
 
 ZGlmZiAtcnVOIGFzdGVyaXNrLm9sZC9NYWtlZmlsZSBhc3Rlcmlzay9NYWtlZmlsZQotLS0gYXN0
 ZXJpc2sub2xkL01ha2VmaWxlCTIwMDctMTAtMDkgMDk6MzM6NDcuMDAwMDAwMDAwICswNjAwCisr
 KyBhc3Rlcmlzay9NYWtlZmlsZQkyMDA3LTEwLTE3IDE4OjAyOjUwLjAwMDAwMDAwMCArMDYwMApA
 QCAtNiw4ICs2LDggQEAKICMKIAogUE9SVE5BTUU9CWFzdGVyaXNrCi1QT1JUVkVSU0lPTj0JMS40
 LjExCi1QT1JUUkVWSVNJT049CTIKK1BPUlRWRVJTSU9OPQkxLjQuMTMKK1BPUlRSRVZJU0lPTj0J
 MQogQ0FURUdPUklFUz0JbmV0CiBNQVNURVJfU0lURVM9CWh0dHA6Ly9mdHAuZGlnaXVtLmNvbS9w
 dWIvYXN0ZXJpc2svIFwKIAkJaHR0cDovL2Z0cC5kaWdpdW0uY29tL3B1Yi9hc3Rlcmlzay9vbGQt
 cmVsZWFzZXMvCkBAIC00OCw3ICs0OCwxMCBAQAogCQlGUkVFVERTCQkiRW5hYmxlIEZyZWVURFMg
 c3VwcG9ydCIgb24gXAogCQlKQUJCRVIJCSJFbmFibGUgSmFiYmVyIGFuZCBHdGFsayBzdXBwb3J0
 IiBvbiBcCiAJCVNRTElURSAgICAgICAgICAiRW5hYmxlIFNRTElURSBzdXBwb3J0IiBvbiBcCi0J
 CUNPREVDX1BBVENICSJBcHBseSBjb2RlYyBuZWdvdGlhdGlvbiBwYXRjaCIgb2ZmCisJCUlNQVAg
 ICAgICAgICAgICAiRW5hYmxlIElNQVAgc3VwcG9ydCIgb2ZmIFwKKwkJRkFYICAgICAgICAgICAg
 ICJFbmFibGUgRkFYIHN1cHBvcnQiIG9uCQorCisjIwkJQ09ERUNfUEFUQ0gJIkFwcGx5IGNvZGVj
 IG5lZ290aWF0aW9uIHBhdGNoIiBvZmYKIAogLmluY2x1ZGUgPGJzZC5wb3J0LnByZS5taz4KIApA
 QCAtMTU2LDE2ICsxNTksNjAgQEAKIExJQl9ERVBFTkRTKz0Jc3FsaXRlOiR7UE9SVFNESVJ9L2Rh
 dGFiYXNlcy9zcWxpdGUyCiAuZW5kaWYKIAotLmlmIGRlZmluZWQoV0lUSF9DT0RFQ19QQVRDSCkK
 LVBBVENIRklMRVM9CWFzdGVyaXNrLTEuNC4xMS1jb2RlYy1uZWdvdGlhdGlvbi0yMDA3MDgzMS5k
 aWZmLmd6Ci1QQVRDSF9TSVRFUz0JaHR0cDovL2IyYnVhLm9yZy9jaHJvbWUvc2l0ZS8KLUVYVFJB
 X1BBVENIRVMrPQkke1BBVENIRElSfS9jb2RlY25lZ28tcGF0Y2gtTWFrZWZpbGUKLS5lbHNlCisj
 LmlmIGRlZmluZWQoV0lUSF9DT0RFQ19QQVRDSCkKKyNQQVRDSEZJTEVTPQlhc3Rlcmlzay0xLjQu
 MTEtY29kZWMtbmVnb3RpYXRpb24tMjAwNzA4MzEuZGlmZi5negorI1BBVENIX1NJVEVTPQlodHRw
 Oi8vYjJidWEub3JnL2Nocm9tZS9zaXRlLworI0VYVFJBX1BBVENIRVMrPQkke1BBVENIRElSfS9j
 b2RlY25lZ28tcGF0Y2gtTWFrZWZpbGUKKyMuZWxzZQogRVhUUkFfUEFUQ0hFUys9CSR7UEFUQ0hE
 SVJ9L25vY29kZWNuZWdvLXBhdGNoLU1ha2VmaWxlCisjLmVuZGlmCisKKy5pZiBkZWZpbmVkKFdJ
 VEhPVVRfRkFYKQorUExJU1RfU1VCKz0gICAgV0lUSF9GQVg9IkBjb21tZW50ICIKKy5lbHNlCitN
 QUtFX0VOVis9ICAgICBXSVRIX0ZBWD15ZXMKK0NPTkZJR1VSRV9BUkdTKz0gLS13aXRoLXNwYW5k
 c3A9eWVzCitCVUlMRF9ERVBFTkRTKz0gc3BhbmRzcD49MC4wLjM6JHtQT1JUU0RJUn0vY29tbXMv
 c3BhbmRzcAorTElCX0RFUEVORFMrPSAgc3BhbmRzcC4wOiR7UE9SVFNESVJ9L2NvbW1zL3NwYW5k
 c3AKK1BMSVNUX1NVQis9ICAgIFdJVEhfRkFYPSIiCisuZW5kaWYKKworLmlmIGRlZmluZWQoV0lU
 SE9VVF9JTUFQKQorUExJU1RfU1VCKz0gICAgV0lUSF9JTUFQPSJAY29tbWVudCAiCisuZWxzZQor
 TUFLRV9FTlYrPSAgICAgV0lUSF9JTUFQPXllcworQ09ORklHVVJFX0FSR1MrPSAtLXdpdGgtaW1h
 cD0ke0xPQ0FMQkFTRX0KK0xJQl9ERVBFTkRTKz0gIGMtY2xpZW50NC45OiR7UE9SVFNESVJ9L21h
 aWwvY2NsaWVudAorUExJU1RfU1VCKz0gICAgV0lUSF9JTUFQPSIiCiAuZW5kaWYKIAogCiBwb3N0
 LXBhdGNoOgogCSR7UkVJTlBMQUNFX0NNRH0gLWUgJ3N8L3Zhci9saWJ8JHtQUkVGSVh9L3NoYXJl
 fGcnICR7V1JLU1JDfS9jb25maWdzL211c2ljb25ob2xkLmNvbmYuc2FtcGxlCiAKK3ByZS1jb25m
 aWd1cmU6CisKKy5pZiBkZWZpbmVkKFdJVEhfT0RCQykgJiYgZGVmaW5lZChXSVRIX0lNQVApCisJ
 QCR7RUNIT19NU0d9ICAgICIiCisJQCR7RUNIT19NU0d9ICAgICJXQVJOSU5HISEhIFlvdSBjYW4g
 Y2hvb3NlIG9ubHkgb25lIG9wdGlvbiBmb3IgYnVpbGQgYXBwX3ZvaWNlbWFpbCIKKwlAJHtFQ0hP
 X01TR30gICAgIiIKKy5lbmRpZgorLmlmIGRlZmluZWQoV0lUSF9PREJDKQorCUAke0VDSE9fTVNH
 fSAgICAiIgorCUAke0VDSE9fTVNHfSAgICAiSWYgbmVjZXNzYXJ5LCBidWlsZCAgd2l0aCB0aGUg
 b3B0aW9uIE9EQkNfU1RPUkFHRSIKKwlAJHtFQ0hPX01TR30gICAgInByZXNzIEN0cmwtQyBhbmQg
 cnVuIGZvbGxvd2luZyBjb21tYW5kOiIKKwlAJHtFQ0hPX01TR30gICAgIjEuIGNkIHdvcmsvYXN0
 ZXJpc2stMS40LngiCisJQCR7RUNIT19NU0d9ICAgICIyLiBnbWFrZSBtZW51c2VsZWN0IgorCUAk
 e0VDSE9fTVNHfSAgICAiMy4gU2VsZWN0ICdWb2ljZW1haWwgQnVpbGQgT3B0aW9ucy0+T0RCQ19T
 VE9SQUdFJyIKKy5lbmRpZgorCisuaWYgZGVmaW5lZChXSVRIX0lNQVApCisJQCR7RUNIT19NU0d9
 ICAgICIiCisJQCR7RUNIT19NU0d9ICAgICJJZiBuZWNlc3NhcnksIGJ1aWxkICB3aXRoIHRoZSBv
 cHRpb24gSU1BUF9TVE9SQUdFIgorCUAke0VDSE9fTVNHfSAgICAicHJlc3MgQ3RybC1DIGFuZCBy
 dW4gZm9sbG93aW5nIGNvbW1hbmQ6IgorCUAke0VDSE9fTVNHfSAgICAiMS4gY2Qgd29yay9hc3Rl
 cmlzay0xLjQueCIKKwlAJHtFQ0hPX01TR30gICAgIjIuIGdtYWtlIG1lbnVzZWxlY3QiCisJQCR7
 RUNIT19NU0d9ICAgICIzLiBTZWxlY3QgJ1ZvaWNlbWFpbCBCdWlsZCBPcHRpb25zLT5JTUFQX1NU
 T1JBR0UnIgorLmVuZGlmCisKIC5pbmNsdWRlIDxic2QucG9ydC5wb3N0Lm1rPgpkaWZmIC1ydU4g
 YXN0ZXJpc2sub2xkL2Rpc3RpbmZvIGFzdGVyaXNrL2Rpc3RpbmZvCi0tLSBhc3Rlcmlzay5vbGQv
 ZGlzdGluZm8JMjAwNy0wOS0wMyAxNDoxODo1Ny4wMDAwMDAwMDAgKzA2MDAKKysrIGFzdGVyaXNr
 L2Rpc3RpbmZvCTIwMDctMTAtMTIgMTI6MDA6NDQuMDAwMDAwMDAwICswNjAwCkBAIC0xLDYgKzEs
 MyBAQAotTUQ1IChhc3Rlcmlzay0xLjQuMTEudGFyLmd6KSA9IDNiYTliMzk5ZmVkYzY4ZGU0ODQ1
 YjFjNTYwM2QxNjdjCi1TSEEyNTYgKGFzdGVyaXNrLTEuNC4xMS50YXIuZ3opID0gOTk5MjhmOGFh
 YjYyZTUzMmU3MWZkZWNiZDE4ZDVhZjJkMjExZjFiYmNlMjdjZjljZjJlZmMzNGU1N2EyMDEwMQot
 U0laRSAoYXN0ZXJpc2stMS40LjExLnRhci5neikgPSAxMTIxODk0NAotTUQ1IChhc3Rlcmlzay0x
 LjQuMTEtY29kZWMtbmVnb3RpYXRpb24tMjAwNzA4MzEuZGlmZi5neikgPSBjZjIzODUwNDdkNTVm
 ZmZmY2ZmNzE5NzQ4MGU1NGM3OQotU0hBMjU2IChhc3Rlcmlzay0xLjQuMTEtY29kZWMtbmVnb3Rp
 YXRpb24tMjAwNzA4MzEuZGlmZi5neikgPSA5ZDZiNmVmY2JmMjBiMzVmNDA3YWE1MzMyMGI2NDlj
 MGQ4ODRjY2U5YjUxOTQzNWM3ZWEzYWE4YTUxYjJiNDJmCi1TSVpFIChhc3Rlcmlzay0xLjQuMTEt
 Y29kZWMtbmVnb3RpYXRpb24tMjAwNzA4MzEuZGlmZi5neikgPSAzNzY1MQorTUQ1IChhc3Rlcmlz
 ay0xLjQuMTMudGFyLmd6KSA9IDQ5YjczMTE0ODMxYzIxY2M5Nzg0ZDNiM2Y0ZmI1YmVjCitTSEEy
 NTYgKGFzdGVyaXNrLTEuNC4xMy50YXIuZ3opID0gMGJlYTJmNjEyYzdiNmViY2ZiOTdjNzdkNDcz
 YTQ1MDE4YTNlMTEyZTU2MTBmZjdmYWI4MzU2MWJlN2IxOTQ0OQorU0laRSAoYXN0ZXJpc2stMS40
 LjEzLnRhci5neikgPSAxMTI1NzU3OQpkaWZmIC1ydU4gYXN0ZXJpc2sub2xkL2ZpbGVzL3BhdGNo
 LWFwcHM6OmFwcF9yeGZheC5jIGFzdGVyaXNrL2ZpbGVzL3BhdGNoLWFwcHM6OmFwcF9yeGZheC5j
 Ci0tLSBhc3Rlcmlzay5vbGQvZmlsZXMvcGF0Y2gtYXBwczo6YXBwX3J4ZmF4LmMJMTk3MC0wMS0w
 MSAwNTowMDowMC4wMDAwMDAwMDAgKzA1MDAKKysrIGFzdGVyaXNrL2ZpbGVzL3BhdGNoLWFwcHM6
 OmFwcF9yeGZheC5jCTIwMDctMDctMjMgMTU6MDE6NTcuMDAwMDAwMDAwICswNjAwCkBAIC0wLDAg
 KzEsMzgzIEBACistLS0gYXBwcy9hcHBfcnhmYXguYy5vcmlnCVR1ZSBKdWwgMTAgMTU6Mjg6MDQg
 MjAwNworKysrIGFwcHMvYXBwX3J4ZmF4LmMJVHVlIEp1bCAxMCAxNToyNzoyOCAyMDA3CitAQCAt
 MCwwICsxLDM4MCBAQAorKy8qCisrICogQXN0ZXJpc2sgLS0gQSB0ZWxlcGhvbnkgdG9vbGtpdCBm
 b3IgTGludXguCisrICoKKysgKiBUcml2aWFsIGFwcGxpY2F0aW9uIHRvIHJlY2VpdmUgYSBUSUZG
 IEZBWCBmaWxlCisrICogCisrICogQ29weXJpZ2h0IChDKSAyMDAzLCBTdGV2ZSBVbmRlcndvb2QK
 KysgKgorKyAqIFN0ZXZlIFVuZGVyd29vZCA8c3RldmV1QGNvcHBpY2Uub3JnPgorKyAqCisrICog
 VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJt
 cyBvZgorKyAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAqLworKworKy8qKiog
 TU9EVUxFSU5GTworKyAgICAgICAgIDxkZXBlbmQ+c3BhbmRzcDwvZGVwZW5kPgorKyoqKi8KKysg
 CisrI2luY2x1ZGUgImFzdGVyaXNrLmgiCisrCisrQVNURVJJU0tfRklMRV9WRVJTSU9OKF9fRklM
 RV9fLCAiJFJldmlzaW9uOiQiKQorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8
 c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+Cisr
 I2luY2x1ZGUgPHB0aHJlYWQuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8dGlm
 ZmlvLmg+CisrCisrI2luY2x1ZGUgPHNwYW5kc3AuaD4KKysKKysjaW5jbHVkZSAiYXN0ZXJpc2sv
 bG9jay5oIgorKyNpbmNsdWRlICJhc3Rlcmlzay9maWxlLmgiCisrI2luY2x1ZGUgImFzdGVyaXNr
 L2xvZ2dlci5oIgorKyNpbmNsdWRlICJhc3Rlcmlzay9jaGFubmVsLmgiCisrI2luY2x1ZGUgImFz
 dGVyaXNrL3BieC5oIgorKyNpbmNsdWRlICJhc3Rlcmlzay9tb2R1bGUuaCIKKysjaW5jbHVkZSAi
 YXN0ZXJpc2svbWFuYWdlci5oIgorKworKyNpZm5kZWYgQVNUX01PRFVMRQorKyNkZWZpbmUgQVNU
 X01PRFVMRSAiYXBwX3J4ZmF4IgorKyNlbmRpZgorKworK3N0YXRpYyBjaGFyICphcHAgPSAiUnhG
 QVgiOworKworK3N0YXRpYyBjaGFyICpzeW5vcHNpcyA9ICJSZWNlaXZlIGEgRkFYIHRvIGEgZmls
 ZSI7CisrCisrc3RhdGljIGNoYXIgKmRlc2NyaXAgPSAKKysiICBSeEZBWChmaWxlbmFtZVt8Y2Fs
 bGVyXVt8ZGVidWddKTogUmVjZWl2ZXMgYSBGQVggZnJvbSB0aGUgY2hhbm5lbCBpbnRvIHRoZVxu
 IgorKyJnaXZlbiBmaWxlbmFtZS4gSWYgdGhlIGZpbGUgZXhpc3RzIGl0IHdpbGwgYmUgb3Zlcndy
 aXR0ZW4uIFRoZSBmaWxlXG4iCisrInNob3VsZCBiZSBpbiBUSUZGL0YgZm9ybWF0LlxuIgorKyJU
 aGUgXCJjYWxsZXJcIiBvcHRpb24gbWFrZXMgdGhlIGFwcGxpY2F0aW9uIGJlaGF2ZSBhcyBhIGNh
 bGxpbmcgbWFjaGluZSxcbiIKKysicmF0aGVyIHRoYW4gdGhlIGFuc3dlcmluZyBtYWNoaW5lLiBU
 aGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gYmVoYXZlIGFzXG4iCisrImFuIGFuc3dlcmluZyBt
 YWNoaW5lLlxuIgorKyJVc2VzIExPQ0FMU1RBVElPTklEIHRvIGlkZW50aWZ5IGl0c2VsZiB0byB0
 aGUgcmVtb3RlIGVuZC5cbiIKKysiICAgICBMT0NBTEhFQURFUklORk8gdG8gZ2VuZXJhdGUgYSBo
 ZWFkZXIgbGluZSBvbiBlYWNoIHBhZ2UuXG4iCisrIlNldHMgUkVNT1RFU1RBVElPTklEIHRvIHRo
 ZSBzZW5kZXIgQ1NJRC5cbiIKKysiICAgICBGQVhQQUdFUyB0byB0aGUgbnVtYmVyIG9mIHBhZ2Vz
 IHJlY2VpdmVkLlxuIgorKyIgICAgIEZBWEJJVFJBVEUgdG8gdGhlIHRyYW5zbWl0aW9uIHJhdGUu
 XG4iCisrIiAgICAgRkFYUkVTT0xVVElPTiB0byB0aGUgcmVzb2x1dGlvbi5cbiIKKysiUmV0dXJu
 cyAtMSB3aGVuIHRoZSB1c2VyIGhhbmdzIHVwLlxuIgorKyJSZXR1cm5zIDAgb3RoZXJ3aXNlLlxu
 IjsKKysKKysjZGVmaW5lIE1BWF9CTE9DS19TSVpFIDI0MAorKworK3N0YXRpYyB2b2lkIHNwYW5f
 bWVzc2FnZShpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKm1zZykKKyt7CisrICAgIGludCBhc3RfbGV2
 ZWw7CisrICAgIAorKyAgICBpZiAobGV2ZWwgPT0gU1BBTl9MT0dfV0FSTklORykKKysgICAgICAg
 IGFzdF9sZXZlbCA9IF9fTE9HX1dBUk5JTkc7CisrICAgIGVsc2UgaWYgKGxldmVsID09IFNQQU5f
 TE9HX1dBUk5JTkcpCisrICAgICAgICBhc3RfbGV2ZWwgPSBfX0xPR19XQVJOSU5HOworKyAgICBl
 bHNlCisrICAgICAgICBhc3RfbGV2ZWwgPSBfX0xPR19ERUJVRzsKKysgICAgYXN0X2xvZyhhc3Rf
 bGV2ZWwsIF9fRklMRV9fLCBfX0xJTkVfXywgX19QUkVUVFlfRlVOQ1RJT05fXywgbXNnKTsKKyt9
 CisrLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrI2lmIDAKKytzdGF0aWMgdm9pZCB0MzBfZmx1
 c2godDMwX3N0YXRlX3QgKnMsIGludCB3aGljaCkKKyt7CisrICAgIC8qIFRPRE86ICovCisrfQor
 Ky8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
 LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKyNlbmRpZgorKworK3N0YXRpYyB2b2lkIHBoYXNlX2Vf
 aGFuZGxlcih0MzBfc3RhdGVfdCAqcywgdm9pZCAqdXNlcl9kYXRhLCBpbnQgcmVzdWx0KQorK3sK
 KysgICAgc3RydWN0IGFzdF9jaGFubmVsICpjaGFuOworKyAgICB0MzBfc3RhdHNfdCB0OworKyAg
 ICBjaGFyIGxvY2FsX2lkZW50WzIxXTsKKysgICAgY2hhciBmYXJfaWRlbnRbMjFdOworKyAgICBj
 aGFyIGJ1ZlsxMV07CisrICAgIAorKyAgICBjaGFuID0gKHN0cnVjdCBhc3RfY2hhbm5lbCAqKSB1
 c2VyX2RhdGE7CisrICAgIGlmIChyZXN1bHQgPT0gVDMwX0VSUl9PSykKKysgICAgeworKyAgICAg
 ICAgdDMwX2dldF90cmFuc2Zlcl9zdGF0aXN0aWNzKHMsICZ0KTsKKysgICAgICAgIHQzMF9nZXRf
 ZmFyX2lkZW50KHMsIGZhcl9pZGVudCk7CisrICAgICAgICB0MzBfZ2V0X2xvY2FsX2lkZW50KHMs
 IGxvY2FsX2lkZW50KTsKKysgICAgICAgIGFzdF9sb2coTE9HX0RFQlVHLCAiPT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09XG4iKTsKKysgICAgICAgIGFzdF9sb2coTE9HX0RFQlVHLCAiRmF4IHN1Y2Nlc3Nm
 dWxseSByZWNlaXZlZC5cbiIpOworKyAgICAgICAgYXN0X2xvZyhMT0dfREVCVUcsICJSZW1vdGUg
 c3RhdGlvbiBpZDogJXNcbiIsIGZhcl9pZGVudCk7CisrICAgICAgICBhc3RfbG9nKExPR19ERUJV
 RywgIkxvY2FsIHN0YXRpb24gaWQ6ICAlc1xuIiwgbG9jYWxfaWRlbnQpOworKyAgICAgICAgYXN0
 X2xvZyhMT0dfREVCVUcsICJQYWdlcyB0cmFuc2ZlcnJlZDogJWlcbiIsIHQucGFnZXNfdHJhbnNm
 ZXJyZWQpOworKyAgICAgICAgYXN0X2xvZyhMT0dfREVCVUcsICJJbWFnZSByZXNvbHV0aW9uOiAg
 JWkgeCAlaVxuIiwgdC54X3Jlc29sdXRpb24sIHQueV9yZXNvbHV0aW9uKTsKKysgICAgICAgIGFz
 dF9sb2coTE9HX0RFQlVHLCAiVHJhbnNmZXIgUmF0ZTogICAgICVpXG4iLCB0LmJpdF9yYXRlKTsK
 KysgICAgICAgIGFzdF9sb2coTE9HX0RFQlVHLCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsK
 KysgICAgICAgIG1hbmFnZXJfZXZlbnQoRVZFTlRfRkxBR19DQUxMLAorKyAgICAgICAgICAgICAg
 ICAgICAgICAiRmF4UmVjZWl2ZWQiLCAiQ2hhbm5lbDogJXNcbkV4dGVuOiAlc1xuQ2FsbGVySUQ6
 ICVzXG5SZW1vdGVTdGF0aW9uSUQ6ICVzXG5Mb2NhbFN0YXRpb25JRDogJXNcblBhZ2VzVHJhbnNm
 ZXJyZWQ6ICVpXG5SZXNvbHV0aW9uOiAlaVxuVHJhbnNmZXJSYXRlOiAlaVxuRmlsZU5hbWU6ICVz
 XG4iLAorKyAgICAgICAgICAgICAgICAgICAgICBjaGFuLT5uYW1lLAorKyAgICAgICAgICAgICAg
 ICAgICAgICBjaGFuLT5leHRlbiwKKysgICAgICAgICAgICAgICAgICAgICAgKGNoYW4tPmNpZC5j
 aWRfbnVtKSAgPyAgY2hhbi0+Y2lkLmNpZF9udW0gIDogICIiLAorKyAgICAgICAgICAgICAgICAg
 ICAgICBmYXJfaWRlbnQsCisrICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2lkZW50LAorKyAg
 ICAgICAgICAgICAgICAgICAgICB0LnBhZ2VzX3RyYW5zZmVycmVkLAorKyAgICAgICAgICAgICAg
 ICAgICAgICB0LnlfcmVzb2x1dGlvbiwKKysgICAgICAgICAgICAgICAgICAgICAgdC5iaXRfcmF0
 ZSwKKysgICAgICAgICAgICAgICAgICAgICAgcy0+cnhfZmlsZSk7CisrICAgICAgICBwYnhfYnVp
 bHRpbl9zZXR2YXJfaGVscGVyKGNoYW4sICJSRU1PVEVTVEFUSU9OSUQiLCBmYXJfaWRlbnQpOwor
 KyAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVpIiwgdC5wYWdlc190cmFuc2Zl
 cnJlZCk7CisrICAgICAgICBwYnhfYnVpbHRpbl9zZXR2YXJfaGVscGVyKGNoYW4sICJGQVhQQUdF
 UyIsIGJ1Zik7CisrICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWkiLCB0Lnlf
 cmVzb2x1dGlvbik7CisrICAgICAgICBwYnhfYnVpbHRpbl9zZXR2YXJfaGVscGVyKGNoYW4sICJG
 QVhSRVNPTFVUSU9OIiwgYnVmKTsKKysgICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1Ziks
 ICIlaSIsIHQuYml0X3JhdGUpOworKyAgICAgICAgcGJ4X2J1aWx0aW5fc2V0dmFyX2hlbHBlcihj
 aGFuLCAiRkFYQklUUkFURSIsIGJ1Zik7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAg
 ICAgICBhc3RfbG9nKExPR19ERUJVRywgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisrICAg
 ICAgICBhc3RfbG9nKExPR19ERUJVRywgIkZheCByZWNlaXZlIG5vdCBzdWNjZXNzZnVsIC0gcmVz
 dWx0ICglZCkgJXMuXG4iLCByZXN1bHQsIHQzMF9jb21wbGV0aW9uX2NvZGVfdG9fc3RyKHJlc3Vs
 dCkpOworKyAgICAgICAgYXN0X2xvZyhMT0dfREVCVUcsICI9PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1c
 biIpOworKyAgICB9CisrfQorKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0t
 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworK3N0YXRpYyB2b2lk
 IHBoYXNlX2RfaGFuZGxlcih0MzBfc3RhdGVfdCAqcywgdm9pZCAqdXNlcl9kYXRhLCBpbnQgcmVz
 dWx0KQorK3sKKysgICAgc3RydWN0IGFzdF9jaGFubmVsICpjaGFuOworKyAgICB0MzBfc3RhdHNf
 dCB0OworKyAgICAKKysgICAgY2hhbiA9IChzdHJ1Y3QgYXN0X2NoYW5uZWwgKikgdXNlcl9kYXRh
 OworKyAgICBpZiAocmVzdWx0KQorKyAgICB7CisrICAgICAgICB0MzBfZ2V0X3RyYW5zZmVyX3N0
 YXRpc3RpY3MocywgJnQpOworKyAgICAgICAgYXN0X2xvZyhMT0dfREVCVUcsICI9PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT1cbiIpOworKyAgICAgICAgYXN0X2xvZyhMT0dfREVCVUcsICJQYWdlcyB0cmFu
 c2ZlcnJlZDogICVpXG4iLCB0LnBhZ2VzX3RyYW5zZmVycmVkKTsKKysgICAgICAgIGFzdF9sb2co
 TE9HX0RFQlVHLCAiSW1hZ2Ugc2l6ZTogICAgICAgICAlaSB4ICVpXG4iLCB0LndpZHRoLCB0Lmxl
 bmd0aCk7CisrICAgICAgICBhc3RfbG9nKExPR19ERUJVRywgIkltYWdlIHJlc29sdXRpb24gICAg
 JWkgeCAlaVxuIiwgdC54X3Jlc29sdXRpb24sIHQueV9yZXNvbHV0aW9uKTsKKysgICAgICAgIGFz
 dF9sb2coTE9HX0RFQlVHLCAiVHJhbnNmZXIgUmF0ZTogICAgICAlaVxuIiwgdC5iaXRfcmF0ZSk7
 CisrICAgICAgICBhc3RfbG9nKExPR19ERUJVRywgIkJhZCByb3dzICAgICAgICAgICAgJWlcbiIs
 IHQuYmFkX3Jvd3MpOworKyAgICAgICAgYXN0X2xvZyhMT0dfREVCVUcsICJMb25nZXN0IGJhZCBy
 b3cgcnVuICVpXG4iLCB0Lmxvbmdlc3RfYmFkX3Jvd19ydW4pOworKyAgICAgICAgYXN0X2xvZyhM
 T0dfREVCVUcsICJDb21wcmVzc2lvbiB0eXBlICAgICVpXG4iLCB0LmVuY29kaW5nKTsKKysgICAg
 ICAgIGFzdF9sb2coTE9HX0RFQlVHLCAiSW1hZ2Ugc2l6ZSAoYnl0ZXMpICAlaVxuIiwgdC5pbWFn
 ZV9zaXplKTsKKysgICAgICAgIGFzdF9sb2coTE9HX0RFQlVHLCAiPT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09XG4iKTsKKysgICAgfQorK30KKysvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0t
 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKytzdGF0aWMg
 aW50IHJ4ZmF4X2V4ZWMoc3RydWN0IGFzdF9jaGFubmVsICpjaGFuLCB2b2lkICpkYXRhKQorK3sK
 KysgICAgaW50IHJlcyA9IDA7CisrICAgIGNoYXIgdGVtcGxhdGVfZmlsZVsyNTZdOworKyAgICBj
 aGFyIHRhcmdldF9maWxlWzI1Nl07CisrICAgIGNoYXIgKnM7CisrICAgIGNoYXIgKnQ7CisrICAg
 IGNoYXIgKnY7CisrICAgIGNvbnN0IGNoYXIgKng7CisrICAgIGludCBvcHRpb247CisrICAgIGlu
 dCBsZW47CisrICAgIGludCBpOworKyAgICBmYXhfc3RhdGVfdCBmYXg7CisrICAgIGludCBjYWxs
 aW5nX3BhcnR5OworKyAgICBpbnQgdmVyYm9zZTsKKysgICAgaW50IHNhbXBsZXM7CisrCisrICAg
 IHN0cnVjdCBhc3RfbW9kdWxlX3VzZXIgKnU7CisrICAgIHN0cnVjdCBhc3RfZnJhbWUgKmluZiA9
 IE5VTEw7CisrICAgIHN0cnVjdCBhc3RfZnJhbWUgb3V0ZjsKKysKKysgICAgaW50IG9yaWdpbmFs
 X3JlYWRfZm10OworKyAgICBpbnQgb3JpZ2luYWxfd3JpdGVfZm10OworKyAgICAKKysgICAgdWlu
 dDhfdCBfX2J1ZltzaXplb2YodWludDE2X3QpKk1BWF9CTE9DS19TSVpFICsgMipBU1RfRlJJRU5E
 TFlfT0ZGU0VUXTsKKysgICAgdWludDhfdCAqYnVmID0gX19idWYgKyBBU1RfRlJJRU5ETFlfT0ZG
 U0VUOworKworKyAgICBpZiAoY2hhbiA9PSBOVUxMKQorKyAgICB7CisrICAgICAgICBhc3RfbG9n
 KExPR19XQVJOSU5HLCAiRmF4IHJlY2VpdmUgY2hhbm5lbCBpcyBOVUxMLiBHaXZpbmcgdXAuXG4i
 KTsKKysgICAgICAgIHJldHVybiAtMTsKKysgICAgfQorKworKyAgICBzcGFuX3NldF9tZXNzYWdl
 X2hhbmRsZXIoc3Bhbl9tZXNzYWdlKTsKKysKKysgICAgLyogVGhlIG5leHQgZmV3IGxpbmVzIG9m
 IGNvZGUgcGFyc2Ugb3V0IHRoZSBmaWxlbmFtZSBhbmQgaGVhZGVyIGZyb20gdGhlIGlucHV0IHN0
 cmluZyAqLworKyAgICBpZiAoZGF0YSA9PSBOVUxMKQorKyAgICB7CisrICAgICAgICAvKiBObyBk
 YXRhIGltcGxpZXMgbm8gZmlsZW5hbWUgb3IgYW55dGhpbmcgaXMgcHJlc2VudCAqLworKyAgICAg
 ICAgYXN0X2xvZyhMT0dfV0FSTklORywgIlJ4ZmF4IHJlcXVpcmVzIGFuIGFyZ3VtZW50IChmaWxl
 bmFtZSlcbiIpOworKyAgICAgICAgcmV0dXJuIC0xOworKyAgICB9CisrICAgIAorKyAgICBjYWxs
 aW5nX3BhcnR5ID0gRkFMU0U7CisrICAgIHZlcmJvc2UgPSBGQUxTRTsKKysgICAgdGFyZ2V0X2Zp
 bGVbMF0gPSAnXDAnOworKworKyAgICBmb3IgKG9wdGlvbiA9IDAsIHYgPSBzID0gZGF0YTsgIHY7
 ICBvcHRpb24rKywgcysrKQorKyAgICB7CisrICAgICAgICB0ID0gczsKKysgICAgICAgIHYgPSBz
 dHJjaHIocywgJ3wnKTsKKysgICAgICAgIHMgPSAodikgID8gIHYgIDogIHMgKyBzdHJsZW4ocyk7
 CisrICAgICAgICBzdHJuY3B5KChjaGFyICopIGJ1ZiwgdCwgcyAtIHQpOworKyAgICAgICAgYnVm
 W3MgLSB0XSA9ICdcMCc7CisrICAgICAgICBpZiAob3B0aW9uID09IDApCisrICAgICAgICB7Cisr
 ICAgICAgICAgICAgLyogVGhlIGZpcnN0IG9wdGlvbiBpcyBhbHdheXMgdGhlIGZpbGUgbmFtZSAq
 LworKyAgICAgICAgICAgIGxlbiA9IHMgLSB0OworKyAgICAgICAgICAgIGlmIChsZW4gPiAyNTUp
 CisrICAgICAgICAgICAgICAgIGxlbiA9IDI1NTsKKysgICAgICAgICAgICBzdHJuY3B5KHRhcmdl
 dF9maWxlLCB0LCBsZW4pOworKyAgICAgICAgICAgIHRhcmdldF9maWxlW2xlbl0gPSAnXDAnOwor
 KyAgICAgICAgICAgIC8qIEFsbG93IHRoZSB1c2Ugb2YgJWQgaW4gdGhlIGZpbGUgbmFtZSBmb3Ig
 YSB3aWxkIGNhcmQgb2Ygc29ydHMsIHRvCisrICAgICAgICAgICAgICAgY3JlYXRlIGEgbmV3IGZp
 bGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgc2NoZW1lICovCisrICAgICAgICAgICAgaWYgKCh4
 ID0gc3RyY2hyKHRhcmdldF9maWxlLCAnJScpKSAgJiYgIHhbMV0gPT0gJ2QnKQorKyAgICAgICAg
 ICAgIHsKKysgICAgICAgICAgICAgICAgc3RyY3B5KHRlbXBsYXRlX2ZpbGUsIHRhcmdldF9maWxl
 KTsKKysgICAgICAgICAgICAgICAgaSA9IDA7CisrICAgICAgICAgICAgICAgIGRvCisrICAgICAg
 ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKHRhcmdldF9maWxlLCAy
 NTYsIHRlbXBsYXRlX2ZpbGUsIDEpOworKyAgICAgICAgICAgICAgICAgICAgaSsrOworKyAgICAg
 ICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIHdoaWxlIChhc3RfZmlsZWV4aXN0cyh0YXJn
 ZXRfZmlsZSwgIiIsIGNoYW4tPmxhbmd1YWdlKSAhPSAtMSk7CisrICAgICAgICAgICAgfQorKyAg
 ICAgICAgfQorKyAgICAgICAgZWxzZSBpZiAoc3RybmNtcCgiY2FsbGVyIiwgdCwgcyAtIHQpID09
 IDApCisrICAgICAgICB7CisrICAgICAgICAgICAgY2FsbGluZ19wYXJ0eSA9IFRSVUU7CisrICAg
 ICAgICB9CisrICAgICAgICBlbHNlIGlmIChzdHJuY21wKCJkZWJ1ZyIsIHQsIHMgLSB0KSA9PSAw
 KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHZlcmJvc2UgPSBUUlVFOworKyAgICAgICAgfQor
 KyAgICB9CisrCisrICAgIC8qIERvbmUgcGFyc2luZyAqLworKworKyAgICB1ID0gYXN0X21vZHVs
 ZV91c2VyX2FkZChjaGFuKTsKKysKKysgICAgaWYgKGNoYW4tPl9zdGF0ZSAhPSBBU1RfU1RBVEVf
 VVApCisrICAgIHsKKysgICAgICAgIC8qIFNob3VsZG4ndCBuZWVkIHRoaXMsIGJ1dCBjaGVja2lu
 ZyB0byBzZWUgaWYgY2hhbm5lbCBpcyBhbHJlYWR5IGFuc3dlcmVkCisrICAgICAgICAgKiBUaGVv
 cmV0aWNhbGx5IGFzdGVyaXNrIHNob3VsZCBhbHJlYWR5IGhhdmUgYW5zd2VyZWQgYmVmb3JlIHJ1
 bm5pbmcgdGhlIGFwcCAqLworKyAgICAgICAgcmVzID0gYXN0X2Fuc3dlcihjaGFuKTsKKysgICAg
 fQorKyAgICAKKysgICAgaWYgKCFyZXMpCisrICAgIHsKKysgICAgICAgIG9yaWdpbmFsX3JlYWRf
 Zm10ID0gY2hhbi0+cmVhZGZvcm1hdDsKKysgICAgICAgIGlmIChvcmlnaW5hbF9yZWFkX2ZtdCAh
 PSBBU1RfRk9STUFUX1NMSU5FQVIpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmVzID0gYXN0
 X3NldF9yZWFkX2Zvcm1hdChjaGFuLCBBU1RfRk9STUFUX1NMSU5FQVIpOworKyAgICAgICAgICAg
 IGlmIChyZXMgPCAwKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgYXN0X2xvZyhM
 T0dfV0FSTklORywgIlVuYWJsZSB0byBzZXQgdG8gbGluZWFyIHJlYWQgbW9kZSwgZ2l2aW5nIHVw
 XG4iKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgICAgIH0KKysgICAg
 ICAgIH0KKysgICAgICAgIG9yaWdpbmFsX3dyaXRlX2ZtdCA9IGNoYW4tPndyaXRlZm9ybWF0Owor
 KyAgICAgICAgaWYgKG9yaWdpbmFsX3dyaXRlX2ZtdCAhPSBBU1RfRk9STUFUX1NMSU5FQVIpCisr
 ICAgICAgICB7CisrICAgICAgICAgICAgcmVzID0gYXN0X3NldF93cml0ZV9mb3JtYXQoY2hhbiwg
 QVNUX0ZPUk1BVF9TTElORUFSKTsKKysgICAgICAgICAgICBpZiAocmVzIDwgMCkKKysgICAgICAg
 ICAgICB7CisrICAgICAgICAgICAgICAgIGFzdF9sb2coTE9HX1dBUk5JTkcsICJVbmFibGUgdG8g
 c2V0IHRvIGxpbmVhciB3cml0ZSBtb2RlLCBnaXZpbmcgdXBcbiIpOworKyAgICAgICAgICAgICAg
 ICByZXMgPSBhc3Rfc2V0X3JlYWRfZm9ybWF0KGNoYW4sIG9yaWdpbmFsX3JlYWRfZm10KTsKKysg
 ICAgICAgICAgICAgICAgaWYgKHJlcykKKysgICAgICAgICAgICAgICAgICAgIGFzdF9sb2coTE9H
 X1dBUk5JTkcsICJVbmFibGUgdG8gcmVzdG9yZSByZWFkIGZvcm1hdCBvbiAnJXMnXG4iLCBjaGFu
 LT5uYW1lKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgICAgIH0KKysg
 ICAgICAgIH0KKysgICAgICAgIGZheF9pbml0KCZmYXgsIGNhbGxpbmdfcGFydHkpOworKyAgICAg
 ICAgaWYgKHZlcmJvc2UpCisrICAgICAgICAgICAgZmF4LmxvZ2dpbmcubGV2ZWwgPSBTUEFOX0xP
 R19TSE9XX1NFVkVSSVRZIHwgU1BBTl9MT0dfU0hPV19QUk9UT0NPTCB8IFNQQU5fTE9HX0ZMT1c7
 CisrICAgICAgICB4ID0gcGJ4X2J1aWx0aW5fZ2V0dmFyX2hlbHBlcihjaGFuLCAiTE9DQUxTVEFU
 SU9OSUQiKTsKKysgICAgICAgIGlmICh4ICAmJiAgeFswXSkKKysgICAgICAgICAgICB0MzBfc2V0
 X2xvY2FsX2lkZW50KCZmYXgudDMwX3N0YXRlLCB4KTsKKysgICAgICAgIHggPSBwYnhfYnVpbHRp
 bl9nZXR2YXJfaGVscGVyKGNoYW4sICJMT0NBTEhFQURFUklORk8iKTsKKysgICAgICAgIGlmICh4
 ICAmJiAgeFswXSkKKysgICAgICAgICAgICB0MzBfc2V0X2hlYWRlcl9pbmZvKCZmYXgudDMwX3N0
 YXRlLCB4KTsKKysgICAgICAgIHQzMF9zZXRfcnhfZmlsZSgmZmF4LnQzMF9zdGF0ZSwgdGFyZ2V0
 X2ZpbGUsIC0xKTsKKysgICAgICAgIC8vdDMwX3NldF9waGFzZV9iX2hhbmRsZXIoJmZheC50MzBf
 c3RhdGUsIHBoYXNlX2JfaGFuZGxlciwgY2hhbik7CisrICAgICAgICB0MzBfc2V0X3BoYXNlX2Rf
 aGFuZGxlcigmZmF4LnQzMF9zdGF0ZSwgcGhhc2VfZF9oYW5kbGVyLCBjaGFuKTsKKysgICAgICAg
 IHQzMF9zZXRfcGhhc2VfZV9oYW5kbGVyKCZmYXgudDMwX3N0YXRlLCBwaGFzZV9lX2hhbmRsZXIs
 IGNoYW4pOworKyAgICAgICAgdDMwX3NldF9lY21fY2FwYWJpbGl0eSgmZmF4LnQzMF9zdGF0ZSwg
 VFJVRSk7CisrICAgICAgICB0MzBfc2V0X3N1cHBvcnRlZF9jb21wcmVzc2lvbnMoJmZheC50MzBf
 c3RhdGUsIFQzMF9TVVBQT1JUX1Q0XzFEX0NPTVBSRVNTSU9OIHwgVDMwX1NVUFBPUlRfVDRfMkRf
 Q09NUFJFU1NJT04gfCBUMzBfU1VQUE9SVF9UNl9DT01QUkVTU0lPTik7CisrICAgICAgICB3aGls
 ZSAoYXN0X3dhaXRmb3IoY2hhbiwgLTEpID4gLTEpCisrICAgICAgICB7CisrICAgICAgICAgICAg
 aW5mID0gYXN0X3JlYWQoY2hhbik7CisrICAgICAgICAgICAgaWYgKGluZiA9PSBOVUxMKQorKyAg
 ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmVzID0gLTE7CisrICAgICAgICAgICAgICAg
 IGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBpZiAoaW5mLT5mcmFtZXR5cGUg
 PT0gQVNUX0ZSQU1FX1ZPSUNFKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgaWYg
 KGZheF9yeCgmZmF4LCBpbmYtPmRhdGEsIGluZi0+c2FtcGxlcykpCisrICAgICAgICAgICAgICAg
 ICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgc2FtcGxlcyA9IChpbmYtPnNhbXBsZXMgPD0g
 TUFYX0JMT0NLX1NJWkUpICA/ICBpbmYtPnNhbXBsZXMgIDogIE1BWF9CTE9DS19TSVpFOworKyAg
 ICAgICAgICAgICAgICBsZW4gPSBmYXhfdHgoJmZheCwgKGludDE2X3QgKikgJmJ1ZltBU1RfRlJJ
 RU5ETFlfT0ZGU0VUXSwgc2FtcGxlcyk7CisrICAgICAgICAgICAgICAgIGlmIChsZW4pCisrICAg
 ICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIG1lbXNldCgmb3V0ZiwgMCwgc2l6
 ZW9mKG91dGYpKTsKKysgICAgICAgICAgICAgICAgICAgIG91dGYuZnJhbWV0eXBlID0gQVNUX0ZS
 QU1FX1ZPSUNFOworKyAgICAgICAgICAgICAgICAgICAgb3V0Zi5zdWJjbGFzcyA9IEFTVF9GT1JN
 QVRfU0xJTkVBUjsKKysgICAgICAgICAgICAgICAgICAgIG91dGYuZGF0YWxlbiA9IGxlbipzaXpl
 b2YoaW50MTZfdCk7CisrICAgICAgICAgICAgICAgICAgICBvdXRmLnNhbXBsZXMgPSBsZW47Cisr
 ICAgICAgICAgICAgICAgICAgICBvdXRmLmRhdGEgPSAmYnVmW0FTVF9GUklFTkRMWV9PRkZTRVRd
 OworKyAgICAgICAgICAgICAgICAgICAgb3V0Zi5vZmZzZXQgPSBBU1RfRlJJRU5ETFlfT0ZGU0VU
 OworKyAgICAgICAgICAgICAgICAgICAgb3V0Zi5zcmMgPSAiUnhGQVgiOworKyAgICAgICAgICAg
 ICAgICAgICAgaWYgKGFzdF93cml0ZShjaGFuLCAmb3V0ZikgPCAwKQorKyAgICAgICAgICAgICAg
 ICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGFzdF9sb2coTE9HX1dBUk5JTkcsICJV
 bmFibGUgdG8gd3JpdGUgZnJhbWUgdG8gY2hhbm5lbDsgJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7
 CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgICAgICB9
 CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgYXN0X2Zy
 ZnJlZShpbmYpOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGluZiA9PSBOVUxMKQorKyAgICAg
 ICAgeworKyAgICAgICAgICAgIGFzdF9sb2coTE9HX0RFQlVHLCAiR290IGhhbmd1cFxuIik7Cisr
 ICAgICAgICAgICAgcmVzID0gLTE7CisrICAgICAgICB9CisrICAgICAgICBpZiAob3JpZ2luYWxf
 cmVhZF9mbXQgIT0gQVNUX0ZPUk1BVF9TTElORUFSKQorKyAgICAgICAgeworKyAgICAgICAgICAg
 IHJlcyA9IGFzdF9zZXRfcmVhZF9mb3JtYXQoY2hhbiwgb3JpZ2luYWxfcmVhZF9mbXQpOworKyAg
 ICAgICAgICAgIGlmIChyZXMpCisrICAgICAgICAgICAgICAgIGFzdF9sb2coTE9HX1dBUk5JTkcs
 ICJVbmFibGUgdG8gcmVzdG9yZSByZWFkIGZvcm1hdCBvbiAnJXMnXG4iLCBjaGFuLT5uYW1lKTsK
 KysgICAgICAgIH0KKysgICAgICAgIGlmIChvcmlnaW5hbF93cml0ZV9mbXQgIT0gQVNUX0ZPUk1B
 VF9TTElORUFSKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJlcyA9IGFzdF9zZXRfd3JpdGVf
 Zm9ybWF0KGNoYW4sIG9yaWdpbmFsX3dyaXRlX2ZtdCk7CisrICAgICAgICAgICAgaWYgKHJlcykK
 KysgICAgICAgICAgICAgICAgYXN0X2xvZyhMT0dfV0FSTklORywgIlVuYWJsZSB0byByZXN0b3Jl
 IHdyaXRlIGZvcm1hdCBvbiAnJXMnXG4iLCBjaGFuLT5uYW1lKTsKKysgICAgICAgIH0KKysgICAg
 ICAgIHQzMF90ZXJtaW5hdGUoJmZheC50MzBfc3RhdGUpOworKyAgICB9CisrICAgIGVsc2UKKysg
 ICAgeworKyAgICAgICAgYXN0X2xvZyhMT0dfV0FSTklORywgIkNvdWxkIG5vdCBhbnN3ZXIgY2hh
 bm5lbCAnJXMnXG4iLCBjaGFuLT5uYW1lKTsKKysgICAgfQorKyAgICBhc3RfbW9kdWxlX3VzZXJf
 cmVtb3ZlKHUpOworKyAgICByZXR1cm4gcmVzOworK30KKysvKi0gRW5kIG9mIGZ1bmN0aW9uIC0t
 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
 KysKKytzdGF0aWMgaW50IHVubG9hZF9tb2R1bGUodm9pZCkKKyt7CisrCWludCByZXM7CisrCisr
 CWFzdF9tb2R1bGVfdXNlcl9oYW5ndXBfYWxsKCk7CisrCisrCXJlcyA9IGFzdF91bnJlZ2lzdGVy
 X2FwcGxpY2F0aW9uKGFwcCk7CQorKwkKKysKKysJcmV0dXJuIHJlczsKKyt9CisrLyotIEVuZCBv
 ZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
 LS0tLS0tLS0tLSovCisrCisrc3RhdGljIGludCBsb2FkX21vZHVsZSh2b2lkKQorK3sKKysJcmV0
 dXJuIGFzdF9yZWdpc3Rlcl9hcHBsaWNhdGlvbihhcHAsIHJ4ZmF4X2V4ZWMsIHN5bm9wc2lzLCBk
 ZXNjcmlwKTsKKyt9CisrLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrQVNUX01PRFVMRV9JTkZP
 X1NUQU5EQVJEKEFTVEVSSVNLX0dQTF9LRVksICJUcml2aWFsIEZBWCBSZWNlaXZlIEFwcGxpY2F0
 aW9uIik7CisrCisrLyotIEVuZCBvZiBmaWxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLXJ1TiBhc3Rlcmlzay5vbGQv
 ZmlsZXMvcGF0Y2gtYXBwczo6YXBwX3R4ZmF4LmMgYXN0ZXJpc2svZmlsZXMvcGF0Y2gtYXBwczo6
 YXBwX3R4ZmF4LmMKLS0tIGFzdGVyaXNrLm9sZC9maWxlcy9wYXRjaC1hcHBzOjphcHBfdHhmYXgu
 YwkxOTcwLTAxLTAxIDA1OjAwOjAwLjAwMDAwMDAwMCArMDUwMAorKysgYXN0ZXJpc2svZmlsZXMv
 cGF0Y2gtYXBwczo6YXBwX3R4ZmF4LmMJMjAwNy0wNy0yMyAxNTowMTo1Ny4wMDAwMDAwMDAgKzA2
 MDAKQEAgLTAsMCArMSwzMDkgQEAKKy0tLSBhcHBzL2FwcF90eGZheC5jLm9yaWcJVHVlIEp1bCAx
 MCAxNToyODoxMyAyMDA3CisrKysgYXBwcy9hcHBfdHhmYXguYwlUdWUgSnVsIDEwIDE1OjI3OjM3
 IDIwMDcKK0BAIC0wLDAgKzEsMzA2IEBACisrLyoKKysgKiBBc3RlcmlzayAtLSBBIHRlbGVwaG9u
 eSB0b29sa2l0IGZvciBMaW51eC4KKysgKgorKyAqIFRyaXZpYWwgYXBwbGljYXRpb24gdG8gc2Vu
 ZCBhIFRJRkYgZmlsZSBhcyBhIEZBWAorKyAqIAorKyAqIENvcHlyaWdodCAoQykgMjAwMywgU3Rl
 dmUgVW5kZXJ3b29kCisrICoKKysgKiBTdGV2ZSBVbmRlcndvb2QgPHN0ZXZldUBjb3BwaWNlLm9y
 Zz4KKysgKgorKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1
 bmRlciB0aGUgdGVybXMgb2YKKysgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysg
 Ki8KKysKKysvKioqIE1PRFVMRUlORk8KKysgICAgICAgICA8ZGVwZW5kPnNwYW5kc3A8L2RlcGVu
 ZD4KKysqKiovCisrIAorKyNpbmNsdWRlICJhc3Rlcmlzay5oIgorKworK0FTVEVSSVNLX0ZJTEVf
 VkVSU0lPTihfX0ZJTEVfXywgIiRSZXZpc2lvbjokIikKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+
 CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxp
 bnR0eXBlcy5oPgorKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisrI2luY2x1ZGUgPGVycm5vLmg+Cisr
 I2luY2x1ZGUgPHRpZmZpby5oPgorKworKyNpbmNsdWRlIDxzcGFuZHNwLmg+CisrCisrI2luY2x1
 ZGUgImFzdGVyaXNrL2xvY2suaCIKKysjaW5jbHVkZSAiYXN0ZXJpc2svZmlsZS5oIgorKyNpbmNs
 dWRlICJhc3Rlcmlzay9sb2dnZXIuaCIKKysjaW5jbHVkZSAiYXN0ZXJpc2svY2hhbm5lbC5oIgor
 KyNpbmNsdWRlICJhc3Rlcmlzay9wYnguaCIKKysjaW5jbHVkZSAiYXN0ZXJpc2svbW9kdWxlLmgi
 CisrCisrI2lmbmRlZiBBU1RfTU9EVUxFCisrI2RlZmluZSBBU1RfTU9EVUxFICJhcHBfdHhmYXgi
 CisrI2VuZGlmCisrCisrc3RhdGljIGNoYXIgKmFwcCA9ICJUeEZBWCI7CisrCisrc3RhdGljIGNo
 YXIgKnN5bm9wc2lzID0gIlNlbmQgYSBGQVggZmlsZSI7CisrCisrc3RhdGljIGNoYXIgKmRlc2Ny
 aXAgPSAKKysiICBUeEZBWChmaWxlbmFtZVt8Y2FsbGVyXVt8ZGVidWddKTogIFNlbmQgYSBnaXZl
 biBUSUZGIGZpbGUgdG8gdGhlIGNoYW5uZWwgYXMgYSBGQVguXG4iCisrIlRoZSBcImNhbGxlclwi
 IG9wdGlvbiBtYWtlcyB0aGUgYXBwbGljYXRpb24gYmVoYXZlIGFzIGEgY2FsbGluZyBtYWNoaW5l
 LFxuIgorKyJyYXRoZXIgdGhhbiB0aGUgYW5zd2VyaW5nIG1hY2hpbmUuIFRoZSBkZWZhdWx0IGJl
 aGF2aW91ciBpcyB0byBiZWhhdmUgYXNcbiIKKysiYW4gYW5zd2VyaW5nIG1hY2hpbmUuXG4iCisr
 IlVzZXMgTE9DQUxTVEFUSU9OSUQgdG8gaWRlbnRpZnkgaXRzZWxmIHRvIHRoZSByZW1vdGUgZW5k
 LlxuIgorKyIgICAgIExPQ0FMSEVBREVSSU5GTyB0byBnZW5lcmF0ZSBhIGhlYWRlciBsaW5lIG9u
 IGVhY2ggcGFnZS5cbiIKKysiU2V0cyBSRU1PVEVTVEFUSU9OSUQgdG8gdGhlIHJlY2VpdmVyIENT
 SUQuXG4iCisrIlJldHVybnMgLTEgd2hlbiB0aGUgdXNlciBoYW5ncyB1cCwgb3IgaWYgdGhlIGZp
 bGUgZG9lcyBub3QgZXhpc3QuXG4iCisrIlJldHVybnMgMCBvdGhlcndpc2UuXG4iOworKworKyNk
 ZWZpbmUgTUFYX0JMT0NLX1NJWkUgMjQwCisrCisrc3RhdGljIHZvaWQgc3Bhbl9tZXNzYWdlKGlu
 dCBsZXZlbCwgY29uc3QgY2hhciAqbXNnKQorK3sKKysgICAgaW50IGFzdF9sZXZlbDsKKysgICAg
 CisrICAgIGlmIChsZXZlbCA9PSBTUEFOX0xPR19XQVJOSU5HKQorKyAgICAgICAgYXN0X2xldmVs
 ID0gX19MT0dfV0FSTklORzsKKysgICAgZWxzZSBpZiAobGV2ZWwgPT0gU1BBTl9MT0dfV0FSTklO
 RykKKysgICAgICAgIGFzdF9sZXZlbCA9IF9fTE9HX1dBUk5JTkc7CisrICAgIGVsc2UKKysgICAg
 ICAgIGFzdF9sZXZlbCA9IF9fTE9HX0RFQlVHOworKyAgICBhc3RfbG9nKGFzdF9sZXZlbCwgX19G
 SUxFX18sIF9fTElORV9fLCBfX1BSRVRUWV9GVU5DVElPTl9fLCBtc2cpOworK30KKysvKi0gRW5k
 IG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
 LS0tLS0tLS0tLS0tKi8KKysKKysjaWYgMAorK3N0YXRpYyB2b2lkIHQzMF9mbHVzaCh0MzBfc3Rh
 dGVfdCAqcywgaW50IHdoaWNoKQorK3sKKysgICAgLyogVE9ETzogKi8KKyt9CisrLyotIEVuZCBv
 ZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
 LS0tLS0tLS0tLSovCisrI2VuZGlmCisrCisrc3RhdGljIHZvaWQgcGhhc2VfZV9oYW5kbGVyKHQz
 MF9zdGF0ZV90ICpzLCB2b2lkICp1c2VyX2RhdGEsIGludCByZXN1bHQpCisreworKyAgICBzdHJ1
 Y3QgYXN0X2NoYW5uZWwgKmNoYW47CisrICAgIGNoYXIgZmFyX2lkZW50WzIxXTsKKysgICAgCisr
 ICAgIGNoYW4gPSAoc3RydWN0IGFzdF9jaGFubmVsICopIHVzZXJfZGF0YTsKKysgICAgaWYgKHJl
 c3VsdCA9PSBUMzBfRVJSX09LKQorKyAgICB7CisrICAgICAgICB0MzBfZ2V0X2Zhcl9pZGVudChz
 LCBmYXJfaWRlbnQpOworKyAgICAgICAgcGJ4X2J1aWx0aW5fc2V0dmFyX2hlbHBlcihjaGFuLCAi
 UkVNT1RFU1RBVElPTklEIiwgZmFyX2lkZW50KTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsK
 KysgICAgICAgIGFzdF9sb2coTE9HX0RFQlVHLCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsK
 KysgICAgICAgIGFzdF9sb2coTE9HX0RFQlVHLCAiRmF4IHNlbmQgbm90IHN1Y2Nlc3NmdWwgLSBy
 ZXN1bHQgKCVkKSAlcy5cbiIsIHJlc3VsdCwgdDMwX2NvbXBsZXRpb25fY29kZV90b19zdHIocmVz
 dWx0KSk7CisrICAgICAgICBhc3RfbG9nKExPR19ERUJVRywgIj09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PVxuIik7CisrICAgIH0KKyt9CisrLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0t
 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrc3RhdGljIGlu
 dCB0eGZheF9leGVjKHN0cnVjdCBhc3RfY2hhbm5lbCAqY2hhbiwgdm9pZCAqZGF0YSkKKyt7Cisr
 ICAgIGludCByZXMgPSAwOworKyAgICBjaGFyIHNvdXJjZV9maWxlWzI1Nl07CisrICAgIGNoYXIg
 KnM7CisrICAgIGNoYXIgKnQ7CisrICAgIGNoYXIgKnY7CisrICAgIGNvbnN0IGNoYXIgKng7Cisr
 ICAgIGludCBvcHRpb247CisrICAgIGludCBsZW47CisrICAgIGZheF9zdGF0ZV90IGZheDsKKysg
 ICAgaW50IGNhbGxpbmdfcGFydHk7CisrICAgIGludCB2ZXJib3NlOworKyAgICBpbnQgc2FtcGxl
 czsKKysgICAgCisrICAgIHN0cnVjdCBhc3RfbW9kdWxlX3VzZXIgKnU7CisrICAgIHN0cnVjdCBh
 c3RfZnJhbWUgKmluZiA9IE5VTEw7CisrICAgIHN0cnVjdCBhc3RfZnJhbWUgb3V0ZjsKKysKKysg
 ICAgaW50IG9yaWdpbmFsX3JlYWRfZm10OworKyAgICBpbnQgb3JpZ2luYWxfd3JpdGVfZm10Owor
 KyAgICAKKysgICAgdWludDhfdCBfX2J1ZltzaXplb2YodWludDE2X3QpKk1BWF9CTE9DS19TSVpF
 ICsgMipBU1RfRlJJRU5ETFlfT0ZGU0VUXTsKKysgICAgdWludDhfdCAqYnVmID0gX19idWYgKyBB
 U1RfRlJJRU5ETFlfT0ZGU0VUOworKworKyAgICBpZiAoY2hhbiA9PSBOVUxMKQorKyAgICB7Cisr
 ICAgICAgICBhc3RfbG9nKExPR19XQVJOSU5HLCAiRmF4IHRyYW5zbWl0IGNoYW5uZWwgaXMgTlVM
 TC4gR2l2aW5nIHVwLlxuIik7CisrICAgICAgICByZXR1cm4gLTE7CisrICAgIH0KKysKKysgICAg
 c3Bhbl9zZXRfbWVzc2FnZV9oYW5kbGVyKHNwYW5fbWVzc2FnZSk7CisrCisrICAgIC8qIFRoZSBu
 ZXh0IGZldyBsaW5lcyBvZiBjb2RlIHBhcnNlIG91dCB0aGUgZmlsZW5hbWUgYW5kIGhlYWRlciBm
 cm9tIHRoZSBpbnB1dCBzdHJpbmcgKi8KKysgICAgaWYgKGRhdGEgPT0gTlVMTCkKKysgICAgewor
 KyAgICAgICAgLyogTm8gZGF0YSBpbXBsaWVzIG5vIGZpbGVuYW1lIG9yIGFueXRoaW5nIGlzIHBy
 ZXNlbnQgKi8KKysgICAgICAgIGFzdF9sb2coTE9HX1dBUk5JTkcsICJUeGZheCByZXF1aXJlcyBh
 biBhcmd1bWVudCAoZmlsZW5hbWUpXG4iKTsKKysgICAgICAgIHJldHVybiAtMTsKKysgICAgfQor
 KyAgICAKKysgICAgY2FsbGluZ19wYXJ0eSA9IEZBTFNFOworKyAgICB2ZXJib3NlID0gRkFMU0U7
 CisrICAgIHNvdXJjZV9maWxlWzBdID0gJ1wwJzsgCisrCisrICAgIGZvciAob3B0aW9uID0gMCwg
 diA9IHMgPSBkYXRhOyAgdjsgIG9wdGlvbisrLCBzKyspCisrICAgIHsKKysgICAgICAgIHQgPSBz
 OworKyAgICAgICAgdiA9IHN0cmNocihzLCAnfCcpOworKyAgICAgICAgcyA9ICh2KSAgPyAgdiAg
 OiAgcyArIHN0cmxlbihzKTsKKysgICAgICAgIHN0cm5jcHkoKGNoYXIgKikgYnVmLCB0LCBzIC0g
 dCk7CisrICAgICAgICBidWZbcyAtIHRdID0gJ1wwJzsKKysgICAgICAgIGlmIChvcHRpb24gPT0g
 MCkKKysgICAgICAgIHsKKysgICAgICAgICAgICAvKiBUaGUgZmlyc3Qgb3B0aW9uIGlzIGFsd2F5
 cyB0aGUgZmlsZSBuYW1lICovCisrICAgICAgICAgICAgbGVuID0gcyAtIHQ7CisrICAgICAgICAg
 ICAgaWYgKGxlbiA+IDI1NSkKKysgICAgICAgICAgICAgICAgbGVuID0gMjU1OworKyAgICAgICAg
 ICAgIHN0cm5jcHkoc291cmNlX2ZpbGUsIHQsIGxlbik7CisrICAgICAgICAgICAgc291cmNlX2Zp
 bGVbbGVuXSA9ICdcMCc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIGlmIChzdHJuY21wKCJj
 YWxsZXIiLCB0LCBzIC0gdCkgPT0gMCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjYWxsaW5n
 X3BhcnR5ID0gVFJVRTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgaWYgKHN0cm5jbXAoImRl
 YnVnIiwgdCwgcyAtIHQpID09IDApCisrICAgICAgICB7CisrICAgICAgICAgICAgdmVyYm9zZSA9
 IFRSVUU7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgLyogRG9uZSBwYXJzaW5nICovCisr
 CisrICAgIHUgPSBhc3RfbW9kdWxlX3VzZXJfYWRkKGNoYW4pOworKworKyAgICBpZiAoY2hhbi0+
 X3N0YXRlICE9IEFTVF9TVEFURV9VUCkKKysgICAgeworKyAgICAgICAgLyogU2hvdWxkbid0IG5l
 ZWQgdGhpcywgYnV0IGNoZWNraW5nIHRvIHNlZSBpZiBjaGFubmVsIGlzIGFscmVhZHkgYW5zd2Vy
 ZWQKKysgICAgICAgICAqIFRoZW9yZXRpY2FsbHkgYXN0ZXJpc2sgc2hvdWxkIGFscmVhZHkgaGF2
 ZSBhbnN3ZXJlZCBiZWZvcmUgcnVubmluZyB0aGUgYXBwICovCisrICAgICAgICByZXMgPSBhc3Rf
 YW5zd2VyKGNoYW4pOworKyAgICB9CisrICAgIAorKyAgICBpZiAoIXJlcykKKysgICAgeworKyAg
 ICAgICAgb3JpZ2luYWxfcmVhZF9mbXQgPSBjaGFuLT5yZWFkZm9ybWF0OworKyAgICAgICAgaWYg
 KG9yaWdpbmFsX3JlYWRfZm10ICE9IEFTVF9GT1JNQVRfU0xJTkVBUikKKysgICAgICAgIHsKKysg
 ICAgICAgICAgICByZXMgPSBhc3Rfc2V0X3JlYWRfZm9ybWF0KGNoYW4sIEFTVF9GT1JNQVRfU0xJ
 TkVBUik7CisrICAgICAgICAgICAgaWYgKHJlcyA8IDApCisrICAgICAgICAgICAgeworKyAgICAg
 ICAgICAgICAgICBhc3RfbG9nKExPR19XQVJOSU5HLCAiVW5hYmxlIHRvIHNldCB0byBsaW5lYXIg
 cmVhZCBtb2RlLCBnaXZpbmcgdXBcbiIpOworKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cisr
 ICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgb3JpZ2luYWxfd3JpdGVfZm10ID0g
 Y2hhbi0+d3JpdGVmb3JtYXQ7CisrICAgICAgICBpZiAob3JpZ2luYWxfd3JpdGVfZm10ICE9IEFT
 VF9GT1JNQVRfU0xJTkVBUikKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXMgPSBhc3Rfc2V0
 X3dyaXRlX2Zvcm1hdChjaGFuLCBBU1RfRk9STUFUX1NMSU5FQVIpOworKyAgICAgICAgICAgIGlm
 IChyZXMgPCAwKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgYXN0X2xvZyhMT0df
 V0FSTklORywgIlVuYWJsZSB0byBzZXQgdG8gbGluZWFyIHdyaXRlIG1vZGUsIGdpdmluZyB1cFxu
 Iik7CisrICAgICAgICAgICAgICAgIHJlcyA9IGFzdF9zZXRfcmVhZF9mb3JtYXQoY2hhbiwgb3Jp
 Z2luYWxfcmVhZF9mbXQpOworKyAgICAgICAgICAgICAgICBpZiAocmVzKQorKyAgICAgICAgICAg
 ICAgICAgICAgYXN0X2xvZyhMT0dfV0FSTklORywgIlVuYWJsZSB0byByZXN0b3JlIHJlYWQgZm9y
 bWF0IG9uICclcydcbiIsIGNoYW4tPm5hbWUpOworKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7
 CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgZmF4X2luaXQoJmZheCwgY2Fs
 bGluZ19wYXJ0eSk7CisrICAgICAgICBpZiAodmVyYm9zZSkKKysJICAgIGZheC5sb2dnaW5nLmxl
 dmVsID0gU1BBTl9MT0dfU0hPV19TRVZFUklUWSB8IFNQQU5fTE9HX1NIT1dfUFJPVE9DT0wgfCBT
 UEFOX0xPR19GTE9XOworKworKyAgICAgICAgeCA9IHBieF9idWlsdGluX2dldHZhcl9oZWxwZXIo
 Y2hhbiwgIkxPQ0FMU1RBVElPTklEIik7CisrICAgICAgICBpZiAoeCAgJiYgIHhbMF0pCisrICAg
 ICAgICAgICAgdDMwX3NldF9sb2NhbF9pZGVudCgmZmF4LnQzMF9zdGF0ZSwgeCk7CisrICAgICAg
 ICB4ID0gcGJ4X2J1aWx0aW5fZ2V0dmFyX2hlbHBlcihjaGFuLCAiTE9DQUxIRUFERVJJTkZPIik7
 CisrICAgICAgICBpZiAoeCAgJiYgIHhbMF0pCisrICAgICAgICAgICAgdDMwX3NldF9oZWFkZXJf
 aW5mbygmZmF4LnQzMF9zdGF0ZSwgeCk7CisrICAgICAgICB0MzBfc2V0X3R4X2ZpbGUoJmZheC50
 MzBfc3RhdGUsIHNvdXJjZV9maWxlLCAtMSwgLTEpOworKyAgICAgICAgLy90MzBfc2V0X3BoYXNl
 X2JfaGFuZGxlcigmZmF4LnQzMF9zdGF0ZSwgcGhhc2VfYl9oYW5kbGVyLCBjaGFuKTsKKysgICAg
 ICAgIC8vdDMwX3NldF9waGFzZV9kX2hhbmRsZXIoJmZheC50MzBfc3RhdGUsIHBoYXNlX2RfaGFu
 ZGxlciwgY2hhbik7CisrICAgICAgICB0MzBfc2V0X3BoYXNlX2VfaGFuZGxlcigmZmF4LnQzMF9z
 dGF0ZSwgcGhhc2VfZV9oYW5kbGVyLCBjaGFuKTsKKysgICAgICAgIHQzMF9zZXRfZWNtX2NhcGFi
 aWxpdHkoJmZheC50MzBfc3RhdGUsIFRSVUUpOworKyAgICAgICAgdDMwX3NldF9zdXBwb3J0ZWRf
 Y29tcHJlc3Npb25zKCZmYXgudDMwX3N0YXRlLCBUMzBfU1VQUE9SVF9UNF8xRF9DT01QUkVTU0lP
 TiB8IFQzMF9TVVBQT1JUX1Q0XzJEX0NPTVBSRVNTSU9OIHwgVDMwX1NVUFBPUlRfVDZfQ09NUFJF
 U1NJT04pOworKyAgICAgICAgd2hpbGUgKGFzdF93YWl0Zm9yKGNoYW4sIC0xKSA+IC0xKQorKyAg
 ICAgICAgeworKyAgICAgICAgICAgIGluZiA9IGFzdF9yZWFkKGNoYW4pOworKyAgICAgICAgICAg
 IGlmIChpbmYgPT0gTlVMTCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJlcyA9
 IC0xOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICAg
 ICAgaWYgKGluZi0+ZnJhbWV0eXBlID09IEFTVF9GUkFNRV9WT0lDRSkKKysgICAgICAgICAgICB7
 CisrICAgICAgICAgICAgICAgIGlmIChmYXhfcngoJmZheCwgaW5mLT5kYXRhLCBpbmYtPnNhbXBs
 ZXMpKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIHNhbXBs
 ZXMgPSAoaW5mLT5zYW1wbGVzIDw9IE1BWF9CTE9DS19TSVpFKSAgPyAgaW5mLT5zYW1wbGVzICA6
 ICBNQVhfQkxPQ0tfU0laRTsKKysgICAgICAgICAgICAgICAgbGVuID0gZmF4X3R4KCZmYXgsIChp
 bnQxNl90ICopICZidWZbQVNUX0ZSSUVORExZX09GRlNFVF0sIHNhbXBsZXMpOworKyAgICAgICAg
 ICAgICAgICBpZiAobGVuKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAg
 ICBtZW1zZXQoJm91dGYsIDAsIHNpemVvZihvdXRmKSk7CisrICAgICAgICAgICAgICAgICAgICBv
 dXRmLmZyYW1ldHlwZSA9IEFTVF9GUkFNRV9WT0lDRTsKKysgICAgICAgICAgICAgICAgICAgIG91
 dGYuc3ViY2xhc3MgPSBBU1RfRk9STUFUX1NMSU5FQVI7CisrICAgICAgICAgICAgICAgICAgICBv
 dXRmLmRhdGFsZW4gPSBsZW4qc2l6ZW9mKGludDE2X3QpOworKyAgICAgICAgICAgICAgICAgICAg
 b3V0Zi5zYW1wbGVzID0gbGVuOworKyAgICAgICAgICAgICAgICAgICAgb3V0Zi5kYXRhID0gJmJ1
 ZltBU1RfRlJJRU5ETFlfT0ZGU0VUXTsKKysgICAgICAgICAgICAgICAgICAgIG91dGYub2Zmc2V0
 ID0gQVNUX0ZSSUVORExZX09GRlNFVDsKKysgICAgICAgICAgICAgICAgICAgIGlmIChhc3Rfd3Jp
 dGUoY2hhbiwgJm91dGYpIDwgMCkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAg
 ICAgICAgICAgICAgICBhc3RfbG9nKExPR19XQVJOSU5HLCAiVW5hYmxlIHRvIHdyaXRlIGZyYW1l
 IHRvIGNoYW5uZWw7ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworKyAgICAgICAgICAgICAgICAg
 ICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICB9
 CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGFzdF9mcmZyZWUoaW5mKTsKKysgICAgICAg
 IH0KKysgICAgICAgIGlmIChpbmYgPT0gTlVMTCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBh
 c3RfbG9nKExPR19ERUJVRywgIkdvdCBoYW5ndXBcbiIpOworKyAgICAgICAgICAgIHJlcyA9IC0x
 OworKyAgICAgICAgfQorKyAgICAgICAgaWYgKG9yaWdpbmFsX3JlYWRfZm10ICE9IEFTVF9GT1JN
 QVRfU0xJTkVBUikKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXMgPSBhc3Rfc2V0X3JlYWRf
 Zm9ybWF0KGNoYW4sIG9yaWdpbmFsX3JlYWRfZm10KTsKKysgICAgICAgICAgICBpZiAocmVzKQor
 KyAgICAgICAgICAgICAgICBhc3RfbG9nKExPR19XQVJOSU5HLCAiVW5hYmxlIHRvIHJlc3RvcmUg
 cmVhZCBmb3JtYXQgb24gJyVzJ1xuIiwgY2hhbi0+bmFtZSk7CisrICAgICAgICB9CisrICAgICAg
 ICBpZiAob3JpZ2luYWxfd3JpdGVfZm10ICE9IEFTVF9GT1JNQVRfU0xJTkVBUikKKysgICAgICAg
 IHsKKysgICAgICAgICAgICByZXMgPSBhc3Rfc2V0X3dyaXRlX2Zvcm1hdChjaGFuLCBvcmlnaW5h
 bF93cml0ZV9mbXQpOworKyAgICAgICAgICAgIGlmIChyZXMpCisrICAgICAgICAgICAgICAgIGFz
 dF9sb2coTE9HX1dBUk5JTkcsICJVbmFibGUgdG8gcmVzdG9yZSB3cml0ZSBmb3JtYXQgb24gJyVz
 J1xuIiwgY2hhbi0+bmFtZSk7CisrICAgICAgICB9CisrICAgICAgICB0MzBfdGVybWluYXRlKCZm
 YXgudDMwX3N0YXRlKTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIGFzdF9s
 b2coTE9HX1dBUk5JTkcsICJDb3VsZCBub3QgYW5zd2VyIGNoYW5uZWwgJyVzJ1xuIiwgY2hhbi0+
 bmFtZSk7CisrICAgIH0KKysgICAgYXN0X21vZHVsZV91c2VyX3JlbW92ZSh1KTsKKysgICAgcmV0
 dXJuIHJlczsKKyt9CisrLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrc3RhdGljIGludCB1bmxv
 YWRfbW9kdWxlKHZvaWQpCisreworKwlpbnQgcmVzOworKworKwlhc3RfbW9kdWxlX3VzZXJfaGFu
 Z3VwX2FsbCgpOworKworKwlyZXMgPSBhc3RfdW5yZWdpc3Rlcl9hcHBsaWNhdGlvbihhcHApOwkK
 KysJCisrCisrCXJldHVybiByZXM7CisrfQorKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0t
 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworK3N0
 YXRpYyBpbnQgbG9hZF9tb2R1bGUodm9pZCkKKyt7CisrICAgIHJldHVybiBhc3RfcmVnaXN0ZXJf
 YXBwbGljYXRpb24oYXBwLCB0eGZheF9leGVjLCBzeW5vcHNpcywgZGVzY3JpcCk7CisrfQorKy8q
 LSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
 LS0tLS0tLS0tLS0tLS0tLS0qLworKworK0FTVF9NT0RVTEVfSU5GT19TVEFOREFSRChBU1RFUklT
 S19HUExfS0VZLCAiVHJpdmlhbCBGQVggVHJhbnNtaXQgQXBwbGljYXRpb24iKTsKKysKKysvKi0g
 RW5kIG9mIGZpbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
 LS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtcnVOIGFzdGVyaXNrLm9sZC9maWxlcy9wYXRjaC1idWls
 ZF90b29sczo6bWVudXNlbGVjdC1kZXBzLmluIGFzdGVyaXNrL2ZpbGVzL3BhdGNoLWJ1aWxkX3Rv
 b2xzOjptZW51c2VsZWN0LWRlcHMuaW4KLS0tIGFzdGVyaXNrLm9sZC9maWxlcy9wYXRjaC1idWls
 ZF90b29sczo6bWVudXNlbGVjdC1kZXBzLmluCTE5NzAtMDEtMDEgMDU6MDA6MDAuMDAwMDAwMDAw
 ICswNTAwCisrKyBhc3Rlcmlzay9maWxlcy9wYXRjaC1idWlsZF90b29sczo6bWVudXNlbGVjdC1k
 ZXBzLmluCTIwMDctMTAtMDkgMjE6MjY6MzguMDAwMDAwMDAwICswNjAwCkBAIC0wLDAgKzEsMTAg
 QEAKKy0tLSBidWlsZF90b29scy9tZW51c2VsZWN0LWRlcHMuaW4ub3JpZwkyMDA3LTEwLTA5IDIx
 OjI2OjAyLjAwMDAwMDAwMCArMDYwMAorKysrIGJ1aWxkX3Rvb2xzL21lbnVzZWxlY3QtZGVwcy5p
 bgkyMDA3LTEwLTA5IDIxOjI2OjE5LjAwMDAwMDAwMCArMDYwMAorQEAgLTIyLDYgKzIyLDcgQEAK
 KyBQUkk9QFBCWF9QUklACisgUVQ9QFBCWF9RVEAKKyBSQURJVVM9QFBCWF9SQURJVVNACisrU1BB
 TkRTUD1AUEJYX1NQQU5EU1BACisgU1BFRVg9QFBCWF9TUEVFWEAKKyBTUUxJVEU9QFBCWF9TUUxJ
 VEVACisgU1NMPUBQQlhfT1BFTlNTTEAKZGlmZiAtcnVOIGFzdGVyaXNrLm9sZC9maWxlcy9wYXRj
 aC1jb25maWd1cmUgYXN0ZXJpc2svZmlsZXMvcGF0Y2gtY29uZmlndXJlCi0tLSBhc3Rlcmlzay5v
 bGQvZmlsZXMvcGF0Y2gtY29uZmlndXJlCTIwMDctMDgtMTAgMjI6MzA6NDAuMDAwMDAwMDAwICsw
 NjAwCisrKyBhc3Rlcmlzay9maWxlcy9wYXRjaC1jb25maWd1cmUJMjAwNy0xMC0wOSAyMToxODo1
 NS4wMDAwMDAwMDAgKzA2MDAKQEAgLTEsOSArMSwyNSBAQAotCi0kRnJlZUJTRDogcG9ydHMvbmV0
 L2FzdGVyaXNrL2ZpbGVzL3BhdGNoLWNvbmZpZ3VyZSx2IDEuMyAyMDA3LzA4LzEwIDE2OjMwOjQw
 IHNvYm9tYXggRXhwICQKLQotLS0tIGNvbmZpZ3VyZS5vcmlnCi0rKysgY29uZmlndXJlCi1AQCAt
 MzkyNiw4ICszOTI2LDYgQEAKKy0tLSBjb25maWd1cmUub3JpZwkyMDA3LTA5LTE0IDIxOjUwOjQ5
 LjAwMDAwMDAwMCArMDYwMAorKysrIGNvbmZpZ3VyZQkyMDA3LTEwLTA5IDIxOjE4OjUwLjAwMDAw
 MDAwMCArMDYwMAorQEAgLTgyMCw2ICs4MjAsMTAgQEAKKyBSQURJVVNfSU5DTFVERQorIFJBRElV
 U19ESVIKKyBQQlhfUkFESVVTCisrU1BBTkRTUF9MSUIKKytTUEFORFNQX0lOQ0xVREUKKytTUEFO
 RFNQX0RJUgorK1BCWF9TUEFORFNQCisgU1BFRVhfTElCCisgU1BFRVhfSU5DTFVERQorIFNQRUVY
 X0RJUgorQEAgLTE1MzAsNiArMTUzNCw3IEBACisgICAtLXdpdGgtcXQ9UEFUSCAgICAgICAgICB1
 c2UgUXQgZmlsZXMgaW4gUEFUSAorICAgLS13aXRoLXJhZGl1cz1QQVRIICAgICAgdXNlIFJhZGl1
 cyBDbGllbnQgZmlsZXMgaW4gUEFUSAorICAgLS13aXRoLXNwZWV4PVBBVEggICAgICAgdXNlIFNw
 ZWV4IGZpbGVzIGluIFBBVEgKKysgIC0td2l0aC1zcGFuZHNwPVBBVEggICAgIHVzZSBTcGFuZHNw
 IGxpYnJhcnkgZmlsZXMgaW4gUEFUSAorICAgLS13aXRoLXNxbGl0ZT1QQVRIICAgICAgdXNlIFNR
 TGl0ZSBmaWxlcyBpbiBQQVRICisgICAtLXdpdGgtc3VwcHNlcnY9UEFUSCAgICB1c2UgbUlTRE4g
 U3VwcGxlbWVudGFsIFNlcnZpY2VzIGZpbGVzIGluIFBBVEgKKyAgIC0td2l0aC1zc2w9UEFUSCAg
 ICAgICAgIHVzZSBPcGVuU1NMIGZpbGVzIGluIFBBVEgKK0BAIC0zOTMxLDggKzM5MzYsNiBAQAog
 IGNhc2UgIiR7aG9zdF9vc30iIGluCiAgICAgICBmcmVlYnNkKikKICAgICAgIGFjX2RlZmF1bHRf
 cHJlZml4PS91c3IvbG9jYWwKQEAgLTEyLDcgKzI4LDY5IEBACiAgICAgICA7OwogICAgICAgKikK
 ICAgICAgIGFjX2RlZmF1bHRfcHJlZml4PS91c3IKLUBAIC0yNjIyOCw2ICsyNjIyNiw3IEBACitA
 QCAtODMwMiw4ICs4MzA1LDM0IEBACisgCisgUEJYX1JBRElVUz0wCisgCisrU1BORFNQX0RFU0NS
 SVA9IlNwYW5kc3AgTGlicmFyeSIKKytTUEFORFNQX09QVElPTj0ic3BhbmRzcCIKKyAKKysjIENo
 ZWNrIHdoZXRoZXIgLS13aXRoLXNwYW5kc3Agd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7d2l0aF9z
 cGFuZHNwK3NldH0iID0gc2V0OyB0aGVuCisrICB3aXRodmFsPSR3aXRoX3NwYW5kc3A7CisrY2Fz
 ZSAke3dpdGh2YWx9IGluCisrICAgICBufG5vKQorKyAgICAgVVNFX1NQQU5EU1A9bm8KKysgICAg
 IFBCWF9TUEFORFNQPTAKKysgICAgIDs7CisrICAgICB5fHllfHllcykKKysgICAgIFNQQU5EU1Bf
 RElSPSIvdXNyL2xvY2FsIgorKyAgICAgU1BBTkRTUF9MSUI9Ii1ML3Vzci9sb2NhbC9saWIgLWxz
 cGFuZHNwIgorKyAgICAgU1BBTkRTUF9JTkNMVURFPSItSSR7U1BBTkRTUF9ESVJ9L2luY2x1ZGUi
 CisrICAgICBTUEFORFNQX01BTkRBVE9SWT0ieWVzIgorKyAgICAgUEJYX1NQQU5EU1A9MQorKyAg
 ICAgOzsKKysgICAgICopCisrICAgICBTUEFORFNQX0RJUj0iJHt3aXRodmFsfSIKKysgICAgIFNQ
 QU5EU1BfTElCPSItTCR7U1BBTkRTUF9ESVJ9L2xpYiAtbHNwYW5kc3AiCisrICAgICBTUEFORFNQ
 X0lOQ0xVREU9Ii1JJHtTUEFORFNQX0RJUn0vaW5jbHVkZSIKKysgICAgIFNQQU5EU1BfTUFOREFU
 T1JZPSJ5ZXMiCisrICAgICBQQlhfU1BBTkRTUD0xCisrICAgICA7OworK2VzYWMKKyAKKytmaQor
 IAorIAorIAorQEAgLTE4NDY0LDExICsxODQ5MywxMSBAQAorIGVjaG8gJEVDSE9fTiAiY2hlY2tp
 bmcgZm9yIFVXIElNQVAgVG9vbGtpdCBjLWNsaWVudCBsaWJyYXJ5Li4uICRFQ0hPX0MiID4mNjsg
 fQorICAgIHNhdmVkX2NwcGZsYWdzPSIke0NQUEZMQUdTfSIKKyAgICBzYXZlZF9saWJzPSIke0xJ
 QlN9IgorLSAgIGlmIHRlc3QgLWYgJHtJTUFQX1RLX0RJUn0vYy1jbGllbnQvTERGTEFHUyA7IHRo
 ZW4KKy0gICAgICBpbWFwX2xkZmxhZ3M9YGNhdCAke0lNQVBfVEtfRElSfS9jLWNsaWVudC9MREZM
 QUdTYAorKyAgIGlmIHRlc3QgLWYgJHtJTUFQX1RLX0RJUn0vaW5jbHVkZS9jLWNsaWVudC9MREZM
 QUdTIDsgdGhlbgorKyAgICAgIGltYXBfbGRmbGFncz1gY2F0ICR7SU1BUF9US19ESVJ9L2luY2x1
 ZGUvYy1jbGllbnQvTERGTEFHU2AKKyAgICBmaQorLSAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSAt
 SSR7SU1BUF9US19ESVJ9L2MtY2xpZW50IgorLSAgIExJQlM9IiR7TElCU30gJHtJTUFQX1RLX0RJ
 Un0vYy1jbGllbnQvYy1jbGllbnQuYSAiYGVjaG8gJHtpbWFwX2xkZmxhZ3N9YAorKyAgIENQUEZM
 QUdTPSIke0NQUEZMQUdTfSAtSSR7SU1BUF9US19ESVJ9L2luY2x1ZGUvYy1jbGllbnQiCisrICAg
 TElCUz0iJHtMSUJTfSAke0lNQVBfVEtfRElSfS9saWIvbGliYy1jbGllbnQ0LmEgImBlY2hvICR7
 aW1hcF9sZGZsYWdzfWAKKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBj
 b25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKK0BAIC0xODY2MCw4ICsxODY4OSw4IEBACisgICAgaWYg
 dGVzdCAiJHthY19jdl9pbWFwX3RrfSIgPSAieWVzIjsgdGhlbgorICAgICAgIHsgZWNobyAiJGFz
 X21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKKyBlY2hvICIke0VDSE9fVH15ZXMiID4mNjsg
 fQorLSAgICAgIElNQVBfVEtfTElCPSIke0lNQVBfVEtfRElSfS9jLWNsaWVudC9jLWNsaWVudC5h
 ICJgZWNobyAke2ltYXBfbGRmbGFnc31gCistICAgICAgSU1BUF9US19JTkNMVURFPSItSSR7SU1B
 UF9US19ESVJ9L2MtY2xpZW50IgorKyAgICAgIElNQVBfVEtfTElCPSIke0lNQVBfVEtfRElSfS9s
 aWIvbGliYy1jbGllbnQ0LmEgImBlY2hvICR7aW1hcF9sZGZsYWdzfWAKKysgICAgICBJTUFQX1RL
 X0lOQ0xVREU9Ii1JJHtJTUFQX1RLX0RJUn0vaW5jbHVkZS9jLWNsaWVudCIKKyAgICAgICBQQlhf
 SU1BUF9USz0xCisgCisgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKK0BAIC0yNjI2MSw2ICsy
 NjI5MCw3IEBACiAgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogIC8qIGVuZCBjb25m
 ZGVmcy5oLiAgKi8KICAkYWNfaW5jbHVkZXNfZGVmYXVsdApAQCAtMjAsNyArOTgsNyBAQAogICNp
 bmNsdWRlIDwke0hPTUV9L29wZW5oMzIzL2luY2x1ZGUvaDMyMy5oPgogIF9BQ0VPRgogIHJtIC1m
 IGNvbmZ0ZXN0LiRhY19vYmpleHQKLUBAIC0yNjI2OCw2ICsyNjI2Nyw3IEBACitAQCAtMjYzMDEs
 NiArMjYzMzEsNyBAQAogIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAogIGNhdCA+
 PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKICAvKiBlbmQgY29uZmRlZnMuaC4gICovCkBAIC0y
 OCw3ICsxMDYsNyBAQAogICNpbmNsdWRlIDwke0hPTUV9L29wZW5oMzIzL2luY2x1ZGUvaDMyMy5o
 PgogIF9BQ0VPRgogIGlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgotQEAg
 LTI2MzY1LDYgKzI2MzY1LDcgQEAKK0BAIC0yNjM5OCw2ICsyNjQyOSw3IEBACiAgY2F0ID4+Y29u
 ZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICAkYWNfaW5j
 bHVkZXNfZGVmYXVsdApAQCAtMzYsNyArMTE0LDcgQEAKICAjaW5jbHVkZSA8L3Vzci9sb2NhbC9p
 bmNsdWRlL29wZW5oMzIzL2gzMjMuaD4KICBfQUNFT0YKICBybSAtZiBjb25mdGVzdC4kYWNfb2Jq
 ZXh0Ci1AQCAtMjY0MDUsNiArMjY0MDYsNyBAQAorQEAgLTI2NDM4LDYgKzI2NDcwLDcgQEAKICBj
 YXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKICBjYXQgPj5jb25mdGVzdC4kYWNfZXh0
 IDw8X0FDRU9GCiAgLyogZW5kIGNvbmZkZWZzLmguICAqLwpAQCAtNDQsNyArMTIyLDcgQEAKICAj
 aW5jbHVkZSA8L3Vzci9sb2NhbC9pbmNsdWRlL29wZW5oMzIzL2gzMjMuaD4KICBfQUNFT0YKICBp
 ZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKLUBAIC0yNjY1Miw3ICsyNjY1
 NCw3IEBACitAQCAtMjY2ODUsNyArMjY3MTgsNyBAQAogIAogIAlmaQogIApAQCAtNTMsNyArMTMx
 LDcgQEAKICAKICAJaWYgdGVzdCAiJHtIQVNfT1BFTkgzMjM6LXVuc2V0fSIgIT0gInVuc2V0Ijsg
 dGhlbgogIAkgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBPcGVuSDMyMyBpbnN0
 YWxsYXRpb24gdmFsaWRpdHkiID4mNQotQEAgLTMxODAwLDYgKzMxODAyLDcgQEAKK0BAIC0zMjIz
 Miw2ICszMjI2NSw3IEBACiAgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgogIC8qIGVu
 ZCBjb25mZGVmcy5oLiAgKi8KICAkYWNfaW5jbHVkZXNfZGVmYXVsdApAQCAtNjEsNyArMTM5LDcg
 QEAKICAjaW5jbHVkZSA8aDMyMy5oPgogIF9BQ0VPRgogIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpl
 eHQKLUBAIC0zMTg0MCw2ICszMTg0Myw3IEBACitAQCAtMzIyNzIsNiArMzIzMDYsNyBAQAogIGNh
 dCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAogIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQg
 PDxfQUNFT0YKICAvKiBlbmQgY29uZmRlZnMuaC4gICovCkBAIC02OSwzICsxNDcsMjMgQEAKICAj
 aW5jbHVkZSA8aDMyMy5oPgogIF9BQ0VPRgogIGlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVz
 dC4kYWNfZXh0IgorQEAgLTMzODQyLDYgKzMzODc3LDEwIEBACisgUkFESVVTX0lOQ0xVREUhJFJB
 RElVU19JTkNMVURFJGFjX2RlbGltCisgUkFESVVTX0RJUiEkUkFESVVTX0RJUiRhY19kZWxpbQor
 IFBCWF9SQURJVVMhJFBCWF9SQURJVVMkYWNfZGVsaW0KKytTUEFORFNQX0xJQiEkU1BBTkRTUF9M
 SUIkYWNfZGVsaW0KKytTUEFORFNQX0lOQ0xVREUhJFNQQU5EU1BfSU5DTFVERSRhY19kZWxpbQor
 K1NQQU5EU1BfRElSISRTUEFORFNQX0RJUiRhY19kZWxpbQorK1BCWF9TUEFORFNQISRQQlhfU1BB
 TkRTUCRhY19kZWxpbQorIFNQRUVYX0xJQiEkU1BFRVhfTElCJGFjX2RlbGltCisgU1BFRVhfSU5D
 TFVERSEkU1BFRVhfSU5DTFVERSRhY19kZWxpbQorIFNQRUVYX0RJUiEkU1BFRVhfRElSJGFjX2Rl
 bGltCitAQCAtMzM5MzMsNyArMzM5NzIsNyBAQAorIExUTElCT0JKUyEkTFRMSUJPQkpTJGFjX2Rl
 bGltCisgX0FDRU9GCisgCistICBpZiB0ZXN0IGBzZWQgLW4gInMvLiokYWNfZGVsaW1cJC9YL3Ai
 IGNvbmYkJHN1YnMuc2VkIHwgZ3JlcCAtYyBYYCA9IDk2OyB0aGVuCisrICBpZiB0ZXN0IGBzZWQg
 LW4gInMvLiokYWNfZGVsaW1cJC9YL3AiIGNvbmYkJHN1YnMuc2VkIHwgZ3JlcCAtYyBYYCA9IDEw
 MDsgdGhlbgorICAgICBicmVhaworICAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKyAgICAgeyB7
 IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFU
 VVMiID4mNQpkaWZmIC1ydU4gYXN0ZXJpc2sub2xkL2ZpbGVzL3BhdGNoLWNvbmZpZ3VyZS5hYyBh
 c3Rlcmlzay9maWxlcy9wYXRjaC1jb25maWd1cmUuYWMKLS0tIGFzdGVyaXNrLm9sZC9maWxlcy9w
 YXRjaC1jb25maWd1cmUuYWMJMTk3MC0wMS0wMSAwNTowMDowMC4wMDAwMDAwMDAgKzA1MDAKKysr
 IGFzdGVyaXNrL2ZpbGVzL3BhdGNoLWNvbmZpZ3VyZS5hYwkyMDA3LTEwLTA5IDIxOjA5OjQ2LjAw
 MDAwMDAwMCArMDYwMApAQCAtMCwwICsxLDE5IEBACistLS0gY29uZmlndXJlLmFjLm9yaWcJMjAw
 Ny0xMC0wOSAyMTowODo0MS4wMDAwMDAwMDAgKzA2MDAKKysrKyBjb25maWd1cmUuYWMJMjAwNy0x
 MC0wOSAyMTowOToyOS4wMDAwMDAwMDAgKzA2MDAKK0BAIC0xOTYsNiArMTk2LDcgQEAKKyBBU1Rf
 RVhUX0xJQl9TRVRVUChbT1BFTkgzMjNdLCBbT3BlbkgzMjNdLCBbaDMyM10pCisgQVNUX0VYVF9M
 SUJfU0VUVVAoW1FUXSwgW1F0XSwgW3F0XSkKKyBBU1RfRVhUX0xJQl9TRVRVUChbUkFESVVTXSwg
 W1JhZGl1cyBDbGllbnRdLCBbcmFkaXVzXSkKKytBU1RfRVhUX0xJQl9TRVRVUChbU1BBTkRTUF0s
 IFtTcGFuZHNwIExpYnJhcnldLCBbc3BhbmRzcF0pCisgQVNUX0VYVF9MSUJfU0VUVVAoW1NQRUVY
 XSwgW1NwZWV4XSwgW3NwZWV4XSkKKyBBU1RfRVhUX0xJQl9TRVRVUChbU1FMSVRFXSwgW1NRTGl0
 ZV0sIFtzcWxpdGVdKQorIEFTVF9FWFRfTElCX1NFVFVQKFtTVVBQU0VSVl0sIFttSVNETiBTdXBw
 bGVtZW50YWwgU2VydmljZXNdLCBbc3VwcHNlcnZdKQorQEAgLTk0Miw2ICs5NDMsOCBAQAorIAor
 IEFTVF9FWFRfTElCX0NIRUNLKFtSQURJVVNdLCBbcmFkaXVzY2xpZW50LW5nXSwgW3JjX3JlYWRf
 Y29uZmlnXSwgW3JhZGl1c2NsaWVudC1uZy5oXSkKKyAKKytBU1RfRVhUX0xJQl9DSEVDSyhbU1BB
 TkRTUF0sIFtzcGFuZHNwXSwgW2ZheF9pbml0XSwgW3NwYW5kc3AuaF0sIFstbHRpZmZdKQorKwor
 IEFTVF9FWFRfTElCX0NIRUNLKFtTUEVFWF0sIFtzcGVleF0sIFtzcGVleF9lbmNvZGVdLCBbc3Bl
 ZXgvc3BlZXguaF0sIFstbG1dKQorIAorIEFTVF9FWFRfTElCX0NIRUNLKFtTUUxJVEVdLCBbc3Fs
 aXRlXSwgW3NxbGl0ZV9leGVjXSwgW3NxbGl0ZS5oXSkKZGlmZiAtcnVOIGFzdGVyaXNrLm9sZC9m
 aWxlcy9wYXRjaC1tYWtlb3B0cy5pbiBhc3Rlcmlzay9maWxlcy9wYXRjaC1tYWtlb3B0cy5pbgot
 LS0gYXN0ZXJpc2sub2xkL2ZpbGVzL3BhdGNoLW1ha2VvcHRzLmluCTE5NzAtMDEtMDEgMDU6MDA6
 MDAuMDAwMDAwMDAwICswNTAwCisrKyBhc3Rlcmlzay9maWxlcy9wYXRjaC1tYWtlb3B0cy5pbgky
 MDA3LTEwLTA5IDIxOjA3OjMwLjAwMDAwMDAwMCArMDYwMApAQCAtMCwwICsxLDEyIEBACistLS0g
 bWFrZW9wdHMuaW4ub3JpZwkyMDA3LTA5LTE0IDIxOjUwOjQ5LjAwMDAwMDAwMCArMDYwMAorKysr
 IG1ha2VvcHRzLmluCTIwMDctMTAtMDkgMjE6MDY6NDYuMDAwMDAwMDAwICswNjAwCitAQCAtMTQw
 LDYgKzE0MCw5IEBACisgUkFESVVTX0lOQ0xVREU9QFJBRElVU19JTkNMVURFQAorIFJBRElVU19M
 SUI9QFJBRElVU19MSUJACisgCisrU1BBTkRTUF9JTkNMVURFPUBTUEFORFNQX0lOQ0xVREVACisr
 U1BBTkRTUF9MSUI9QFNQQU5EU1BfTElCQAorKworIFNQRUVYX0lOQ0xVREU9QFNQRUVYX0lOQ0xV
 REVACisgU1BFRVhfTElCPUBTUEVFWF9MSUJACisgCmRpZmYgLXJ1TiBhc3Rlcmlzay5vbGQvcGtn
 LXBsaXN0IGFzdGVyaXNrL3BrZy1wbGlzdAotLS0gYXN0ZXJpc2sub2xkL3BrZy1wbGlzdAkyMDA3
 LTA3LTI3IDA4OjQxOjA5LjAwMDAwMDAwMCArMDYwMAorKysgYXN0ZXJpc2svcGtnLXBsaXN0CTIw
 MDctMTAtMTIgMTI6MTY6NDcuMDAwMDAwMDAwICswNjAwCkBAIC01OCw4ICs1OCw2IEBACiBldGMv
 YXN0ZXJpc2svbWdjcC5jb25mLWRpc3QKIEB1bmV4ZWMgaWYgY21wIC1zICVEL2V0Yy9hc3Rlcmlz
 ay9taXNkbi5jb25mICVEL2V0Yy9hc3Rlcmlzay9taXNkbi5jb25mLWRpc3Q7IHRoZW4gcm0gLWYg
 JUQvZXRjL2FzdGVyaXNrL21pc2RuLmNvbmY7IGZpCiBldGMvYXN0ZXJpc2svbWlzZG4uY29uZi1k
 aXN0Ci1AdW5leGVjIGlmIGNtcCAtcyAlRC9ldGMvYXN0ZXJpc2svbW9kZW0uY29uZiAlRC9ldGMv
 YXN0ZXJpc2svbW9kZW0uY29uZi1kaXN0OyB0aGVuIHJtIC1mICVEL2V0Yy9hc3Rlcmlzay9tb2Rl
 bS5jb25mOyBmaQotZXRjL2FzdGVyaXNrL21vZGVtLmNvbmYtZGlzdAogQHVuZXhlYyBpZiBjbXAg
 LXMgJUQvZXRjL2FzdGVyaXNrL21vZHVsZXMuY29uZiAlRC9ldGMvYXN0ZXJpc2svbW9kdWxlcy5j
 b25mLWRpc3Q7IHRoZW4gcm0gLWYgJUQvZXRjL2FzdGVyaXNrL21vZHVsZXMuY29uZjsgZmkKIGV0
 Yy9hc3Rlcmlzay9tb2R1bGVzLmNvbmYtZGlzdAogQHVuZXhlYyBpZiBjbXAgLXMgJUQvZXRjL2Fz
 dGVyaXNrL211c2ljb25ob2xkLmNvbmYgJUQvZXRjL2FzdGVyaXNrL211c2ljb25ob2xkLmNvbmYt
 ZGlzdDsgdGhlbiBybSAtZiAlRC9ldGMvYXN0ZXJpc2svbXVzaWNvbmhvbGQuY29uZjsgZmkKQEAg
 LTEzNyw2ICsxMzUsNyBAQAogaW5jbHVkZS9hc3Rlcmlzay9hc3RkYi5oCiBpbmNsdWRlL2FzdGVy
 aXNrL2FzdG1tLmgKIGluY2x1ZGUvYXN0ZXJpc2svYXN0b2JqLmgKK2luY2x1ZGUvYXN0ZXJpc2sv
 YXN0b2JqMi5oCiBpbmNsdWRlL2FzdGVyaXNrL2FzdG9zcC5oCiBpbmNsdWRlL2FzdGVyaXNrL2F1
 dG9jb25maWcuaAogaW5jbHVkZS9hc3Rlcmlzay9idWlsZC5oCkBAIC03NjgsNiArNzY3LDggQEAK
 ICUlV0lUSF9aQVBURUwlJWxpYi9hc3Rlcmlzay9tb2R1bGVzL2NvZGVjX3phcC5zbwogJSVXSVRI
 X09EQkMlJWxpYi9hc3Rlcmlzay9tb2R1bGVzL3Jlc19jb25maWdfb2RiYy5zbwogJSVXSVRIX09E
 QkMlJWxpYi9hc3Rlcmlzay9tb2R1bGVzL3Jlc19vZGJjLnNvCislJVdJVEhfRkFYJSVsaWIvYXN0
 ZXJpc2svbW9kdWxlcy9hcHBfcnhmYXguc28KKyUlV0lUSF9GQVglJWxpYi9hc3Rlcmlzay9tb2R1
 bGVzL2FwcF90eGZheC5zbwogQGRpcnJtIHNoYXJlL2FzdGVyaXNrL3N0YXRpYy1odHRwCiBAZGly
 cm0gc2hhcmUvYXN0ZXJpc2svc291bmRzL3NpbGVuY2UKIEBkaXJybSBzaGFyZS9hc3Rlcmlzay9z
 b3VuZHMvcGhvbmV0aWMK
 ------=_20071017182255_85090--
 
 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: ports/117199: commit references a PR
Date: Tue, 11 Dec 2007 22:24:28 +0000 (UTC)

 sobomax     2007-12-11 22:24:23 UTC
 
   FreeBSD ports repository
 
   Modified files:
     net/asterisk         Makefile distinfo pkg-plist 
   Log:
   Update to 1.4.13 and add missed audio/gsm dependency.
   
   PR:             115169, 117199
   Submitted by:   Vladimir Korkodinov, Dan Lukes
   
   Revision  Changes    Path
   1.87      +4 -3      ports/net/asterisk/Makefile
   1.30      +6 -6      ports/net/asterisk/distinfo
   1.31      +1 -2      ports/net/asterisk/pkg-plist
 _______________________________________________
 cvs-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/cvs-all
 To unsubscribe, send any mail to "cvs-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: open->closed 
State-Changed-By: delphij 
State-Changed-When: Sat Jan 12 00:29:21 UTC 2008 
State-Changed-Why:  
Patch was committed by sobomax@, thanks for your submission! 

http://www.freebsd.org/cgi/query-pr.cgi?pr=117199 
>Unformatted:
