Skip to Content.
Sympa Menu

sm-commit - [SM-Commit] GIT changes to master games grimoire by Alexander Tsamutali (e9055b6781a0ddabf72f92884319bb3031d4c7f5)

sm-commit AT lists.ibiblio.org

Subject: Source Mage code commit list

List archive

Chronological Thread  
  • From: Alexander Tsamutali <scm AT sourcemage.org>
  • To: sm-commit AT lists.ibiblio.org
  • Subject: [SM-Commit] GIT changes to master games grimoire by Alexander Tsamutali (e9055b6781a0ddabf72f92884319bb3031d4c7f5)
  • Date: Wed, 31 Oct 2007 00:03:10 -0500

GIT changes to master games grimoire by Alexander Tsamutali
<astsmtl AT gmail.com>:

games-data/netpanzer-data/BUILD |
12
games-data/netpanzer-data/DEPENDS |
7
games-data/netpanzer-data/DETAILS |
9
games-data/netpanzer-data/HISTORY |
4
games-data/netpanzer-data/INSTALL |
4
games-data/netpanzer-data/PRE_BUILD |
1
games-data/netpanzer-data/TRIGGERS |
1
games-strategy-rts/netpanzer/CONFLICTS |
1
games-strategy-rts/netpanzer/DEPENDS |
1
games-strategy-rts/netpanzer/DETAILS |
5
games-strategy-rts/netpanzer/HISTORY |
7
games-strategy-rts/netpanzer/INSTALL |
6
games-strategy-rts/netpanzer/PRE_BUILD |
6
games-strategy-rts/netpanzer/patches/netpanzer-0.8-gcc41.patch |
36 -
games-strategy-rts/netpanzer/patches/netpanzer-0.8-min-size-check.patch |
33 -
games-strategy-rts/netpanzer/patches/netpanzer-0.8-robust.patch |
205 ----------
16 files changed, 25 insertions(+), 313 deletions(-)

New commits:
commit e9055b6781a0ddabf72f92884319bb3031d4c7f5
Author: Alexander Tsamutali <astsmtl AT gmail.com>
Commit: Alexander Tsamutali <astsmtl AT gmail.com>

games-data/netpanzer-data: deprecated, all data files are now included in
netpanzer

commit d1096653694585abf3a99275b2e78252b252f1c8
Author: Alexander Tsamutali <astsmtl AT gmail.com>
Commit: Alexander Tsamutali <astsmtl AT gmail.com>

games-strategy-rts/netpanzer: updated to 0.8.2

