- Bump PORTREVISION. - Use Makefile for building instead of scons, and remove Perl dependency. - Use pkg-plist. - Add OPTIONS. Allow to build without X11, threaded version, etc. - Fix building on non-i386 and FreeBSD 4.X. - Respect CFLAGS when optimizations are enabled. - Add patch to fix 2 security vulnerabilities: see CVE-2006-2082. This patch has been taken from q3icculus.
Responsible Changed From-To: freebsd-ports-bugs->danfe Over to maintainer
- The previous diff had an incomplete version of the security patch, this one fixes it (files/patch-code-server-sv_client.c). ========== BEGIN ========== Index: cleanq3/Makefile =================================================================== RCS file: /home/pcvs/ports/games/cleanq3/Makefile,v retrieving revision 1.2 diff -u -r1.2 Makefile --- cleanq3/Makefile 22 Apr 2006 22:11:33 -0000 1.2 +++ cleanq3/Makefile 1 Jun 2006 21:21:15 -0000 @@ -7,6 +7,7 @@ PORTNAME= cleanq3 PORTVERSION= 0.5.2 +PORTREVISION= 1 CATEGORIES= games MASTER_SITES= http://tremor.quakedev.com/ DISTNAME= CleanQ3_v${PORTVERSION}-srcbin @@ -14,72 +15,93 @@ MAINTAINER= danfe@FreeBSD.org COMMENT= Cleaned up copy of the original Quake III Arena source code -BUILD_DEPENDS= nasm:${PORTSDIR}/devel/nasm - USE_ZIP= yes -USE_PERL5_BUILD=yes USE_DOS2UNIX= yes +USE_GMAKE= yes USE_GCC= 3.2+ -USE_GL= yes - WRKSRC= ${WRKDIR}/CleanQ3 -INSTDIR= ${WRKSRC}/code/install +BUILD_WRKSRC= ${WRKSRC}/code/unix -PLIST_FILES= bin/cleanq3 bin/cleanq3ded \ - lib/cleanq3/baseq3/cgame.so \ - lib/cleanq3/baseq3/qagame.so \ - lib/cleanq3/baseq3/ui.so \ - lib/cleanq3/missionpack/cgame.so \ - lib/cleanq3/missionpack/qagame.so \ - lib/cleanq3/missionpack/ui.so -PLIST_DIRS= lib/cleanq3/baseq3 lib/cleanq3/missionpack lib/cleanq3 +OPTIONS= CLIENT "Build client" on \ + DEDICATED "Build dedicated server" on \ + GAMELIBS "Build game libraries (when not mandatory)" off \ + OPTIMIZED_CFLAGS "Enable compilation optimizations" on \ + SMP "Build SMP (threaded) client" on -OPTIONS= OPTIMIZED_CFLAGS "Build with extra optimization options" on +MAKE_ENV= LIBDIR="${LIBDIR}" +PLIST_SUB= LIBDIR="${LIBDIR:S/${PREFIX}\///}" + +LIBDIR= ${PREFIX}/lib/${PORTNAME} .include <bsd.port.pre.mk> -.if ${ARCH} != "i386" -BROKEN= Does not compile on ${ARCH} +.if defined(WITHOUT_CLIENT) && defined(WITHOUT_DEDICATED) \ + && defined(WITHOUT_SMP) +IGNORE= needs at least one of CLIENT, DEDICATED and SMP options .endif -.if ${OSVERSION} < 500000 -BROKEN= Does not compile on 4.x +.if ${ARCH} == "i386" +BUILD_DEPENDS+= nasm:${PORTSDIR}/devel/nasm .endif -.if defined(WITH_OPTIMIZED_CFLAGS) -CFLAGS= -O6 -fomit-frame-pointer -ffast-math -falign-loops=2 -falign-jumps=2 \ - -falign-functions=2 -fno-strict-aliasing -fstrength-reduce -.endif - -post-patch: .SILENT - ${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g ; \ - s|%%X11BASE%%|${X11BASE}|g ; s|%%CFLAGS%%|${CFLAGS}|' \ - ${WRKSRC}/code/Construct ${WRKSRC}/code/unix/Conscript-client - ${REINPLACE_CMD} -e 's|-ldl || ; s|i386\.so|\.so|' \ - ${WRKSRC}/code/cgame/Conscript \ - ${WRKSRC}/code/game/Conscript ${WRKSRC}/code/q3_ui/Conscript \ - ${WRKSRC}/code/unix/Conscript-dedicated \ - ${WRKSRC}/code/ui/Conscript - ${REINPLACE_CMD} -e 's|%%Q3DIR%%|"${Q3DIR}"|' \ - ${WRKSRC}/code/unix/unix_shared.c - ${REINPLACE_CMD} -e 's|%%PREFIX%%|${PREFIX}|' \ - ${WRKSRC}/code/unix/unix_main.c - ${REINPLACE_CMD} -e 's|botlib.log|/dev/null|' \ - ${WRKSRC}/code/botlib/be_interface.c +.if !defined(WITHOUT_CLIENT) || !defined(WITHOUT_SMP) +USE_GL= yes +.endif -do-build: - cd ${WRKSRC}/code && ${MAKE_ENV} ${PERL} unix/cons +.if !defined(WITHOUT_CLIENT) +MAKE_ENV+= CLIENT=YES +PLIST_SUB+= CLIENT="" +Q3BIN+= cleanq3 +.else +PLIST_SUB+= CLIENT="@comment " +.endif + +.if !defined(WITHOUT_DEDICATED) +MAKE_ENV+= DEDICATED=YES +PLIST_SUB+= DEDICATED="" +Q3BIN+= cleanq3ded +.else +PLIST_SUB+= DEDICATED="@comment " +.endif + +.if defined(WITH_GAMELIBS) || (${ARCH} != "i386" && ${ARCH} != "powerpc") +MAKE_ENV+= GAMELIBS=YES +PLIST_SUB+= GAMELIBS="" +.else +PLIST_SUB+= GAMELIBS="@comment " +.endif + +.if !defined(WITHOUT_OPTIMIZED_CFLAGS) +MAKE_ENV+= OPTIMIZED_CFLAGS=YES +.endif + +.if !defined(WITHOUT_SMP) +MAKE_ENV+= SMP=YES \ + PTHREAD_LIBS="${PTHREAD_LIBS}" +PLIST_SUB+= SMP="" +Q3BIN+= cleanq3-smp +.else +PLIST_SUB+= SMP="@comment " +.endif + +post-patch: + @${REINPLACE_CMD} -e 's|botlib\.log|/dev/null|' \ + ${WRKSRC}/code/botlib/be_interface.c + @${REINPLACE_CMD} -e \ + 's|//[[:blank:]]*\(Swap_Init[[:blank:]]*();\)|\1|' \ + ${WRKSRC}/code/botlib/be_interface.c \ + ${WRKSRC}/code/renderer/tr_init.c do-install: - ${INSTALL_PROGRAM} ${INSTDIR}/linuxquake3 ${PREFIX}/bin/cleanq3 - ${INSTALL_PROGRAM} ${INSTDIR}/linuxq3ded ${PREFIX}/bin/cleanq3ded -.for d in baseq3 missionpack - @${MKDIR} ${PREFIX}/lib/cleanq3/${d} - ${INSTALL_PROGRAM} ${INSTDIR}/${d}/cgame.so ${PREFIX}/lib/cleanq3/${d} - ${INSTALL_PROGRAM} ${INSTDIR}/${d}/qagame.so ${PREFIX}/lib/cleanq3/${d} - ${INSTALL_PROGRAM} ${INSTDIR}/${d}/ui.so ${PREFIX}/lib/cleanq3/${d} +.for bin in ${Q3BIN} + ${INSTALL_PROGRAM} ${BUILD_WRKSRC}/release/${bin} ${PREFIX}/bin +.endfor +.if defined(WITH_GAMELIBS) || (${ARCH} != "i386" && ${ARCH} != "powerpc") +.for dir in baseq3 missionpack + ${MKDIR} ${LIBDIR}/${dir} + ${INSTALL_PROGRAM} ${BUILD_WRKSRC}/release/${dir}/*.so ${LIBDIR}/${dir} .endfor +.endif .include "${.CURDIR}/../quake3-data/Makefile.include" - .include <bsd.port.post.mk> Index: cleanq3/pkg-plist =================================================================== RCS file: cleanq3/pkg-plist diff -N cleanq3/pkg-plist --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ cleanq3/pkg-plist 1 Jun 2006 21:21:15 -0000 @@ -0,0 +1,13 @@ +%%DEDICATED%%bin/cleanq3ded +%%CLIENT%%bin/cleanq3 +%%SMP%%bin/cleanq3-smp +%%GAMELIBS%%%%LIBDIR%%/baseq3/cgame.so +%%GAMELIBS%%%%LIBDIR%%/baseq3/qagame.so +%%GAMELIBS%%%%LIBDIR%%/baseq3/ui.so +%%GAMELIBS%%%%LIBDIR%%/missionpack/cgame.so +%%GAMELIBS%%%%LIBDIR%%/missionpack/qagame.so +%%GAMELIBS%%%%LIBDIR%%/missionpack/ui.so +%%GAMELIBS%%@dirrm %%LIBDIR%%/missionpack +%%GAMELIBS%%@dirrm %%LIBDIR%%/baseq3 +%%GAMELIBS%%@dirrm %%LIBDIR%% + Index: cleanq3/files/patch-code-Construct =================================================================== RCS file: cleanq3/files/patch-code-Construct diff -N cleanq3/files/patch-code-Construct --- cleanq3/files/patch-code-Construct 20 Mar 2006 15:21:27 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,68 +0,0 @@ ---- code/Construct.orig Mon Mar 20 18:19:09 2006 -+++ code/Construct Mon Mar 20 18:37:12 2006 -@@ -19,8 +19,8 @@ - use Cons_gcc; - - # defaults --$config = 'debug'; --$do_smp = 1; -+$config = 'release'; -+$do_smp = 0; - $do_masterserver = 0; - $do_authserver = 0; - $do_authport = 0; -@@ -30,10 +30,10 @@ - $do_pk3 = 0; - # those are exported - $DO_WIN32 = 0; --$NO_VM = 0; -+$NO_VM = 1; - $NO_SO = 0; --$CC='gcc'; --$CXX='g++'; -+$CC=$ENV{CC}; -+$CXX=$ENV{CXX}; - - # detect an sdk build (don't attempt client build and other things) - if ( -r 'unix/Conscript-client' ) -@@ -63,9 +63,6 @@ - else - { - # libc .. do the little magic! -- $libc_cmd = '/lib/libc.so.6 |grep "GNU C "|grep version|awk -F "version " \'{ print $2 }\'|cut -b -3'; -- $libc = `$libc_cmd`; -- chop ($libc); - } - - if ($DO_WIN32 eq 1) -@@ -227,7 +224,7 @@ - # build the config directory - $CONFIG_DIR = $config . '-' . $cpu . '-' . $OS . '-' . $libc; - --$COMMON_CFLAGS = '-pipe -fsigned-char '; -+$COMMON_CFLAGS = '-pipe -fsigned-char -I%%LOCALBASE%%/include -L%%LOCALBASE%%/lib -I%%X11BASE%%/include -L%%X11BASE%%/lib '; - - if ($config eq 'debug') - { -@@ -237,7 +234,7 @@ - } - else - { -- $BASE_CFLAGS = $COMMON_CFLAGS . '-DNDEBUG -O6 -mcpu=pentiumpro -march=pentium -fomit-frame-pointer -ffast-math -malign-loops=2 -malign-jumps=2 -malign-functions=2 -fno-strict-aliasing -fstrength-reduce '; -+ $BASE_CFLAGS = $COMMON_CFLAGS . '-DNDEBUG %%CFLAGS%% '; - $BSPC_BASE_CFLAGS = $BASE_CFLAGS . '-DLINUX -DBSPC -Dstricmp=strcasecmp '; - } - -@@ -302,9 +299,9 @@ - } - - # build tools --$env_tools = new cons(); --Command $env_tools 'qvmtools/q3lcc', '[perl] &build_tools(\'q3lcc\')'; --Command $env_tools 'qvmtools/q3asm', '[perl] &build_tools(\'q3asm\')'; -+#$env_tools = new cons(); -+#Command $env_tools 'qvmtools/q3lcc', '[perl] &build_tools(\'q3lcc\')'; -+#Command $env_tools 'qvmtools/q3asm', '[perl] &build_tools(\'q3asm\')'; - - if ($do_bspc eq 1) - { Index: cleanq3/files/patch-code-cgame-cg_weapons.c =================================================================== RCS file: cleanq3/files/patch-code-cgame-cg_weapons.c diff -N cleanq3/files/patch-code-cgame-cg_weapons.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ cleanq3/files/patch-code-cgame-cg_weapons.c 1 Jun 2006 21:21:15 -0000 @@ -0,0 +1,23 @@ +--- ./code/cgame/cg_weapons.c.orig Wed May 31 20:52:06 2006 ++++ ./code/cgame/cg_weapons.c Wed May 31 20:52:54 2006 +@@ -636,17 +636,17 @@ + } + + strcpy( path, item->world_model[0] ); +- COM_StripExtension( path, path ); ++ COM_StripExtension( path, path, sizeof(path) ); + strcat( path, "_flash.md3" ); + weaponInfo->flashModel = trap_R_RegisterModel( path ); + + strcpy( path, item->world_model[0] ); +- COM_StripExtension( path, path ); ++ COM_StripExtension( path, path, sizeof(path) ); + strcat( path, "_barrel.md3" ); + weaponInfo->barrelModel = trap_R_RegisterModel( path ); + + strcpy( path, item->world_model[0] ); +- COM_StripExtension( path, path ); ++ COM_StripExtension( path, path, sizeof(path) ); + strcat( path, "_hand.md3" ); + weaponInfo->handsModel = trap_R_RegisterModel( path ); + Index: cleanq3/files/patch-code-game-q_shared.c =================================================================== RCS file: cleanq3/files/patch-code-game-q_shared.c diff -N cleanq3/files/patch-code-game-q_shared.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ cleanq3/files/patch-code-game-q_shared.c 1 Jun 2006 21:21:15 -0000 @@ -0,0 +1,113 @@ +--- ./code/game/q_shared.c.orig Wed May 31 20:52:06 2006 ++++ ./code/game/q_shared.c Wed May 31 20:54:26 2006 +@@ -38,14 +38,21 @@ + COM_StripExtension + ============ + */ +-void COM_StripExtension( const char *in, char *out ) { +- while ( *in && *in != '.' ) { +- *out++ = *in++; ++void COM_StripExtension( const char *in, char *out, int destsize ) { ++ int length; ++ ++ Q_strncpyz(out, in, destsize); ++ ++ length = strlen(out)-1; ++ while (length > 0 && out[length] != '.') { ++ length--; ++ if (out[length] == '/') ++ return; // no extension + } +- *out = 0; ++ if (length) ++ out[length] = 0; + } + +- + /* + ================== + COM_DefaultExtension +@@ -79,29 +86,28 @@ + + ============================================================================ + */ +-/* ++ + // can't just use function pointers, or dll linkage can + // mess up when qcommon is included in multiple places +-static short (*_BigShort) (short l); +-static short (*_LittleShort) (short l); +-static int (*_BigLong) (int l); +-static int (*_LittleLong) (int l); ++static int16_t (*_BigShort) (int16_t l); ++static int16_t (*_LittleShort) (int16_t l); ++static int32_t (*_BigLong) (int32_t l); ++static int32_t (*_LittleLong) (int32_t l); + static qint64 (*_BigLong64) (qint64 l); + static qint64 (*_LittleLong64) (qint64 l); + static float (*_BigFloat) (const float *l); + static float (*_LittleFloat) (const float *l); + +-short BigShort(short l){return _BigShort(l);} +-short LittleShort(short l) {return _LittleShort(l);} +-int BigLong (int l) {return _BigLong(l);} +-int LittleLong (int l) {return _LittleLong(l);} ++int16_t BigShort(int16_t l){return _BigShort(l);} ++int16_t LittleShort(int16_t l) {return _LittleShort(l);} ++int32_t BigLong (int32_t l) {return _BigLong(l);} ++int32_t LittleLong (int32_t l) {return _LittleLong(l);} + qint64 BigLong64 (qint64 l) {return _BigLong64(l);} + qint64 LittleLong64 (qint64 l) {return _LittleLong64(l);} +-float BigFloat (const float *l) {return _BigFloat(l);} +-float LittleFloat (const float *l) {return _LittleFloat(l);} +-*/ ++float BigFloat (float l) {return _BigFloat(&l);} ++float LittleFloat (float l) {return _LittleFloat(&l);} + +-short ShortSwap (short l) ++int16_t ShortSwap (int16_t l) + { + byte b1,b2; + +@@ -111,12 +117,12 @@ + return (b1<<8) + b2; + } + +-short ShortNoSwap (short l) ++int16_t ShortNoSwap (int16_t l) + { + return l; + } + +-int LongSwap (int l) ++int32_t LongSwap (int32_t l) + { + byte b1,b2,b3,b4; + +@@ -128,7 +134,7 @@ + return ((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4; + } + +-int LongNoSwap (int l) ++int32_t LongNoSwap (int32_t l) + { + return l; + } +@@ -179,7 +185,7 @@ + Swap_Init + ================ + */ +-/* ++ + void Swap_Init (void) + { + byte swaptest[2] = {1,0}; +@@ -209,7 +215,7 @@ + } + + } +-*/ ++ + + /* + ============================================================================ Index: cleanq3/files/patch-code-game-q_shared.h =================================================================== RCS file: /home/pcvs/ports/games/cleanq3/files/patch-code-game-q_shared.h,v retrieving revision 1.1 diff -u -r1.1 patch-code-game-q_shared.h --- cleanq3/files/patch-code-game-q_shared.h 20 Mar 2006 15:21:27 -0000 1.1 +++ cleanq3/files/patch-code-game-q_shared.h 1 Jun 2006 21:21:15 -0000 @@ -1,6 +1,92 @@ ---- code/game/q_shared.h.orig Tue Aug 16 02:10:07 2005 -+++ code/game/q_shared.h Tue Aug 23 14:16:34 2005 -@@ -452,13 +452,9 @@ +--- ./code/game/q_shared.h.orig Wed May 31 20:52:06 2006 ++++ ./code/game/q_shared.h Wed May 31 20:54:33 2006 +@@ -126,12 +126,14 @@ + + #define ID_INLINE __inline + ++#if 0 + static ID_INLINE short BigShort( short l) { return ShortSwap(l); } + #define LittleShort + static ID_INLINE int BigLong(int l) { LongSwap(l); } + #define LittleLong + static ID_INLINE float BigFloat(const float *l) { FloatSwap(l); } + #define LittleFloat ++#endif + + #define PATH_SEP '\\' + +@@ -182,12 +184,14 @@ + return fi; + } + ++#if 0 + #define BigShort + static inline short LittleShort(short l) { return ShortSwap(l); } + #define BigLong + static inline int LittleLong (int l) { return LongSwap(l); } + #define BigFloat + static inline float LittleFloat (const float l) { return FloatSwap(&l); } ++#endif + + #endif + +@@ -205,12 +209,14 @@ + + void Sys_PumpEvents( void ); + ++#if 0 + #define BigShort + static inline short LittleShort(short l) { return ShortSwap(l); } + #define BigLong + static inline int LittleLong (int l) { return LongSwap(l); } + #define BigFloat + static inline float LittleFloat (const float l) { return FloatSwap(&l); } ++#endif + + #endif + +@@ -244,6 +250,7 @@ + #define BOTLIB_HARD_LINKED + #endif + ++#if 0 + #if !idppc + inline static short BigShort( short l) { return ShortSwap(l); } + #define LittleShort +@@ -259,6 +266,7 @@ + #define BigFloat + inline static float LittleFloat (const float *l) { return FloatSwap(l); } + #endif ++#endif + + #endif + +@@ -280,8 +288,16 @@ + + #define PATH_SEP '/' + ++#include <machine/param.h> ++#if __FreeBSD_version < 500000 ++#include <inttypes.h> ++#else ++#include <stdint.h> ++#endif ++ + // bk010116 - omitted Q3STATIC (see Linux above), broken target + ++#if 0 + #if !idppc + static short BigShort( short l) { return ShortSwap(l); } + #define LittleShort +@@ -297,6 +313,7 @@ + #define BigFloat + static float LittleFloat (const float *l) { return FloatSwap(l); } + #endif ++#endif + + #endif + +@@ -428,13 +445,9 @@ void *Hunk_Alloc( int size, ha_pref preference ); #endif @@ -14,3 +100,41 @@ #if !( defined __VECTORC ) void Com_Memset (void* dest, const int val, const size_t count); +@@ -763,7 +776,7 @@ + float Com_Clamp( float min, float max, float value ); + + char *COM_SkipPath( char *pathname ); +-void COM_StripExtension( const char *in, char *out ); ++void COM_StripExtension( const char *in, char *out, int destsize ); + void COM_DefaultExtension( char *path, int maxSize, const char *extension ); + + void COM_BeginParseSession( const char *name ); +@@ -864,18 +877,18 @@ + } qint64; + + //============================================= +-/* +-short BigShort(short l); +-short LittleShort(short l); +-int BigLong (int l); +-int LittleLong (int l); +-qint64 BigLong64 (qint64 l); +-qint64 LittleLong64 (qint64 l); +-float BigFloat (const float *l); +-float LittleFloat (const float *l); ++ ++int16_t BigShort(int16_t l); ++int16_t LittleShort(int16_t l); ++int32_t BigLong (int32_t l); ++int32_t LittleLong (int32_t l); ++qint64 BigLong64 (qint64 l); ++qint64 LittleLong64 (qint64 l); ++float BigFloat (float l); ++float LittleFloat (float l); + + void Swap_Init (void); +-*/ ++ + char * QDECL va(char *format, ...); + + //============================================= Index: cleanq3/files/patch-code-q3_ui-ui_playermodel.c =================================================================== RCS file: cleanq3/files/patch-code-q3_ui-ui_playermodel.c diff -N cleanq3/files/patch-code-q3_ui-ui_playermodel.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ cleanq3/files/patch-code-q3_ui-ui_playermodel.c 1 Jun 2006 21:21:15 -0000 @@ -0,0 +1,11 @@ +--- ./code/q3_ui/ui_playermodel.c.orig Wed May 31 20:52:07 2006 ++++ ./code/q3_ui/ui_playermodel.c Wed May 31 20:54:50 2006 +@@ -404,7 +404,7 @@ + { + filelen = strlen(fileptr); + +- COM_StripExtension(fileptr,skinname); ++ COM_StripExtension(fileptr, skinname, sizeof(skinname)); + + // look for icon_???? + if (!Q_stricmpn(skinname,"icon_",5)) Index: cleanq3/files/patch-code-q3_ui-ui_players.c =================================================================== RCS file: cleanq3/files/patch-code-q3_ui-ui_players.c diff -N cleanq3/files/patch-code-q3_ui-ui_players.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ cleanq3/files/patch-code-q3_ui-ui_players.c 1 Jun 2006 21:21:15 -0000 @@ -0,0 +1,18 @@ +--- ./code/q3_ui/ui_players.c.orig Wed May 31 20:52:07 2006 ++++ ./code/q3_ui/ui_players.c Wed May 31 20:55:05 2006 +@@ -69,13 +69,13 @@ + + if ( weaponNum == WP_MACHINEGUN || weaponNum == WP_GAUNTLET || weaponNum == WP_BFG ) { + strcpy( path, item->world_model[0] ); +- COM_StripExtension( path, path ); ++ COM_StripExtension( path, path, sizeof(path) ); + strcat( path, "_barrel.md3" ); + pi->barrelModel = trap_R_RegisterModel( path ); + } + + strcpy( path, item->world_model[0] ); +- COM_StripExtension( path, path ); ++ COM_StripExtension( path, path, sizeof(path) ); + strcat( path, "_flash.md3" ); + pi->flashModel = trap_R_RegisterModel( path ); + Index: cleanq3/files/patch-code-q3_ui-ui_saveconfig.c =================================================================== RCS file: cleanq3/files/patch-code-q3_ui-ui_saveconfig.c diff -N cleanq3/files/patch-code-q3_ui-ui_saveconfig.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ cleanq3/files/patch-code-q3_ui-ui_saveconfig.c 1 Jun 2006 21:21:15 -0000 @@ -0,0 +1,11 @@ +--- ./code/q3_ui/ui_saveconfig.c.orig Wed May 31 20:52:07 2006 ++++ ./code/q3_ui/ui_saveconfig.c Wed May 31 20:55:15 2006 +@@ -85,7 +85,7 @@ + return; + } + +- COM_StripExtension(saveConfig.savename.field.buffer, configname ); ++ COM_StripExtension(saveConfig.savename.field.buffer, configname, sizeof(configname) ); + trap_Cmd_ExecuteText( EXEC_APPEND, va( "writeconfig %s.cfg\n", configname ) ); + UI_PopMenu(); + } Index: cleanq3/files/patch-code-qcommon-common.c =================================================================== RCS file: /home/pcvs/ports/games/cleanq3/files/patch-code-qcommon-common.c,v retrieving revision 1.1 diff -u -r1.1 patch-code-qcommon-common.c --- cleanq3/files/patch-code-qcommon-common.c 20 Mar 2006 15:21:27 -0000 1.1 +++ cleanq3/files/patch-code-qcommon-common.c 1 Jun 2006 21:21:15 -0000 @@ -1,15 +1,15 @@ ---- code/qcommon/common.c.orig Mon Aug 15 23:10:07 2005 -+++ code/qcommon/common.c Wed Nov 23 10:53:29 2005 +--- ./code/qcommon/common.c.orig Wed May 31 20:52:07 2006 ++++ ./code/qcommon/common.c Wed May 31 20:52:09 2006 @@ -24,15 +24,8 @@ #include "../game/q_shared.h" #include "qcommon.h" #include <setjmp.h> -#ifdef __linux__ -+#include <sys/types.h> - #include <netinet/in.h> +-#include <netinet/in.h> -#else -#if defined(MACOS_X) --#include <netinet/in.h> ++#include <sys/types.h> + #include <netinet/in.h> -#else -#include <winsock.h> -#endif @@ -17,3 +17,12 @@ int demo_protocols[] = { 66, 67, 68, 0 }; +@@ -2367,7 +2360,7 @@ + // cvar and command buffer management + Com_ParseCommandLine( commandLine ); + +-// Swap_Init (); ++ Swap_Init (); + Cbuf_Init (); + + Com_InitZoneMemory(); Index: cleanq3/files/patch-code-qcommon-vm.c =================================================================== RCS file: cleanq3/files/patch-code-qcommon-vm.c diff -N cleanq3/files/patch-code-qcommon-vm.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ cleanq3/files/patch-code-qcommon-vm.c 1 Jun 2006 21:21:15 -0000 @@ -0,0 +1,29 @@ +--- code/qcommon/vm.c.orig Wed May 31 23:18:41 2006 ++++ code/qcommon/vm.c Wed May 31 23:19:43 2006 +@@ -225,7 +225,7 @@ + return; + } + +- COM_StripExtension( vm->name, name ); ++ COM_StripExtension( vm->name, name, sizeof(name) ); + Com_sprintf( symbols, sizeof( symbols ), "vm/%s.map", name ); + len = FS_ReadFile( symbols, (void **)&mapfile ); + if ( !mapfile ) { +@@ -478,7 +478,7 @@ + } + } + +- if ( interpret == VMI_NATIVE ) { ++ if ( 1 ) { + // try to load as a system dll + Com_Printf( "Loading dll file %s.\n", vm->name ); + vm->dllHandle = Sys_LoadDll( module, vm->fqpath , &vm->entryPoint, VM_DllSyscall ); +@@ -826,7 +826,7 @@ + + + +-#ifdef oDLL_ONLY // bk010215 - for DLL_ONLY dedicated servers/builds w/o VM ++#ifdef DLL_ONLY // bk010215 - for DLL_ONLY dedicated servers/builds w/o VM + int VM_CallCompiled( vm_t *vm, int *args ) { + return(0); + } Index: cleanq3/files/patch-code-renderer-tr_bsp.c =================================================================== RCS file: cleanq3/files/patch-code-renderer-tr_bsp.c diff -N cleanq3/files/patch-code-renderer-tr_bsp.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ cleanq3/files/patch-code-renderer-tr_bsp.c 1 Jun 2006 21:21:15 -0000 @@ -0,0 +1,11 @@ +--- ./code/renderer/tr_bsp.c.orig Wed May 31 20:52:07 2006 ++++ ./code/renderer/tr_bsp.c Wed May 31 20:55:47 2006 +@@ -1820,7 +1820,7 @@ + Q_strncpyz( s_worldData.name, name, sizeof( s_worldData.name ) ); + + Q_strncpyz( s_worldData.baseName, COM_SkipPath( s_worldData.name ), sizeof( s_worldData.name ) ); +- COM_StripExtension( s_worldData.baseName, s_worldData.baseName ); ++ COM_StripExtension( s_worldData.baseName, s_worldData.baseName, sizeof(s_worldData.baseName) ); + + startMarker = ri.Hunk_Alloc(0, h_low); + c_gridVerts = 0; Index: cleanq3/files/patch-code-renderer-tr_shader.c =================================================================== RCS file: cleanq3/files/patch-code-renderer-tr_shader.c diff -N cleanq3/files/patch-code-renderer-tr_shader.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ cleanq3/files/patch-code-renderer-tr_shader.c 1 Jun 2006 21:21:15 -0000 @@ -0,0 +1,29 @@ +--- ./code/renderer/tr_shader.c.orig Wed May 31 20:52:08 2006 ++++ ./code/renderer/tr_shader.c Wed May 31 20:56:20 2006 +@@ -99,7 +99,7 @@ + + // remap all the shaders with the given name + // even tho they might have different lightmaps +- COM_StripExtension( shaderName, strippedName ); ++ COM_StripExtension( shaderName, strippedName, sizeof(strippedName) ); + hash = generateHashValue(strippedName, FILE_HASH_SIZE); + for (sh = hashTable[hash]; sh; sh = sh->next) { + if (Q_stricmp(sh->name, strippedName) == 0) { +@@ -2368,7 +2368,7 @@ + return tr.defaultShader; + } + +- COM_StripExtension( name, strippedName ); ++ COM_StripExtension( name, strippedName, sizeof(strippedName) ); + + hash = generateHashValue(strippedName, FILE_HASH_SIZE); + +@@ -2436,7 +2436,7 @@ + lightmapIndex = LIGHTMAP_BY_VERTEX; + } + +- COM_StripExtension( name, strippedName ); ++ COM_StripExtension( name, strippedName, sizeof(strippedName) ); + + hash = generateHashValue(strippedName, FILE_HASH_SIZE); + Index: cleanq3/files/patch-code-server-sv_client.c =================================================================== RCS file: cleanq3/files/patch-code-server-sv_client.c diff -N cleanq3/files/patch-code-server-sv_client.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ cleanq3/files/patch-code-server-sv_client.c 1 Jun 2006 21:21:15 -0000 @@ -0,0 +1,73 @@ +--- code/server/sv_client.c.orig Thu Jun 1 14:50:21 2006 ++++ code/server/sv_client.c Thu Jun 1 15:19:29 2006 +@@ -756,24 +756,54 @@ + int curindex; + int rate; + int blockspersnap; +- int idPack, missionPack; ++ int idPack, missionPack, unreferenced = 1; + char errorMessage[1024]; ++ char pakbuf[MAX_OSPATH], *pakptr; ++ const char *referencedPaks; ++ int numRefPaks; + + if (!*cl->downloadName) + return; // Nothing being downloaded + + if (!cl->download) { +- // We open the file here ++ // Chop off filename extension. ++ Com_sprintf(pakbuf, sizeof(pakbuf), "%s", cl->downloadName); ++ pakptr = Q_strrchr(pakbuf, '.'); + +- Com_Printf( "clientDownload: %d : begining \"%s\"\n", cl - svs.clients, cl->downloadName ); ++ if (pakptr) { ++ *pakptr = '\0'; + +- missionPack = FS_idPak(cl->downloadName, "missionpack"); +- idPack = missionPack || FS_idPak(cl->downloadName, "baseq3"); ++ // Check for pk3 filename extension ++ if (!Q_stricmp(pakptr + 1, "pk3")) { ++ referencedPaks = FS_ReferencedPakNames(); + +- if ( !sv_allowDownload->integer || idPack || ++ // Check whether the file appears in the list of referenced ++ // paks to prevent downloading of arbitrary files. ++ Cmd_TokenizeString(referencedPaks); ++ numRefPaks = Cmd_Argc(); ++ ++ for (curindex = 0; curindex < numRefPaks; curindex++) { ++ if (!FS_FilenameCompare(Cmd_Argv(curindex), pakbuf)) { ++ unreferenced = 0; ++ ++ // now that we know the file is referenced, ++ // check whether it's legal to download it. ++ missionPack = FS_idPak(pakbuf, "missionpack"); ++ idPack = missionPack || FS_idPak(pakbuf, BASEGAME); ++ ++ break; ++ } ++ } ++ } ++ } ++ ++ // We open the file here ++ if ( !sv_allowDownload->integer || idPack || unreferenced || + ( cl->downloadSize = FS_SV_FOpenFileRead( cl->downloadName, &cl->download ) ) <= 0 ) { + // cannot auto-download file +- if (idPack) { ++ if (unreferenced) { ++ Com_sprintf(errorMessage, sizeof(errorMessage), "File \"%s\" is not referenced and cannot be downloaded.", cl->downloadName); ++ } else if (idPack) { + Com_Printf("clientDownload: %d : \"%s\" cannot download id pk3 files\n", cl - svs.clients, cl->downloadName); + if (missionPack) { + Com_sprintf(errorMessage, sizeof(errorMessage), "Cannot autodownload Team Arena file \"%s\"\n" +@@ -809,6 +839,8 @@ + return; + } + ++ Com_Printf( "clientDownload: %d : beginning \"%s\"\n", cl - svs.clients, cl->downloadName ); ++ + // Init + cl->downloadCurrentBlock = cl->downloadClientBlock = cl->downloadXmitBlock = 0; + cl->downloadCount = 0; Index: cleanq3/files/patch-code-ui-ui_main.c =================================================================== RCS file: cleanq3/files/patch-code-ui-ui_main.c diff -N cleanq3/files/patch-code-ui-ui_main.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ cleanq3/files/patch-code-ui-ui_main.c 1 Jun 2006 21:21:15 -0000 @@ -0,0 +1,11 @@ +--- ./code/ui/ui_main.c.orig Wed May 31 20:52:08 2006 ++++ ./code/ui/ui_main.c Wed May 31 20:56:29 2006 +@@ -4971,7 +4971,7 @@ + { + filelen = strlen(fileptr); + +- COM_StripExtension(fileptr,skinname); ++ COM_StripExtension(fileptr, skinname, sizeof(skinname)); + + // look for icon_???? + if (Q_stricmpn(skinname, "icon_", 5) == 0 && !(Q_stricmp(skinname,"icon_blue") == 0 || Q_stricmp(skinname,"icon_red") == 0)) Index: cleanq3/files/patch-code-ui-ui_players.c =================================================================== RCS file: cleanq3/files/patch-code-ui-ui_players.c diff -N cleanq3/files/patch-code-ui-ui_players.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ cleanq3/files/patch-code-ui-ui_players.c 1 Jun 2006 21:21:15 -0000 @@ -0,0 +1,18 @@ +--- ./code/ui/ui_players.c.orig Wed May 31 20:52:08 2006 ++++ ./code/ui/ui_players.c Wed May 31 20:56:47 2006 +@@ -70,13 +70,13 @@ + + if ( weaponNum == WP_MACHINEGUN || weaponNum == WP_GAUNTLET || weaponNum == WP_BFG ) { + strcpy( path, item->world_model[0] ); +- COM_StripExtension( path, path ); ++ COM_StripExtension( path, path, sizeof(path) ); + strcat( path, "_barrel.md3" ); + pi->barrelModel = trap_R_RegisterModel( path ); + } + + strcpy( path, item->world_model[0] ); +- COM_StripExtension( path, path ); ++ COM_StripExtension( path, path, sizeof(path) ); + strcat( path, "_flash.md3" ); + pi->flashModel = trap_R_RegisterModel( path ); + Index: cleanq3/files/patch-code-unix-Conscript-client =================================================================== RCS file: cleanq3/files/patch-code-unix-Conscript-client diff -N cleanq3/files/patch-code-unix-Conscript-client --- cleanq3/files/patch-code-unix-Conscript-client 20 Mar 2006 15:21:27 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,26 +0,0 @@ ---- code/unix/Conscript-client.orig Fri Mar 17 13:50:18 2006 -+++ code/unix/Conscript-client Fri Mar 17 13:50:40 2006 -@@ -147,13 +147,13 @@ - LINK => $LINK, - ENV => { PATH => $ENV{PATH}, HOME => $ENV{HOME} }, - CFLAGS => $BASE_CFLAGS, -- LIBS => ' ' . $BUILD_DIR . '/unix/splines.a ' -+ LIBS => ' ' - . $BUILD_DIR . '/unix/botlib.a ' - . $BUILD_DIR . '/unix/jpeglib.a ' - . $BUILD_DIR . '/unix/asmlib.a ' - . $BUILD_DIR . '/unix/inlinelib.a ' - . $BASE_LDFLAGS -- . '-L/usr/X11R6/lib -lX11 -lXext -lXxf86dga -lXxf86vm -ldl -lm' -+ . '-L%%X11BASE%%/lib -lX11 -lXext -lXxf86dga -lXxf86vm -lm' - ); - - @RENDERER_FILES = qw( -@@ -231,7 +231,6 @@ - ../unix/linux_common.c - ../unix/linux_qgl.c - ../unix/linux_glimp.c -- ../unix/linux_joystick.c - ../unix/linux_snd.c - ../unix/linux_signals.c - ); Index: cleanq3/files/patch-code-unix-Makefile =================================================================== RCS file: cleanq3/files/patch-code-unix-Makefile diff -N cleanq3/files/patch-code-unix-Makefile --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ cleanq3/files/patch-code-unix-Makefile 1 Jun 2006 21:21:15 -0000 @@ -0,0 +1,352 @@ +--- ./code/unix/Makefile.orig Wed May 31 20:52:08 2006 ++++ ./code/unix/Makefile Wed May 31 20:52:09 2006 +@@ -19,6 +19,7 @@ + + PLATFORM=$(shell uname|tr A-Z a-z) + PLATFORM_RELEASE=$(shell uname -r) ++ARCH=$(shell uname -m) + + ### + ### These paths are where you probably want to change things +@@ -34,7 +35,7 @@ + + # Build name + # BUILD_NAME=$(BUILD_NAME) +-BUILD_NAME=quake3.x86 ++BUILD_NAME=quake3 + + + +@@ -46,8 +47,8 @@ + + BASEQ3_DIR=$(BDIR)/baseq3 + +-BD=debug$(ARCH)$(GLIBC) +-BR=release$(ARCH)$(GLIBC) ++BD=debug ++BR=release + CDIR=$(MOUNT_DIR)/client + SDIR=$(MOUNT_DIR)/server + RDIR=$(MOUNT_DIR)/renderer +@@ -76,7 +77,7 @@ + ############################################################################# + + ## Defaults +-DLL_ONLY=false ++DLL_ONLY?=false + # bk010215 - TODO - add all defaults / kill Ryan + + +@@ -197,33 +198,35 @@ + + ifeq ($(PLATFORM),freebsd) + ++ifeq ($(ARCH),powerpc) ++ARCH=ppc ++endif ++ + GLIBC= #libc is irrelevant + +-ifneq (,$(findstring alpha,$(shell uname -m))) +-ARCH=axp +-RPMARCH=alpha +-VENDOR=dec +-else #default to i386 +-ARCH=i386 +-RPMARCH=i386 +-VENDOR=unknown +-endif #alpha test ++BASE_CFLAGS = $(CFLAGS) -DDATADIR='\"$(Q3DIR)\"' -DLIBDIR='\"$(LIBDIR)\"' -pipe + ++GL_CFLAGS = -I$(X11BASE)/include + +-BASE_CFLAGS = -pipe ++DEBUG_CFLAGS=$(BASE_CFLAGS) -g -Wall -Werror ++RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG + +-GL_CFLAGS = -I$(MESADIR)/include -I/usr/X11R6/include ++ifdef OPTIMIZED_CFLAGS ++ ifeq ($(ARCH),i386) ++RELEASE_CFLAGS=$(BASE_CFLAGS) -O6 -fomit-frame-pointer -pipe -ffast-math -falign-loops=2 -falign-jumps=2 -falign-functions=2 -fno-strict-aliasing -fstrength-reduce ++ else ++RELEASE_CFLAGS=$(BASE_CFLAGS) -O6 -ffast-math -funroll-loops -fomit-frame-pointer -fexpensive-optimizations ++ endif ++endif + +-DEBUG_CFLAGS=$(BASE_CFLAGS) -g -Wall -Werror +-ifeq ($(ARCH),axp) +-CC=pgcc +-RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG -O6 -ffast-math -funroll-loops -fomit-frame-pointer -fexpensive-optimizations +-else +-#NEWPGCC=/loki/global/x86/bin/gcc # raistlin012301 +-#NEWPGCC=/usr/local/gcc-2.95.2/bin/gcc +-NEWPGCC=/home/raistllin/src/gcc/build/install/bin/gcc +-CC=$(shell if [ -f $(NEWPGCC) ]; then echo $(NEWPGCC); else echo pgcc; fi ) +-RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG -O6 -mcpu=pentiumpro -march=pentium -fomit-frame-pointer -pipe -ffast-math -malign-loops=2 -malign-jumps=2 -malign-functions=2 -fno-strict-aliasing - fstrength-reduce ++ifneq ($(ARCH),i386) ++ifneq ($(ARCH),ppc) ++DLL_ONLY=true ++endif ++endif ++ ++ifeq ($(DLL_ONLY),true) ++BASE_CFLAGS += -DDLL_ONLY + endif + + LIBEXT=a +@@ -235,25 +238,37 @@ + ARFLAGS=ar rv + RANLIB=ranlib + +-THREAD_LDFLAGS=-lpthread ++THREAD_LDFLAGS=$(PTHREAD_LIBS) + # don't need -ldl (FreeBSD) +-LDFLAGS=-lm ++LDFLAGS+=-lm + #GLLDFLAGS=-L/usr/X11R6/lib -L$(MESADIR)/lib -lGL -lX11 -lXext -lXxf86dga -lXxf86vm + #GLLDFLAGS=-L/usr/X11/lib -lGL -lX11 -lXext -lm +-GLLDFLAGS=-L/usr/X11R6/lib -lGL -lX11 -lXext -lXxf86dga -lXxf86vm ++GLLDFLAGS=-L$(X11BASE)/lib -lGL -lX11 -lXext -lXxf86dga -lXxf86vm + +-ifeq ($(ARCH),axp) +-TARGETS=\ +- $(B)/$(PLATFORM)q3ded +-else +-TARGETS=\ +- $(B)/$(PLATFORM)quake3 \ +- $(B)/baseq3/cgame$(ARCH).$(SHLIBEXT) \ +- $(B)/baseq3/qagame$(ARCH).$(SHLIBEXT) \ +- $(B)/baseq3/ui$(ARCH).$(SHLIBEXT) \ +- $(B)/missionpack/cgame$(ARCH).$(SHLIBEXT) \ +- $(B)/missionpack/qagame$(ARCH).$(SHLIBEXT) \ +- $(B)/missionpack/ui$(ARCH).$(SHLIBEXT) ++ifdef CLIENT ++TARGETS+=$(B)/cleanq3 ++endif ++ ++ifdef DEDICATED ++TARGETS+=$(B)/cleanq3ded ++endif ++ ++ifdef SMP ++TARGETS+=$(B)/cleanq3-smp ++endif ++ ++ifeq ($(DLL_ONLY),true) ++GAMELIBS=yes ++endif ++ ++ifdef GAMELIBS ++TARGETS+=\ ++ $(B)/baseq3/cgame.$(SHLIBEXT) \ ++ $(B)/baseq3/qagame.$(SHLIBEXT) \ ++ $(B)/baseq3/ui.$(SHLIBEXT) \ ++ $(B)/missionpack/cgame.$(SHLIBEXT) \ ++ $(B)/missionpack/qagame.$(SHLIBEXT) \ ++ $(B)/missionpack/ui.$(SHLIBEXT) + endif + + else # ifeq freebsd +@@ -348,7 +363,7 @@ + $(MAKE) targets B=$(BR) CFLAGS="$(RELEASE_CFLAGS)" + + #Build both debug and release builds +-all:build_debug build_release ++all:build_release + + targets:makedirs $(TARGETS) + +@@ -516,20 +531,6 @@ + $(B)/client/unix_net.o \ + $(B)/client/unix_shared.o \ + \ +- $(B)/client/ahoptim.o \ +- $(B)/client/autohint.o \ +- $(B)/client/ftbase.o \ +- $(B)/client/ftdebug.o \ +- $(B)/client/ftglyph.o \ +- $(B)/client/ftinit.o \ +- $(B)/client/ftmm.o \ +- $(B)/client/ftsystem.o \ +- $(B)/client/raster1.o \ +- $(B)/client/sfnt.o \ +- $(B)/client/sfobjs.o \ +- $(B)/client/smooth.o \ +- $(B)/client/truetype.o +-# \ + # $(B)/client/q_parse.o \ + # $(B)/client/math_quaternion.o \ + # $(B)/client/util_str.o \ +@@ -541,7 +542,9 @@ + # $(B)/client/q_shared.o \ + + ifeq ($(ARCH),i386) +- Q3OBJ += $(B)/client/vm_x86.o ++ ifeq ($(DLL_ONLY),false) ++ Q3OBJ += $(B)/client/vm_x86.o ++ endif + endif + + ifeq ($(ARCH),ppc) +@@ -559,10 +562,24 @@ + $(B)/client/linux_qgl.o \ + $(B)/client/linux_glimp.o \ + $(B)/client/linux_snd.o \ ++ $(B)/client/linux_signals.o \ ++ $(B)/client/snd_mixa.o \ ++ $(B)/client/matha.o ++ ++ Q3POBJ_SMP=\ ++ $(B)/client/linux_common.o \ ++ $(B)/client/linux_qgl.o \ ++ $(B)/client/linux_glimp_smp.o \ ++ $(B)/client/linux_snd.o \ ++ $(B)/client/linux_signals.o \ + $(B)/client/snd_mixa.o \ + $(B)/client/matha.o \ +- $(B)/client/ftol.o \ +- $(B)/client/snapvector.o ++ ++ ifeq ($(ARCH),i386) ++ Q3POBJ += $(B)/client/ftol.o $(B)/client/snapvector.o ++ Q3POBJ_SMP += $(B)/client/ftol.o $(B)/client/snapvector.o ++ endif ++ + else + ifeq ($(PLATFORM),irix) + Q3POBJ=\ +@@ -602,12 +619,12 @@ + endif #FreeBSD + endif #IRIX + +-$(B)/$(PLATFORM)quake3 : $(Q3OBJ) $(Q3POBJ) ++$(B)/cleanq3 : $(Q3OBJ) $(Q3POBJ) + $(CC) -o $@ $(Q3OBJ) $(Q3POBJ) $(GLLDFLAGS) $(LDFLAGS) + # TTimo: splines code requires C++ linking, but splines have not been officially included in the codebase + # $(CXX) -o $@ $(Q3OBJ) $(Q3POBJ) $(GLLDFLAGS) $(LDFLAGS) + +-$(B)/$(PLATFORM)quake3-smp : $(Q3OBJ) $(Q3POBJ_SMP) ++$(B)/cleanq3-smp : $(Q3OBJ) $(Q3POBJ_SMP) + $(CC) -o $@ $(Q3OBJ) $(Q3POBJ_SMP) $(GLLDFLAGS) \ + $(THREAD_LDFLAGS) $(LDFLAGS) + +@@ -758,6 +775,7 @@ + $(B)/client/linux_qgl.o : $(UDIR)/linux_qgl.c; $(DO_CC) $(GL_CFLAGS) + $(B)/client/linux_input.o : $(UDIR)/linux_input.c; $(DO_CC) + $(B)/client/linux_snd.o : $(UDIR)/linux_snd.c; $(DO_CC) ++$(B)/client/linux_signals.o : $(UDIR)/linux_signals.c; $(DO_CC) $(GL_CFLAGS) + $(B)/client/snd_mixa.o : $(UDIR)/snd_mixa.s; $(DO_AS) + $(B)/client/matha.o : $(UDIR)/matha.s; $(DO_AS) + +@@ -912,13 +930,17 @@ + $(B)/ded/unix_main.o \ + $(B)/ded/unix_net.o \ + $(B)/ded/unix_shared.o \ ++ $(B)/ded/linux_signals.o \ + \ + $(B)/ded/null_client.o \ + $(B)/ded/null_input.o \ + $(B)/ded/null_snddma.o + + ifeq ($(ARCH),i386) +- Q3DOBJ += $(B)/ded/vm_x86.o $(B)/ded/ftol.o $(B)/ded/snapvector.o ++ Q3DOBJ += $(B)/ded/ftol.o $(B)/ded/snapvector.o ++ ifeq ($(DLL_ONLY),false) ++ Q3DOBJ += $(B)/ded/vm_x86.o ++ endif + endif + + ifeq ($(ARCH),ppc) +@@ -927,7 +949,7 @@ + endif + endif + +-$(B)/$(PLATFORM)q3ded : $(Q3DOBJ) ++$(B)/cleanq3ded : $(Q3DOBJ) + $(CC) -o $@ $(Q3DOBJ) $(LDFLAGS) + + $(B)/ded/sv_bot.o : $(SDIR)/sv_bot.c; $(DO_DED_CC) +@@ -988,6 +1010,7 @@ + $(B)/ded/unix_main.o : $(UDIR)/unix_main.c; $(DO_DED_CC) + $(B)/ded/unix_net.o : $(UDIR)/unix_net.c; $(DO_DED_CC) + $(B)/ded/unix_shared.o : $(UDIR)/unix_shared.c; $(DO_DED_CC) ++$(B)/ded/linux_signals.o : $(UDIR)/linux_signals.c; $(DO_DED_CC) + $(B)/ded/null_client.o : $(NDIR)/null_client.c; $(DO_DED_CC) + $(B)/ded/null_input.o : $(NDIR)/null_input.c; $(DO_DED_CC) + $(B)/ded/null_snddma.o : $(NDIR)/null_snddma.c; $(DO_DED_CC) +@@ -1068,7 +1091,7 @@ + $(B)/baseq3/cgame/q_math.o \ + $(B)/baseq3/cgame/q_shared.o + +-$(B)/baseq3/cgame$(ARCH).$(SHLIBEXT) : $(Q3CGOBJ) ++$(B)/baseq3/cgame.$(SHLIBEXT) : $(Q3CGOBJ) + $(CC) $(SHLIBLDFLAGS) -o $@ $(Q3CGOBJ) + + $(B)/baseq3/cgame/bg_misc.o : $(GDIR)/bg_misc.c; $(DO_SHLIB_CC) +@@ -1128,7 +1151,7 @@ + $(B)/missionpack/cgame/q_shared.o \ + $(B)/missionpack/cgame/ui_shared.o + +-$(B)/missionpack/cgame$(ARCH).$(SHLIBEXT) : $(MPCGOBJ) ++$(B)/missionpack/cgame.$(SHLIBEXT) : $(MPCGOBJ) + $(CC) $(SHLIBLDFLAGS) -o $@ $(MPCGOBJ) + + $(B)/missionpack/cgame/bg_misc.o : $(GDIR)/bg_misc.c; $(DO_SHLIB_CC) -DMISSIONPACK +@@ -1200,7 +1223,7 @@ + $(B)/baseq3/game/q_math.o \ + $(B)/baseq3/game/q_shared.o + +-$(B)/baseq3/qagame$(ARCH).$(SHLIBEXT) : $(Q3GOBJ) ++$(B)/baseq3/qagame.$(SHLIBEXT) : $(Q3GOBJ) + $(CC) $(SHLIBLDFLAGS) -o $@ $(Q3GOBJ) + + $(B)/baseq3/game/ai_chat.o : $(GDIR)/ai_chat.c; $(DO_SHLIB_CC) +@@ -1278,7 +1301,7 @@ + $(B)/missionpack/game/q_math.o \ + $(B)/missionpack/game/q_shared.o + +-$(B)/missionpack/qagame$(ARCH).$(SHLIBEXT) : $(MPGOBJ) ++$(B)/missionpack/qagame.$(SHLIBEXT) : $(MPGOBJ) + $(CC) $(SHLIBLDFLAGS) -o $@ $(MPGOBJ) + + $(B)/missionpack/game/ai_chat.o : $(GDIR)/ai_chat.c; $(DO_SHLIB_CC) -DMISSIONPACK +@@ -1367,7 +1390,7 @@ + $(B)/baseq3/ui/q_math.o \ + $(B)/baseq3/ui/q_shared.o + +-$(B)/baseq3/ui$(ARCH).$(SHLIBEXT) : $(Q3UIOBJ) ++$(B)/baseq3/ui.$(SHLIBEXT) : $(Q3UIOBJ) + $(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(Q3UIOBJ) + + $(B)/baseq3/ui/bg_misc.o : $(GDIR)/bg_misc.c; $(DO_SHLIB_CC) +@@ -1410,7 +1433,7 @@ + $(B)/baseq3/ui/ui_startserver.o : $(Q3UIDIR)/ui_startserver.c; $(DO_SHLIB_CC) + $(B)/baseq3/ui/ui_team.o : $(Q3UIDIR)/ui_team.c; $(DO_SHLIB_CC) + $(B)/baseq3/ui/ui_teamorders.o : $(Q3UIDIR)/ui_teamorders.c; $(DO_SHLIB_CC) +-$(B)/baseq3/ui/ui_syscalls.o : $(Q3UIDIR)/ui_syscalls.c; $(DO_SHLIB_CC) ++$(B)/baseq3/ui/ui_syscalls.o : $(UIDIR)/ui_syscalls.c; $(DO_SHLIB_CC) + $(B)/baseq3/ui/ui_video.o : $(Q3UIDIR)/ui_video.c; $(DO_SHLIB_CC) + + # bk001205 - these wre the only SHLIB compiles in 1.17 +@@ -1450,7 +1473,7 @@ + # $(B)/missionpack/ui/q_math.o \ + # $(B)/missionpack/ui/q_shared.o + +-$(B)/missionpack/ui$(ARCH).$(SHLIBEXT) : $(MPUIOBJ) ++$(B)/missionpack/ui.$(SHLIBEXT) : $(MPUIOBJ) + $(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(MPUIOBJ) + + $(B)/missionpack/ui/ui_atoms.o : $(UIDIR)/ui_atoms.c; $(DO_SHLIB_CC) -DMISSIONPACK +@@ -2059,9 +2082,9 @@ + + copyfiles: + -mkdirhier $(COPYDIR) +- cp $(BR)/linuxquake3 $(COPYDIR)/quake3.x86 +- strip $(COPYDIR)/quake3.x86 +- chmod 755 $(COPYDIR)/quake3.x86 ++ cp $(BR)/linuxquake3 $(COPYDIR)/quake3 ++ strip $(COPYDIR)/quake3 ++ chmod 755 $(COPYDIR)/quake3 + cp $(BR)/linuxq3ded $(COPYDIR)/q3ded + strip $(COPYDIR)/q3ded + chmod 755 $(COPYDIR)/q3ded Index: cleanq3/files/patch-code-unix-cons =================================================================== RCS file: cleanq3/files/patch-code-unix-cons diff -N cleanq3/files/patch-code-unix-cons --- cleanq3/files/patch-code-unix-cons 20 Mar 2006 15:21:27 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,27 +0,0 @@ ---- code/unix/cons.orig Fri Jun 14 13:01:32 2002 -+++ code/unix/cons Wed Nov 23 10:32:49 2005 -@@ -271,11 +271,11 @@ - # Defaults for a typical (?) UNIX platform. - # Your mileage may vary. - 'unix' => [ -- 'CC' => 'cc', -- 'CFLAGS' => '', -+ 'CC' => $ENV{CC}, -+ 'CFLAGS' => $ENV{CFLAGS}, - 'CCCOM' => '%CC %CFLAGS %_IFLAGS -c %< -o %>', -- 'CXX' => '%CC', -- 'CXXFLAGS' => '%CFLAGS', -+ 'CXX' => $ENV{CXX}, -+ 'CXXFLAGS' => $ENV{CXXFLAGS}, - 'CXXCOM' => '%CXX %CXXFLAGS %_IFLAGS -c %< -o %>', - 'INCDIRPREFIX' => '-I', - 'INCDIRSUFFIX' => '', -@@ -294,7 +294,7 @@ - 'LD' => 'ld', - 'LDFLAGS' => '', - 'PREFLIB' => 'lib', -- 'ENV' => { 'PATH' => '/bin:/usr/bin' }, -+ 'ENV' => { 'PATH' => '/bin:/usr/bin:/usr/local/bin' }, - ], - ); - Index: cleanq3/files/patch-code-unix-unix_main.c =================================================================== RCS file: /home/pcvs/ports/games/cleanq3/files/patch-code-unix-unix_main.c,v retrieving revision 1.1 diff -u -r1.1 patch-code-unix-unix_main.c --- cleanq3/files/patch-code-unix-unix_main.c 20 Mar 2006 15:21:27 -0000 1.1 +++ cleanq3/files/patch-code-unix-unix_main.c 1 Jun 2006 21:21:15 -0000 @@ -1,5 +1,5 @@ ---- code/unix/unix_main.c.orig Mon Mar 20 18:39:10 2006 -+++ code/unix/unix_main.c Mon Mar 20 20:24:22 2006 +--- ./code/unix/unix_main.c.orig Wed May 31 20:52:08 2006 ++++ ./code/unix/unix_main.c Wed May 31 20:52:09 2006 @@ -722,17 +722,7 @@ assert( name ); @@ -25,7 +25,7 @@ { + Com_Printf( "Sys_LoadDll(%s) failed:\n\"%s\"\n", fn, dlerror() ); + // FreeBSD package installation path -+ fn = FS_BuildOSPath( "%%PREFIX%%/lib/cleanq3", gamedir, fname ); ++ fn = FS_BuildOSPath( LIBDIR , gamedir, fname ); + Com_Printf( "Sys_LoadDll(%s)... \n", fn ); + libHandle = dlopen( fn, Q_RTLD ); + Index: cleanq3/files/patch-code-unix-unix_shared.c =================================================================== RCS file: /home/pcvs/ports/games/cleanq3/files/patch-code-unix-unix_shared.c,v retrieving revision 1.1 diff -u -r1.1 patch-code-unix-unix_shared.c --- cleanq3/files/patch-code-unix-unix_shared.c 20 Mar 2006 15:21:27 -0000 1.1 +++ cleanq3/files/patch-code-unix-unix_shared.c 1 Jun 2006 21:21:15 -0000 @@ -1,11 +1,11 @@ ---- code/unix/unix_shared.c.orig Mon Aug 15 20:10:07 2005 -+++ code/unix/unix_shared.c Sun Nov 20 18:41:22 2005 +--- ./code/unix/unix_shared.c.orig Wed May 31 20:52:08 2006 ++++ ./code/unix/unix_shared.c Wed May 31 20:52:09 2006 @@ -38,7 +38,7 @@ static char cdPath[MAX_OSPATH]; // Used to determine local installation path -static char installPath[MAX_OSPATH]; -+static char installPath[MAX_OSPATH] = %%Q3DIR%%; ++static char installPath[MAX_OSPATH] = DATADIR; // Used to determine where to store user-specific files static char homePath[MAX_OSPATH]; @@ -34,7 +34,7 @@ // test the wrap issue #if 0 -@@ -136,7 +140,7 @@ +@@ -136,10 +140,10 @@ return ret; } @@ -42,4 +42,8 @@ +// #endif //#if 0 // bk001215 - see snapvector.nasm for replacement - #if (defined __APPLE__) // rcg010206 - using this for PPC builds... +-#if (defined __APPLE__) // rcg010206 - using this for PPC builds... ++#ifndef __i386__ // rcg010206 - using this for PPC builds... + long fastftol( float f ) { // bk001213 - from win32/win_shared.c + //static int tmp; + // __asm fld f =========== END ===========
LS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLQ0KSGFzaDogU0hBMQ0KDQpUaGlzIG5l dyBkaWZmIHJlcGxhY2VzIHBwYyBieSBwb3dlcnBjIGluIHRoZSBNYWtlZmlsZSBzaW5jZSBpdCdz IHRoZQ0KY29ycmVjdCBvbmUgaW4gRnJlZUJTRC4gSXQgYWxzbyB1c2VzIGEgbGlzdCBvZiBzdXBw b3J0ZWQgYXJjaGl0ZWN0dXJlcw0KaW5zdGVhZCBvZiBoYXJkY29kaW5nIHRoZW0uDQoNCj09PT09 PT09PT0gQkVHSU4gPT09PT09PT09PQ0KSW5kZXg6IE1ha2VmaWxlDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1Mg ZmlsZTogL2hvbWUvcGN2cy9wb3J0cy9nYW1lcy9jbGVhbnEzL01ha2VmaWxlLHYNCnJldHJpZXZp bmcgcmV2aXNpb24gMS4yDQpkaWZmIC11IC1yMS4yIE1ha2VmaWxlDQotIC0tLSBNYWtlZmlsZQky MiBBcHIgMjAwNiAyMjoxMTozMyAtMDAwMAkxLjINCisrKyBNYWtlZmlsZQk0IEp1biAyMDA2IDIx OjQ0OjAzIC0wMDAwDQpAQCAtNyw2ICs3LDcgQEANCiANCiBQT1JUTkFNRT0JY2xlYW5xMw0KIFBP UlRWRVJTSU9OPQkwLjUuMg0KK1BPUlRSRVZJU0lPTj0JMg0KIENBVEVHT1JJRVM9CWdhbWVzDQog TUFTVEVSX1NJVEVTPQlodHRwOi8vdHJlbW9yLnF1YWtlZGV2LmNvbS8NCiBESVNUTkFNRT0JQ2xl YW5RM192JHtQT1JUVkVSU0lPTn0tc3JjYmluDQpAQCAtMTQsNzIgKzE1LDEwNCBAQA0KIE1BSU5U QUlORVI9CWRhbmZlQEZyZWVCU0Qub3JnDQogQ09NTUVOVD0JQ2xlYW5lZCB1cCBjb3B5IG9mIHRo ZSBvcmlnaW5hbCBRdWFrZSBJSUkgQXJlbmEgc291cmNlIGNvZGUNCiANCi0gLUJVSUxEX0RFUEVO RFM9CW5hc206JHtQT1JUU0RJUn0vZGV2ZWwvbmFzbQ0KLSAtDQogVVNFX1pJUD0JeWVzDQotIC1V U0VfUEVSTDVfQlVJTEQ9eWVzDQogVVNFX0RPUzJVTklYPQl5ZXMNCitVU0VfR01BS0U9CXllcw0K IFVTRV9HQ0M9CTMuMisNCi0gLVVTRV9HTD0JCXllcw0KLSAtDQogV1JLU1JDPQkJJHtXUktESVJ9 L0NsZWFuUTMNCi0gLUlOU1RESVI9CSR7V1JLU1JDfS9jb2RlL2luc3RhbGwNCitCVUlMRF9XUktT UkM9CSR7V1JLU1JDfS9jb2RlL3VuaXgNCisNCitPUFRJT05TPQlDTElFTlQgIkJ1aWxkIGNsaWVu dCIgb24gXA0KKwkJREVESUNBVEVEICJCdWlsZCBkZWRpY2F0ZWQgc2VydmVyIiBvbiBcDQorCQlH QU1FTElCUyAiQnVpbGQgZ2FtZSBsaWJyYXJpZXMgKHdoZW4gbm90IG1hbmRhdG9yeSkiIG9mZiBc DQorCQlPUFRJTUlaRURfQ0ZMQUdTICJFbmFibGUgY29tcGlsYXRpb24gb3B0aW1pemF0aW9ucyIg b24gXA0KKwkJU01QICJCdWlsZCBTTVAgKHRocmVhZGVkKSBjbGllbnQiIG9uDQogDQotIC1QTElT VF9GSUxFUz0JYmluL2NsZWFucTMgYmluL2NsZWFucTNkZWQgXA0KLSAtCQlsaWIvY2xlYW5xMy9i YXNlcTMvY2dhbWUuc28gXA0KLSAtCQlsaWIvY2xlYW5xMy9iYXNlcTMvcWFnYW1lLnNvIFwNCi0g LQkJbGliL2NsZWFucTMvYmFzZXEzL3VpLnNvIFwNCi0gLQkJbGliL2NsZWFucTMvbWlzc2lvbnBh Y2svY2dhbWUuc28gXA0KLSAtCQlsaWIvY2xlYW5xMy9taXNzaW9ucGFjay9xYWdhbWUuc28gXA0K LSAtCQlsaWIvY2xlYW5xMy9taXNzaW9ucGFjay91aS5zbw0KLSAtUExJU1RfRElSUz0JbGliL2Ns ZWFucTMvYmFzZXEzIGxpYi9jbGVhbnEzL21pc3Npb25wYWNrIGxpYi9jbGVhbnEzDQorTUFLRV9F TlY9CUxJQkRJUj0iJHtMSUJESVJ9Ig0KK1BMSVNUX1NVQj0JTElCRElSPSIke0xJQkRJUjpTLyR7 UFJFRklYfVwvLy99Ig0KIA0KLSAtT1BUSU9OUz0JT1BUSU1JWkVEX0NGTEFHUyAiQnVpbGQgd2l0 aCBleHRyYSBvcHRpbWl6YXRpb24gb3B0aW9ucyIgb24NCitMSUJESVI9CQkke1BSRUZJWH0vbGli LyR7UE9SVE5BTUV9DQorVk1fQVJDSFM9CWkzODYgcG93ZXJwYw0KIA0KIC5pbmNsdWRlIDxic2Qu cG9ydC5wcmUubWs+DQogDQotIC0uaWYgJHtBUkNIfSAhPSAiaTM4NiINCi0gLUJST0tFTj0JCURv ZXMgbm90IGNvbXBpbGUgb24gJHtBUkNIfQ0KKy5pZiBkZWZpbmVkKFdJVEhPVVRfQ0xJRU5UKSAm JiBkZWZpbmVkKFdJVEhPVVRfREVESUNBVEVEKSAmJiBcDQorICAgIGRlZmluZWQoV0lUSE9VVF9T TVApDQorSUdOT1JFPQkJbmVlZHMgYXQgbGVhc3Qgb25lIG9mIENMSUVOVCwgREVESUNBVEVEIGFu ZCBTTVAgb3B0aW9ucw0KIC5lbmRpZg0KIA0KLSAtLmlmICR7T1NWRVJTSU9OfSA8IDUwMDAwMA0K LSAtQlJPS0VOPQkJRG9lcyBub3QgY29tcGlsZSBvbiA0LngNCisuaWYgJHtBUkNIfSA9PSAiaTM4 NiINCitCVUlMRF9ERVBFTkRTKz0JbmFzbToke1BPUlRTRElSfS9kZXZlbC9uYXNtDQogLmVuZGlm DQogDQotIC0uaWYgZGVmaW5lZChXSVRIX09QVElNSVpFRF9DRkxBR1MpDQotIC1DRkxBR1M9CQkt TzYgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZmYXN0LW1hdGggLWZhbGlnbi1sb29wcz0yIC1mYWxp Z24tanVtcHM9MiBcDQotIC0JCS1mYWxpZ24tZnVuY3Rpb25zPTIgLWZuby1zdHJpY3QtYWxpYXNp bmcgLWZzdHJlbmd0aC1yZWR1Y2UNCi0gLS5lbmRpZg0KLSAtDQotIC1wb3N0LXBhdGNoOiAuU0lM RU5UDQotIC0JJHtSRUlOUExBQ0VfQ01EfSAtZSAnc3wlJUxPQ0FMQkFTRSUlfCR7TE9DQUxCQVNF fXxnIDsgXA0KLSAtCQlzfCUlWDExQkFTRSUlfCR7WDExQkFTRX18ZyA7IHN8JSVDRkxBR1MlJXwk e0NGTEFHU318JyBcDQotIC0JCSR7V1JLU1JDfS9jb2RlL0NvbnN0cnVjdCAke1dSS1NSQ30vY29k ZS91bml4L0NvbnNjcmlwdC1jbGllbnQNCi0gLQkke1JFSU5QTEFDRV9DTUR9IC1lICdzfC1sZGwg fHwgOyBzfGkzODZcLnNvfFwuc298JyBcDQotIC0JCSR7V1JLU1JDfS9jb2RlL2NnYW1lL0NvbnNj cmlwdCBcDQotIC0JCSR7V1JLU1JDfS9jb2RlL2dhbWUvQ29uc2NyaXB0ICR7V1JLU1JDfS9jb2Rl L3EzX3VpL0NvbnNjcmlwdCBcDQotIC0JCSR7V1JLU1JDfS9jb2RlL3VuaXgvQ29uc2NyaXB0LWRl ZGljYXRlZCBcDQotIC0JCSR7V1JLU1JDfS9jb2RlL3VpL0NvbnNjcmlwdA0KLSAtCSR7UkVJTlBM QUNFX0NNRH0gLWUgJ3N8JSVRM0RJUiUlfCIke1EzRElSfSJ8JyBcDQotIC0JCSR7V1JLU1JDfS9j b2RlL3VuaXgvdW5peF9zaGFyZWQuYw0KLSAtCSR7UkVJTlBMQUNFX0NNRH0gLWUgJ3N8JSVQUkVG SVglJXwke1BSRUZJWH18JyBcDQotIC0JCSR7V1JLU1JDfS9jb2RlL3VuaXgvdW5peF9tYWluLmMN Ci0gLQkke1JFSU5QTEFDRV9DTUR9IC1lICdzfGJvdGxpYi5sb2d8L2Rldi9udWxsfCcgXA0KLSAt CQkke1dSS1NSQ30vY29kZS9ib3RsaWIvYmVfaW50ZXJmYWNlLmMNCisuZm9yIGkgaW4gJHtBUkNI fQ0KKy4gICBpZiAke1ZNX0FSQ0hTOk0ke2l9fSAhPSAiIg0KK0hBVkVfVk1fQ09NUElMRUQ9CXll cw0KKy4gICBlbmRpZg0KKy5lbmRmb3INCiANCi0gLWRvLWJ1aWxkOg0KLSAtCWNkICR7V1JLU1JD fS9jb2RlICYmICR7TUFLRV9FTlZ9ICR7UEVSTH0gdW5peC9jb25zDQorLmlmICFkZWZpbmVkKEhB VkVfVk1fQ09NUElMRUQpDQorTUFLRV9FTlYrPQlETExfT05MWT10cnVlDQorLmVuZGlmDQorDQor LmlmICFkZWZpbmVkKFdJVEhPVVRfQ0xJRU5UKSB8fCAhZGVmaW5lZChXSVRIT1VUX1NNUCkNCitV U0VfR0w9CQl5ZXMNCisuZW5kaWYNCisNCisuaWYgIWRlZmluZWQoV0lUSE9VVF9DTElFTlQpDQor TUFLRV9FTlYrPQlDTElFTlQ9WUVTDQorUExJU1RfU1VCKz0JQ0xJRU5UPSIiDQorUTNCSU4rPQkJ Y2xlYW5xMw0KKy5lbHNlDQorUExJU1RfU1VCKz0JQ0xJRU5UPSJAY29tbWVudCAiDQorLmVuZGlm DQorDQorLmlmICFkZWZpbmVkKFdJVEhPVVRfREVESUNBVEVEKQ0KK01BS0VfRU5WKz0JREVESUNB VEVEPVlFUw0KK1BMSVNUX1NVQis9CURFRElDQVRFRD0iIg0KK1EzQklOKz0JCWNsZWFucTNkZWQN CisuZWxzZQ0KK1BMSVNUX1NVQis9CURFRElDQVRFRD0iQGNvbW1lbnQgIg0KKy5lbmRpZg0KKw0K Ky5pZiBkZWZpbmVkKFdJVEhfR0FNRUxJQlMpIHx8ICFkZWZpbmVkKEhBVkVfVk1fQ09NUElMRUQp DQorTUFLRV9FTlYrPQlHQU1FTElCUz1ZRVMNCitQTElTVF9TVUIrPQlHQU1FTElCUz0iIg0KKy5l bHNlDQorUExJU1RfU1VCKz0JR0FNRUxJQlM9IkBjb21tZW50ICINCisuZW5kaWYNCisNCisuaWYg IWRlZmluZWQoV0lUSE9VVF9PUFRJTUlaRURfQ0ZMQUdTKQ0KK01BS0VfRU5WKz0JT1BUSU1JWkVE X0NGTEFHUz1ZRVMNCisuZW5kaWYNCisNCisuaWYgIWRlZmluZWQoV0lUSE9VVF9TTVApDQorTUFL RV9FTlYrPQlTTVA9WUVTIFwNCisJCVBUSFJFQURfTElCUz0iJHtQVEhSRUFEX0xJQlN9Ig0KK1BM SVNUX1NVQis9CVNNUD0iIg0KK1EzQklOKz0JCWNsZWFucTMtc21wDQorLmVsc2UNCitQTElTVF9T VUIrPQlTTVA9IkBjb21tZW50ICINCisuZW5kaWYNCisNCitwb3N0LXBhdGNoOg0KKwlAJHtSRUlO UExBQ0VfQ01EfSAtZSAnc3xib3RsaWJcLmxvZ3wvZGV2L251bGx8JyBcDQorCQkke1dSS1NSQ30v Y29kZS9ib3RsaWIvYmVfaW50ZXJmYWNlLmMNCisJQCR7UkVJTlBMQUNFX0NNRH0gLWUgXA0KKwkJ J3N8Ly9bWzpibGFuazpdXSpcKFN3YXBfSW5pdFtbOmJsYW5rOl1dKigpO1wpfFwxfCcgXA0KKwkJ JHtXUktTUkN9L2NvZGUvYm90bGliL2JlX2ludGVyZmFjZS5jIFwNCisJCSR7V1JLU1JDfS9jb2Rl L3JlbmRlcmVyL3RyX2luaXQuYw0KIA0KIGRvLWluc3RhbGw6DQotIC0JJHtJTlNUQUxMX1BST0dS QU19ICR7SU5TVERJUn0vbGludXhxdWFrZTMgJHtQUkVGSVh9L2Jpbi9jbGVhbnEzDQotIC0JJHtJ TlNUQUxMX1BST0dSQU19ICR7SU5TVERJUn0vbGludXhxM2RlZCAke1BSRUZJWH0vYmluL2NsZWFu cTNkZWQNCi0gLS5mb3IgZCBpbiBiYXNlcTMgbWlzc2lvbnBhY2sNCi0gLQlAJHtNS0RJUn0gJHtQ UkVGSVh9L2xpYi9jbGVhbnEzLyR7ZH0NCi0gLQkke0lOU1RBTExfUFJPR1JBTX0gJHtJTlNURElS fS8ke2R9L2NnYW1lLnNvICR7UFJFRklYfS9saWIvY2xlYW5xMy8ke2R9DQotIC0JJHtJTlNUQUxM X1BST0dSQU19ICR7SU5TVERJUn0vJHtkfS9xYWdhbWUuc28gJHtQUkVGSVh9L2xpYi9jbGVhbnEz LyR7ZH0NCi0gLQkke0lOU1RBTExfUFJPR1JBTX0gJHtJTlNURElSfS8ke2R9L3VpLnNvICR7UFJF RklYfS9saWIvY2xlYW5xMy8ke2R9DQorLmZvciBiaW4gaW4gJHtRM0JJTn0NCisJJHtJTlNUQUxM X1BST0dSQU19ICR7QlVJTERfV1JLU1JDfS9yZWxlYXNlLyR7YmlufSAke1BSRUZJWH0vYmluDQog LmVuZGZvcg0KKy5pZiBkZWZpbmVkKFdJVEhfR0FNRUxJQlMpIHx8ICFkZWZpbmVkKEhBVkVfVk1f Q09NUElMRUQpDQorLmZvciBkaXIgaW4gYmFzZXEzIG1pc3Npb25wYWNrDQorCSR7TUtESVJ9ICR7 TElCRElSfS8ke2Rpcn0NCisJJHtJTlNUQUxMX1BST0dSQU19ICR7QlVJTERfV1JLU1JDfS9yZWxl YXNlLyR7ZGlyfS8qLnNvICR7TElCRElSfS8ke2Rpcn0NCisuZW5kZm9yDQorLmVuZGlmDQogDQog LmluY2x1ZGUgIiR7LkNVUkRJUn0vLi4vcXVha2UzLWRhdGEvTWFrZWZpbGUuaW5jbHVkZSINCi0g LQ0KIC5pbmNsdWRlIDxic2QucG9ydC5wb3N0Lm1rPg0KSW5kZXg6IHBrZy1wbGlzdA0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KUkNTIGZpbGU6IHBrZy1wbGlzdA0KZGlmZiAtTiBwa2ctcGxpc3QNCi0gLS0tIC9kZXYv bnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwDQorKysgcGtnLXBsaXN0CTQgSnVuIDIwMDYg MjE6NDQ6MDMgLTAwMDANCkBAIC0wLDAgKzEsMTMgQEANCislJURFRElDQVRFRCUlYmluL2NsZWFu cTNkZWQNCislJUNMSUVOVCUlYmluL2NsZWFucTMNCislJVNNUCUlYmluL2NsZWFucTMtc21wDQor JSVHQU1FTElCUyUlJSVMSUJESVIlJS9iYXNlcTMvY2dhbWUuc28NCislJUdBTUVMSUJTJSUlJUxJ QkRJUiUlL2Jhc2VxMy9xYWdhbWUuc28NCislJUdBTUVMSUJTJSUlJUxJQkRJUiUlL2Jhc2VxMy91 aS5zbw0KKyUlR0FNRUxJQlMlJSUlTElCRElSJSUvbWlzc2lvbnBhY2svY2dhbWUuc28NCislJUdB TUVMSUJTJSUlJUxJQkRJUiUlL21pc3Npb25wYWNrL3FhZ2FtZS5zbw0KKyUlR0FNRUxJQlMlJSUl TElCRElSJSUvbWlzc2lvbnBhY2svdWkuc28NCislJUdBTUVMSUJTJSVAZGlycm0gJSVMSUJESVIl JS9taXNzaW9ucGFjaw0KKyUlR0FNRUxJQlMlJUBkaXJybSAlJUxJQkRJUiUlL2Jhc2VxMw0KKyUl R0FNRUxJQlMlJUBkaXJybSAlJUxJQkRJUiUlDQorDQpJbmRleDogZmlsZXMvcGF0Y2gtY29kZS1D b25zdHJ1Y3QNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiBmaWxlcy9wYXRjaC1jb2RlLUNvbnN0cnVj dA0KZGlmZiAtTiBmaWxlcy9wYXRjaC1jb2RlLUNvbnN0cnVjdA0KLSAtLS0gZmlsZXMvcGF0Y2gt Y29kZS1Db25zdHJ1Y3QJMjAgTWFyIDIwMDYgMTU6MjE6MjcgLTAwMDAJMS4xDQorKysgL2Rldi9u dWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDANCkBAIC0xLDY4ICswLDAgQEANCi0gLS0tLSBj b2RlL0NvbnN0cnVjdC5vcmlnCU1vbiBNYXIgMjAgMTg6MTk6MDkgMjAwNg0KLSAtKysrIGNvZGUv Q29uc3RydWN0CU1vbiBNYXIgMjAgMTg6Mzc6MTIgMjAwNg0KLSAtQEAgLTE5LDggKzE5LDggQEAN Ci0gLSB1c2UgQ29uc19nY2M7DQotIC0gDQotIC0gIyBkZWZhdWx0cw0KLSAtLSRjb25maWcgPSAn ZGVidWcnOw0KLSAtLSRkb19zbXAgPSAxOw0KLSAtKyRjb25maWcgPSAncmVsZWFzZSc7DQotIC0r JGRvX3NtcCA9IDA7DQotIC0gJGRvX21hc3RlcnNlcnZlciA9IDA7DQotIC0gJGRvX2F1dGhzZXJ2 ZXIgPSAwOw0KLSAtICRkb19hdXRocG9ydCA9IDA7DQotIC1AQCAtMzAsMTAgKzMwLDEwIEBADQot IC0gJGRvX3BrMyA9IDA7DQotIC0gIyB0aG9zZSBhcmUgZXhwb3J0ZWQNCi0gLSAkRE9fV0lOMzIg PSAwOw0KLSAtLSROT19WTSA9IDA7DQotIC0rJE5PX1ZNID0gMTsNCi0gLSAkTk9fU08gPSAwOw0K LSAtLSRDQz0nZ2NjJzsNCi0gLS0kQ1hYPSdnKysnOw0KLSAtKyRDQz0kRU5We0NDfTsNCi0gLSsk Q1hYPSRFTlZ7Q1hYfTsNCi0gLSANCi0gLSAjIGRldGVjdCBhbiBzZGsgYnVpbGQgKGRvbid0IGF0 dGVtcHQgY2xpZW50IGJ1aWxkIGFuZCBvdGhlciB0aGluZ3MpDQotIC0gaWYgKCAtciAndW5peC9D b25zY3JpcHQtY2xpZW50JyApDQotIC1AQCAtNjMsOSArNjMsNiBAQA0KLSAtIGVsc2UNCi0gLSB7 DQotIC0gCSMgbGliYyAuLiBkbyB0aGUgbGl0dGxlIG1hZ2ljIQ0KLSAtLQkkbGliY19jbWQgPSAn L2xpYi9saWJjLnNvLjYgfGdyZXAgIkdOVSBDICJ8Z3JlcCB2ZXJzaW9ufGF3ayAtRiAidmVyc2lv biAiIFwneyBwcmludCAkMiB9XCd8Y3V0IC1iIC0zJzsNCi0gLS0JJGxpYmMgPSBgJGxpYmNfY21k YDsNCi0gLS0JY2hvcCAoJGxpYmMpOw0KLSAtIH0NCi0gLSANCi0gLSBpZiAoJERPX1dJTjMyIGVx IDEpDQotIC1AQCAtMjI3LDcgKzIyNCw3IEBADQotIC0gIyBidWlsZCB0aGUgY29uZmlnIGRpcmVj dG9yeQ0KLSAtICRDT05GSUdfRElSID0gJGNvbmZpZyAuICctJyAuICRjcHUgLiAnLScgLiAkT1Mg LiAnLScgLiAkbGliYzsNCi0gLSANCi0gLS0kQ09NTU9OX0NGTEFHUyA9ICctcGlwZSAtZnNpZ25l ZC1jaGFyICc7DQotIC0rJENPTU1PTl9DRkxBR1MgPSAnLXBpcGUgLWZzaWduZWQtY2hhciAtSSUl TE9DQUxCQVNFJSUvaW5jbHVkZSAtTCUlTE9DQUxCQVNFJSUvbGliIC1JJSVYMTFCQVNFJSUvaW5j bHVkZSAtTCUlWDExQkFTRSUlL2xpYiAnOw0KLSAtIA0KLSAtIGlmICgkY29uZmlnIGVxICdkZWJ1 ZycpDQotIC0gew0KLSAtQEAgLTIzNyw3ICsyMzQsNyBAQA0KLSAtIH0NCi0gLSBlbHNlDQotIC0g ew0KLSAtLSAgJEJBU0VfQ0ZMQUdTID0gJENPTU1PTl9DRkxBR1MgLiAnLUROREVCVUcgLU82IC1t Y3B1PXBlbnRpdW1wcm8gLW1hcmNoPXBlbnRpdW0gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZmYXN0 LW1hdGggLW1hbGlnbi1sb29wcz0yIC1tYWxpZ24tanVtcHM9MiAtbWFsaWduLWZ1bmN0aW9ucz0y IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mc3RyZW5ndGgtcmVkdWNlICc7DQotIC0rICAkQkFTRV9D RkxBR1MgPSAkQ09NTU9OX0NGTEFHUyAuICctRE5ERUJVRyAlJUNGTEFHUyUlICc7DQotIC0gCSRC U1BDX0JBU0VfQ0ZMQUdTID0gJEJBU0VfQ0ZMQUdTIC4gJy1ETElOVVggLURCU1BDIC1Ec3RyaWNt cD1zdHJjYXNlY21wICc7DQotIC0gfQ0KLSAtIA0KLSAtQEAgLTMwMiw5ICsyOTksOSBAQA0KLSAt IH0NCi0gLSANCi0gLSAjIGJ1aWxkIHRvb2xzDQotIC0tJGVudl90b29scyA9IG5ldyBjb25zKCk7 DQotIC0tQ29tbWFuZCAkZW52X3Rvb2xzICdxdm10b29scy9xM2xjYycsICdbcGVybF0gJmJ1aWxk X3Rvb2xzKFwncTNsY2NcJyknOw0KLSAtLUNvbW1hbmQgJGVudl90b29scyAncXZtdG9vbHMvcTNh c20nLCAnW3BlcmxdICZidWlsZF90b29scyhcJ3EzYXNtXCcpJzsNCi0gLSsjJGVudl90b29scyA9 IG5ldyBjb25zKCk7DQotIC0rI0NvbW1hbmQgJGVudl90b29scyAncXZtdG9vbHMvcTNsY2MnLCAn W3BlcmxdICZidWlsZF90b29scyhcJ3EzbGNjXCcpJzsNCi0gLSsjQ29tbWFuZCAkZW52X3Rvb2xz ICdxdm10b29scy9xM2FzbScsICdbcGVybF0gJmJ1aWxkX3Rvb2xzKFwncTNhc21cJyknOw0KLSAt IA0KLSAtIGlmICgkZG9fYnNwYyBlcSAxKQ0KLSAtIHsNCkluZGV4OiBmaWxlcy9wYXRjaC1jb2Rl LWNnYW1lLWNnX3dlYXBvbnMuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IGZpbGVzL3BhdGNoLWNv ZGUtY2dhbWUtY2dfd2VhcG9ucy5jDQpkaWZmIC1OIGZpbGVzL3BhdGNoLWNvZGUtY2dhbWUtY2df d2VhcG9ucy5jDQotIC0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMA0KKysr IGZpbGVzL3BhdGNoLWNvZGUtY2dhbWUtY2dfd2VhcG9ucy5jCTQgSnVuIDIwMDYgMjE6NDQ6MDMg LTAwMDANCkBAIC0wLDAgKzEsMjMgQEANCistLS0gLi9jb2RlL2NnYW1lL2NnX3dlYXBvbnMuYy5v cmlnCVdlZCBNYXkgMzEgMjA6NTI6MDYgMjAwNg0KKysrKyAuL2NvZGUvY2dhbWUvY2dfd2VhcG9u cy5jCVdlZCBNYXkgMzEgMjA6NTI6NTQgMjAwNg0KK0BAIC02MzYsMTcgKzYzNiwxNyBAQA0KKyAJ fQ0KKyANCisgCXN0cmNweSggcGF0aCwgaXRlbS0+d29ybGRfbW9kZWxbMF0gKTsNCistCUNPTV9T dHJpcEV4dGVuc2lvbiggcGF0aCwgcGF0aCApOw0KKysJQ09NX1N0cmlwRXh0ZW5zaW9uKCBwYXRo LCBwYXRoLCBzaXplb2YocGF0aCkgKTsNCisgCXN0cmNhdCggcGF0aCwgIl9mbGFzaC5tZDMiICk7 DQorIAl3ZWFwb25JbmZvLT5mbGFzaE1vZGVsID0gdHJhcF9SX1JlZ2lzdGVyTW9kZWwoIHBhdGgg KTsNCisgDQorIAlzdHJjcHkoIHBhdGgsIGl0ZW0tPndvcmxkX21vZGVsWzBdICk7DQorLQlDT01f U3RyaXBFeHRlbnNpb24oIHBhdGgsIHBhdGggKTsNCisrCUNPTV9TdHJpcEV4dGVuc2lvbiggcGF0 aCwgcGF0aCwgc2l6ZW9mKHBhdGgpICk7DQorIAlzdHJjYXQoIHBhdGgsICJfYmFycmVsLm1kMyIg KTsNCisgCXdlYXBvbkluZm8tPmJhcnJlbE1vZGVsID0gdHJhcF9SX1JlZ2lzdGVyTW9kZWwoIHBh dGggKTsNCisgDQorIAlzdHJjcHkoIHBhdGgsIGl0ZW0tPndvcmxkX21vZGVsWzBdICk7DQorLQlD T01fU3RyaXBFeHRlbnNpb24oIHBhdGgsIHBhdGggKTsNCisrCUNPTV9TdHJpcEV4dGVuc2lvbigg cGF0aCwgcGF0aCwgc2l6ZW9mKHBhdGgpICk7DQorIAlzdHJjYXQoIHBhdGgsICJfaGFuZC5tZDMi ICk7DQorIAl3ZWFwb25JbmZvLT5oYW5kc01vZGVsID0gdHJhcF9SX1JlZ2lzdGVyTW9kZWwoIHBh dGggKTsNCisgDQpJbmRleDogZmlsZXMvcGF0Y2gtY29kZS1nYW1lLXFfc2hhcmVkLmMNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NClJDUyBmaWxlOiBmaWxlcy9wYXRjaC1jb2RlLWdhbWUtcV9zaGFyZWQuYw0KZGlmZiAt TiBmaWxlcy9wYXRjaC1jb2RlLWdhbWUtcV9zaGFyZWQuYw0KLSAtLS0gL2Rldi9udWxsCTEgSmFu IDE5NzAgMDA6MDA6MDAgLTAwMDANCisrKyBmaWxlcy9wYXRjaC1jb2RlLWdhbWUtcV9zaGFyZWQu Ywk0IEp1biAyMDA2IDIxOjQ0OjAzIC0wMDAwDQpAQCAtMCwwICsxLDExMyBAQA0KKy0tLSAuL2Nv ZGUvZ2FtZS9xX3NoYXJlZC5jLm9yaWcJV2VkIE1heSAzMSAyMDo1MjowNiAyMDA2DQorKysrIC4v Y29kZS9nYW1lL3Ffc2hhcmVkLmMJV2VkIE1heSAzMSAyMDo1NDoyNiAyMDA2DQorQEAgLTM4LDE0 ICszOCwyMSBAQA0KKyBDT01fU3RyaXBFeHRlbnNpb24NCisgPT09PT09PT09PT09DQorICovDQor LXZvaWQgQ09NX1N0cmlwRXh0ZW5zaW9uKCBjb25zdCBjaGFyICppbiwgY2hhciAqb3V0ICkgew0K Ky0Jd2hpbGUgKCAqaW4gJiYgKmluICE9ICcuJyApIHsNCistCQkqb3V0KysgPSAqaW4rKzsNCisr dm9pZCBDT01fU3RyaXBFeHRlbnNpb24oIGNvbnN0IGNoYXIgKmluLCBjaGFyICpvdXQsIGludCBk ZXN0c2l6ZSApIHsNCisrCWludAlsZW5ndGg7DQorKw0KKysJUV9zdHJuY3B5eihvdXQsIGluLCBk ZXN0c2l6ZSk7DQorKw0KKysJbGVuZ3RoID0gc3RybGVuKG91dCktMTsNCisrCXdoaWxlIChsZW5n dGggPiAwICYmIG91dFtsZW5ndGhdICE9ICcuJykgew0KKysJCWxlbmd0aC0tOw0KKysJCWlmIChv dXRbbGVuZ3RoXSA9PSAnLycpDQorKwkJCXJldHVybjsJCS8vIG5vIGV4dGVuc2lvbg0KKyAJfQ0K Ky0JKm91dCA9IDA7DQorKwlpZiAobGVuZ3RoKQ0KKysJCW91dFtsZW5ndGhdID0gMDsNCisgfQ0K KyANCistDQorIC8qDQorID09PT09PT09PT09PT09PT09PQ0KKyBDT01fRGVmYXVsdEV4dGVuc2lv bg0KK0BAIC03OSwyOSArODYsMjggQEANCisgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgKi8N CistLyoNCisrDQorIC8vIGNhbid0IGp1c3QgdXNlIGZ1bmN0aW9uIHBvaW50ZXJzLCBvciBkbGwg bGlua2FnZSBjYW4NCisgLy8gbWVzcyB1cCB3aGVuIHFjb21tb24gaXMgaW5jbHVkZWQgaW4gbXVs dGlwbGUgcGxhY2VzDQorLXN0YXRpYyBzaG9ydAkoKl9CaWdTaG9ydCkgKHNob3J0IGwpOw0KKy1z dGF0aWMgc2hvcnQJKCpfTGl0dGxlU2hvcnQpIChzaG9ydCBsKTsNCistc3RhdGljIGludAkJKCpf QmlnTG9uZykgKGludCBsKTsNCistc3RhdGljIGludAkJKCpfTGl0dGxlTG9uZykgKGludCBsKTsN Cisrc3RhdGljIGludDE2X3QJKCpfQmlnU2hvcnQpIChpbnQxNl90IGwpOw0KKytzdGF0aWMgaW50 MTZfdAkoKl9MaXR0bGVTaG9ydCkgKGludDE2X3QgbCk7DQorK3N0YXRpYyBpbnQzMl90CSgqX0Jp Z0xvbmcpIChpbnQzMl90IGwpOw0KKytzdGF0aWMgaW50MzJfdAkoKl9MaXR0bGVMb25nKSAoaW50 MzJfdCBsKTsNCisgc3RhdGljIHFpbnQ2NAkoKl9CaWdMb25nNjQpIChxaW50NjQgbCk7DQorIHN0 YXRpYyBxaW50NjQJKCpfTGl0dGxlTG9uZzY0KSAocWludDY0IGwpOw0KKyBzdGF0aWMgZmxvYXQJ KCpfQmlnRmxvYXQpIChjb25zdCBmbG9hdCAqbCk7DQorIHN0YXRpYyBmbG9hdAkoKl9MaXR0bGVG bG9hdCkgKGNvbnN0IGZsb2F0ICpsKTsNCisgDQorLXNob3J0CUJpZ1Nob3J0KHNob3J0IGwpe3Jl dHVybiBfQmlnU2hvcnQobCk7fQ0KKy1zaG9ydAlMaXR0bGVTaG9ydChzaG9ydCBsKSB7cmV0dXJu IF9MaXR0bGVTaG9ydChsKTt9DQorLWludAkJQmlnTG9uZyAoaW50IGwpIHtyZXR1cm4gX0JpZ0xv bmcobCk7fQ0KKy1pbnQJCUxpdHRsZUxvbmcgKGludCBsKSB7cmV0dXJuIF9MaXR0bGVMb25nKGwp O30NCisraW50MTZfdAlCaWdTaG9ydChpbnQxNl90IGwpe3JldHVybiBfQmlnU2hvcnQobCk7fQ0K KytpbnQxNl90CUxpdHRsZVNob3J0KGludDE2X3QgbCkge3JldHVybiBfTGl0dGxlU2hvcnQobCk7 fQ0KKytpbnQzMl90CUJpZ0xvbmcgKGludDMyX3QgbCkge3JldHVybiBfQmlnTG9uZyhsKTt9DQor K2ludDMyX3QJTGl0dGxlTG9uZyAoaW50MzJfdCBsKSB7cmV0dXJuIF9MaXR0bGVMb25nKGwpO30N CisgcWludDY0IAlCaWdMb25nNjQgKHFpbnQ2NCBsKSB7cmV0dXJuIF9CaWdMb25nNjQobCk7fQ0K KyBxaW50NjQgCUxpdHRsZUxvbmc2NCAocWludDY0IGwpIHtyZXR1cm4gX0xpdHRsZUxvbmc2NChs KTt9DQorLWZsb2F0CUJpZ0Zsb2F0IChjb25zdCBmbG9hdCAqbCkge3JldHVybiBfQmlnRmxvYXQo bCk7fQ0KKy1mbG9hdAlMaXR0bGVGbG9hdCAoY29uc3QgZmxvYXQgKmwpIHtyZXR1cm4gX0xpdHRs ZUZsb2F0KGwpO30NCistKi8NCisrZmxvYXQJQmlnRmxvYXQgKGZsb2F0IGwpIHtyZXR1cm4gX0Jp Z0Zsb2F0KCZsKTt9DQorK2Zsb2F0CUxpdHRsZUZsb2F0IChmbG9hdCBsKSB7cmV0dXJuIF9MaXR0 bGVGbG9hdCgmbCk7fQ0KKyANCistc2hvcnQgICBTaG9ydFN3YXAgKHNob3J0IGwpDQorK2ludDE2 X3QJU2hvcnRTd2FwIChpbnQxNl90IGwpDQorIHsNCisgCWJ5dGUgICAgYjEsYjI7DQorIA0KK0BA IC0xMTEsMTIgKzExNywxMiBAQA0KKyAJcmV0dXJuIChiMTw8OCkgKyBiMjsNCisgfQ0KKyANCist c2hvcnQJU2hvcnROb1N3YXAgKHNob3J0IGwpDQorK2ludDE2X3QJU2hvcnROb1N3YXAgKGludDE2 X3QgbCkNCisgew0KKyAJcmV0dXJuIGw7DQorIH0NCisgDQorLWludCAgICBMb25nU3dhcCAoaW50 IGwpDQorK2ludDMyX3QJTG9uZ1N3YXAgKGludDMyX3QgbCkNCisgew0KKyAJYnl0ZSAgICBiMSxi MixiMyxiNDsNCisgDQorQEAgLTEyOCw3ICsxMzQsNyBAQA0KKyAJcmV0dXJuICgoaW50KWIxPDwy NCkgKyAoKGludCliMjw8MTYpICsgKChpbnQpYjM8PDgpICsgYjQ7DQorIH0NCisgDQorLWludAlM b25nTm9Td2FwIChpbnQgbCkNCisraW50MzJfdAlMb25nTm9Td2FwIChpbnQzMl90IGwpDQorIHsN CisgCXJldHVybiBsOw0KKyB9DQorQEAgLTE3OSw3ICsxODUsNyBAQA0KKyBTd2FwX0luaXQNCisg PT09PT09PT09PT09PT09PQ0KKyAqLw0KKy0vKg0KKysNCisgdm9pZCBTd2FwX0luaXQgKHZvaWQp DQorIHsNCisgCWJ5dGUJc3dhcHRlc3RbMl0gPSB7MSwwfTsNCitAQCAtMjA5LDcgKzIxNSw3IEBA DQorIAl9DQorIA0KKyB9DQorLSovDQorKw0KKyANCisgLyoNCisgPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KSW5kZXg6IGZpbGVzL3BhdGNoLWNvZGUtZ2FtZS1xX3NoYXJlZC5oDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpS Q1MgZmlsZTogL2hvbWUvcGN2cy9wb3J0cy9nYW1lcy9jbGVhbnEzL2ZpbGVzL3BhdGNoLWNvZGUt Z2FtZS1xX3NoYXJlZC5oLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xDQpkaWZmIC11IC1yMS4x IHBhdGNoLWNvZGUtZ2FtZS1xX3NoYXJlZC5oDQotIC0tLSBmaWxlcy9wYXRjaC1jb2RlLWdhbWUt cV9zaGFyZWQuaAkyMCBNYXIgMjAwNiAxNToyMToyNyAtMDAwMAkxLjENCisrKyBmaWxlcy9wYXRj aC1jb2RlLWdhbWUtcV9zaGFyZWQuaAk0IEp1biAyMDA2IDIxOjQ0OjAzIC0wMDAwDQpAQCAtMSw2 ICsxLDkyIEBADQotIC0tLS0gY29kZS9nYW1lL3Ffc2hhcmVkLmgub3JpZwlUdWUgQXVnIDE2IDAy OjEwOjA3IDIwMDUNCi0gLSsrKyBjb2RlL2dhbWUvcV9zaGFyZWQuaAlUdWUgQXVnIDIzIDE0OjE2 OjM0IDIwMDUNCi0gLUBAIC00NTIsMTMgKzQ1Miw5IEBADQorLS0tIC4vY29kZS9nYW1lL3Ffc2hh cmVkLmgub3JpZwlXZWQgTWF5IDMxIDIwOjUyOjA2IDIwMDYNCisrKysgLi9jb2RlL2dhbWUvcV9z aGFyZWQuaAlXZWQgTWF5IDMxIDIwOjU0OjMzIDIwMDYNCitAQCAtMTI2LDEyICsxMjYsMTQgQEAN CisgDQorICNkZWZpbmUgSURfSU5MSU5FIF9faW5saW5lIA0KKyANCisrI2lmIDANCisgc3RhdGlj IElEX0lOTElORSBzaG9ydCBCaWdTaG9ydCggc2hvcnQgbCkgeyByZXR1cm4gU2hvcnRTd2FwKGwp OyB9DQorICNkZWZpbmUgTGl0dGxlU2hvcnQNCisgc3RhdGljIElEX0lOTElORSBpbnQgQmlnTG9u ZyhpbnQgbCkgeyBMb25nU3dhcChsKTsgfQ0KKyAjZGVmaW5lIExpdHRsZUxvbmcNCisgc3RhdGlj IElEX0lOTElORSBmbG9hdCBCaWdGbG9hdChjb25zdCBmbG9hdCAqbCkgeyBGbG9hdFN3YXAobCk7 IH0NCisgI2RlZmluZSBMaXR0bGVGbG9hdA0KKysjZW5kaWYNCisgDQorICNkZWZpbmUJUEFUSF9T RVAgJ1xcJw0KKyANCitAQCAtMTgyLDEyICsxODQsMTQgQEANCisgICAgIHJldHVybiBmaTsNCisg fQ0KKyANCisrI2lmIDANCisgI2RlZmluZSBCaWdTaG9ydA0KKyBzdGF0aWMgaW5saW5lIHNob3J0 IExpdHRsZVNob3J0KHNob3J0IGwpIHsgcmV0dXJuIFNob3J0U3dhcChsKTsgfQ0KKyAjZGVmaW5l IEJpZ0xvbmcNCisgc3RhdGljIGlubGluZSBpbnQgTGl0dGxlTG9uZyAoaW50IGwpIHsgcmV0dXJu IExvbmdTd2FwKGwpOyB9DQorICNkZWZpbmUgQmlnRmxvYXQNCisgc3RhdGljIGlubGluZSBmbG9h dCBMaXR0bGVGbG9hdCAoY29uc3QgZmxvYXQgbCkgeyByZXR1cm4gRmxvYXRTd2FwKCZsKTsgfQ0K KysjZW5kaWYNCisgDQorICNlbmRpZg0KKyANCitAQCAtMjA1LDEyICsyMDksMTQgQEANCisgDQor IHZvaWQgU3lzX1B1bXBFdmVudHMoIHZvaWQgKTsNCisgDQorKyNpZiAwDQorICNkZWZpbmUgQmln U2hvcnQNCisgc3RhdGljIGlubGluZSBzaG9ydCBMaXR0bGVTaG9ydChzaG9ydCBsKSB7IHJldHVy biBTaG9ydFN3YXAobCk7IH0NCisgI2RlZmluZSBCaWdMb25nDQorIHN0YXRpYyBpbmxpbmUgaW50 IExpdHRsZUxvbmcgKGludCBsKSB7IHJldHVybiBMb25nU3dhcChsKTsgfQ0KKyAjZGVmaW5lIEJp Z0Zsb2F0DQorIHN0YXRpYyBpbmxpbmUgZmxvYXQgTGl0dGxlRmxvYXQgKGNvbnN0IGZsb2F0IGwp IHsgcmV0dXJuIEZsb2F0U3dhcCgmbCk7IH0NCisrI2VuZGlmDQorIA0KKyAjZW5kaWYNCisgDQor QEAgLTI0NCw2ICsyNTAsNyBAQA0KKyAjZGVmaW5lCUJPVExJQl9IQVJEX0xJTktFRA0KKyAjZW5k aWYNCisgDQorKyNpZiAwDQorICNpZiAhaWRwcGMNCisgaW5saW5lIHN0YXRpYyBzaG9ydCBCaWdT aG9ydCggc2hvcnQgbCkgeyByZXR1cm4gU2hvcnRTd2FwKGwpOyB9DQorICNkZWZpbmUgTGl0dGxl U2hvcnQNCitAQCAtMjU5LDYgKzI2Niw3IEBADQorICNkZWZpbmUgQmlnRmxvYXQNCisgaW5saW5l IHN0YXRpYyBmbG9hdCBMaXR0bGVGbG9hdCAoY29uc3QgZmxvYXQgKmwpIHsgcmV0dXJuIEZsb2F0 U3dhcChsKTsgfQ0KKyAjZW5kaWYNCisrI2VuZGlmDQorIA0KKyAjZW5kaWYNCisgDQorQEAgLTI4 MCw4ICsyODgsMTYgQEANCisgDQorICNkZWZpbmUJUEFUSF9TRVAgJy8nDQorIA0KKysjaW5jbHVk ZSA8bWFjaGluZS9wYXJhbS5oPg0KKysjaWYgX19GcmVlQlNEX3ZlcnNpb24gPCA1MDAwMDANCisr I2luY2x1ZGUgPGludHR5cGVzLmg+DQorKyNlbHNlDQorKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisr I2VuZGlmDQorKw0KKyAvLyBiazAxMDExNiAtIG9taXR0ZWQgUTNTVEFUSUMgKHNlZSBMaW51eCBh Ym92ZSksIGJyb2tlbiB0YXJnZXQNCisgDQorKyNpZiAwDQorICNpZiAhaWRwcGMNCisgc3RhdGlj IHNob3J0IEJpZ1Nob3J0KCBzaG9ydCBsKSB7IHJldHVybiBTaG9ydFN3YXAobCk7IH0NCisgI2Rl ZmluZSBMaXR0bGVTaG9ydA0KK0BAIC0yOTcsNiArMzEzLDcgQEANCisgI2RlZmluZSBCaWdGbG9h dA0KKyBzdGF0aWMgZmxvYXQgTGl0dGxlRmxvYXQgKGNvbnN0IGZsb2F0ICpsKSB7IHJldHVybiBG bG9hdFN3YXAobCk7IH0NCisgI2VuZGlmDQorKyNlbmRpZg0KKyANCisgI2VuZGlmDQorIA0KK0BA IC00MjgsMTMgKzQ0NSw5IEBADQogIHZvaWQgKkh1bmtfQWxsb2MoIGludCBzaXplLCBoYV9wcmVm IHByZWZlcmVuY2UgKTsNCiAgI2VuZGlmDQogIA0KQEAgLTE0LDMgKzEwMCw0MSBAQA0KICANCiAg I2lmICEoIGRlZmluZWQgX19WRUNUT1JDICkNCiAgdm9pZCBDb21fTWVtc2V0ICh2b2lkKiBkZXN0 LCBjb25zdCBpbnQgdmFsLCBjb25zdCBzaXplX3QgY291bnQpOw0KK0BAIC03NjMsNyArNzc2LDcg QEANCisgZmxvYXQgQ29tX0NsYW1wKCBmbG9hdCBtaW4sIGZsb2F0IG1heCwgZmxvYXQgdmFsdWUg KTsNCisgDQorIGNoYXIJKkNPTV9Ta2lwUGF0aCggY2hhciAqcGF0aG5hbWUgKTsNCistdm9pZAlD T01fU3RyaXBFeHRlbnNpb24oIGNvbnN0IGNoYXIgKmluLCBjaGFyICpvdXQgKTsNCisrdm9pZAlD T01fU3RyaXBFeHRlbnNpb24oIGNvbnN0IGNoYXIgKmluLCBjaGFyICpvdXQsIGludCBkZXN0c2l6 ZSApOw0KKyB2b2lkCUNPTV9EZWZhdWx0RXh0ZW5zaW9uKCBjaGFyICpwYXRoLCBpbnQgbWF4U2l6 ZSwgY29uc3QgY2hhciAqZXh0ZW5zaW9uICk7DQorIA0KKyB2b2lkCUNPTV9CZWdpblBhcnNlU2Vz c2lvbiggY29uc3QgY2hhciAqbmFtZSApOw0KK0BAIC04NjQsMTggKzg3NywxOCBAQA0KKyB9IHFp bnQ2NDsNCisgDQorIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQorLS8qDQorLXNob3J0CUJpZ1Nob3J0KHNob3J0IGwpOw0KKy1zaG9ydAlMaXR0bGVTaG9y dChzaG9ydCBsKTsNCistaW50CQlCaWdMb25nIChpbnQgbCk7DQorLWludAkJTGl0dGxlTG9uZyAo aW50IGwpOw0KKy1xaW50NjQgIEJpZ0xvbmc2NCAocWludDY0IGwpOw0KKy1xaW50NjQgIExpdHRs ZUxvbmc2NCAocWludDY0IGwpOw0KKy1mbG9hdAlCaWdGbG9hdCAoY29uc3QgZmxvYXQgKmwpOw0K Ky1mbG9hdAlMaXR0bGVGbG9hdCAoY29uc3QgZmxvYXQgKmwpOw0KKysNCisraW50MTZfdAlCaWdT aG9ydChpbnQxNl90IGwpOw0KKytpbnQxNl90CUxpdHRsZVNob3J0KGludDE2X3QgbCk7DQorK2lu dDMyX3QJQmlnTG9uZyAoaW50MzJfdCBsKTsNCisraW50MzJfdAlMaXR0bGVMb25nIChpbnQzMl90 IGwpOw0KKytxaW50NjQJQmlnTG9uZzY0IChxaW50NjQgbCk7DQorK3FpbnQ2NAlMaXR0bGVMb25n NjQgKHFpbnQ2NCBsKTsNCisrZmxvYXQJQmlnRmxvYXQgKGZsb2F0IGwpOw0KKytmbG9hdAlMaXR0 bGVGbG9hdCAoZmxvYXQgbCk7DQorIA0KKyB2b2lkCVN3YXBfSW5pdCAodm9pZCk7DQorLSovDQor Kw0KKyBjaGFyCSogUURFQ0wgdmEoY2hhciAqZm9ybWF0LCAuLi4pOw0KKyANCisgLy89PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkluZGV4OiBmaWxlcy9wYXRj aC1jb2RlLXEzX3VpLXVpX3BsYXllcm1vZGVsLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiBmaWxl cy9wYXRjaC1jb2RlLXEzX3VpLXVpX3BsYXllcm1vZGVsLmMNCmRpZmYgLU4gZmlsZXMvcGF0Y2gt Y29kZS1xM191aS11aV9wbGF5ZXJtb2RlbC5jDQotIC0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAw MDowMDowMCAtMDAwMA0KKysrIGZpbGVzL3BhdGNoLWNvZGUtcTNfdWktdWlfcGxheWVybW9kZWwu Ywk0IEp1biAyMDA2IDIxOjQ0OjAzIC0wMDAwDQpAQCAtMCwwICsxLDExIEBADQorLS0tIC4vY29k ZS9xM191aS91aV9wbGF5ZXJtb2RlbC5jLm9yaWcJV2VkIE1heSAzMSAyMDo1MjowNyAyMDA2DQor KysrIC4vY29kZS9xM191aS91aV9wbGF5ZXJtb2RlbC5jCVdlZCBNYXkgMzEgMjA6NTQ6NTAgMjAw Ng0KK0BAIC00MDQsNyArNDA0LDcgQEANCisgCQl7DQorIAkJCWZpbGVsZW4gPSBzdHJsZW4oZmls ZXB0cik7DQorIA0KKy0JCQlDT01fU3RyaXBFeHRlbnNpb24oZmlsZXB0cixza2lubmFtZSk7DQor KwkJCUNPTV9TdHJpcEV4dGVuc2lvbihmaWxlcHRyLCBza2lubmFtZSwgc2l6ZW9mKHNraW5uYW1l KSk7DQorIA0KKyAJCQkvLyBsb29rIGZvciBpY29uXz8/Pz8NCisgCQkJaWYgKCFRX3N0cmljbXBu KHNraW5uYW1lLCJpY29uXyIsNSkpDQpJbmRleDogZmlsZXMvcGF0Y2gtY29kZS1xM191aS11aV9w bGF5ZXJzLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiBmaWxlcy9wYXRjaC1jb2RlLXEzX3VpLXVp X3BsYXllcnMuYw0KZGlmZiAtTiBmaWxlcy9wYXRjaC1jb2RlLXEzX3VpLXVpX3BsYXllcnMuYw0K LSAtLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDANCisrKyBmaWxlcy9wYXRj aC1jb2RlLXEzX3VpLXVpX3BsYXllcnMuYwk0IEp1biAyMDA2IDIxOjQ0OjAzIC0wMDAwDQpAQCAt MCwwICsxLDE4IEBADQorLS0tIC4vY29kZS9xM191aS91aV9wbGF5ZXJzLmMub3JpZwlXZWQgTWF5 IDMxIDIwOjUyOjA3IDIwMDYNCisrKysgLi9jb2RlL3EzX3VpL3VpX3BsYXllcnMuYwlXZWQgTWF5 IDMxIDIwOjU1OjA1IDIwMDYNCitAQCAtNjksMTMgKzY5LDEzIEBADQorIA0KKyAJaWYgKCB3ZWFw b25OdW0gPT0gV1BfTUFDSElORUdVTiB8fCB3ZWFwb25OdW0gPT0gV1BfR0FVTlRMRVQgfHwgd2Vh cG9uTnVtID09IFdQX0JGRyApIHsNCisgCQlzdHJjcHkoIHBhdGgsIGl0ZW0tPndvcmxkX21vZGVs WzBdICk7DQorLQkJQ09NX1N0cmlwRXh0ZW5zaW9uKCBwYXRoLCBwYXRoICk7DQorKwkJQ09NX1N0 cmlwRXh0ZW5zaW9uKCBwYXRoLCBwYXRoLCBzaXplb2YocGF0aCkgKTsNCisgCQlzdHJjYXQoIHBh dGgsICJfYmFycmVsLm1kMyIgKTsNCisgCQlwaS0+YmFycmVsTW9kZWwgPSB0cmFwX1JfUmVnaXN0 ZXJNb2RlbCggcGF0aCApOw0KKyAJfQ0KKyANCisgCXN0cmNweSggcGF0aCwgaXRlbS0+d29ybGRf bW9kZWxbMF0gKTsNCistCUNPTV9TdHJpcEV4dGVuc2lvbiggcGF0aCwgcGF0aCApOw0KKysJQ09N X1N0cmlwRXh0ZW5zaW9uKCBwYXRoLCBwYXRoLCBzaXplb2YocGF0aCkgKTsNCisgCXN0cmNhdCgg cGF0aCwgIl9mbGFzaC5tZDMiICk7DQorIAlwaS0+Zmxhc2hNb2RlbCA9IHRyYXBfUl9SZWdpc3Rl ck1vZGVsKCBwYXRoICk7DQorIA0KSW5kZXg6IGZpbGVzL3BhdGNoLWNvZGUtcTNfdWktdWlfc2F2 ZWNvbmZpZy5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogZmlsZXMvcGF0Y2gtY29kZS1xM191aS11 aV9zYXZlY29uZmlnLmMNCmRpZmYgLU4gZmlsZXMvcGF0Y2gtY29kZS1xM191aS11aV9zYXZlY29u ZmlnLmMNCi0gLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwDQorKysgZmls ZXMvcGF0Y2gtY29kZS1xM191aS11aV9zYXZlY29uZmlnLmMJNCBKdW4gMjAwNiAyMTo0NDowMyAt MDAwMA0KQEAgLTAsMCArMSwxMSBAQA0KKy0tLSAuL2NvZGUvcTNfdWkvdWlfc2F2ZWNvbmZpZy5j Lm9yaWcJV2VkIE1heSAzMSAyMDo1MjowNyAyMDA2DQorKysrIC4vY29kZS9xM191aS91aV9zYXZl Y29uZmlnLmMJV2VkIE1heSAzMSAyMDo1NToxNSAyMDA2DQorQEAgLTg1LDcgKzg1LDcgQEANCisg CQlyZXR1cm47DQorIAl9DQorIA0KKy0JQ09NX1N0cmlwRXh0ZW5zaW9uKHNhdmVDb25maWcuc2F2 ZW5hbWUuZmllbGQuYnVmZmVyLCBjb25maWduYW1lICk7DQorKwlDT01fU3RyaXBFeHRlbnNpb24o c2F2ZUNvbmZpZy5zYXZlbmFtZS5maWVsZC5idWZmZXIsIGNvbmZpZ25hbWUsIHNpemVvZihjb25m aWduYW1lKSApOw0KKyAJdHJhcF9DbWRfRXhlY3V0ZVRleHQoIEVYRUNfQVBQRU5ELCB2YSggIndy aXRlY29uZmlnICVzLmNmZ1xuIiwgY29uZmlnbmFtZSApICk7DQorIAlVSV9Qb3BNZW51KCk7DQor IH0NCkluZGV4OiBmaWxlcy9wYXRjaC1jb2RlLXFjb21tb24tY29tbW9uLmMNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N ClJDUyBmaWxlOiAvaG9tZS9wY3ZzL3BvcnRzL2dhbWVzL2NsZWFucTMvZmlsZXMvcGF0Y2gtY29k ZS1xY29tbW9uLWNvbW1vbi5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xDQpkaWZmIC11IC1y MS4xIHBhdGNoLWNvZGUtcWNvbW1vbi1jb21tb24uYw0KLSAtLS0gZmlsZXMvcGF0Y2gtY29kZS1x Y29tbW9uLWNvbW1vbi5jCTIwIE1hciAyMDA2IDE1OjIxOjI3IC0wMDAwCTEuMQ0KKysrIGZpbGVz L3BhdGNoLWNvZGUtcWNvbW1vbi1jb21tb24uYwk0IEp1biAyMDA2IDIxOjQ0OjAzIC0wMDAwDQpA QCAtMSwxNSArMSwxNSBAQA0KLSAtLS0tIGNvZGUvcWNvbW1vbi9jb21tb24uYy5vcmlnCU1vbiBB dWcgMTUgMjM6MTA6MDcgMjAwNQ0KLSAtKysrIGNvZGUvcWNvbW1vbi9jb21tb24uYwlXZWQgTm92 IDIzIDEwOjUzOjI5IDIwMDUNCistLS0gLi9jb2RlL3Fjb21tb24vY29tbW9uLmMub3JpZwlXZWQg TWF5IDMxIDIwOjUyOjA3IDIwMDYNCisrKysgLi9jb2RlL3Fjb21tb24vY29tbW9uLmMJV2VkIE1h eSAzMSAyMDo1MjowOSAyMDA2DQogQEAgLTI0LDE1ICsyNCw4IEBADQogICNpbmNsdWRlICIuLi9n YW1lL3Ffc2hhcmVkLmgiDQogICNpbmNsdWRlICJxY29tbW9uLmgiDQogICNpbmNsdWRlIDxzZXRq bXAuaD4NCiAtI2lmZGVmIF9fbGludXhfXw0KLSAtKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCi0g LSAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPg0KKy0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPg0KIC0j ZWxzZQ0KIC0jaWYgZGVmaW5lZChNQUNPU19YKQ0KLSAtLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+ DQorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCiAt I2Vsc2UNCiAtI2luY2x1ZGUgPHdpbnNvY2suaD4NCiAtI2VuZGlmDQpAQCAtMTcsMyArMTcsMTIg QEANCiAgDQogIGludCBkZW1vX3Byb3RvY29sc1tdID0NCiAgeyA2NiwgNjcsIDY4LCAwIH07DQor QEAgLTIzNjcsNyArMjM2MCw3IEBADQorIAkvLyBjdmFyIGFuZCBjb21tYW5kIGJ1ZmZlciBtYW5h Z2VtZW50DQorIAlDb21fUGFyc2VDb21tYW5kTGluZSggY29tbWFuZExpbmUgKTsNCisgDQorLS8v CVN3YXBfSW5pdCAoKTsNCisrCVN3YXBfSW5pdCAoKTsNCisgCUNidWZfSW5pdCAoKTsNCisgDQor IAlDb21fSW5pdFpvbmVNZW1vcnkoKTsNCkluZGV4OiBmaWxlcy9wYXRjaC1jb2RlLXFjb21tb24t dm0uYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IGZpbGVzL3BhdGNoLWNvZGUtcWNvbW1vbi12bS5j DQpkaWZmIC1OIGZpbGVzL3BhdGNoLWNvZGUtcWNvbW1vbi12bS5jDQotIC0tLSAvZGV2L251bGwJ MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMA0KKysrIGZpbGVzL3BhdGNoLWNvZGUtcWNvbW1vbi12 bS5jCTQgSnVuIDIwMDYgMjE6NDQ6MDMgLTAwMDANCkBAIC0wLDAgKzEsMjkgQEANCistLS0gY29k ZS9xY29tbW9uL3ZtLmMub3JpZwlXZWQgTWF5IDMxIDIzOjE4OjQxIDIwMDYNCisrKysgY29kZS9x Y29tbW9uL3ZtLmMJV2VkIE1heSAzMSAyMzoxOTo0MyAyMDA2DQorQEAgLTIyNSw3ICsyMjUsNyBA QA0KKyAJCXJldHVybjsNCisgCX0NCisgDQorLQlDT01fU3RyaXBFeHRlbnNpb24oIHZtLT5uYW1l LCBuYW1lICk7DQorKwlDT01fU3RyaXBFeHRlbnNpb24oIHZtLT5uYW1lLCBuYW1lLCBzaXplb2Yo bmFtZSkgKTsNCisgCUNvbV9zcHJpbnRmKCBzeW1ib2xzLCBzaXplb2YoIHN5bWJvbHMgKSwgInZt LyVzLm1hcCIsIG5hbWUgKTsNCisgCWxlbiA9IEZTX1JlYWRGaWxlKCBzeW1ib2xzLCAodm9pZCAq KikmbWFwZmlsZSApOw0KKyAJaWYgKCAhbWFwZmlsZSApIHsNCitAQCAtNDc4LDcgKzQ3OCw3IEBA DQorIAkJfQ0KKyAJfQ0KKyANCistCWlmICggaW50ZXJwcmV0ID09IFZNSV9OQVRJVkUgKSB7DQor KwlpZiAoIDEgKSB7DQorIAkJLy8gdHJ5IHRvIGxvYWQgYXMgYSBzeXN0ZW0gZGxsDQorIAkJQ29t X1ByaW50ZiggIkxvYWRpbmcgZGxsIGZpbGUgJXMuXG4iLCB2bS0+bmFtZSApOw0KKyAJCXZtLT5k bGxIYW5kbGUgPSBTeXNfTG9hZERsbCggbW9kdWxlLCB2bS0+ZnFwYXRoICwgJnZtLT5lbnRyeVBv aW50LCBWTV9EbGxTeXNjYWxsICk7DQorQEAgLTgyNiw3ICs4MjYsNyBAQA0KKyANCisgDQorIA0K Ky0jaWZkZWYgb0RMTF9PTkxZIC8vIGJrMDEwMjE1IC0gZm9yIERMTF9PTkxZIGRlZGljYXRlZCBz ZXJ2ZXJzL2J1aWxkcyB3L28gVk0NCisrI2lmZGVmIERMTF9PTkxZIC8vIGJrMDEwMjE1IC0gZm9y IERMTF9PTkxZIGRlZGljYXRlZCBzZXJ2ZXJzL2J1aWxkcyB3L28gVk0NCisgaW50CVZNX0NhbGxD b21waWxlZCggdm1fdCAqdm0sIGludCAqYXJncyApIHsNCisgICByZXR1cm4oMCk7IA0KKyB9DQpJ bmRleDogZmlsZXMvcGF0Y2gtY29kZS1yZW5kZXJlci10cl9ic3AuYw0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNT IGZpbGU6IGZpbGVzL3BhdGNoLWNvZGUtcmVuZGVyZXItdHJfYnNwLmMNCmRpZmYgLU4gZmlsZXMv cGF0Y2gtY29kZS1yZW5kZXJlci10cl9ic3AuYw0KLSAtLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAg MDA6MDA6MDAgLTAwMDANCisrKyBmaWxlcy9wYXRjaC1jb2RlLXJlbmRlcmVyLXRyX2JzcC5jCTQg SnVuIDIwMDYgMjE6NDQ6MDMgLTAwMDANCkBAIC0wLDAgKzEsMTEgQEANCistLS0gLi9jb2RlL3Jl bmRlcmVyL3RyX2JzcC5jLm9yaWcJV2VkIE1heSAzMSAyMDo1MjowNyAyMDA2DQorKysrIC4vY29k ZS9yZW5kZXJlci90cl9ic3AuYwlXZWQgTWF5IDMxIDIwOjU1OjQ3IDIwMDYNCitAQCAtMTgyMCw3 ICsxODIwLDcgQEANCisgCVFfc3RybmNweXooIHNfd29ybGREYXRhLm5hbWUsIG5hbWUsIHNpemVv Ziggc193b3JsZERhdGEubmFtZSApICk7DQorIA0KKyAJUV9zdHJuY3B5eiggc193b3JsZERhdGEu YmFzZU5hbWUsIENPTV9Ta2lwUGF0aCggc193b3JsZERhdGEubmFtZSApLCBzaXplb2YoIHNfd29y bGREYXRhLm5hbWUgKSApOw0KKy0JQ09NX1N0cmlwRXh0ZW5zaW9uKCBzX3dvcmxkRGF0YS5iYXNl TmFtZSwgc193b3JsZERhdGEuYmFzZU5hbWUgKTsNCisrCUNPTV9TdHJpcEV4dGVuc2lvbiggc193 b3JsZERhdGEuYmFzZU5hbWUsIHNfd29ybGREYXRhLmJhc2VOYW1lLCBzaXplb2Yoc193b3JsZERh dGEuYmFzZU5hbWUpICk7DQorIA0KKyAJc3RhcnRNYXJrZXIgPSByaS5IdW5rX0FsbG9jKDAsIGhf bG93KTsNCisgCWNfZ3JpZFZlcnRzID0gMDsNCkluZGV4OiBmaWxlcy9wYXRjaC1jb2RlLXJlbmRl cmVyLXRyX3NoYWRlci5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogZmlsZXMvcGF0Y2gtY29kZS1y ZW5kZXJlci10cl9zaGFkZXIuYw0KZGlmZiAtTiBmaWxlcy9wYXRjaC1jb2RlLXJlbmRlcmVyLXRy X3NoYWRlci5jDQotIC0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMA0KKysr IGZpbGVzL3BhdGNoLWNvZGUtcmVuZGVyZXItdHJfc2hhZGVyLmMJNCBKdW4gMjAwNiAyMTo0NDow MyAtMDAwMA0KQEAgLTAsMCArMSwyOSBAQA0KKy0tLSAuL2NvZGUvcmVuZGVyZXIvdHJfc2hhZGVy LmMub3JpZwlXZWQgTWF5IDMxIDIwOjUyOjA4IDIwMDYNCisrKysgLi9jb2RlL3JlbmRlcmVyL3Ry X3NoYWRlci5jCVdlZCBNYXkgMzEgMjA6NTY6MjAgMjAwNg0KK0BAIC05OSw3ICs5OSw3IEBADQor IA0KKyAJLy8gcmVtYXAgYWxsIHRoZSBzaGFkZXJzIHdpdGggdGhlIGdpdmVuIG5hbWUNCisgCS8v IGV2ZW4gdGhvIHRoZXkgbWlnaHQgaGF2ZSBkaWZmZXJlbnQgbGlnaHRtYXBzDQorLQlDT01fU3Ry aXBFeHRlbnNpb24oIHNoYWRlck5hbWUsIHN0cmlwcGVkTmFtZSApOw0KKysJQ09NX1N0cmlwRXh0 ZW5zaW9uKCBzaGFkZXJOYW1lLCBzdHJpcHBlZE5hbWUsIHNpemVvZihzdHJpcHBlZE5hbWUpICk7 DQorIAloYXNoID0gZ2VuZXJhdGVIYXNoVmFsdWUoc3RyaXBwZWROYW1lLCBGSUxFX0hBU0hfU0la RSk7DQorIAlmb3IgKHNoID0gaGFzaFRhYmxlW2hhc2hdOyBzaDsgc2ggPSBzaC0+bmV4dCkgew0K KyAJCWlmIChRX3N0cmljbXAoc2gtPm5hbWUsIHN0cmlwcGVkTmFtZSkgPT0gMCkgew0KK0BAIC0y MzY4LDcgKzIzNjgsNyBAQA0KKyAJCXJldHVybiB0ci5kZWZhdWx0U2hhZGVyOw0KKyAJfQ0KKyAN CistCUNPTV9TdHJpcEV4dGVuc2lvbiggbmFtZSwgc3RyaXBwZWROYW1lICk7DQorKwlDT01fU3Ry aXBFeHRlbnNpb24oIG5hbWUsIHN0cmlwcGVkTmFtZSwgc2l6ZW9mKHN0cmlwcGVkTmFtZSkgKTsN CisgDQorIAloYXNoID0gZ2VuZXJhdGVIYXNoVmFsdWUoc3RyaXBwZWROYW1lLCBGSUxFX0hBU0hf U0laRSk7DQorIA0KK0BAIC0yNDM2LDcgKzI0MzYsNyBAQA0KKyAJCWxpZ2h0bWFwSW5kZXggPSBM SUdIVE1BUF9CWV9WRVJURVg7DQorIAl9DQorIA0KKy0JQ09NX1N0cmlwRXh0ZW5zaW9uKCBuYW1l LCBzdHJpcHBlZE5hbWUgKTsNCisrCUNPTV9TdHJpcEV4dGVuc2lvbiggbmFtZSwgc3RyaXBwZWRO YW1lLCBzaXplb2Yoc3RyaXBwZWROYW1lKSApOw0KKyANCisgCWhhc2ggPSBnZW5lcmF0ZUhhc2hW YWx1ZShzdHJpcHBlZE5hbWUsIEZJTEVfSEFTSF9TSVpFKTsNCisgDQpJbmRleDogZmlsZXMvcGF0 Y2gtY29kZS1zZXJ2ZXItc3ZfY2xpZW50LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiBmaWxlcy9w YXRjaC1jb2RlLXNlcnZlci1zdl9jbGllbnQuYw0KZGlmZiAtTiBmaWxlcy9wYXRjaC1jb2RlLXNl cnZlci1zdl9jbGllbnQuYw0KLSAtLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAw MDANCisrKyBmaWxlcy9wYXRjaC1jb2RlLXNlcnZlci1zdl9jbGllbnQuYwk0IEp1biAyMDA2IDIx OjQ0OjAzIC0wMDAwDQpAQCAtMCwwICsxLDczIEBADQorLS0tIGNvZGUvc2VydmVyL3N2X2NsaWVu dC5jLm9yaWcJVGh1IEp1biAgMSAxNDo1MDoyMSAyMDA2DQorKysrIGNvZGUvc2VydmVyL3N2X2Ns aWVudC5jCVRodSBKdW4gIDEgMTU6MTk6MjkgMjAwNg0KK0BAIC03NTYsMjQgKzc1Niw1NCBAQA0K KyAJaW50IGN1cmluZGV4Ow0KKyAJaW50IHJhdGU7DQorIAlpbnQgYmxvY2tzcGVyc25hcDsNCist CWludCBpZFBhY2ssIG1pc3Npb25QYWNrOw0KKysJaW50IGlkUGFjaywgbWlzc2lvblBhY2ssIHVu cmVmZXJlbmNlZCA9IDE7DQorIAljaGFyIGVycm9yTWVzc2FnZVsxMDI0XTsNCisrCWNoYXIgcGFr YnVmW01BWF9PU1BBVEhdLCAqcGFrcHRyOw0KKysJY29uc3QgY2hhciAqcmVmZXJlbmNlZFBha3M7 DQorKwlpbnQgbnVtUmVmUGFrczsNCisgDQorIAlpZiAoISpjbC0+ZG93bmxvYWROYW1lKQ0KKyAJ CXJldHVybjsJLy8gTm90aGluZyBiZWluZyBkb3dubG9hZGVkDQorIA0KKyAJaWYgKCFjbC0+ZG93 bmxvYWQpIHsNCistCQkvLyBXZSBvcGVuIHRoZSBmaWxlIGhlcmUNCisrCQkvLyBDaG9wIG9mZiBm aWxlbmFtZSBleHRlbnNpb24uDQorKwkJQ29tX3NwcmludGYocGFrYnVmLCBzaXplb2YocGFrYnVm KSwgIiVzIiwgY2wtPmRvd25sb2FkTmFtZSk7DQorKwkJcGFrcHRyID0gUV9zdHJyY2hyKHBha2J1 ZiwgJy4nKTsNCisgDQorLQkJQ29tX1ByaW50ZiggImNsaWVudERvd25sb2FkOiAlZCA6IGJlZ2lu aW5nIFwiJXNcIlxuIiwgY2wgLSBzdnMuY2xpZW50cywgY2wtPmRvd25sb2FkTmFtZSApOw0KKysJ CWlmIChwYWtwdHIpIHsNCisrCQkJKnBha3B0ciA9ICdcMCc7DQorIA0KKy0JCW1pc3Npb25QYWNr ID0gRlNfaWRQYWsoY2wtPmRvd25sb2FkTmFtZSwgIm1pc3Npb25wYWNrIik7DQorLQkJaWRQYWNr ID0gbWlzc2lvblBhY2sgfHwgRlNfaWRQYWsoY2wtPmRvd25sb2FkTmFtZSwgImJhc2VxMyIpOw0K KysJCQkvLyBDaGVjayBmb3IgcGszIGZpbGVuYW1lIGV4dGVuc2lvbg0KKysJCQlpZiAoIVFfc3Ry aWNtcChwYWtwdHIgKyAxLCAicGszIikpIHsNCisrCQkJCXJlZmVyZW5jZWRQYWtzID0gRlNfUmVm ZXJlbmNlZFBha05hbWVzKCk7DQorIA0KKy0JCWlmICggIXN2X2FsbG93RG93bmxvYWQtPmludGVn ZXIgfHwgaWRQYWNrIHx8DQorKwkJCQkvLyBDaGVjayB3aGV0aGVyIHRoZSBmaWxlIGFwcGVhcnMg aW4gdGhlIGxpc3Qgb2YgcmVmZXJlbmNlZA0KKysJCQkJLy8gcGFrcyB0byBwcmV2ZW50IGRvd25s b2FkaW5nIG9mIGFyYml0cmFyeSBmaWxlcy4NCisrCQkJCUNtZF9Ub2tlbml6ZVN0cmluZyhyZWZl cmVuY2VkUGFrcyk7DQorKwkJCQludW1SZWZQYWtzID0gQ21kX0FyZ2MoKTsNCisrDQorKwkJCQlm b3IgKGN1cmluZGV4ID0gMDsgY3VyaW5kZXggPCBudW1SZWZQYWtzOyBjdXJpbmRleCsrKSB7DQor KwkJCQkJaWYgKCFGU19GaWxlbmFtZUNvbXBhcmUoQ21kX0FyZ3YoY3VyaW5kZXgpLCBwYWtidWYp KSB7DQorKwkJCQkJCXVucmVmZXJlbmNlZCA9IDA7DQorKw0KKysJCQkJCQkvLyBub3cgdGhhdCB3 ZSBrbm93IHRoZSBmaWxlIGlzIHJlZmVyZW5jZWQsDQorKwkJCQkJCS8vIGNoZWNrIHdoZXRoZXIg aXQncyBsZWdhbCB0byBkb3dubG9hZCBpdC4NCisrCQkJCQkJbWlzc2lvblBhY2sgPSBGU19pZFBh ayhwYWtidWYsICJtaXNzaW9ucGFjayIpOw0KKysJCQkJCQlpZFBhY2sgPSBtaXNzaW9uUGFjayB8 fCBGU19pZFBhayhwYWtidWYsIEJBU0VHQU1FKTsNCisrDQorKwkJCQkJCWJyZWFrOw0KKysJCQkJ CX0NCisrCQkJCX0NCisrCQkJfQ0KKysJCX0NCisrDQorKwkJLy8gV2Ugb3BlbiB0aGUgZmlsZSBo ZXJlDQorKwkJaWYgKCAhc3ZfYWxsb3dEb3dubG9hZC0+aW50ZWdlciB8fCBpZFBhY2sgfHwgdW5y ZWZlcmVuY2VkIHx8DQorIAkJCSggY2wtPmRvd25sb2FkU2l6ZSA9IEZTX1NWX0ZPcGVuRmlsZVJl YWQoIGNsLT5kb3dubG9hZE5hbWUsICZjbC0+ZG93bmxvYWQgKSApIDw9IDAgKSB7DQorIAkJCS8v IGNhbm5vdCBhdXRvLWRvd25sb2FkIGZpbGUNCistCQkJaWYgKGlkUGFjaykgew0KKysJCQlpZiAo dW5yZWZlcmVuY2VkKSB7DQorKwkJCQlDb21fc3ByaW50ZihlcnJvck1lc3NhZ2UsIHNpemVvZihl cnJvck1lc3NhZ2UpLCAiRmlsZSBcIiVzXCIgaXMgbm90IHJlZmVyZW5jZWQgYW5kIGNhbm5vdCBi ZSBkb3dubG9hZGVkLiIsIGNsLT5kb3dubG9hZE5hbWUpOw0KKysJCQl9IGVsc2UgaWYgKGlkUGFj aykgew0KKyAJCQkJQ29tX1ByaW50ZigiY2xpZW50RG93bmxvYWQ6ICVkIDogXCIlc1wiIGNhbm5v dCBkb3dubG9hZCBpZCBwazMgZmlsZXNcbiIsIGNsIC0gc3ZzLmNsaWVudHMsIGNsLT5kb3dubG9h ZE5hbWUpOw0KKyAJCQkJaWYgKG1pc3Npb25QYWNrKSB7DQorIAkJCQkJQ29tX3NwcmludGYoZXJy b3JNZXNzYWdlLCBzaXplb2YoZXJyb3JNZXNzYWdlKSwgIkNhbm5vdCBhdXRvZG93bmxvYWQgVGVh bSBBcmVuYSBmaWxlIFwiJXNcIlxuIg0KK0BAIC04MDksNiArODM5LDggQEANCisgCQkJcmV0dXJu Ow0KKyAJCX0NCisgIA0KKysJCUNvbV9QcmludGYoICJjbGllbnREb3dubG9hZDogJWQgOiBiZWdp bm5pbmcgXCIlc1wiXG4iLCBjbCAtIHN2cy5jbGllbnRzLCBjbC0+ZG93bmxvYWROYW1lICk7DQor Kw0KKyAJCS8vIEluaXQNCisgCQljbC0+ZG93bmxvYWRDdXJyZW50QmxvY2sgPSBjbC0+ZG93bmxv YWRDbGllbnRCbG9jayA9IGNsLT5kb3dubG9hZFhtaXRCbG9jayA9IDA7DQorIAkJY2wtPmRvd25s b2FkQ291bnQgPSAwOw0KSW5kZXg6IGZpbGVzL3BhdGNoLWNvZGUtdWktdWlfbWFpbi5jDQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQpSQ1MgZmlsZTogZmlsZXMvcGF0Y2gtY29kZS11aS11aV9tYWluLmMNCmRpZmYgLU4g ZmlsZXMvcGF0Y2gtY29kZS11aS11aV9tYWluLmMNCi0gLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcw IDAwOjAwOjAwIC0wMDAwDQorKysgZmlsZXMvcGF0Y2gtY29kZS11aS11aV9tYWluLmMJNCBKdW4g MjAwNiAyMTo0NDowMyAtMDAwMA0KQEAgLTAsMCArMSwxMSBAQA0KKy0tLSAuL2NvZGUvdWkvdWlf bWFpbi5jLm9yaWcJV2VkIE1heSAzMSAyMDo1MjowOCAyMDA2DQorKysrIC4vY29kZS91aS91aV9t YWluLmMJV2VkIE1heSAzMSAyMDo1NjoyOSAyMDA2DQorQEAgLTQ5NzEsNyArNDk3MSw3IEBADQor IAkJew0KKyAJCQlmaWxlbGVuID0gc3RybGVuKGZpbGVwdHIpOw0KKyANCistCQkJQ09NX1N0cmlw RXh0ZW5zaW9uKGZpbGVwdHIsc2tpbm5hbWUpOw0KKysJCQlDT01fU3RyaXBFeHRlbnNpb24oZmls ZXB0ciwgc2tpbm5hbWUsIHNpemVvZihza2lubmFtZSkpOw0KKyANCisgCQkJLy8gbG9vayBmb3Ig aWNvbl8/Pz8/DQorIAkJCWlmIChRX3N0cmljbXBuKHNraW5uYW1lLCAiaWNvbl8iLCA1KSA9PSAw ICYmICEoUV9zdHJpY21wKHNraW5uYW1lLCJpY29uX2JsdWUiKSA9PSAwIHx8IFFfc3RyaWNtcChz a2lubmFtZSwiaWNvbl9yZWQiKSA9PSAwKSkNCkluZGV4OiBmaWxlcy9wYXRjaC1jb2RlLXVpLXVp X3BsYXllcnMuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IGZpbGVzL3BhdGNoLWNvZGUtdWktdWlf cGxheWVycy5jDQpkaWZmIC1OIGZpbGVzL3BhdGNoLWNvZGUtdWktdWlfcGxheWVycy5jDQotIC0t LSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMA0KKysrIGZpbGVzL3BhdGNoLWNv ZGUtdWktdWlfcGxheWVycy5jCTQgSnVuIDIwMDYgMjE6NDQ6MDMgLTAwMDANCkBAIC0wLDAgKzEs MTggQEANCistLS0gLi9jb2RlL3VpL3VpX3BsYXllcnMuYy5vcmlnCVdlZCBNYXkgMzEgMjA6NTI6 MDggMjAwNg0KKysrKyAuL2NvZGUvdWkvdWlfcGxheWVycy5jCVdlZCBNYXkgMzEgMjA6NTY6NDcg MjAwNg0KK0BAIC03MCwxMyArNzAsMTMgQEANCisgDQorIAlpZiAoIHdlYXBvbk51bSA9PSBXUF9N QUNISU5FR1VOIHx8IHdlYXBvbk51bSA9PSBXUF9HQVVOVExFVCB8fCB3ZWFwb25OdW0gPT0gV1Bf QkZHICkgew0KKyAJCXN0cmNweSggcGF0aCwgaXRlbS0+d29ybGRfbW9kZWxbMF0gKTsNCistCQlD T01fU3RyaXBFeHRlbnNpb24oIHBhdGgsIHBhdGggKTsNCisrCQlDT01fU3RyaXBFeHRlbnNpb24o IHBhdGgsIHBhdGgsIHNpemVvZihwYXRoKSApOw0KKyAJCXN0cmNhdCggcGF0aCwgIl9iYXJyZWwu bWQzIiApOw0KKyAJCXBpLT5iYXJyZWxNb2RlbCA9IHRyYXBfUl9SZWdpc3Rlck1vZGVsKCBwYXRo ICk7DQorIAl9DQorIA0KKyAJc3RyY3B5KCBwYXRoLCBpdGVtLT53b3JsZF9tb2RlbFswXSApOw0K Ky0JQ09NX1N0cmlwRXh0ZW5zaW9uKCBwYXRoLCBwYXRoICk7DQorKwlDT01fU3RyaXBFeHRlbnNp b24oIHBhdGgsIHBhdGgsIHNpemVvZihwYXRoKSApOw0KKyAJc3RyY2F0KCBwYXRoLCAiX2ZsYXNo Lm1kMyIgKTsNCisgCXBpLT5mbGFzaE1vZGVsID0gdHJhcF9SX1JlZ2lzdGVyTW9kZWwoIHBhdGgg KTsNCisgDQpJbmRleDogZmlsZXMvcGF0Y2gtY29kZS11bml4LUNvbnNjcmlwdC1jbGllbnQNCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NClJDUyBmaWxlOiBmaWxlcy9wYXRjaC1jb2RlLXVuaXgtQ29uc2NyaXB0LWNsaWVu dA0KZGlmZiAtTiBmaWxlcy9wYXRjaC1jb2RlLXVuaXgtQ29uc2NyaXB0LWNsaWVudA0KLSAtLS0g ZmlsZXMvcGF0Y2gtY29kZS11bml4LUNvbnNjcmlwdC1jbGllbnQJMjAgTWFyIDIwMDYgMTU6MjE6 MjcgLTAwMDAJMS4xDQorKysgL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDANCkBA IC0xLDI2ICswLDAgQEANCi0gLS0tLSBjb2RlL3VuaXgvQ29uc2NyaXB0LWNsaWVudC5vcmlnCUZy aSBNYXIgMTcgMTM6NTA6MTggMjAwNg0KLSAtKysrIGNvZGUvdW5peC9Db25zY3JpcHQtY2xpZW50 CUZyaSBNYXIgMTcgMTM6NTA6NDAgMjAwNg0KLSAtQEAgLTE0NywxMyArMTQ3LDEzIEBADQotIC0g ICBMSU5LID0+ICRMSU5LLA0KLSAtIAlFTlYgPT4geyBQQVRIID0+ICRFTlZ7UEFUSH0sIEhPTUUg PT4gJEVOVntIT01FfSB9LA0KLSAtICAgQ0ZMQUdTID0+ICRCQVNFX0NGTEFHUywNCi0gLS0gIExJ QlMgPT4gJyAnIC4gJEJVSUxEX0RJUiAuICcvdW5peC9zcGxpbmVzLmEgJyANCi0gLSsgIExJQlMg PT4gJyAnDQotIC0gICAuICRCVUlMRF9ESVIgLiAnL3VuaXgvYm90bGliLmEgJyANCi0gLSAgIC4g JEJVSUxEX0RJUiAuICcvdW5peC9qcGVnbGliLmEgJw0KLSAtICAgLiAkQlVJTERfRElSIC4gJy91 bml4L2FzbWxpYi5hICcNCi0gLSAgIC4gJEJVSUxEX0RJUiAuICcvdW5peC9pbmxpbmVsaWIuYSAn DQotIC0gCS4gJEJBU0VfTERGTEFHUw0KLSAtLSAgLiAnLUwvdXNyL1gxMVI2L2xpYiAtbFgxMSAt bFhleHQgLWxYeGY4NmRnYSAtbFh4Zjg2dm0gLWxkbCAtbG0nDQotIC0rICAuICctTCUlWDExQkFT RSUlL2xpYiAtbFgxMSAtbFhleHQgLWxYeGY4NmRnYSAtbFh4Zjg2dm0gLWxtJw0KLSAtICk7DQot IC0gDQotIC0gQFJFTkRFUkVSX0ZJTEVTID0gcXcoDQotIC1AQCAtMjMxLDcgKzIzMSw2IEBADQot IC0gICAuLi91bml4L2xpbnV4X2NvbW1vbi5jDQotIC0gICAuLi91bml4L2xpbnV4X3FnbC5jICAg DQotIC0gICAuLi91bml4L2xpbnV4X2dsaW1wLmMgICANCi0gLS0gIC4uL3VuaXgvbGludXhfam95 c3RpY2suYyAgDQotIC0gICAuLi91bml4L2xpbnV4X3NuZC5jIA0KLSAtIAkuLi91bml4L2xpbnV4 X3NpZ25hbHMuYw0KLSAtICAgKTsNCkluZGV4OiBmaWxlcy9wYXRjaC1jb2RlLXVuaXgtTWFrZWZp bGUNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0NClJDUyBmaWxlOiBmaWxlcy9wYXRjaC1jb2RlLXVuaXgtTWFrZWZpbGUN CmRpZmYgLU4gZmlsZXMvcGF0Y2gtY29kZS11bml4LU1ha2VmaWxlDQotIC0tLSAvZGV2L251bGwJ MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMA0KKysrIGZpbGVzL3BhdGNoLWNvZGUtdW5peC1NYWtl ZmlsZQk0IEp1biAyMDA2IDIxOjQ0OjAzIC0wMDAwDQpAQCAtMCwwICsxLDM2NCBAQA0KKy0tLSBj b2RlL3VuaXgvTWFrZWZpbGUub3JpZwlTdW4gSnVuICA0IDE4OjA2OjE3IDIwMDYNCisrKysgY29k ZS91bml4L01ha2VmaWxlCVN1biBKdW4gIDQgMTg6MDc6NDYgMjAwNg0KK0BAIC0xOSw2ICsxOSw3 IEBADQorIA0KKyBQTEFURk9STT0kKHNoZWxsIHVuYW1lfHRyIEEtWiBhLXopDQorIFBMQVRGT1JN X1JFTEVBU0U9JChzaGVsbCB1bmFtZSAtcikNCisrQVJDSD0kKHNoZWxsIHVuYW1lIC1tKQ0KKyAN CisgIyMjDQorICMjIyBUaGVzZSBwYXRocyBhcmUgd2hlcmUgeW91IHByb2JhYmx5IHdhbnQgdG8g Y2hhbmdlIHRoaW5ncw0KK0BAIC0zNCw3ICszNSw3IEBADQorIA0KKyAjIEJ1aWxkIG5hbWUNCisg IyBCVUlMRF9OQU1FPSQoQlVJTERfTkFNRSkNCistQlVJTERfTkFNRT1xdWFrZTMueDg2DQorK0JV SUxEX05BTUU9cXVha2UzDQorIA0KKyANCisgDQorQEAgLTQ2LDggKzQ3LDggQEANCisgDQorIEJB U0VRM19ESVI9JChCRElSKS9iYXNlcTMNCisgDQorLUJEPWRlYnVnJChBUkNIKSQoR0xJQkMpDQor LUJSPXJlbGVhc2UkKEFSQ0gpJChHTElCQykNCisrQkQ9ZGVidWcNCisrQlI9cmVsZWFzZQ0KKyBD RElSPSQoTU9VTlRfRElSKS9jbGllbnQNCisgU0RJUj0kKE1PVU5UX0RJUikvc2VydmVyDQorIFJE SVI9JChNT1VOVF9ESVIpL3JlbmRlcmVyDQorQEAgLTc2LDcgKzc3LDcgQEANCisgIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMNCisgDQorICMjIERlZmF1bHRzDQorLURMTF9PTkxZPWZhbHNlDQorK0RMTF9P TkxZPz1mYWxzZQ0KKyAjIGJrMDEwMjE1IC0gVE9ETyAtIGFkZCBhbGwgZGVmYXVsdHMgLyBraWxs IFJ5YW4NCisgDQorIA0KK0BAIC0xOTksMzEgKzIwMCwyMyBAQA0KKyANCisgR0xJQkM9ICNsaWJj IGlzIGlycmVsZXZhbnQNCisgDQorLWlmbmVxICgsJChmaW5kc3RyaW5nIGFscGhhLCQoc2hlbGwg dW5hbWUgLW0pKSkNCistQVJDSD1heHANCistUlBNQVJDSD1hbHBoYQ0KKy1WRU5ET1I9ZGVjDQor LWVsc2UgI2RlZmF1bHQgdG8gaTM4Ng0KKy1BUkNIPWkzODYNCistUlBNQVJDSD1pMzg2DQorLVZF TkRPUj11bmtub3duDQorLWVuZGlmICNhbHBoYSB0ZXN0DQorK0JBU0VfQ0ZMQUdTID0gJChDRkxB R1MpIC1EREFUQURJUj0nXCIkKFEzRElSKVwiJyAtRExJQkRJUj0nXCIkKExJQkRJUilcIicgLXBp cGUNCisgDQorK0dMX0NGTEFHUyA9IC1JJChYMTFCQVNFKS9pbmNsdWRlDQorIA0KKy1CQVNFX0NG TEFHUyA9ICAtcGlwZQ0KKytERUJVR19DRkxBR1M9JChCQVNFX0NGTEFHUykgLWcgIC1XYWxsIC1X ZXJyb3INCisrUkVMRUFTRV9DRkxBR1M9JChCQVNFX0NGTEFHUykgLUROREVCVUcNCisgDQorLUdM X0NGTEFHUyA9IC1JJChNRVNBRElSKS9pbmNsdWRlIC1JL3Vzci9YMTFSNi9pbmNsdWRlDQorK2lm ZGVmIE9QVElNSVpFRF9DRkxBR1MNCisrICBpZmVxICgkKEFSQ0gpLGkzODYpDQorK1JFTEVBU0Vf Q0ZMQUdTPSQoQkFTRV9DRkxBR1MpIC1PNiAtZm9taXQtZnJhbWUtcG9pbnRlciAtcGlwZSAtZmZh c3QtbWF0aCAtZmFsaWduLWxvb3BzPTIgLWZhbGlnbi1qdW1wcz0yIC1mYWxpZ24tZnVuY3Rpb25z PTIgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZzdHJlbmd0aC1yZWR1Y2UNCisrICBlbHNlDQorK1JF TEVBU0VfQ0ZMQUdTPSQoQkFTRV9DRkxBR1MpIC1PNiAtZmZhc3QtbWF0aCAtZnVucm9sbC1sb29w cyAtZm9taXQtZnJhbWUtcG9pbnRlciAtZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zDQorKyAgZW5k aWYNCisrZW5kaWYNCisgDQorLURFQlVHX0NGTEFHUz0kKEJBU0VfQ0ZMQUdTKSAtZyAgLVdhbGwg LVdlcnJvcg0KKy1pZmVxICgkKEFSQ0gpLGF4cCkNCistQ0M9cGdjYw0KKy1SRUxFQVNFX0NGTEFH Uz0kKEJBU0VfQ0ZMQUdTKSAtRE5ERUJVRyAtTzYgLWZmYXN0LW1hdGggLWZ1bnJvbGwtbG9vcHMg LWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucw0KKy1lbHNlDQor LSNORVdQR0NDPS9sb2tpL2dsb2JhbC94ODYvYmluL2djYyAjIHJhaXN0bGluMDEyMzAxDQorLSNO RVdQR0NDPS91c3IvbG9jYWwvZ2NjLTIuOTUuMi9iaW4vZ2NjDQorLU5FV1BHQ0M9L2hvbWUvcmFp c3RsbGluL3NyYy9nY2MvYnVpbGQvaW5zdGFsbC9iaW4vZ2NjDQorLUNDPSQoc2hlbGwgaWYgWyAt ZiAkKE5FV1BHQ0MpIF07IHRoZW4gZWNobyAkKE5FV1BHQ0MpOyBlbHNlIGVjaG8gcGdjYzsgZmkg KQ0KKy1SRUxFQVNFX0NGTEFHUz0kKEJBU0VfQ0ZMQUdTKSAtRE5ERUJVRyAtTzYgLW1jcHU9cGVu dGl1bXBybyAtbWFyY2g9cGVudGl1bSAtZm9taXQtZnJhbWUtcG9pbnRlciAtcGlwZSAtZmZhc3Qt bWF0aCAtbWFsaWduLWxvb3BzPTIgLW1hbGlnbi1qdW1wcz0yIC1tYWxpZ24tZnVuY3Rpb25zPTIg LWZuby1zdHJpY3QtYWxpYXNpbmcgLSBmc3RyZW5ndGgtcmVkdWNlDQorK2lmZXEgKCQoRExMX09O TFkpLHRydWUpDQorK0JBU0VfQ0ZMQUdTICs9IC1ERExMX09OTFkNCisgZW5kaWYNCisgDQorIExJ QkVYVD1hDQorQEAgLTIzNSwyNSArMjI4LDM3IEBADQorIEFSRkxBR1M9YXIgcnYNCisgUkFOTElC PXJhbmxpYg0KKyANCistVEhSRUFEX0xERkxBR1M9LWxwdGhyZWFkDQorK1RIUkVBRF9MREZMQUdT PSQoUFRIUkVBRF9MSUJTKQ0KKyAjIGRvbid0IG5lZWQgLWxkbCAoRnJlZUJTRCkNCistTERGTEFH Uz0tbG0NCisrTERGTEFHUys9LWxtDQorICNHTExERkxBR1M9LUwvdXNyL1gxMVI2L2xpYiAtTCQo TUVTQURJUikvbGliIC1sR0wgLWxYMTEgLWxYZXh0IC1sWHhmODZkZ2EgLWxYeGY4NnZtDQorICNH TExERkxBR1M9LUwvdXNyL1gxMS9saWIgLWxHTCAtbFgxMSAtbFhleHQgLWxtDQorLUdMTERGTEFH Uz0tTC91c3IvWDExUjYvbGliIC1sR0wgLWxYMTEgLWxYZXh0IC1sWHhmODZkZ2EgLWxYeGY4NnZt DQorK0dMTERGTEFHUz0tTCQoWDExQkFTRSkvbGliIC1sR0wgLWxYMTEgLWxYZXh0IC1sWHhmODZk Z2EgLWxYeGY4NnZtDQorIA0KKy1pZmVxICgkKEFSQ0gpLGF4cCkNCistVEFSR0VUUz1cDQorLSAg ICAgICAgJChCKS8kKFBMQVRGT1JNKXEzZGVkDQorLWVsc2UNCistVEFSR0VUUz1cDQorLQkkKEIp LyQoUExBVEZPUk0pcXVha2UzIFwNCistCSQoQikvYmFzZXEzL2NnYW1lJChBUkNIKS4kKFNITElC RVhUKSBcDQorLQkkKEIpL2Jhc2VxMy9xYWdhbWUkKEFSQ0gpLiQoU0hMSUJFWFQpIFwNCistCSQo QikvYmFzZXEzL3VpJChBUkNIKS4kKFNITElCRVhUKSAgICAgXA0KKy0JJChCKS9taXNzaW9ucGFj ay9jZ2FtZSQoQVJDSCkuJChTSExJQkVYVCkgXA0KKy0JJChCKS9taXNzaW9ucGFjay9xYWdhbWUk KEFSQ0gpLiQoU0hMSUJFWFQpIFwNCistCSQoQikvbWlzc2lvbnBhY2svdWkkKEFSQ0gpLiQoU0hM SUJFWFQpDQorK2lmZGVmIENMSUVOVA0KKytUQVJHRVRTKz0kKEIpL2NsZWFucTMNCisrZW5kaWYN CisrDQorK2lmZGVmIERFRElDQVRFRA0KKytUQVJHRVRTKz0kKEIpL2NsZWFucTNkZWQNCisrZW5k aWYNCisrDQorK2lmZGVmIFNNUA0KKytUQVJHRVRTKz0kKEIpL2NsZWFucTMtc21wDQorK2VuZGlm DQorKw0KKytpZmVxICgkKERMTF9PTkxZKSx0cnVlKQ0KKytHQU1FTElCUz15ZXMNCisrZW5kaWYN CisrDQorK2lmZGVmIEdBTUVMSUJTDQorK1RBUkdFVFMrPVwNCisrCSQoQikvYmFzZXEzL2NnYW1l LiQoU0hMSUJFWFQpIFwNCisrCSQoQikvYmFzZXEzL3FhZ2FtZS4kKFNITElCRVhUKSBcDQorKwkk KEIpL2Jhc2VxMy91aS4kKFNITElCRVhUKSBcDQorKwkkKEIpL21pc3Npb25wYWNrL2NnYW1lLiQo U0hMSUJFWFQpIFwNCisrCSQoQikvbWlzc2lvbnBhY2svcWFnYW1lLiQoU0hMSUJFWFQpIFwNCisr CSQoQikvbWlzc2lvbnBhY2svdWkuJChTSExJQkVYVCkNCisgZW5kaWYNCisgDQorIGVsc2UgIyBp ZmVxIGZyZWVic2QNCitAQCAtMzQ4LDcgKzM1Myw3IEBADQorIAkkKE1BS0UpICB0YXJnZXRzIEI9 JChCUikgQ0ZMQUdTPSIkKFJFTEVBU0VfQ0ZMQUdTKSINCisgDQorICNCdWlsZCBib3RoIGRlYnVn IGFuZCByZWxlYXNlIGJ1aWxkcw0KKy1hbGw6YnVpbGRfZGVidWcgYnVpbGRfcmVsZWFzZQ0KKyth bGw6YnVpbGRfcmVsZWFzZQ0KKyANCisgdGFyZ2V0czptYWtlZGlycyAkKFRBUkdFVFMpDQorIA0K K0BAIC01MTYsMjAgKzUyMSw2IEBADQorIAkkKEIpL2NsaWVudC91bml4X25ldC5vIFwNCisgCSQo QikvY2xpZW50L3VuaXhfc2hhcmVkLm8gXA0KKyAJXA0KKy0JJChCKS9jbGllbnQvYWhvcHRpbS5v ICBcDQorLQkkKEIpL2NsaWVudC9hdXRvaGludC5vIFwNCistCSQoQikvY2xpZW50L2Z0YmFzZS5v ICAgXA0KKy0JJChCKS9jbGllbnQvZnRkZWJ1Zy5vICBcDQorLQkkKEIpL2NsaWVudC9mdGdseXBo Lm8gIFwNCistCSQoQikvY2xpZW50L2Z0aW5pdC5vICAgXA0KKy0JJChCKS9jbGllbnQvZnRtbS5v ICAgICBcDQorLQkkKEIpL2NsaWVudC9mdHN5c3RlbS5vIFwNCistCSQoQikvY2xpZW50L3Jhc3Rl cjEubyAgXA0KKy0JJChCKS9jbGllbnQvc2ZudC5vICAgICBcDQorLQkkKEIpL2NsaWVudC9zZm9i anMubyAgIFwNCistCSQoQikvY2xpZW50L3Ntb290aC5vICAgXA0KKy0JJChCKS9jbGllbnQvdHJ1 ZXR5cGUubw0KKy0jCVwNCisgIwkkKEIpL2NsaWVudC9xX3BhcnNlLm8gXA0KKyAjCSQoQikvY2xp ZW50L21hdGhfcXVhdGVybmlvbi5vIFwNCisgIwkkKEIpL2NsaWVudC91dGlsX3N0ci5vIFwNCitA QCAtNTQxLDEwICs1MzIsMTIgQEANCisgIwkkKEIpL2NsaWVudC9xX3NoYXJlZC5vIFwNCisgDQor ICAgICBpZmVxICgkKEFSQ0gpLGkzODYpDQorLQkgIFEzT0JKICs9ICQoQikvY2xpZW50L3ZtX3g4 Ni5vDQorKyAgICAgIGlmZXEgKCQoRExMX09OTFkpLGZhbHNlKQ0KKysJUTNPQkogKz0gJChCKS9j bGllbnQvdm1feDg2Lm8NCisrICAgICAgZW5kaWYNCisgICAgIGVuZGlmDQorIA0KKy0gICAgaWZl cSAoJChBUkNIKSxwcGMpDQorKyAgICBpZmVxICgkKEFSQ0gpLHBvd2VycGMpDQorICAgICAgIGlm ZXEgKCQoRExMX09OTFkpLGZhbHNlKQ0KKyAgICAgICAgIFEzT0JKICs9ICQoQikvY2xpZW50L3Zt X3BwYy5vDQorICAgICAgIGVuZGlmDQorQEAgLTU1OSwxMCArNTUyLDI0IEBADQorIAkJJChCKS9j bGllbnQvbGludXhfcWdsLm8gXA0KKyAJCSQoQikvY2xpZW50L2xpbnV4X2dsaW1wLm8gXA0KKyAJ CSQoQikvY2xpZW50L2xpbnV4X3NuZC5vIFwNCisrCQkkKEIpL2NsaWVudC9saW51eF9zaWduYWxz Lm8gXA0KKysJCSQoQikvY2xpZW50L3NuZF9taXhhLm8gXA0KKysJCSQoQikvY2xpZW50L21hdGhh Lm8NCisrDQorKwlRM1BPQkpfU01QPVwNCisrCQkkKEIpL2NsaWVudC9saW51eF9jb21tb24ubyBc DQorKwkJJChCKS9jbGllbnQvbGludXhfcWdsLm8gXA0KKysJCSQoQikvY2xpZW50L2xpbnV4X2ds aW1wX3NtcC5vIFwNCisrCQkkKEIpL2NsaWVudC9saW51eF9zbmQubyBcDQorKwkJJChCKS9jbGll bnQvbGludXhfc2lnbmFscy5vIFwNCisgCQkkKEIpL2NsaWVudC9zbmRfbWl4YS5vIFwNCisgCQkk KEIpL2NsaWVudC9tYXRoYS5vICAgXA0KKy0JCSQoQikvY2xpZW50L2Z0b2wubyBcDQorLQkJJChC KS9jbGllbnQvc25hcHZlY3Rvci5vDQorKw0KKysgICAgaWZlcSAoJChBUkNIKSxpMzg2KQ0KKysJ CVEzUE9CSiArPSAkKEIpL2NsaWVudC9mdG9sLm8gJChCKS9jbGllbnQvc25hcHZlY3Rvci5vDQor KwkJUTNQT0JKX1NNUCArPSAkKEIpL2NsaWVudC9mdG9sLm8gJChCKS9jbGllbnQvc25hcHZlY3Rv ci5vDQorKyAgICBlbmRpZg0KKysNCisgZWxzZQ0KKyBpZmVxICgkKFBMQVRGT1JNKSxpcml4KQ0K KyAJUTNQT0JKPVwNCitAQCAtNjAyLDEyICs2MDksMTIgQEANCisgZW5kaWYgI0ZyZWVCU0QNCisg ZW5kaWYgI0lSSVgNCisgDQorLSQoQikvJChQTEFURk9STSlxdWFrZTMgOiAkKFEzT0JKKSAkKFEz UE9CSikNCisrJChCKS9jbGVhbnEzIDogJChRM09CSikgJChRM1BPQkopDQorIAkkKENDKSAgLW8g JEAgJChRM09CSikgJChRM1BPQkopICQoR0xMREZMQUdTKSAkKExERkxBR1MpIA0KKyAjIFRUaW1v OiBzcGxpbmVzIGNvZGUgcmVxdWlyZXMgQysrIGxpbmtpbmcsIGJ1dCBzcGxpbmVzIGhhdmUgbm90 IGJlZW4gb2ZmaWNpYWxseSBpbmNsdWRlZCBpbiB0aGUgY29kZWJhc2UNCisgIwkkKENYWCkgIC1v ICRAICQoUTNPQkopICQoUTNQT0JKKSAkKEdMTERGTEFHUykgJChMREZMQUdTKSANCisgDQorLSQo QikvJChQTEFURk9STSlxdWFrZTMtc21wIDogJChRM09CSikgJChRM1BPQkpfU01QKQ0KKyskKEIp L2NsZWFucTMtc21wIDogJChRM09CSikgJChRM1BPQkpfU01QKQ0KKyAJJChDQykgIC1vICRAICQo UTNPQkopICQoUTNQT0JKX1NNUCkgJChHTExERkxBR1MpIFwNCisgCQkkKFRIUkVBRF9MREZMQUdT KSAkKExERkxBR1MpIA0KKyANCitAQCAtNzU4LDYgKzc2NSw3IEBADQorICQoQikvY2xpZW50L2xp bnV4X3FnbC5vIDogJChVRElSKS9saW51eF9xZ2wuYzsgJChET19DQykgICQoR0xfQ0ZMQUdTKSAN CisgJChCKS9jbGllbnQvbGludXhfaW5wdXQubyA6ICQoVURJUikvbGludXhfaW5wdXQuYzsgJChE T19DQykgDQorICQoQikvY2xpZW50L2xpbnV4X3NuZC5vIDogJChVRElSKS9saW51eF9zbmQuYzsg JChET19DQykgDQorKyQoQikvY2xpZW50L2xpbnV4X3NpZ25hbHMubyA6ICQoVURJUikvbGludXhf c2lnbmFscy5jOyAkKERPX0NDKSAkKEdMX0NGTEFHUykNCisgJChCKS9jbGllbnQvc25kX21peGEu byA6ICQoVURJUikvc25kX21peGEuczsgJChET19BUykgDQorICQoQikvY2xpZW50L21hdGhhLm8g OiAkKFVESVIpL21hdGhhLnM7ICQoRE9fQVMpIA0KKyANCitAQCAtNzY3LDcgKzc3NSw3IEBADQor ICQoQikvY2xpZW50L3ZtX3g4Ni5vIDogJChDTURJUikvdm1feDg2LmM7ICQoRE9fQ0MpIA0KKyBl bmRpZg0KKyANCistaWZlcSAoJChBUkNIKSxwcGMpDQorK2lmZXEgKCQoQVJDSCkscG93ZXJwYykN CisgaWZlcSAoJChETExfT05MWSksZmFsc2UpDQorICQoQikvY2xpZW50L3ZtX3BwYy5vIDogJChD TURJUikvdm1fcHBjLmM7ICQoRE9fQ0MpDQorIGVuZGlmDQorQEAgLTkxMiwyMiArOTIwLDI2IEBA DQorIAkkKEIpL2RlZC91bml4X21haW4ubyBcDQorIAkkKEIpL2RlZC91bml4X25ldC5vIFwNCisg CSQoQikvZGVkL3VuaXhfc2hhcmVkLm8gXA0KKysJJChCKS9kZWQvbGludXhfc2lnbmFscy5vIFwN CisgCVwNCisgCSQoQikvZGVkL251bGxfY2xpZW50Lm8gXA0KKyAJJChCKS9kZWQvbnVsbF9pbnB1 dC5vIFwNCisgCSQoQikvZGVkL251bGxfc25kZG1hLm8NCisgDQorIGlmZXEgKCQoQVJDSCksaTM4 NikNCistICBRM0RPQkogKz0gJChCKS9kZWQvdm1feDg2Lm8gJChCKS9kZWQvZnRvbC5vICQoQikv ZGVkL3NuYXB2ZWN0b3Iubw0KKysgIFEzRE9CSiArPSAkKEIpL2RlZC9mdG9sLm8gJChCKS9kZWQv c25hcHZlY3Rvci5vDQorKyAgaWZlcSAoJChETExfT05MWSksZmFsc2UpDQorKyAgUTNET0JKICs9 ICQoQikvZGVkL3ZtX3g4Ni5vDQorKyAgZW5kaWYNCisgZW5kaWYNCisgDQorLWlmZXEgKCQoQVJD SCkscHBjKQ0KKytpZmVxICgkKEFSQ0gpLHBvd2VycGMpDQorICAgaWZlcSAoJChETExfT05MWSks ZmFsc2UpDQorICAgICBRM0RPQkogKz0gJChCKS9kZWQvdm1fcHBjLm8NCisgICBlbmRpZg0KKyBl bmRpZg0KKyANCistJChCKS8kKFBMQVRGT1JNKXEzZGVkIDogJChRM0RPQkopDQorKyQoQikvY2xl YW5xM2RlZCA6ICQoUTNET0JKKQ0KKyAJJChDQykgIC1vICRAICQoUTNET0JKKSAkKExERkxBR1Mp DQorIA0KKyAkKEIpL2RlZC9zdl9ib3QubyA6ICQoU0RJUikvc3ZfYm90LmM7ICQoRE9fREVEX0ND KSANCitAQCAtOTg4LDYgKzEwMDAsNyBAQA0KKyAkKEIpL2RlZC91bml4X21haW4ubyA6ICQoVURJ UikvdW5peF9tYWluLmM7ICQoRE9fREVEX0NDKSANCisgJChCKS9kZWQvdW5peF9uZXQubyA6ICQo VURJUikvdW5peF9uZXQuYzsgJChET19ERURfQ0MpIA0KKyAkKEIpL2RlZC91bml4X3NoYXJlZC5v IDogJChVRElSKS91bml4X3NoYXJlZC5jOyAkKERPX0RFRF9DQykgDQorKyQoQikvZGVkL2xpbnV4 X3NpZ25hbHMubyA6ICQoVURJUikvbGludXhfc2lnbmFscy5jOyAkKERPX0RFRF9DQykgDQorICQo QikvZGVkL251bGxfY2xpZW50Lm8gOiAkKE5ESVIpL251bGxfY2xpZW50LmM7ICQoRE9fREVEX0ND KSANCisgJChCKS9kZWQvbnVsbF9pbnB1dC5vIDogJChORElSKS9udWxsX2lucHV0LmM7ICQoRE9f REVEX0NDKSANCisgJChCKS9kZWQvbnVsbF9zbmRkbWEubyA6ICQoTkRJUikvbnVsbF9zbmRkbWEu YzsgJChET19ERURfQ0MpIA0KK0BAIC0xMDAxLDcgKzEwMTQsNyBAQA0KKyAkKEIpL2RlZC9zbmFw dmVjdG9yLm8gOiAkKFVESVIpL3NuYXB2ZWN0b3IubmFzbTsgJChET19OQVNNKSANCisgZW5kaWYN CisgDQorLWlmZXEgKCQoQVJDSCkscHBjKQ0KKytpZmVxICgkKEFSQ0gpLHBvd2VycGMpDQorIGlm ZXEgKCQoRExMX09OTFkpLGZhbHNlKQ0KKyAkKEIpL2RlZC92bV9wcGMubyA6ICQoQ01ESVIpL3Zt X3BwYy5jOyAkKERPX0RFRF9DQykNCisgZW5kaWYNCitAQCAtMTA2OCw3ICsxMDgxLDcgQEANCisg CSQoQikvYmFzZXEzL2NnYW1lL3FfbWF0aC5vIFwNCisgCSQoQikvYmFzZXEzL2NnYW1lL3Ffc2hh cmVkLm8NCisgDQorLSQoQikvYmFzZXEzL2NnYW1lJChBUkNIKS4kKFNITElCRVhUKSA6ICQoUTND R09CSikNCisrJChCKS9iYXNlcTMvY2dhbWUuJChTSExJQkVYVCkgOiAkKFEzQ0dPQkopDQorIAkk KENDKSAgJChTSExJQkxERkxBR1MpIC1vICRAICQoUTNDR09CSikNCisgDQorICQoQikvYmFzZXEz L2NnYW1lL2JnX21pc2MubyA6ICQoR0RJUikvYmdfbWlzYy5jOyAkKERPX1NITElCX0NDKSAgICAg ICAgIA0KK0BAIC0xMTI4LDcgKzExNDEsNyBAQA0KKyAJJChCKS9taXNzaW9ucGFjay9jZ2FtZS9x X3NoYXJlZC5vIFwNCisgCSQoQikvbWlzc2lvbnBhY2svY2dhbWUvdWlfc2hhcmVkLm8NCisgDQor LSQoQikvbWlzc2lvbnBhY2svY2dhbWUkKEFSQ0gpLiQoU0hMSUJFWFQpIDogJChNUENHT0JKKQ0K KyskKEIpL21pc3Npb25wYWNrL2NnYW1lLiQoU0hMSUJFWFQpIDogJChNUENHT0JKKQ0KKyAJJChD QykgJChTSExJQkxERkxBR1MpIC1vICRAICQoTVBDR09CSikNCisgDQorICQoQikvbWlzc2lvbnBh Y2svY2dhbWUvYmdfbWlzYy5vIDogJChHRElSKS9iZ19taXNjLmM7ICQoRE9fU0hMSUJfQ0MpICAg ICAtRE1JU1NJT05QQUNLIA0KK0BAIC0xMjAwLDcgKzEyMTMsNyBAQA0KKyAJJChCKS9iYXNlcTMv Z2FtZS9xX21hdGgubyBcDQorIAkkKEIpL2Jhc2VxMy9nYW1lL3Ffc2hhcmVkLm8NCisgDQorLSQo QikvYmFzZXEzL3FhZ2FtZSQoQVJDSCkuJChTSExJQkVYVCkgOiAkKFEzR09CSikNCisrJChCKS9i YXNlcTMvcWFnYW1lLiQoU0hMSUJFWFQpIDogJChRM0dPQkopDQorIAkkKENDKSAgJChTSExJQkxE RkxBR1MpIC1vICRAICQoUTNHT0JKKQ0KKyANCisgJChCKS9iYXNlcTMvZ2FtZS9haV9jaGF0Lm8g OiAkKEdESVIpL2FpX2NoYXQuYzsgJChET19TSExJQl9DQykgICAgIA0KK0BAIC0xMjc4LDcgKzEy OTEsNyBAQA0KKyAJJChCKS9taXNzaW9ucGFjay9nYW1lL3FfbWF0aC5vIFwNCisgCSQoQikvbWlz c2lvbnBhY2svZ2FtZS9xX3NoYXJlZC5vDQorIA0KKy0kKEIpL21pc3Npb25wYWNrL3FhZ2FtZSQo QVJDSCkuJChTSExJQkVYVCkgOiAkKE1QR09CSikNCisrJChCKS9taXNzaW9ucGFjay9xYWdhbWUu JChTSExJQkVYVCkgOiAkKE1QR09CSikNCisgCSQoQ0MpICQoU0hMSUJMREZMQUdTKSAtbyAkQCAk KE1QR09CSikNCisgDQorICQoQikvbWlzc2lvbnBhY2svZ2FtZS9haV9jaGF0Lm8gOiAkKEdESVIp L2FpX2NoYXQuYzsgJChET19TSExJQl9DQykgICAgLURNSVNTSU9OUEFDSyANCitAQCAtMTM2Nyw3 ICsxMzgwLDcgQEANCisgICAgICAgICAkKEIpL2Jhc2VxMy91aS9xX21hdGgubyBcDQorICAgICAg ICAgJChCKS9iYXNlcTMvdWkvcV9zaGFyZWQubw0KKyANCistJChCKS9iYXNlcTMvdWkkKEFSQ0gp LiQoU0hMSUJFWFQpIDogJChRM1VJT0JKKQ0KKyskKEIpL2Jhc2VxMy91aS4kKFNITElCRVhUKSA6 ICQoUTNVSU9CSikNCisgCSQoQ0MpICQoQ0ZMQUdTKSAkKFNITElCTERGTEFHUykgLW8gJEAgJChR M1VJT0JKKQ0KKyANCisgJChCKS9iYXNlcTMvdWkvYmdfbWlzYy5vIDogJChHRElSKS9iZ19taXNj LmM7ICQoRE9fU0hMSUJfQ0MpIA0KK0BAIC0xNDEwLDcgKzE0MjMsNyBAQA0KKyAkKEIpL2Jhc2Vx My91aS91aV9zdGFydHNlcnZlci5vIDogJChRM1VJRElSKS91aV9zdGFydHNlcnZlci5jOyAkKERP X1NITElCX0NDKSANCisgJChCKS9iYXNlcTMvdWkvdWlfdGVhbS5vIDogJChRM1VJRElSKS91aV90 ZWFtLmM7ICQoRE9fU0hMSUJfQ0MpIA0KKyAkKEIpL2Jhc2VxMy91aS91aV90ZWFtb3JkZXJzLm8g OiAkKFEzVUlESVIpL3VpX3RlYW1vcmRlcnMuYzsgJChET19TSExJQl9DQykgDQorLSQoQikvYmFz ZXEzL3VpL3VpX3N5c2NhbGxzLm8gOiAkKFEzVUlESVIpL3VpX3N5c2NhbGxzLmM7ICQoRE9fU0hM SUJfQ0MpIA0KKyskKEIpL2Jhc2VxMy91aS91aV9zeXNjYWxscy5vIDogJChVSURJUikvdWlfc3lz Y2FsbHMuYzsgJChET19TSExJQl9DQykgDQorICQoQikvYmFzZXEzL3VpL3VpX3ZpZGVvLm8gOiAk KFEzVUlESVIpL3VpX3ZpZGVvLmM7ICQoRE9fU0hMSUJfQ0MpIA0KKyANCisgIyBiazAwMTIwNSAt IHRoZXNlIHdyZSB0aGUgb25seSBTSExJQiBjb21waWxlcyBpbiAxLjE3DQorQEAgLTE0NTAsNyAr MTQ2Myw3IEBADQorICMJJChCKS9taXNzaW9ucGFjay91aS9xX21hdGgubyBcDQorICMJJChCKS9t aXNzaW9ucGFjay91aS9xX3NoYXJlZC5vDQorIA0KKy0kKEIpL21pc3Npb25wYWNrL3VpJChBUkNI KS4kKFNITElCRVhUKSA6ICQoTVBVSU9CSikNCisrJChCKS9taXNzaW9ucGFjay91aS4kKFNITElC RVhUKSA6ICQoTVBVSU9CSikNCisgCSQoQ0MpICQoQ0ZMQUdTKSAkKFNITElCTERGTEFHUykgLW8g JEAgJChNUFVJT0JKKQ0KKyANCisgJChCKS9taXNzaW9ucGFjay91aS91aV9hdG9tcy5vIDogJChV SURJUikvdWlfYXRvbXMuYzsgJChET19TSExJQl9DQykgIC1ETUlTU0lPTlBBQ0sgIA0KK0BAIC0y MDU5LDkgKzIwNzIsOSBAQA0KKyANCisgY29weWZpbGVzOg0KKyAJLW1rZGlyaGllciAkKENPUFlE SVIpDQorLQljcCAkKEJSKS9saW51eHF1YWtlMyAkKENPUFlESVIpL3F1YWtlMy54ODYNCistCXN0 cmlwICQoQ09QWURJUikvcXVha2UzLng4Ng0KKy0JY2htb2QgNzU1ICQoQ09QWURJUikvcXVha2Uz Lng4Ng0KKysJY3AgJChCUikvbGludXhxdWFrZTMgJChDT1BZRElSKS9xdWFrZTMNCisrCXN0cmlw ICQoQ09QWURJUikvcXVha2UzDQorKwljaG1vZCA3NTUgJChDT1BZRElSKS9xdWFrZTMNCisgCWNw ICQoQlIpL2xpbnV4cTNkZWQgJChDT1BZRElSKS9xM2RlZA0KKyAJc3RyaXAgJChDT1BZRElSKS9x M2RlZA0KKyAJY2htb2QgNzU1ICQoQ09QWURJUikvcTNkZWQNCkluZGV4OiBmaWxlcy9wYXRjaC1j b2RlLXVuaXgtY29ucw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IGZpbGVzL3BhdGNoLWNvZGUtdW5p eC1jb25zDQpkaWZmIC1OIGZpbGVzL3BhdGNoLWNvZGUtdW5peC1jb25zDQotIC0tLSBmaWxlcy9w YXRjaC1jb2RlLXVuaXgtY29ucwkyMCBNYXIgMjAwNiAxNToyMToyNyAtMDAwMAkxLjENCisrKyAv ZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMA0KQEAgLTEsMjcgKzAsMCBAQA0KLSAt LS0tIGNvZGUvdW5peC9jb25zLm9yaWcJRnJpIEp1biAxNCAxMzowMTozMiAyMDAyDQotIC0rKysg Y29kZS91bml4L2NvbnMJV2VkIE5vdiAyMyAxMDozMjo0OSAyMDA1DQotIC1AQCAtMjcxLDExICsy NzEsMTEgQEANCi0gLSAgICAgICMgRGVmYXVsdHMgZm9yIGEgdHlwaWNhbCAoPykgVU5JWCBwbGF0 Zm9ybS4NCi0gLSAgICAgICMgWW91ciBtaWxlYWdlIG1heSB2YXJ5Lg0KLSAtICAgICAgJ3VuaXgn ID0+IFsNCi0gLS0JCSdDQycgICAgICAgICAgICAgPT4gJ2NjJywNCi0gLS0JCSdDRkxBR1MnICAg ICAgICAgPT4gJycsDQotIC0rCQknQ0MnICAgICAgICAgICAgID0+ICRFTlZ7Q0N9LA0KLSAtKwkJ J0NGTEFHUycgICAgICAgICA9PiAkRU5We0NGTEFHU30sDQotIC0gCQknQ0NDT00nICAgICAgICAg ID0+ICclQ0MgJUNGTEFHUyAlX0lGTEFHUyAtYyAlPCAtbyAlPicsDQotIC0tCQknQ1hYJyAgICAg ICAgICAgID0+ICclQ0MnLA0KLSAtLQkJJ0NYWEZMQUdTJyAgICAgICA9PiAnJUNGTEFHUycsDQot IC0rCQknQ1hYJyAgICAgICAgICAgID0+ICRFTlZ7Q1hYfSwNCi0gLSsJCSdDWFhGTEFHUycgICAg ICAgPT4gJEVOVntDWFhGTEFHU30sDQotIC0gCQknQ1hYQ09NJyAgICAgICAgID0+ICclQ1hYICVD WFhGTEFHUyAlX0lGTEFHUyAtYyAlPCAtbyAlPicsDQotIC0gCQknSU5DRElSUFJFRklYJyAgID0+ ICctSScsDQotIC0gCQknSU5DRElSU1VGRklYJyAgID0+ICcnLA0KLSAtQEAgLTI5NCw3ICsyOTQs NyBAQA0KLSAtIAkJJ0xEJyAgICAgICAgICAgICA9PiAnbGQnLA0KLSAtIAkJJ0xERkxBR1MnICAg ICAgICA9PiAnJywNCi0gLSAJCSdQUkVGTElCJyAgICAgICAgPT4gJ2xpYicsDQotIC0tCQknRU5W JyAgICAgICAgICAgID0+IHsgJ1BBVEgnID0+ICcvYmluOi91c3IvYmluJyB9LA0KLSAtKwkJJ0VO VicgICAgICAgICAgICA9PiB7ICdQQVRIJyA9PiAnL2JpbjovdXNyL2JpbjovdXNyL2xvY2FsL2Jp bicgfSwNCi0gLSAJCV0sDQotIC0gICAgICApOw0KLSAtIA0KSW5kZXg6IGZpbGVzL3BhdGNoLWNv ZGUtdW5peC11bml4X21haW4uYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lL3BjdnMvcG9y dHMvZ2FtZXMvY2xlYW5xMy9maWxlcy9wYXRjaC1jb2RlLXVuaXgtdW5peF9tYWluLmMsdg0KcmV0 cmlldmluZyByZXZpc2lvbiAxLjENCmRpZmYgLXUgLXIxLjEgcGF0Y2gtY29kZS11bml4LXVuaXhf bWFpbi5jDQotIC0tLSBmaWxlcy9wYXRjaC1jb2RlLXVuaXgtdW5peF9tYWluLmMJMjAgTWFyIDIw MDYgMTU6MjE6MjcgLTAwMDAJMS4xDQorKysgZmlsZXMvcGF0Y2gtY29kZS11bml4LXVuaXhfbWFp bi5jCTQgSnVuIDIwMDYgMjE6NDQ6MDMgLTAwMDANCkBAIC0xLDUgKzEsNSBAQA0KLSAtLS0tIGNv ZGUvdW5peC91bml4X21haW4uYy5vcmlnCU1vbiBNYXIgMjAgMTg6Mzk6MTAgMjAwNg0KLSAtKysr IGNvZGUvdW5peC91bml4X21haW4uYwlNb24gTWFyIDIwIDIwOjI0OjIyIDIwMDYNCistLS0gLi9j b2RlL3VuaXgvdW5peF9tYWluLmMub3JpZwlXZWQgTWF5IDMxIDIwOjUyOjA4IDIwMDYNCisrKysg Li9jb2RlL3VuaXgvdW5peF9tYWluLmMJV2VkIE1heSAzMSAyMDo1MjowOSAyMDA2DQogQEAgLTcy MiwxNyArNzIyLDcgQEANCiAgICBhc3NlcnQoIG5hbWUgKTsNCiAgDQpAQCAtMjUsNyArMjUsNyBA QA0KICAgICAgICB7DQogKyAgICAgICAgQ29tX1ByaW50ZiggIlN5c19Mb2FkRGxsKCVzKSBmYWls ZWQ6XG5cIiVzXCJcbiIsIGZuLCBkbGVycm9yKCkgKTsNCiArICAgICAgICAvLyBGcmVlQlNEIHBh Y2thZ2UgaW5zdGFsbGF0aW9uIHBhdGgNCi0gLSsgICAgICAgIGZuID0gRlNfQnVpbGRPU1BhdGgo ICIlJVBSRUZJWCUlL2xpYi9jbGVhbnEzIiwgZ2FtZWRpciwgZm5hbWUgKTsNCisrICAgICAgICBm biA9IEZTX0J1aWxkT1NQYXRoKCBMSUJESVIgLCBnYW1lZGlyLCBmbmFtZSApOw0KICsgICAgICAg IENvbV9QcmludGYoICJTeXNfTG9hZERsbCglcykuLi4gXG4iLCBmbiApOw0KICsgICAgICAgIGxp YkhhbmRsZSA9IGRsb3BlbiggZm4sIFFfUlRMRCApOw0KICsNCkluZGV4OiBmaWxlcy9wYXRjaC1j b2RlLXVuaXgtdW5peF9zaGFyZWQuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lL3BjdnMv cG9ydHMvZ2FtZXMvY2xlYW5xMy9maWxlcy9wYXRjaC1jb2RlLXVuaXgtdW5peF9zaGFyZWQuYyx2 DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQ0KZGlmZiAtdSAtcjEuMSBwYXRjaC1jb2RlLXVuaXgt dW5peF9zaGFyZWQuYw0KLSAtLS0gZmlsZXMvcGF0Y2gtY29kZS11bml4LXVuaXhfc2hhcmVkLmMJ MjAgTWFyIDIwMDYgMTU6MjE6MjcgLTAwMDAJMS4xDQorKysgZmlsZXMvcGF0Y2gtY29kZS11bml4 LXVuaXhfc2hhcmVkLmMJNCBKdW4gMjAwNiAyMTo0NDowMyAtMDAwMA0KQEAgLTEsMTEgKzEsMTEg QEANCi0gLS0tLSBjb2RlL3VuaXgvdW5peF9zaGFyZWQuYy5vcmlnCU1vbiBBdWcgMTUgMjA6MTA6 MDcgMjAwNQ0KLSAtKysrIGNvZGUvdW5peC91bml4X3NoYXJlZC5jCVN1biBOb3YgMjAgMTg6NDE6 MjIgMjAwNQ0KKy0tLSAuL2NvZGUvdW5peC91bml4X3NoYXJlZC5jLm9yaWcJV2VkIE1heSAzMSAy MDo1MjowOCAyMDA2DQorKysrIC4vY29kZS91bml4L3VuaXhfc2hhcmVkLmMJV2VkIE1heSAzMSAy MDo1MjowOSAyMDA2DQogQEAgLTM4LDcgKzM4LDcgQEANCiAgc3RhdGljIGNoYXIgY2RQYXRoW01B WF9PU1BBVEhdOw0KICANCiAgLy8gVXNlZCB0byBkZXRlcm1pbmUgbG9jYWwgaW5zdGFsbGF0aW9u IHBhdGgNCiAtc3RhdGljIGNoYXIgaW5zdGFsbFBhdGhbTUFYX09TUEFUSF07DQotIC0rc3RhdGlj IGNoYXIgaW5zdGFsbFBhdGhbTUFYX09TUEFUSF0gPSAlJVEzRElSJSU7DQorK3N0YXRpYyBjaGFy IGluc3RhbGxQYXRoW01BWF9PU1BBVEhdID0gREFUQURJUjsNCiAgDQogIC8vIFVzZWQgdG8gZGV0 ZXJtaW5lIHdoZXJlIHRvIHN0b3JlIHVzZXItc3BlY2lmaWMgZmlsZXMNCiAgc3RhdGljIGNoYXIg aG9tZVBhdGhbTUFYX09TUEFUSF07DQpAQCAtMzQsNyArMzQsNyBAQA0KICANCiAgCS8vIHRlc3Qg dGhlIHdyYXAgaXNzdWUNCiAgI2lmIDAJDQotIC1AQCAtMTM2LDcgKzE0MCw3IEBADQorQEAgLTEz NiwxMCArMTQwLDEwIEBADQogIA0KICAJcmV0dXJuIHJldDsNCiAgfQ0KQEAgLTQyLDQgKzQyLDgg QEANCiArLy8gI2VuZGlmDQogIA0KICAvLyNpZiAwIC8vIGJrMDAxMjE1IC0gc2VlIHNuYXB2ZWN0 b3IubmFzbSBmb3IgcmVwbGFjZW1lbnQNCi0gLSAjaWYgKGRlZmluZWQgX19BUFBMRV9fKSAvLyBy Y2cwMTAyMDYgLSB1c2luZyB0aGlzIGZvciBQUEMgYnVpbGRzLi4uDQorLSNpZiAoZGVmaW5lZCBf X0FQUExFX18pIC8vIHJjZzAxMDIwNiAtIHVzaW5nIHRoaXMgZm9yIFBQQyBidWlsZHMuLi4NCisr I2lmbmRlZiBfX2kzODZfXyAvLyByY2cwMTAyMDYgLSB1c2luZyB0aGlzIGZvciBQUEMgYnVpbGRz Li4uDQorIGxvbmcgZmFzdGZ0b2woIGZsb2F0IGYgKSB7IC8vIGJrMDAxMjEzIC0gZnJvbSB3aW4z Mi93aW5fc2hhcmVkLmMNCisgICAvL3N0YXRpYyBpbnQgdG1wOw0KKyAgIC8vCV9fYXNtIGZsZCBm DQo9PT09PT09PT09PSBFTkQgPT09PT09PT09PT0NCi0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0t LS0tDQpWZXJzaW9uOiBHbnVQRyB2MS40LjMgKEZyZWVCU0QpDQoNCmlEOERCUUZFZzFXQWlWMDVF cFJjUDJFUkFsRG9BS0NsT3VSaUgrS1RhcnBicHdxTmMzVm1pVFkzYkFDZ2tWUHgNCitBeGVqQjlz TVpYbGxXVjliUGI1VjNzPQ0KPTZHRmUNCi0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLQ0K
State Changed From-To: open->closed Committed.