aboutsummaryrefslogtreecommitdiff
path: root/src/util/sha1.cpp
blob: d61b262afef97d2fc04685c54d567d5a02d409d8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
/* sha1.cpp

Copyright (c) 2005 Michael D. Leonhard

http://tamale.net/

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

*/

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cassert>

#include "sha1.h"

// print out memory in hexadecimal
void SHA1::hexPrinter( unsigned char* c, int l )
{
	assert( c );
	assert( l > 0 );
	while( l > 0 )
	{
		printf( " %02x", *c );
		l--;
		c++;
	}
}

// circular left bit rotation.  MSB wraps around to LSB
Uint32 SHA1::lrot( Uint32 x, int bits )
{
	return (x<<bits) | (x>>(32 - bits));
};

// Save a 32-bit unsigned integer to memory, in big-endian order
void SHA1::storeBigEndianUint32( unsigned char* byte, Uint32 num )
{
	assert( byte );
	byte[0] = (unsigned char)(num>>24);
	byte[1] = (unsigned char)(num>>16);
	byte[2] = (unsigned char)(num>>8);
	byte[3] = (unsigned char)num;
}


// Constructor *******************************************************
SHA1::SHA1()
{
	// make sure that the data type is the right size
	assert( sizeof( Uint32 ) * 5 == 20 );
}

// Destructor ********************************************************
SHA1::~SHA1()
{
	// erase data
	H0 = H1 = H2 = H3 = H4 = 0;
	for( int c = 0; c < 64; c++ ) bytes[c] = 0;
	unprocessedBytes = size = 0;
}

// process ***********************************************************
void SHA1::process()
{
	assert( unprocessedBytes == 64 );
	//printf( "process: " ); hexPrinter( bytes, 64 ); printf( "\n" );
	int t;
	Uint32 a, b, c, d, e, K, f, W[80];
	// starting values
	a = H0;
	b = H1;
	c = H2;
	d = H3;
	e = H4;
	// copy and expand the message block
	for( t = 0; t < 16; t++ ) W[t] = (bytes[t*4] << 24)
									+(bytes[t*4 + 1] << 16)
									+(bytes[t*4 + 2] << 8)
									+ bytes[t*4 + 3];
	for(; t< 80; t++ ) W[t] = lrot( W[t-3]^W[t-8]^W[t-14]^W[t-16], 1 );

	/* main loop */
	Uint32 temp;
	for( t = 0; t < 80; t++ )
	{
		if( t < 20 ) {
			K = 0x5a827999;
			f = (b & c) | ((b ^ 0xFFFFFFFF) & d);//TODO: try using ~
		} else if( t < 40 ) {
			K = 0x6ed9eba1;
			f = b ^ c ^ d;
		} else if( t < 60 ) {
			K = 0x8f1bbcdc;
			f = (b & c) | (b & d) | (c & d);
		} else {
			K = 0xca62c1d6;
			f = b ^ c ^ d;
		}
		temp = lrot(a,5) + f + e + W[t] + K;
		e = d;
		d = c;
		c = lrot(b,30);
		b = a;
		a = temp;
		//printf( "t=%d %08x %08x %08x %08x %08x\n",t,a,b,c,d,e );
	}
	/* add variables */
	H0 += a;
	H1 += b;
	H2 += c;
	H3 += d;
	H4 += e;
	//printf( "Current: %08x %08x %08x %08x %08x\n",H0,H1,H2,H3,H4 );
	/* all bytes have been processed */
	unprocessedBytes = 0;
}

// addBytes **********************************************************
void SHA1::addBytes( const char* data, int num )
{
	assert( data );
	assert( num >= 0 );
	// add these bytes to the running total
	size += num;
	// repeat until all data is processed
	while( num > 0 )
	{
		// number of bytes required to complete block
		int needed = 64 - unprocessedBytes;
		assert( needed > 0 );
		// number of bytes to copy (use smaller of two)
		int toCopy = (num < needed) ? num : needed;
		// Copy the bytes
		memcpy( bytes + unprocessedBytes, data, toCopy );
		// Bytes have been copied
		num -= toCopy;
		data += toCopy;
		unprocessedBytes += toCopy;

		// there is a full block
		if( unprocessedBytes == 64 ) process();
	}
}