diff --git a/games-data/netpanzer-data/BUILD b/games-data/netpanzer-data/BUILD
index 81b0b54..27ba77d 100755
--- a/games-data/netpanzer-data/BUILD
+++ b/games-data/netpanzer-data/BUILD
@@ -1,11 +1 @@
-./configure --build=${BUILD} \
- --prefix=${INSTALL_ROOT}/usr/ \
- --libdir=${INSTALL_ROOT}/usr/lib \
- --bindir=${INSTALL_ROOT}/usr/games \
- --datadir=${INSTALL_ROOT}/usr/share/games \
- --sysconfdir=${INSTALL_ROOT}/etc \
- --localstatedir=${INSTALL_ROOT}/var/games \
- --mandir=${INSTALL_ROOT}/usr/share/man \
- --infodir=${INSTALL_ROOT}/usr/share/info \
- ${OPTS} &&
-jam
+true
diff --git a/games-data/netpanzer-data/DEPENDS
b/games-data/netpanzer-data/DEPENDS
index c787c87..dfb5b12 100755
--- a/games-data/netpanzer-data/DEPENDS
+++ b/games-data/netpanzer-data/DEPENDS
@@ -1,6 +1 @@
-depends sdl
-depends sdl_mixer
-depends sdl_image
-depends sdl_ttf
-depends jam
-depends physfs
+depends netpanzer
diff --git a/games-data/netpanzer-data/DETAILS
b/games-data/netpanzer-data/DETAILS
index 5ca135d..0a0f168 100755
--- a/games-data/netpanzer-data/DETAILS
+++ b/games-data/netpanzer-data/DETAILS
@@ -1,12 +1,13 @@
SPELL=netpanzer-data
VERSION=0.8
- SOURCE=$SPELL-$VERSION.tar.bz2
- SOURCE_DIRECTORY=$BUILD_DIRECTORY/$SPELL-$VERSION
- SOURCE_URL[0]=http://download.berlios.de/netpanzer/$SOURCE
+ PATCHLEVEL=1
+# SOURCE=$SPELL-$VERSION.tar.bz2
+# SOURCE_DIRECTORY=$BUILD_DIRECTORY/$SPELL-$VERSION
+# SOURCE_URL[0]=http://download.berlios.de/netpanzer/$SOURCE
WEB_SITE=http://netpanzer.berlios.de/
ENTERED=20050209
UPDATED=20050209
-
SOURCE_HASH=sha512:9120d8d3a190069206ed327f1d7d2b2d36f40feefa823956cf6db66e8d0622959449b9385d81b08fdfc59b3b44b7e4d6f6ca2c7362f1a857e1110d61e7c08ce6
+#
SOURCE_HASH=sha512:9120d8d3a190069206ed327f1d7d2b2d36f40feefa823956cf6db66e8d0622959449b9385d81b08fdfc59b3b44b7e4d6f6ca2c7362f1a857e1110d61e7c08ce6
LICENSE[0]=GPL
SHORT="This is the data for the netpanzer game"
cat << EOF
diff --git a/games-data/netpanzer-data/HISTORY
b/games-data/netpanzer-data/HISTORY
index 2caf993..6465ba7 100644
--- a/games-data/netpanzer-data/HISTORY
+++ b/games-data/netpanzer-data/HISTORY
@@ -1,3 +1,7 @@
+2007-10-31 Alexander Tsamutali <astsmtl AT gmail.com>
+ * DETAILS, DEPENDS, PRE_BUILD, BUILD, INSTALL, TRIGGERS:
+ Deprecated, all data files are now included in netpanzer
+
2006-09-21 Andraž "ruskie" Levstik <ruskie AT mages.ath.cx>
* DETAILS: [automated] Removed BUILD_API=2.