// digest ************************************************************
unsigned char* SHA1::getDigest()
{
	// save the message size
	Uint32 totalBitsL = size << 3;
	Uint32 totalBitsH = size >> 29;
	// add 0x80 to the message
	addBytes( "\x80", 1 );

	unsigned char footer[64] = {
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
	// block has no room for 8-byte filesize, so finish it
	if( unprocessedBytes > 56 )
		addBytes( (char*)footer, 64 - unprocessedBytes);
	assert( unprocessedBytes <= 56 );
	// how many zeros do we need
	int neededZeros = 56 - unprocessedBytes;
	// store file size (in bits) in big-endian format
	storeBigEndianUint32( footer + neededZeros    , totalBitsH );
	storeBigEndianUint32( footer + neededZeros + 4, totalBitsL );
	// finish the final block
	addBytes( (char*)footer, neededZeros + 8 );
	// allocate memory for the digest bytes
	unsigned char* digest = (unsigned char*)malloc( 20 );
	// copy the digest bytes
	storeBigEndianUint32( digest, H0 );
	storeBigEndianUint32( digest + 4, H1 );
	storeBigEndianUint32( digest + 8, H2 );
	storeBigEndianUint32( digest + 12, H3 );
	storeBigEndianUint32( digest + 16, H4 );
	// return the digest
	return digest;
}
974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-03-14 16:32+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#: builtin/fstk/ui.lua:67 builtin/mainmenu/store.lua:165
msgid "Ok"
msgstr ""

#: builtin/mainmenu/dlg_config_world.lua:29
msgid "World:"
msgstr ""

#: builtin/mainmenu/dlg_config_world.lua:33
#: builtin/mainmenu/dlg_config_world.lua:35
msgid "Hide Game"
msgstr ""

#: builtin/mainmenu/dlg_config_world.lua:39
#: builtin/mainmenu/dlg_config_world.lua:41
msgid "Hide mp content"
msgstr ""

#: builtin/mainmenu/dlg_config_world.lua:49
msgid "Mod:"
msgstr ""

#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99
msgid "Depends:"
msgstr ""

#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:192
msgid "Save"
msgstr ""

#: builtin/mainmenu/dlg_config_world.lua:55
#: builtin/mainmenu/dlg_create_world.lua:64
#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:200
#: src/keycode.cpp:224
msgid "Cancel"
msgstr ""

#: builtin/mainmenu/dlg_config_world.lua:71
msgid "Enable MP"
msgstr ""

#: builtin/mainmenu/dlg_config_world.lua:73
msgid "Disable MP"
msgstr ""

#: builtin/mainmenu/dlg_config_world.lua:77
#: builtin/mainmenu/dlg_config_world.lua:79
msgid "enabled"
msgstr ""

#: builtin/mainmenu/dlg_config_world.lua:85
msgid "Enable all"
msgstr ""

#: builtin/mainmenu/dlg_create_world.lua:50
msgid "World name"
msgstr ""

#: builtin/mainmenu/dlg_create_world.lua:53
msgid "Seed"
msgstr ""

#: builtin/mainmenu/dlg_create_world.lua:56
msgid "Mapgen"
msgstr ""

#: builtin/mainmenu/dlg_create_world.lua:59
msgid "Game"
msgstr ""

#: builtin/mainmenu/dlg_create_world.lua:63
msgid "Create"
msgstr ""

#: builtin/mainmenu/dlg_create_world.lua:68
msgid "You have no subgames installed."
msgstr ""

#: builtin/mainmenu/dlg_create_world.lua:69
msgid "Download one from minetest.net"
msgstr ""

#: builtin/mainmenu/dlg_create_world.lua:72
msgid "Warning: The minimal development test is meant for developers."
msgstr ""

#: builtin/mainmenu/dlg_create_world.lua:73
msgid "Download a subgame, such as minetest_game, from minetest.net"
msgstr ""

#: builtin/mainmenu/dlg_create_world.lua:99
msgid "A world named \"$1\" already exists"
msgstr ""

#: builtin/mainmenu/dlg_create_world.lua:116
msgid "No worldname given or no game selected"
msgstr ""

#: builtin/mainmenu/dlg_delete_mod.lua:26
msgid "Are you sure you want to delete \"$1\"?"
msgstr ""

#: builtin/mainmenu/dlg_delete_mod.lua:27
#: builtin/mainmenu/dlg_delete_world.lua:25
#: builtin/mainmenu/tab_settings.lua:79
msgid "Yes"
msgstr ""

#: builtin/mainmenu/dlg_delete_mod.lua:28
msgid "No of course not!"
msgstr ""

#: builtin/mainmenu/dlg_delete_mod.lua:41
msgid "Modmgr: failed to delete \"$1\""
msgstr ""

#: builtin/mainmenu/dlg_delete_mod.lua:45
msgid "Modmgr: invalid modpath \"$1\""
msgstr ""

#: builtin/mainmenu/dlg_delete_world.lua:24
msgid "Delete World \"$1\"?"
msgstr ""

#: builtin/mainmenu/dlg_delete_world.lua:26
msgid "No"
msgstr ""

#: builtin/mainmenu/dlg_rename_modpack.lua:26
msgid "Rename Modpack:"
msgstr ""

#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228
msgid "Accept"
msgstr ""

#: builtin/mainmenu/modmgr.lua:342
msgid "Install Mod: file: \"$1\""
msgstr ""

#: builtin/mainmenu/modmgr.lua:343
msgid ""
"\n"
"Install Mod: unsupported filetype \"$1\" or broken archive"
msgstr ""

#: builtin/mainmenu/modmgr.lua:363
msgid "Failed to install $1 to $2"
msgstr ""

#: builtin/mainmenu/modmgr.lua:366
msgid "Install Mod: unable to find suitable foldername for modpack $1"
msgstr ""

#: builtin/mainmenu/modmgr.lua:386
msgid "Install Mod: unable to find real modname for: $1"
msgstr ""

#: builtin/mainmenu/store.lua:88
msgid "Unsorted"
msgstr ""

#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580
msgid "Search"
msgstr ""

#: builtin/mainmenu/store.lua:126
msgid "Downloading $1, please wait..."
msgstr ""

#: builtin/mainmenu/store.lua:160
msgid "Successfully installed:"
msgstr ""

#: builtin/mainmenu/store.lua:162
msgid "Shortname:"
msgstr ""

#: builtin/mainmenu/store.lua:472
msgid "Rating"
msgstr ""

#: builtin/mainmenu/store.lua:497
msgid "re-Install"
msgstr ""

#: builtin/mainmenu/store.lua:499
msgid "Install"
msgstr ""

#: builtin/mainmenu/store.lua:518
msgid "Close store"
msgstr ""

#: builtin/mainmenu/store.lua:526
msgid "Page $1 of $2"
msgstr ""

#: builtin/mainmenu/tab_credits.lua:22
msgid "Credits"
msgstr ""

#: builtin/mainmenu/tab_credits.lua:29
msgid "Core Developers"
msgstr ""

#: builtin/mainmenu/tab_credits.lua:43
msgid "Active Contributors"
msgstr ""

#: builtin/mainmenu/tab_credits.lua:48
msgid "Previous Contributors"
msgstr ""

#: builtin/mainmenu/tab_mods.lua:30
msgid "Installed Mods:"
msgstr ""

#: builtin/mainmenu/tab_mods.lua:39
msgid "Online mod repository"
msgstr ""

#: builtin/mainmenu/tab_mods.lua:78
msgid "No mod description available"
msgstr ""

#: builtin/mainmenu/tab_mods.lua:82
msgid "Mod information:"
msgstr ""

#: builtin/mainmenu/tab_mods.lua:93
msgid "Rename"
msgstr ""

#: builtin/mainmenu/tab_mods.lua:95
msgid "Uninstall selected modpack"
msgstr ""

#: builtin/mainmenu/tab_mods.lua:106
msgid "Uninstall selected mod"
msgstr ""

#: builtin/mainmenu/tab_mods.lua:121
msgid "Select Mod File:"
msgstr ""

#: builtin/mainmenu/tab_mods.lua:165
msgid "Mods"
msgstr ""

#: builtin/mainmenu/tab_multiplayer.lua:23
msgid "Address / Port :"
msgstr ""

#: builtin/mainmenu/tab_multiplayer.lua:24
msgid "Name / Password :"
msgstr ""

#: builtin/mainmenu/tab_multiplayer.lua:29
#: builtin/mainmenu/tab_simple_main.lua:30
msgid "Public Serverlist"
msgstr ""

#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26
#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230
msgid "Delete"
msgstr ""

#: builtin/mainmenu/tab_multiplayer.lua:38
#: builtin/mainmenu/tab_simple_main.lua:34
msgid "Connect"
msgstr ""

#: builtin/mainmenu/tab_multiplayer.lua:62
#: builtin/mainmenu/tab_simple_main.lua:45
msgid "Creative mode"
msgstr ""

#: builtin/mainmenu/tab_multiplayer.lua:63
#: builtin/mainmenu/tab_simple_main.lua:46
msgid "Damage enabled"
msgstr ""

#: builtin/mainmenu/tab_multiplayer.lua:64
#: builtin/mainmenu/tab_simple_main.lua:47
msgid "PvP enabled"
msgstr ""

#: builtin/mainmenu/tab_multiplayer.lua:257
msgid "Client"
msgstr ""

#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86
msgid "New"
msgstr ""

#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87
msgid "Configure"
msgstr ""

#: builtin/mainmenu/tab_server.lua:29
msgid "Start Game"
msgstr ""

#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89
msgid "Select World:"
msgstr ""

#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76
#: builtin/mainmenu/tab_singleplayer.lua:90
msgid "Creative Mode"
msgstr ""

#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78
#: builtin/mainmenu/tab_singleplayer.lua:92
msgid "Enable Damage"
msgstr ""

#: builtin/mainmenu/tab_server.lua:35
msgid "Public"
msgstr ""

#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25
msgid "Name/Password"
msgstr ""

#: builtin/mainmenu/tab_server.lua:45
msgid "Bind Address"
msgstr ""

#: builtin/mainmenu/tab_server.lua:47
msgid "Port"
msgstr ""

#: builtin/mainmenu/tab_server.lua:51
msgid "Server Port"
msgstr ""

#: builtin/mainmenu/tab_server.lua:174
msgid "Server"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:21
msgid "No Filter"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:22
msgid "Bilinear Filter"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:23
msgid "Trilinear Filter"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:32
msgid "No Mipmap"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:33
msgid "Mipmap"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:34
msgid "Mipmap + Aniso. Filter"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:77
msgid "Are you sure to reset your singleplayer world?"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:81
msgid "No!!!"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:181
msgid "Smooth Lighting"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:183
msgid "Enable Particles"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:185
msgid "3D Clouds"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:187
msgid "Fancy Trees"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:189
msgid "Opaque Water"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:191
msgid "Connected Glass"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:193
msgid "Node Highlighting"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:196
msgid "Texturing:"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:201
msgid "Rendering:"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:205
msgid "Restart minetest for driver change to take effect"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:207
msgid "Shaders"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:212
msgid "Change keys"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:215
msgid "Reset singleplayer world"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:219
msgid "GUI scale factor"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:223
msgid "Scaling factor applied to menu elements: "
msgstr ""

#: builtin/mainmenu/tab_settings.lua:229
msgid "Touch free target"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:235
msgid "Touchthreshold (px)"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:242 builtin/mainmenu/tab_settings.lua:256
msgid "Bumpmapping"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:244 builtin/mainmenu/tab_settings.lua:257
msgid "Generate Normalmaps"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:246 builtin/mainmenu/tab_settings.lua:258
msgid "Parallax Occlusion"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:248 builtin/mainmenu/tab_settings.lua:259
msgid "Waving Water"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:250 builtin/mainmenu/tab_settings.lua:260
msgid "Waving Leaves"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:252 builtin/mainmenu/tab_settings.lua:261
msgid "Waving Plants"
msgstr ""

#: builtin/mainmenu/tab_settings.lua:287
msgid "To enable shaders the OpenGL driver needs to be used."
msgstr ""

#: builtin/mainmenu/tab_settings.lua:398
msgid "Settings"
msgstr ""

#: builtin/mainmenu/tab_simple_main.lua:80
msgid "Fly mode"
msgstr ""

#: builtin/mainmenu/tab_simple_main.lua:84
msgid "Start Singleplayer"
msgstr ""

#: builtin/mainmenu/tab_simple_main.lua:85
msgid "Config mods"
msgstr ""

#: builtin/mainmenu/tab_simple_main.lua:208
msgid "Main"
msgstr ""

#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249
msgid "Play"
msgstr ""

#: builtin/mainmenu/tab_singleplayer.lua:224
msgid "Singleplayer"
msgstr ""

#: builtin/mainmenu/tab_texturepacks.lua:49
msgid "Select texture pack:"
msgstr ""

#: builtin/mainmenu/tab_texturepacks.lua:69
msgid "No information available"
msgstr ""

#: builtin/mainmenu/tab_texturepacks.lua:114
msgid "Texturepacks"
msgstr ""

#: src/client.cpp:1563
msgid "Loading textures..."
msgstr ""

#: src/client.cpp:1573
msgid "Rebuilding shaders..."
msgstr ""

#: src/client.cpp:1580
msgid "Initializing nodes..."
msgstr ""

#: src/client.cpp:1595
msgid "Item textures..."
msgstr ""

#: src/client.cpp:1620
msgid "Done!"
msgstr ""

#: src/client/clientlauncher.cpp:172
msgid "Main Menu"
msgstr ""

#: src/client/clientlauncher.cpp:210
msgid "Player name too long."
msgstr ""

#: src/client/clientlauncher.cpp:248
msgid "Connection error (timed out?)"
msgstr ""

#: src/client/clientlauncher.cpp:413
msgid "No world selected and no address provided. Nothing to do."
msgstr ""

#: src/client/clientlauncher.cpp:420
msgid "Provided world path doesn't exist: "
msgstr ""

#: src/client/clientlauncher.cpp:429
msgid "Could not find or load game \""
msgstr ""

#: src/client/clientlauncher.cpp:447
msgid "Invalid gamespec."
msgstr ""

#: src/fontengine.cpp:70 src/fontengine.cpp:226
msgid "needs_fallback_font"
msgstr ""

#: src/game.cpp:1061 src/guiFormSpecMenu.cpp:2008
msgid "Proceed"
msgstr ""

#: src/game.cpp:1081
msgid "You died."
msgstr ""

#: src/game.cpp:1082
msgid "Respawn"
msgstr ""

#: src/game.cpp:1101
msgid ""
"Default Controls:\n"
"No menu visible:\n"
"- single tap: button activate\n"
"- double tap: place/use\n"
"- slide finger: look around\n"
"Menu/Inventory visible:\n"
"- double tap (outside):\n"
" -->close\n"
"- touch stack, touch slot:\n"
" --> move stack\n"
"- touch&drag, tap 2nd finger\n"
" --> place single item to slot\n"
msgstr ""

#: src/game.cpp:1115
msgid ""
"Default Controls:\n"
"- WASD: move\n"
"- Space: jump/climb\n"
"- Shift: sneak/go down\n"
"- Q: drop item\n"
"- I: inventory\n"
"- Mouse: turn/look\n"
"- Mouse left: dig/punch\n"
"- Mouse right: place/use\n"
"- Mouse wheel: select item\n"
"- T: chat\n"
msgstr ""

#: src/game.cpp:1134
msgid "Continue"
msgstr ""

#: src/game.cpp:1138
msgid "Change Password"
msgstr ""

#: src/game.cpp:1143
msgid "Sound Volume"
msgstr ""

#: src/game.cpp:1145
msgid "Change Keys"
msgstr ""

#: src/game.cpp:1148
msgid "Exit to Menu"
msgstr ""

#: src/game.cpp:1150
msgid "Exit to OS"
msgstr ""

#: src/game.cpp:1827
msgid "Shutting down..."
msgstr ""

#: src/game.cpp:1876
msgid "Loading..."
msgstr ""

#: src/game.cpp:1933
msgid "Creating server..."
msgstr ""

#: src/game.cpp:1970
msgid "Creating client..."
msgstr ""

#: src/game.cpp:2143
msgid "Resolving address..."
msgstr ""

#: src/game.cpp:2234
msgid "Connecting to server..."
msgstr ""

#: src/game.cpp:2292
msgid "Item definitions..."
msgstr ""

#: src/game.cpp:2297
msgid "Node definitions..."
msgstr ""

#: src/game.cpp:2304
msgid "Media..."
msgstr ""

#: src/game.cpp:2309
msgid " KB/s"
msgstr ""

#: src/game.cpp:2313
msgid " MB/s"
msgstr ""

#: src/game.cpp:4265
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""

#: src/guiFormSpecMenu.cpp:2799
msgid "Enter "
msgstr ""

#: src/guiFormSpecMenu.cpp:2819
msgid "ok"
msgstr ""

#: src/guiKeyChangeMenu.cpp:126
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""

#: src/guiKeyChangeMenu.cpp:166
msgid "\"Use\" = climb down"
msgstr ""

#: src/guiKeyChangeMenu.cpp:181
msgid "Double tap \"jump\" to toggle fly"
msgstr ""

#: src/guiKeyChangeMenu.cpp:297
msgid "Key already in use"
msgstr ""

#: src/guiKeyChangeMenu.cpp:372
msgid "press key"
msgstr ""

#: src/guiKeyChangeMenu.cpp:398
msgid "Forward"
msgstr ""

#: src/guiKeyChangeMenu.cpp:399
msgid "Backward"
msgstr ""

#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229
msgid "Left"
msgstr ""

#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:229
msgid "Right"
msgstr ""

#: src/guiKeyChangeMenu.cpp:402
msgid "Use"
msgstr ""

#: src/guiKeyChangeMenu.cpp:403
msgid "Jump"
msgstr ""

#: src/guiKeyChangeMenu.cpp:404
msgid "Sneak"
msgstr ""

#: src/guiKeyChangeMenu.cpp:405
msgid "Drop"
msgstr ""

#: src/guiKeyChangeMenu.cpp:406
msgid "Inventory"
msgstr ""

#: src/guiKeyChangeMenu.cpp:407
msgid "Chat"
msgstr ""

#: src/guiKeyChangeMenu.cpp:408
msgid "Command"
msgstr ""

#: src/guiKeyChangeMenu.cpp:409
msgid "Console"
msgstr ""

#: src/guiKeyChangeMenu.cpp:410
msgid "Toggle fly"
msgstr ""

#: src/guiKeyChangeMenu.cpp:411
msgid "Toggle fast"
msgstr ""

#: src/guiKeyChangeMenu.cpp:412
msgid "Toggle Cinematic"
msgstr ""

#: src/guiKeyChangeMenu.cpp:413
msgid "Toggle noclip"
msgstr ""

#: src/guiKeyChangeMenu.cpp:414
msgid "Range select"
msgstr ""

#: src/guiKeyChangeMenu.cpp:415
msgid "Print stacks"
msgstr ""

#: src/guiPasswordChange.cpp:108
msgid "Old Password"
msgstr ""

#: src/guiPasswordChange.cpp:124
msgid "New Password"
msgstr ""

#: src/guiPasswordChange.cpp:139
msgid "Confirm Password"
msgstr ""

#: src/guiPasswordChange.cpp:155
msgid "Change"
msgstr ""

#: src/guiPasswordChange.cpp:164
msgid "Passwords do not match!"
msgstr ""

#: src/guiVolumeChange.cpp:106
msgid "Sound Volume: "
msgstr ""

#: src/guiVolumeChange.cpp:120
msgid "Exit"
msgstr ""

#: src/keycode.cpp:224
msgid "Left Button"
msgstr ""

#: src/keycode.cpp:224
msgid "Middle Button"
msgstr ""

#: src/keycode.cpp:224
msgid "Right Button"
msgstr ""

#: src/keycode.cpp:224
msgid "X Button 1"
msgstr ""

#: src/keycode.cpp:225
msgid "Back"
msgstr ""

#: src/keycode.cpp:225
msgid "Clear"
msgstr ""

#: src/keycode.cpp:225
msgid "Return"
msgstr ""

#: src/keycode.cpp:225
msgid "Tab"
msgstr ""

#: src/keycode.cpp:225
msgid "X Button 2"
msgstr ""

#: src/keycode.cpp:226
msgid "Capital"
msgstr ""

#: src/keycode.cpp:226
msgid "Control"
msgstr ""

#: src/keycode.cpp:226
msgid "Kana"
msgstr ""

#: src/keycode.cpp:226
msgid "Menu"
msgstr ""

#: src/keycode.cpp:226
msgid "Pause"
msgstr ""

#: src/keycode.cpp:226
msgid "Shift"
msgstr ""

#: src/keycode.cpp:227
msgid "Convert"
msgstr ""

#: src/keycode.cpp:227
msgid "Escape"
msgstr ""

#: src/keycode.cpp:227
msgid "Final"
msgstr ""

#: src/keycode.cpp:227
msgid "Junja"
msgstr ""

#: src/keycode.cpp:227
msgid "Kanji"
msgstr ""

#: src/keycode.cpp:227
msgid "Nonconvert"
msgstr ""

#: src/keycode.cpp:228
msgid "End"
msgstr ""

#: src/keycode.cpp:228
msgid "Home"
msgstr ""

#: src/keycode.cpp:228
msgid "Mode Change"
msgstr ""

#: src/keycode.cpp:228
msgid "Next"
msgstr ""

#: src/keycode.cpp:228
msgid "Prior"
msgstr ""

#: src/keycode.cpp:228
msgid "Space"
msgstr ""

#: src/keycode.cpp:229
msgid "Down"
msgstr ""

#: src/keycode.cpp:229
msgid "Execute"
msgstr ""

#: src/keycode.cpp:229
msgid "Print"
msgstr ""

#: src/keycode.cpp:229
msgid "Select"
msgstr ""

#: src/keycode.cpp:229
msgid "Up"
msgstr ""

#: src/keycode.cpp:230
msgid "Help"
msgstr ""

#: src/keycode.cpp:230
msgid "Insert"
msgstr ""

#: src/keycode.cpp:230
msgid "Snapshot"
msgstr ""

#: src/keycode.cpp:233
msgid "Left Windows"
msgstr ""

#: src/keycode.cpp:234
msgid "Apps"
msgstr ""

#: src/keycode.cpp:234
msgid "Numpad 0"
msgstr ""

#: src/keycode.cpp:234
msgid "Numpad 1"
msgstr ""

#: src/keycode.cpp:234
msgid "Right Windows"
msgstr ""

#: src/keycode.cpp:234
msgid "Sleep"
msgstr ""

#: src/keycode.cpp:235
msgid "Numpad 2"
msgstr ""

#: src/keycode.cpp:235
msgid "Numpad 3"
msgstr ""

#: src/keycode.cpp:235
msgid "Numpad 4"
msgstr ""

#: src/keycode.cpp:235
msgid "Numpad 5"
msgstr ""

#: src/keycode.cpp:235
msgid "Numpad 6"
msgstr ""

#: src/keycode.cpp:235
msgid "Numpad 7"
msgstr ""

#: src/keycode.cpp:236
msgid "Numpad *"
msgstr ""

#: src/keycode.cpp:236
msgid "Numpad +"
msgstr ""

#: src/keycode.cpp:236
msgid "Numpad -"
msgstr ""

#: src/keycode.cpp:236
msgid "Numpad /"
msgstr ""

#: src/keycode.cpp:236
msgid "Numpad 8"
msgstr ""

#: src/keycode.cpp:236
msgid "Numpad 9"
msgstr ""

#: src/keycode.cpp:240
msgid "Num Lock"
msgstr ""

#: src/keycode.cpp:240
msgid "Scroll Lock"
msgstr ""

#: src/keycode.cpp:241
msgid "Left Shift"
msgstr ""

#: src/keycode.cpp:241
msgid "Right Shift"
msgstr ""

#: src/keycode.cpp:242
msgid "Left Control"
msgstr ""

#: src/keycode.cpp:242
msgid "Left Menu"
msgstr ""

#: src/keycode.cpp:242
msgid "Right Control"
msgstr ""

#: src/keycode.cpp:242
msgid "Right Menu"
msgstr ""

#: src/keycode.cpp:244
msgid "Comma"
msgstr ""

#: src/keycode.cpp:244
msgid "Minus"
msgstr ""

#: src/keycode.cpp:244
msgid "Period"
msgstr ""

#: src/keycode.cpp:244
msgid "Plus"
msgstr ""

#: src/keycode.cpp:248
msgid "Attn"
msgstr ""

#: src/keycode.cpp:248
msgid "CrSel"
msgstr ""

#: src/keycode.cpp:249
msgid "Erase OEF"
msgstr ""

#: src/keycode.cpp:249
msgid "ExSel"
msgstr ""

#: src/keycode.cpp:249
msgid "OEM Clear"
msgstr ""

#: src/keycode.cpp:249
msgid "PA1"
msgstr ""

#: src/keycode.cpp:249
msgid "Zoom"
msgstr ""