diff --git a/games-data/netpanzer-data/INSTALL
b/games-data/netpanzer-data/INSTALL
index 7f6576d..27ba77d 100755
--- a/games-data/netpanzer-data/INSTALL
+++ b/games-data/netpanzer-data/INSTALL
@@ -1,3 +1 @@
-jam install &&
-cd ${INSTALL_ROOT}/usr/share/games/netpanzer &&
-chgrp -R games *
+true
diff --git a/games-data/netpanzer-data/PRE_BUILD
b/games-data/netpanzer-data/PRE_BUILD
new file mode 100755
index 0000000..27ba77d
--- /dev/null
+++ b/games-data/netpanzer-data/PRE_BUILD
@@ -0,0 +1 @@
+true
diff --git a/games-data/netpanzer-data/TRIGGERS
b/games-data/netpanzer-data/TRIGGERS
new file mode 100755
index 0000000..da25b11
--- /dev/null
+++ b/games-data/netpanzer-data/TRIGGERS
@@ -0,0 +1 @@
+on_cast netpanzer-data dispel_self
diff --git a/games-strategy-rts/netpanzer/CONFLICTS
b/games-strategy-rts/netpanzer/CONFLICTS
new file mode 100755
index 0000000..dfdb838
--- /dev/null
+++ b/games-strategy-rts/netpanzer/CONFLICTS
@@ -0,0 +1 @@
+conflicts netpanzer-data y
diff --git a/games-strategy-rts/netpanzer/DEPENDS
b/games-strategy-rts/netpanzer/DEPENDS
index dda9f40..c787c87 100755
--- a/games-strategy-rts/netpanzer/DEPENDS
+++ b/games-strategy-rts/netpanzer/DEPENDS
@@ -3,5 +3,4 @@ depends sdl_mixer
depends sdl_image
depends sdl_ttf
depends jam
-depends netpanzer-data
depends physfs
diff --git a/games-strategy-rts/netpanzer/DETAILS
b/games-strategy-rts/netpanzer/DETAILS
index c816717..7b10216 100755
--- a/games-strategy-rts/netpanzer/DETAILS
+++ b/games-strategy-rts/netpanzer/DETAILS
@@ -1,12 +1,11 @@
SPELL=netpanzer
- VERSION=0.8
+ VERSION=0.8.2
SOURCE=$SPELL-$VERSION.tar.bz2
SOURCE_DIRECTORY=$BUILD_DIRECTORY/$SPELL-$VERSION
SOURCE_URL[0]=http://download.berlios.de/netpanzer/$SOURCE
WEB_SITE=http://netpanzer.berlios.de/
ENTERED=20050209
- PATCHLEVEL=1
-
SOURCE_HASH=sha512:a9c83557ca831aea976c6dae315dbdb3ad92cef9f92969be2e34c654d0d27333efd02254443aee7f599c6bf9571880083f78ded76fac531a22e16f1ee622956e
+
SOURCE_HASH=sha512:7d7f5b485b20b2cefc71061412367edd963e59612767f6b69751915eda3f2939eebedfa29cb77ba0986cf4966b0fc12456b1bb6cfc2bd794c47fbce0b5f6f57a
LICENSE[0]=GPL
SHORT="netPanzer is an online multiplayer tactical warfare game
designed for fast action combat"
cat << EOF
diff --git a/games-strategy-rts/netpanzer/HISTORY
b/games-strategy-rts/netpanzer/HISTORY
index 5e1e897..f35afa5 100644
--- a/games-strategy-rts/netpanzer/HISTORY
+++ b/games-strategy-rts/netpanzer/HISTORY
@@ -1,3 +1,10 @@
+2007-10-31 Alexander Tsamutali <astsmtl AT gmail.com>
+ * DETAILS: Updated to 0.8.2
+ * DEPENDS: Doesn't depend on netpanzer-data anymore
+ * CONFLICTS: Conflicts with netpanzer-data (deprecation)
+ * PRE_BUILD, patches: Removed
+ * INSTALL: Removed sedit on docs/Jamfile
+
2006-12-15 Andraž "ruskie" Levstik <ruskie AT mages.ath.cx>
* patches/netpanzer-0.8-gcc41.patch: gcc fixes patch from gentoo
* patches/netpanzer-0.8-min-size-check.patch: anti-hang up patch
diff --git a/games-strategy-rts/netpanzer/INSTALL
b/games-strategy-rts/netpanzer/INSTALL
index be703f6..fd5a45f 100755
--- a/games-strategy-rts/netpanzer/INSTALL
+++ b/games-strategy-rts/netpanzer/INSTALL
@@ -1,6 +1,2 @@
-cd ${SOURCE_DIRECTORY}/docs &&
-sedit 's/.*serverhowto.xml.*//g' Jamfile &&
-cd ${SOURCE_DIRECTORY} &&
jam install &&
-cd ${INSTALL_ROOT}/usr/share/games/netpanzer &&
-chgrp -R games *
+chgrp -R games ${INSTALL_ROOT}/usr/share/games/netpanzer
diff --git a/games-strategy-rts/netpanzer/PRE_BUILD
b/games-strategy-rts/netpanzer/PRE_BUILD
deleted file mode 100755
index 389751a..0000000
--- a/games-strategy-rts/netpanzer/PRE_BUILD
+++ /dev/null
@@ -1,6 +0,0 @@
-default_pre_build &&
-cd $SOURCE_DIRECTORY &&
-patch -p0 < $SPELL_DIRECTORY/patches/netpanzer-0.8-gcc41.patch &&
-patch -p0 < $SPELL_DIRECTORY/patches/netpanzer-0.8-min-size-check.patch &&
-patch -p0 < $SPELL_DIRECTORY/patches/netpanzer-0.8-robust.patch
-
diff --git a/games-strategy-rts/netpanzer/patches/netpanzer-0.8-gcc41.patch
b/games-strategy-rts/netpanzer/patches/netpanzer-0.8-gcc41.patch
deleted file mode 100644
index f81008c..0000000
--- a/games-strategy-rts/netpanzer/patches/netpanzer-0.8-gcc41.patch
+++ /dev/null
@@ -1,36 +0,0 @@
---- src/Lib/Network/Address.hpp
-+++ src/Lib/Network/Address.hpp
-@@ -34,7 +34,7 @@
- /** resolves a hostname or IP-Number together with a port and returns a
- * new Address object.
- */
-- static Address Address::resolve(const std::string& name, uint16_t port);
-+ static Address resolve(const std::string& name, uint16_t port);
-
- /** returns the ip address of this Address as string */
- std::string getIP() const;
-
---- src/NetPanzer/Classes/PlayerState.hpp
-+++ src/NetPanzer/Classes/PlayerState.hpp
-@@ -81,8 +81,8 @@
- public:
- PlayerUnitConfig unit_config;
-
-- PlayerState::PlayerState();
-- PlayerState::PlayerState(const PlayerState& other);
-+ PlayerState();
-+ PlayerState(const PlayerState& other);
-
- void operator= (const PlayerState& other);
-
---- src/NetPanzer/Interfaces/Console.cpp
-+++ src/NetPanzer/Interfaces/Console.cpp
-@@ -46,7 +46,7 @@
- setp(buf, buf+sizeof(buf));
- }
-
-- FileStampStreamBuf::~FileStampStreamBuf()
-+ ~FileStampStreamBuf()
- {
- sync();
- if(file)
diff --git
a/games-strategy-rts/netpanzer/patches/netpanzer-0.8-min-size-check.patch
b/games-strategy-rts/netpanzer/patches/netpanzer-0.8-min-size-check.patch
deleted file mode 100644
index dc97ffc..0000000
--- a/games-strategy-rts/netpanzer/patches/netpanzer-0.8-min-size-check.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-The size needs to be at least 2 or the code gets hung up.
-
-http://bugs.gentoo.org/98922
-
---- src/NetPanzer/Network/ServerSocket.cpp
-+++ src/NetPanzer/Network/ServerSocket.cpp
-@@ -169,7 +169,7 @@
-
- size = htol16(*((int16_t*) tempbuffer));
-
-- if ( (size < 0) || (size > _MAX_NET_PACKET_SIZE) ) {
-+ if ( (size < 2) || (size > _MAX_NET_PACKET_SIZE) ) {
- LOG( ("OnReadStreamServer : Invalid Packet Size %d", size)
);
- recvoffset = 0;
- client->headerincomplete = false;
-@@ -224,7 +224,7 @@
-
- size = htol16(*((int16_t*) tempbuffer));
-
-- if ( (size < 0) || (size > _MAX_NET_PACKET_SIZE) ) {
-+ if ( (size < 2) || (size > _MAX_NET_PACKET_SIZE) ) {
- LOG( ("OnReadStreamServer : Invalid Packet Size %d",
size) );
- recvoffset = 0;
- client->messageincomplete = false;
-@@ -266,7 +266,7 @@
- } else if (recvsize >= 2) {
- size = htol16(*((int16_t*) (recvbuffer + recvoffset)));
-
-- if( (size < 0) || (size > _MAX_NET_PACKET_SIZE) ) {
-+ if( (size < 2) || (size > _MAX_NET_PACKET_SIZE) ) {
- LOG( ("OnReadStreamServer : Invalid Packet Size %d",
size) );
- recvoffset = 0;
- client->tempoffset = 0;
diff --git a/games-strategy-rts/netpanzer/patches/netpanzer-0.8-robust.patch
b/games-strategy-rts/netpanzer/patches/netpanzer-0.8-robust.patch
deleted file mode 100644
index d0e138e..0000000
--- a/games-strategy-rts/netpanzer/patches/netpanzer-0.8-robust.patch
+++ /dev/null
@@ -1,205 +0,0 @@
-A few more sanity checks from upstream svn.
-
-Index: src/NetPanzer/Interfaces/ChatInterface.cpp
-===================================================================
---- src/NetPanzer/Interfaces/ChatInterface.cpp (revision 928)
-+++ src/NetPanzer/Interfaces/ChatInterface.cpp (revision 929)
-@@ -39,9 +39,16 @@
- ChatMesg chat_mesg;
- const ChatMesgRequest* chat_request = (const ChatMesgRequest*) message;
-
-+ if(chat_request->getSourcePlayerIndex() >=
PlayerInterface::getMaxPlayers())
-+ {
-+ LOGGER.warning("Invalid chatMessageRequest");
-+ return;
-+ }
-+
- chat_mesg.setSourcePlayerIndex(chat_request->getSourcePlayerIndex());
- chat_mesg.message_scope = chat_request->message_scope;
-- strcpy( chat_mesg.message_text, chat_request->message_text );
-+ snprintf(chat_mesg.message_text, sizeof(chat_mesg.message_text), "%s",
-+ chat_request->message_text);
-
- if( chat_request->message_scope == _chat_mesg_scope_all ) {
- SERVER->sendMessage(&chat_mesg, sizeof(ChatMesg));
-@@ -126,6 +133,11 @@
- unsigned short local_player_index;
- const ChatMesg *chat_mesg = (const ChatMesg*) message;
-
-+ if(chat_mesg->getSourcePlayerIndex() >=
PlayerInterface::getMaxPlayers()) {
-+ LOGGER.warning("malformed chatmessage packet.");
-+ return;
-+ }
-+
- if( chat_mesg->message_scope == _chat_mesg_scope_server ) {
- ConsoleInterface::postMessage("Server: %s", chat_mesg->message_text
);
- return;
-Index: src/NetPanzer/Interfaces/GameManager.cpp
-===================================================================
---- src/NetPanzer/Interfaces/GameManager.cpp (revision 928)
-+++ src/NetPanzer/Interfaces/GameManager.cpp (revision 929)
-@@ -411,6 +411,11 @@
- = (const SystemConnectAlert*) message;
- PlayerState *player_state = 0;
-
-+ if(connect_alert->getPlayerID() >= PlayerInterface::getMaxPlayers()) {
-+ LOGGER.warning("Malformed connect alert message.");
-+ return;
-+ }
-+
- player_state = PlayerInterface::getPlayerState(
connect_alert->getPlayerID() );
-
- switch (connect_alert->alert_enum) {
-@@ -471,6 +476,11 @@
- const SystemPingRequest *ping_request
- = (const SystemPingRequest*) message;
-
-+ if(ping_request->getClientPlayerIndex() >=
PlayerInterface::getMaxPlayers()) {
-+ LOGGER.warning("Invalid pingRequest message");
-+ return;
-+ }
-+
- player_id = PlayerInterface::getPlayerID(
ping_request->getClientPlayerIndex() );
-
- SystemPingAcknowledge ping_ack;
-Index: src/NetPanzer/Interfaces/PlayerInterface.cpp
-===================================================================
---- src/NetPanzer/Interfaces/PlayerInterface.cpp (revision 928)
-+++ src/NetPanzer/Interfaces/PlayerInterface.cpp (revision 929)
-@@ -25,6 +25,7 @@
- #include "PlayerNetMessage.hpp"
- #include "Server.hpp"
- #include "NetworkServer.hpp"
-+#include "Util/Log.hpp"
-
- #include "ConsoleInterface.hpp"
- // for UNIT_FLAGS_SURFACE
-@@ -410,6 +411,10 @@
- = (const PlayerConnectID *) message;
-
- local_player_index = connect_mesg->connect_state.getPlayerIndex();
-+ if(local_player_index >= max_players) {
-+ LOGGER.warning("Invalide netMessageConnectID Message");
-+ return;
-+ }
-
- SDL_mutexP(mutex);
- player_lists[local_player_index].setFromNetworkPlayerState
-@@ -423,6 +428,12 @@
- const PlayerStateSync *sync_mesg
- = (const PlayerStateSync *) message;
- uint16_t player_index = sync_mesg->player_state.getPlayerIndex();
-+
-+ if(player_index >= max_players) {
-+ LOGGER.warning("Malformed MessageSyncState message");
-+ return;
-+ }
-+
- SDL_mutexP(mutex);
-
player_lists[player_index].setFromNetworkPlayerState(&sync_mesg->player_state);
- forceUniquePlayerFlags();
-@@ -475,6 +486,14 @@
- const PlayerScoreUpdate* score_update
- = (const PlayerScoreUpdate *) message;
-
-+ if(score_update->getKillByPlayerIndex() >=
PlayerInterface::getMaxPlayers()
-+ || score_update->getKillOnPlayerIndex()
-+ >= PlayerInterface::getMaxPlayers())
-+ {
-+ LOGGER.warning("Malformed scrore update packet.");
-+ return;
-+ }
-+
- PlayerState* player1 = getPlayer(score_update->getKillByPlayerIndex());
- PlayerState* player2 = getPlayer(score_update->getKillOnPlayerIndex());
- setKill(player1, player2, (UnitType) score_update->unit_type );
-@@ -487,6 +506,12 @@
- const PlayerAllianceRequest *allie_request
- = (const PlayerAllianceRequest *) message;
-
-+ if(allie_request->getAllieByPlayerIndex() >= max_players
-+ || allie_request->getAllieWithPlayerIndex() >= max_players) {
-+ LOGGER.warning("Invalid alliance request message");
-+ return;
-+ }
-+
- SDL_mutexP(mutex);
- if ( allie_request->alliance_request_type == _player_make_alliance ) {
- setAlliance(
-@@ -541,6 +566,12 @@
- const PlayerAllianceUpdate* allie_update
- = (const PlayerAllianceUpdate *) message;
-
-+ if(allie_update->getAllieByPlayerIndex() >= max_players
-+ || allie_update->getAllieWithPlayerIndex() >= max_players) {
-+ LOGGER.warning("Invalid alliance update message");
-+ return;
-+ }
-+
- SDL_mutexP(mutex);
- if (allie_update->alliance_update_type == _player_make_alliance) {
- setAlliance(
-Index: src/NetPanzer/Interfaces/InfoThread.cpp
-===================================================================
---- src/NetPanzer/Interfaces/InfoThread.cpp (revision 928)
-+++ src/NetPanzer/Interfaces/InfoThread.cpp (revision 929)
-@@ -174,15 +174,20 @@
- InfoThread::sendPlayers(std::stringstream& out)
- {
- ObjectiveInterface::updatePlayerObjectiveCounts();
-- for(int i = 0; i < PlayerInterface::countPlayers(); ++i) {
-+ int n = 0;
-+ for(int i = 0; i < PlayerInterface::getMaxPlayers(); ++i) {
- PlayerState* playerState = PlayerInterface::getPlayerState(i);
-- out << "player_" << i << "\\" << playerState->getName() << "\\"
-- << "kills_" << i << "\\" << playerState->getKills() << "\\"
-- << "deaths_" << i << "\\" << playerState->getLosses() << "\\"
-- << "score_" << i << "\\"
-+ if(playerState->getStatus() != _player_state_active)
-+ continue;
-+
-+ out << "player_" << n << "\\" << playerState->getName() << "\\"
-+ << "kills_" << n << "\\" << playerState->getKills() << "\\"
-+ << "deaths_" << n << "\\" << playerState->getLosses() << "\\"
-+ << "score_" << n << "\\"
- << playerState->getObjectivesHeld() << "\\"
-- << "flag_" << i << "\\"
-+ << "flag_" << n << "\\"
- << (int) playerState->getFlag() << "\\";
-+ n++;
- }
- // TODO add team/alliance info
- }
-Index: src/NetPanzer/Classes/Network/NetMessageDecoder.cpp
-===================================================================
---- src/NetPanzer/Classes/Network/NetMessageDecoder.cpp (revision 928)
-+++ src/NetPanzer/Classes/Network/NetMessageDecoder.cpp (revision 929)
-@@ -57,6 +57,12 @@
- return false;
-
- *message = (NetMessage *) (decode_message.data + decode_message_index);
-+ if( (*message)->getSize() >
-+ decode_message.getSize() - decode_message.getHeaderSize() -
-+ decode_message_index) {
-+ LOGGER.warning("Malformed Multimessage!");
-+ return false;
-+ }
- decode_message_index += (*message)->getSize();
- decode_current_count++;
-
-Index: src/NetPanzer/Classes/Objective.cpp
-===================================================================
---- src/NetPanzer/Classes/Objective.cpp (revision 928)
-+++ src/NetPanzer/Classes/Objective.cpp (revision 929)
-@@ -69,6 +69,11 @@
- {
- const SyncObjective *sync_mesg = (const SyncObjective*) message;
-
-+ if(sync_mesg->getOccupyingPlayerID() >=
PlayerInterface::getMaxPlayers()) {
-+ LOGGER.warning("Malformed ObjectvieMesgSync");
-+ return;
-+ }
-+
- objective_state.objective_status = sync_mesg->objective_status;
- objective_state.occupation_status = sync_mesg->occupation_status;
- if(objective_state.occupation_status != _occupation_status_unoccupied) {



  • [SM-Commit] GIT changes to master games grimoire by Alexander Tsamutali (e9055b6781a0ddabf72f92884319bb3031d4c7f5), Alexander Tsamutali, 10/31/2007

Archive powered by MHonArc 2.6.24.

Top of Page