aboutsummaryrefslogtreecommitdiff
path: root/src/util/srp.cpp
blob: 4c1a772e2c8d796aa4aa59d3a627c6e97032bfa4 (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
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
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
/*
 * Secure Remote Password 6a implementation
 * https://github.com/est31/csrp-gmp
 *
 * The MIT License (MIT)
 *
 * Copyright (c) 2010, 2013 Tom Cocagne, 2015 est31 <MTest31@outlook.com>
 *
 * 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.
 *
 */

// clang-format off
#ifdef WIN32
	#include <windows.h>
	#include <wincrypt.h>
#else
	#include <ctime>

#endif
// clang-format on

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

#include <config.h>

#if USE_SYSTEM_GMP || defined (__ANDROID__) || defined (ANDROID)
	#include <gmp.h>
#else
	#include <mini-gmp.h>
#endif

#include <util/sha2.h>

#include "srp.h"
//#define CSRP_USE_SHA1
#define CSRP_USE_SHA256

#define srp_dbg_data(data, datalen, prevtext) ;
/*void srp_dbg_data(unsigned char * data, size_t datalen, char * prevtext)
{
	printf(prevtext);
	size_t i;
	for (i = 0; i < datalen; i++)
	{
		printf("%02X", data[i]);
	}
	printf("\n");
}*/

static int g_initialized = 0;

#define RAND_BUFF_MAX 128
static unsigned int g_rand_idx;
static unsigned char g_rand_buff[RAND_BUFF_MAX];

void *(*srp_alloc)(size_t) = &malloc;
void *(*srp_realloc)(void *, size_t) = &realloc;
void (*srp_free)(void *) = &free;

// clang-format off
void srp_set_memory_functions(
		void *(*new_srp_alloc)(size_t),
		void *(*new_srp_realloc)(void *, size_t),
		void (*new_srp_free)(void *))
{
	srp_alloc = new_srp_alloc;
	srp_realloc = new_srp_realloc;
	srp_free = new_srp_free;
}
// clang-format on

typedef struct {
	mpz_t N;
	mpz_t g;
} NGConstant;

struct NGHex {
	const char *n_hex;
	const char *g_hex;
};

/* All constants here were pulled from Appendix A of RFC 5054 */
static struct NGHex global_Ng_constants[] = {
	{/* 1024 */
		"EEAF0AB9ADB38DD69C33F80AFA8FC5E86072618775FF3C0B9EA2314C"
		"9C256576D674DF7496EA81D3383B4813D692C6E0E0D5D8E250B98BE4"
		"8E495C1D6089DAD15DC7D7B46154D6B6CE8EF4AD69B15D4982559B29"
		"7BCF1885C529F566660E57EC68EDBC3C05726CC02FD4CBF4976EAA9A"
		"FD5138FE8376435B9FC61D2FC0EB06E3",
		"2"},
	{/* 2048 */
		"AC6BDB41324A9A9BF166DE5E1389582FAF72B6651987EE07FC319294"
		"3DB56050A37329CBB4A099ED8193E0757767A13DD52312AB4B03310D"
		"CD7F48A9DA04FD50E8083969EDB767B0CF6095179A163AB3661A05FB"
		"D5FAAAE82918A9962F0B93B855F97993EC975EEAA80D740ADBF4FF74"
		"7359D041D5C33EA71D281E446B14773BCA97B43A23FB801676BD207A"
		"436C6481F1D2B9078717461A5B9D32E688F87748544523B524B0D57D"
		"5EA77A2775D2ECFA032CFBDBF52FB3786160279004E57AE6AF874E73"
		"03CE53299CCC041C7BC308D82A5698F3A8D0C38271AE35F8E9DBFBB6"
		"94B5C803D89F7AE435DE236D525F54759B65E372FCD68EF20FA7111F"
		"9E4AFF73",
		"2"},
	{/* 4096 */
		"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08"
		"8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B"
		"302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9"
		"A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6"
		"49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8"
		"FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D"
		"670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C"
		"180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718"
		"3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D"
		"04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D"
		"B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226"
		"1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C"
		"BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC"
		"E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26"
		"99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB"
		"04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2"
		"233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127"
		"D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199"
		"FFFFFFFFFFFFFFFF",
		"5"},
	{/* 8192 */
		"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08"
		"8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B"
		"302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9"
		"A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6"
		"49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8"
		"FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D"
		"670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C"
		"180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718"
		"3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D"
		"04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D"
		"B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226"
		"1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C"
		"BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC"
		"E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26"
		"99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB"
		"04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2"
		"233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127"
		"D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492"
		"36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BDF8FF9406"
		"AD9E530EE5DB382F413001AEB06A53ED9027D831179727B0865A8918"
		"DA3EDBEBCF9B14ED44CE6CBACED4BB1BDB7F1447E6CC254B33205151"
		"2BD7AF426FB8F401378CD2BF5983CA01C64B92ECF032EA15D1721D03"
		"F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E59E7C97F"
		"BEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA"
		"CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58B"
		"B7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632"
		"387FE8D76E3C0468043E8F663F4860EE12BF2D5B0B7474D6E694F91E"
		"6DBE115974A3926F12FEE5E438777CB6A932DF8CD8BEC4D073B931BA"
		"3BC832B68D9DD300741FA7BF8AFC47ED2576F6936BA424663AAB639C"
		"5AE4F5683423B4742BF1C978238F16CBE39D652DE3FDB8BEFC848AD9"
		"22222E04A4037C0713EB57A81A23F0C73473FC646CEA306B4BCBC886"
		"2F8385DDFA9D4B7FA2C087E879683303ED5BDD3A062B3CF5B3A278A6"
		"6D2A13F83F44F82DDF310EE074AB6A364597E899A0255DC164F31CC5"
		"0846851DF9AB48195DED7EA1B1D510BD7EE74D73FAF36BC31ECFA268"
		"359046F4EB879F924009438B481C6CD7889A002ED5EE382BC9190DA6"
		"FC026E479558E4475677E9AA9E3050E2765694DFC81F56E880B96E71"
		"60C980DD98EDD3DFFFFFFFFFFFFFFFFF",
		"13"},
	{0, 0} /* null sentinel */
};

static void delete_ng(NGConstant *ng)
{
	if (ng) {
		mpz_clear(ng->N);
		mpz_clear(ng->g);
		srp_free(ng);
	}
}

static NGConstant *new_ng(SRP_NGType ng_type, const char *n_hex, const char *g_hex)
{
	NGConstant *ng = (NGConstant *)srp_alloc(sizeof(NGConstant));

	if (!ng) return 0;

	mpz_init(ng->N);
	mpz_init(ng->g);

	if (ng_type != SRP_NG_CUSTOM) {
		n_hex = global_Ng_constants[ng_type].n_hex;
		g_hex = global_Ng_constants[ng_type].g_hex;
	}

	int rv = 0;
	rv = mpz_set_str(ng->N, n_hex, 16);
	rv = rv | mpz_set_str(ng->g, g_hex, 16);

	if (rv) {
		delete_ng(ng);
		return 0;
	}

	return ng;
}

typedef union {
	SHA_CTX sha;
	SHA256_CTX sha256;
	// SHA512_CTX sha512;
} HashCTX;

struct SRPVerifier {
	SRP_HashAlgorithm hash_alg;
	NGConstant *ng;

	char *username;
	unsigned char *bytes_B;
	int authenticated;

	unsigned char M[SHA512_DIGEST_LENGTH];
	unsigned char H_AMK[SHA512_DIGEST_LENGTH];
	unsigned char session_key[SHA512_DIGEST_LENGTH];
};

struct SRPUser {
	SRP_HashAlgorithm hash_alg;
	NGConstant *ng;

	mpz_t a;
	mpz_t A;
	mpz_t S;

	unsigned char *bytes_A;
	int authenticated;

	char *username;
	char *username_verifier;
	unsigned char *password;
	size_t password_len;

	unsigned char M[SHA512_DIGEST_LENGTH];
	unsigned char H_AMK[SHA512_DIGEST_LENGTH];
	unsigned char session_key[SHA512_DIGEST_LENGTH];
};

// clang-format off
static int hash_init(SRP_HashAlgorithm alg, HashCTX *c)
{
	switch (alg) {
#ifdef CSRP_USE_SHA1
		case SRP_SHA1: return SHA1_Init(&c->sha);
#endif
		/*
		case SRP_SHA224: return SHA224_Init(&c->sha256);
		*/
#ifdef CSRP_USE_SHA256
		case SRP_SHA256: return SHA256_Init(&c->sha256);
#endif
		/*
		case SRP_SHA384: return SHA384_Init(&c->sha512);
		case SRP_SHA512: return SHA512_Init(&c->sha512);
		*/
		default: return -1;
	};
}
static int hash_update( SRP_HashAlgorithm alg, HashCTX *c, const void *data, size_t len )
{
	switch (alg) {
#ifdef CSRP_USE_SHA1
		case SRP_SHA1: return SHA1_Update(&c->sha, data, len);
#endif
		/*
		case SRP_SHA224: return SHA224_Update(&c->sha256, data, len);
		*/
#ifdef CSRP_USE_SHA256
		case SRP_SHA256: return SHA256_Update(&c->sha256, data, len);
#endif
		/*
		case SRP_SHA384: return SHA384_Update(&c->sha512, data, len);
		case SRP_SHA512: return SHA512_Update(&c->sha512, data, len);
		*/
		default: return -1;
	};
}
static int hash_final( SRP_HashAlgorithm alg, HashCTX *c, unsigned char *md )
{
	switch (alg) {
#ifdef CSRP_USE_SHA1
		case SRP_SHA1: return SHA1_Final(md, &c->sha);
#endif
		/*
		case SRP_SHA224: return SHA224_Final(md, &c->sha256);
		*/
#ifdef CSRP_USE_SHA256
		case SRP_SHA256: return SHA256_Final(md, &c->sha256);
#endif
		/*
		case SRP_SHA384: return SHA384_Final(md, &c->sha512);
		case SRP_SHA512: return SHA512_Final(md, &c->sha512);
		*/
		default: return -1;
	};
}
static unsigned char *hash(SRP_HashAlgorithm alg, const unsigned char *d, size_t n, unsigned char *md)
{
	switch (alg) {
#ifdef CSRP_USE_SHA1
		case SRP_SHA1: return SHA1(d, n, md);
#endif
		/*
		case SRP_SHA224: return SHA224( d, n, md );
		*/
#ifdef CSRP_USE_SHA256
		case SRP_SHA256: return SHA256(d, n, md);
#endif
		/*
		case SRP_SHA384: return SHA384( d, n, md );
		case SRP_SHA512: return SHA512( d, n, md );
		*/
		default: return 0;
	};
}
static size_t hash_length(SRP_HashAlgorithm alg)
{
	switch (alg) {
#ifdef CSRP_USE_SHA1
		case SRP_SHA1: return SHA_DIGEST_LENGTH;
#endif
		/*
		case SRP_SHA224: return SHA224_DIGEST_LENGTH;
		*/
#ifdef CSRP_USE_SHA256
		case SRP_SHA256: return SHA256_DIGEST_LENGTH;
#endif
		/*
		case SRP_SHA384: return SHA384_DIGEST_LENGTH;
		case SRP_SHA512: return SHA512_DIGEST_LENGTH;
		*/
		default: return -1;
	};
}
// clang-format on

inline static int mpz_num_bytes(const mpz_t op)
{
	return (mpz_sizeinbase(op, 2) + 7) / 8;
}

inline static void mpz_to_bin(const mpz_t op, unsigned char *to)
{
	mpz_export(to, NULL, 1, 1, 1, 0, op);
}

inline static void mpz_from_bin(const unsigned char *s, size_t len, mpz_t ret)
{
	mpz_import(ret, len, 1, 1, 1, 0, s);
}

// set op to (op1 * op2) mod d, using tmp for the calculation
inline static void mpz_mulm(
	mpz_t op, const mpz_t op1, const mpz_t op2, const mpz_t d, mpz_t tmp)
{
	mpz_mul(tmp, op1, op2);
	mpz_mod(op, tmp, d);
}

// set op to (op1 + op2) mod d, using tmp for the calculation
inline static void mpz_addm(
	mpz_t op, const mpz_t op1, const mpz_t op2, const mpz_t d, mpz_t tmp)
{
	mpz_add(tmp, op1, op2);
	mpz_mod(op, tmp, d);
}

// set op to (op1 - op2) mod d, using tmp for the calculation
inline static void mpz_subm(
	mpz_t op, const mpz_t op1, const mpz_t op2, const mpz_t d, mpz_t tmp)
{
	mpz_sub(tmp, op1, op2);
	mpz_mod(op, tmp, d);
}

static SRP_Result H_nn(
	mpz_t result, SRP_HashAlgorithm alg, const mpz_t N, const mpz_t n1, const mpz_t n2)
{
	unsigned char buff[SHA512_DIGEST_LENGTH];
	size_t len_N = mpz_num_bytes(N);
	size_t len_n1 = mpz_num_bytes(n1);
	size_t len_n2 = mpz_num_bytes(n2);
	size_t nbytes = len_N + len_N;
	unsigned char *bin = (unsigned char *)srp_alloc(nbytes);
	if (!bin) return SRP_ERR;
	if (len_n1 > len_N || len_n2 > len_N) {
		srp_free(bin);
		return SRP_ERR;
	}
	memset(bin, 0, nbytes);
	mpz_to_bin(n1, bin + (len_N - len_n1));
	mpz_to_bin(n2, bin + (len_N + len_N - len_n2));
	hash(alg, bin, nbytes, buff);
	srp_free(bin);
	mpz_from_bin(buff, hash_length(alg), result);
	return SRP_OK;
}

static SRP_Result H_ns(mpz_t result, SRP_HashAlgorithm alg, const unsigned char *n,
	size_t len_n, const unsigned char *bytes, size_t len_bytes)
{
	unsigned char buff[SHA512_DIGEST_LENGTH];
	size_t nbytes = len_n + len_bytes;
	unsigned char *bin = (unsigned char *)srp_alloc(nbytes);
	if (!bin) return SRP_ERR;
	memcpy(bin, n, len_n);
	memcpy(bin + len_n, bytes, len_bytes);
	hash(alg, bin, nbytes, buff);
	srp_free(bin);
	mpz_from_bin(buff, hash_length(alg), result);
	return SRP_OK;
}

static int calculate_x(mpz_t result, SRP_HashAlgorithm alg, const unsigned char *salt,
	size_t salt_len, const char *username, const unsigned char *password,
	size_t password_len)
{
	unsigned char ucp_hash[SHA512_DIGEST_LENGTH];
	HashCTX ctx;
	hash_init(alg, &ctx);

	srp_dbg_data((char *)username, strlen(username), "Username for x: ");
	srp_dbg_data((char *)password, password_len, "Password for x: ");
	hash_update(alg, &ctx, username, strlen(username));
	hash_update(alg, &ctx, ":", 1);
	hash_update(alg, &ctx, password, password_len);

	hash_final(alg, &ctx, ucp_hash);

	return H_ns(result, alg, salt, salt_len, ucp_hash, hash_length(alg));
}

static SRP_Result update_hash_n(SRP_HashAlgorithm alg, HashCTX *ctx, const mpz_t n)
{
	size_t len = mpz_num_bytes(n);
	unsigned char *n_bytes = (unsigned char *)srp_alloc(len);
	if (!n_bytes) return SRP_ERR;
	mpz_to_bin(n, n_bytes);
	hash_update(alg, ctx, n_bytes, len);
	srp_free(n_bytes);
	return SRP_OK;
}

static SRP_Result hash_num(SRP_HashAlgorithm alg, const mpz_t n, unsigned char *dest)
{
	int nbytes = mpz_num_bytes(n);
	unsigned char *bin = (unsigned char *)srp_alloc(nbytes);
	if (!bin) return SRP_ERR;
	mpz_to_bin(n, bin);
	hash(alg, bin, nbytes, dest);
	srp_free(bin);
	return SRP_OK;
}

static SRP_Result calculate_M(SRP_HashAlgorithm alg, NGConstant *ng, unsigned char *dest,
	const char *I, const unsigned char *s_bytes, size_t s_len, const mpz_t A,
	const mpz_t B, const unsigned char *K)
{
	unsigned char H_N[SHA512_DIGEST_LENGTH];
	unsigned char H_g[SHA512_DIGEST_LENGTH];
	unsigned char H_I[SHA512_DIGEST_LENGTH];
	unsigned char H_xor[SHA512_DIGEST_LENGTH];
	HashCTX ctx;
	size_t i = 0;
	size_t hash_len = hash_length(alg);

	if (!hash_num(alg, ng->N, H_N)) return SRP_ERR;
	if (!hash_num(alg, ng->g, H_g)) return SRP_ERR;

	hash(alg, (const unsigned char *)I, strlen(I), H_I);

	for (i = 0; i < hash_len; i++)
		H_xor[i] = H_N[i] ^ H_g[i];

	hash_init(alg, &ctx);

	hash_update(alg, &ctx, H_xor, hash_len);
	hash_update(alg, &ctx, H_I, hash_len);
	hash_update(alg, &ctx, s_bytes, s_len);
	if (!update_hash_n(alg, &ctx, A)) return SRP_ERR;
	if (!update_hash_n(alg, &ctx, B)) return SRP_ERR;
	hash_update(alg, &ctx, K, hash_len);

	hash_final(alg, &ctx, dest);
	return SRP_OK;
}

static SRP_Result calculate_H_AMK(SRP_HashAlgorithm alg, unsigned char *dest,
	const mpz_t A, const unsigned char *M, const unsigned char *K)
{
	HashCTX ctx;

	hash_init(alg, &ctx);

	if (!update_hash_n(alg, &ctx, A)) return SRP_ERR;
	hash_update(alg, &ctx, M, hash_length(alg));
	hash_update(alg, &ctx, K, hash_length(alg));

	hash_final(alg, &ctx, dest);
	return SRP_OK;
}

static SRP_Result fill_buff()
{
	g_rand_idx = 0;

#ifdef WIN32
	HCRYPTPROV wctx;
#else
	FILE *fp = 0;
#endif

#ifdef WIN32

	if (!CryptAcquireContext(&wctx, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
		return SRP_ERR;
	if (!CryptGenRandom(wctx, sizeof(g_rand_buff), (BYTE *)g_rand_buff)) return SRP_ERR;
	if (!CryptReleaseContext(wctx, 0)) return SRP_ERR;

#else
	fp = fopen("/dev/urandom", "r");

	if (!fp) return SRP_ERR;

	if (fread(g_rand_buff, sizeof(g_rand_buff), 1, fp) != 1) { fclose(fp); return SRP_ERR; }
	if (fclose(fp)) return SRP_ERR;
#endif
	return SRP_OK;
}

static SRP_Result mpz_fill_random(mpz_t num)
{
	// was call: BN_rand(num, 256, -1, 0);
	if (RAND_BUFF_MAX - g_rand_idx < 32)
		if (fill_buff() != SRP_OK) return SRP_ERR;
	mpz_from_bin((const unsigned char *)(&g_rand_buff[g_rand_idx]), 32, num);
	g_rand_idx += 32;
	return SRP_OK;
}

static SRP_Result init_random()
{
	if (g_initialized) return SRP_OK;
	SRP_Result ret = fill_buff();
	g_initialized = (ret == SRP_OK);
	return ret;
}

#define srp_dbg_num(num, text) ;
/*void srp_dbg_num(mpz_t num, char * prevtext)
{
	int len_num = mpz_num_bytes(num);
	char *bytes_num = (char*) srp_alloc(len_num);
	mpz_to_bin(num, (unsigned char *) bytes_num);
	srp_dbg_data(bytes_num, len_num, prevtext);
	srp_free(bytes_num);

}*/

/***********************************************************************************************************
 *
 *  Exported Functions
 *
 ***********************************************************************************************************/

// clang-format off
SRP_Result srp_create_salted_verification_key( SRP_HashAlgorithm alg,
	SRP_NGType ng_type, const char *username_for_verifier,
	const unsigned char *password, size_t len_password,
	unsigned char **bytes_s,  size_t *len_s,
	unsigned char **bytes_v, size_t *len_v,
	const char *n_hex, const char *g_hex )
{
	SRP_Result ret = SRP_OK;

	mpz_t v; mpz_init(v);
	mpz_t x; mpz_init(x);
	// clang-format on

	NGConstant *ng = new_ng(ng_type, n_hex, g_hex);

	if (!ng) goto error_and_exit;

	if (init_random() != SRP_OK) /* Only happens once */
		goto error_and_exit;

	if (*bytes_s == NULL) {
		size_t size_to_fill = 16;
		*len_s = size_to_fill;
		if (RAND_BUFF_MAX - g_rand_idx < size_to_fill)
			if (fill_buff() != SRP_OK) goto error_and_exit;
		*bytes_s = (unsigned char *)srp_alloc(size_to_fill);
		if (!*bytes_s) goto error_and_exit;
		memcpy(*bytes_s, &g_rand_buff + g_rand_idx, size_to_fill);
		g_rand_idx += size_to_fill;
	}

	if (!calculate_x(
			x, alg, *bytes_s, *len_s, username_for_verifier, password, len_password))
		goto error_and_exit;

	srp_dbg_num(x, "Server calculated x: ");

	mpz_powm(v, ng->g, x, ng->N);

	*len_v = mpz_num_bytes(v);

	*bytes_v = (unsigned char *)srp_alloc(*len_v);

	if (!*bytes_v) goto error_and_exit;

	mpz_to_bin(v, *bytes_v);

cleanup_and_exit:
	delete_ng(ng);
	mpz_clear(v);
	mpz_clear(x);
	return ret;
error_and_exit:
	ret = SRP_ERR;
	goto cleanup_and_exit;
}

// clang-format off

/* Out: bytes_B, len_B.
 *
 * On failure, bytes_B will be set to NULL and len_B will be set to 0
 */
struct SRPVerifier *srp_verifier_new(SRP_HashAlgorithm alg,
	SRP_NGType ng_type, const char *username,
	const unsigned char *bytes_s, size_t len_s,
	const unsigned char *bytes_v, size_t len_v,
	const unsigned char *bytes_A, size_t len_A,
	const unsigned char *bytes_b, size_t len_b,
	unsigned char **bytes_B, size_t *len_B,
	const char *n_hex, const char *g_hex )
{
	mpz_t v; mpz_init(v); mpz_from_bin(bytes_v, len_v, v);
	mpz_t A; mpz_init(A); mpz_from_bin(bytes_A, len_A, A);
	mpz_t u; mpz_init(u);
	mpz_t B; mpz_init(B);
	mpz_t S; mpz_init(S);
	mpz_t b; mpz_init(b);
	mpz_t k; mpz_init(k);
	mpz_t tmp1; mpz_init(tmp1);
	mpz_t tmp2; mpz_init(tmp2);
	mpz_t tmp3; mpz_init(tmp3);
	// clang-format on
	size_t ulen = strlen(username) + 1;
	NGConstant *ng = new_ng(ng_type, n_hex, g_hex);
	struct SRPVerifier *ver = 0;

	*len_B = 0;
	*bytes_B = 0;

	if (!ng) goto cleanup_and_exit;

	ver = (struct SRPVerifier *)srp_alloc(sizeof(struct SRPVerifier));

	if (!ver) goto cleanup_and_exit;

	if (init_random() != SRP_OK) { /* Only happens once */
		srp_free(ver);
		ver = 0;
		goto cleanup_and_exit;
	}

	ver->username = (char *)srp_alloc(ulen);
	ver->hash_alg = alg;
	ver->ng = ng;

	if (!ver->username) {
		srp_free(ver);
		ver = 0;
		goto cleanup_and_exit;
	}

	memcpy(ver->username, username, ulen);

	ver->authenticated = 0;

	/* SRP-6a safety check */
	mpz_mod(tmp1, A, ng->N);
	if (mpz_sgn(tmp1) != 0) {
		if (bytes_b) {
			mpz_from_bin(bytes_b, len_b, b);
		} else {
			if (!mpz_fill_random(b)) goto ver_cleanup_and_exit;
		}

		if (!H_nn(k, alg, ng->N, ng->N, ng->g)) goto ver_cleanup_and_exit;

		/* B = kv + g^b */
		mpz_mulm(tmp1, k, v, ng->N, tmp3);
		mpz_powm(tmp2, ng->g, b, ng->N);
		mpz_addm(B, tmp1, tmp2, ng->N, tmp3);

		if (!H_nn(u, alg, ng->N, A, B)) goto ver_cleanup_and_exit;

		srp_dbg_num(u, "Server calculated u: ");

		/* S = (A *(v^u)) ^ b */
		mpz_powm(tmp1, v, u, ng->N);
		mpz_mulm(tmp2, A, tmp1, ng->N, tmp3);
		mpz_powm(S, tmp2, b, ng->N);

		if (!hash_num(alg, S, ver->session_key)) goto ver_cleanup_and_exit;

		if (!calculate_M(
				alg, ng, ver->M, username, bytes_s, len_s, A, B, ver->session_key)) {
			goto ver_cleanup_and_exit;
		}
		if (!calculate_H_AMK(alg, ver->H_AMK, A, ver->M, ver->session_key)) {
			goto ver_cleanup_and_exit;
		}

		*len_B = mpz_num_bytes(B);
		*bytes_B = (unsigned char *)srp_alloc(*len_B);

		if (!*bytes_B) {
			*len_B = 0;
			goto ver_cleanup_and_exit;
		}

		mpz_to_bin(B, *bytes_B);

		ver->bytes_B = *bytes_B;
	} else {
		srp_free(ver);
		ver = 0;
	}

cleanup_and_exit:
	mpz_clear(v);
	mpz_clear(A);
	mpz_clear(u);
	mpz_clear(k);
	mpz_clear(B);
	mpz_clear(S);
	mpz_clear(b);
	mpz_clear(tmp1);
	mpz_clear(tmp2);
	mpz_clear(tmp3);
	return ver;
ver_cleanup_and_exit:
	srp_free(ver->username);
	srp_free(ver);
	ver = 0;
	goto cleanup_and_exit;
}

void srp_verifier_delete(struct SRPVerifier *ver)
{
	if (ver) {
		delete_ng(ver->ng);
		srp_free(ver->username);
		srp_free(ver->bytes_B);
		memset(ver, 0, sizeof(*ver));
		srp_free(ver);
	}
}

int srp_verifier_is_authenticated(struct SRPVerifier *ver)
{
	return ver->authenticated;
}

const char *srp_verifier_get_username(struct SRPVerifier *ver)
{
	return ver->username;
}

const unsigned char *srp_verifier_get_session_key(
	struct SRPVerifier *ver, size_t *key_length)
{
	if (key_length) *key_length = hash_length(ver->hash_alg);
	return ver->session_key;
}

size_t srp_verifier_get_session_key_length(struct SRPVerifier *ver)
{
	return hash_length(ver->hash_alg);
}

/* user_M must be exactly SHA512_DIGEST_LENGTH bytes in size */
void srp_verifier_verify_session(
	struct SRPVerifier *ver, const unsigned char *user_M, unsigned char **bytes_HAMK)
{
	if (memcmp(ver->M, user_M, hash_length(ver->hash_alg)) == 0) {
		ver->authenticated = 1;
		*bytes_HAMK = ver->H_AMK;
	} else
		*bytes_HAMK = NULL;
}

/*******************************************************************************/

struct SRPUser *srp_user_new(SRP_HashAlgorithm alg, SRP_NGType ng_type,
	const char *username, const char *username_for_verifier,
	const unsigned char *bytes_password, size_t len_password, const char *n_hex,
	const char *g_hex)
{
	struct SRPUser *usr = (struct SRPUser *)srp_alloc(sizeof(struct SRPUser));
	size_t ulen = strlen(username) + 1;
	size_t uvlen = strlen(username_for_verifier) + 1;

	if (!usr) goto err_exit;

	if (init_random() != SRP_OK) /* Only happens once */
		goto err_exit;

	usr->hash_alg = alg;
	usr->ng = new_ng(ng_type, n_hex, g_hex);

	mpz_init(usr->a);
	mpz_init(usr->A);
	mpz_init(usr->S);

	if (!usr->ng) goto err_exit;

	usr->username = (char *)srp_alloc(ulen);
	usr->username_verifier = (char *)srp_alloc(uvlen);
	usr->password = (unsigned char *)srp_alloc(len_password);
	usr->password_len = len_password;

	if (!usr->username || !usr->password || !usr->username_verifier) goto err_exit;

	memcpy(usr->username, username, ulen);
	memcpy(usr->username_verifier, username_for_verifier, uvlen);
	memcpy(usr->password, bytes_password, len_password);

	usr->authenticated = 0;

	usr->bytes_A = 0;

	return usr;

err_exit:
	if (usr) {
		mpz_clear(usr->a);
		mpz_clear(usr->A);
		mpz_clear(usr->S);
		delete_ng(usr->ng);
		srp_free(usr->username);
		srp_free(usr->username_verifier);
		if (usr->password) {
			memset(usr->password, 0, usr->password_len);
			srp_free(usr->password);
		}
		srp_free(usr);
	}

	return 0;
}

void srp_user_delete(struct SRPUser *usr)
{
	if (usr) {
		mpz_clear(usr->a);
		mpz_clear(usr->A);
		mpz_clear(usr->S);

		delete_ng(usr->ng);

		memset(usr->password, 0, usr->password_len);

		srp_free(usr->username);
		srp_free(usr->username_verifier);
		srp_free(usr->password);

		if (usr->bytes_A) srp_free(usr->bytes_A);

		memset(usr, 0, sizeof(*usr));
		srp_free(usr);
	}
}

int srp_user_is_authenticated(struct SRPUser *usr)
{
	return usr->authenticated;
}

const char *srp_user_get_username(struct SRPUser *usr)
{
	return usr->username;
}

const unsigned char *srp_user_get_session_key(struct SRPUser *usr, size_t *key_length)
{
	if (key_length) *key_length = hash_length(usr->hash_alg);
	return usr->session_key;
}

size_t srp_user_get_session_key_length(struct SRPUser *usr)
{
	return hash_length(usr->hash_alg);
}

// clang-format off
/* Output: username, bytes_A, len_A */
SRP_Result srp_user_start_authentication(struct SRPUser *usr, char **username,
	const unsigned char *bytes_a, size_t len_a,
	unsigned char **bytes_A, size_t *len_A)
{
	// clang-format on
	if (bytes_a) {
		mpz_from_bin(bytes_a, len_a, usr->a);
	} else {
		if (!mpz_fill_random(usr->a)) goto error_and_exit;
	}

	mpz_powm(usr->A, usr->ng->g, usr->a, usr->ng->N);

	*len_A = mpz_num_bytes(usr->A);
	*bytes_A = (unsigned char *)srp_alloc(*len_A);

	if (!*bytes_A) goto error_and_exit;

	mpz_to_bin(usr->A, *bytes_A);

	usr->bytes_A = *bytes_A;
	if (username) *username = usr->username;

	return SRP_OK;

error_and_exit:
	*len_A = 0;
	*bytes_A = 0;
	*username = 0;
	return SRP_ERR;
}

// clang-format off
/* Output: bytes_M. Buffer length is SHA512_DIGEST_LENGTH */
void  srp_user_process_challenge(struct SRPUser *usr,
	const unsigned char *bytes_s, size_t len_s,
	const unsigned char *bytes_B, size_t len_B,
	unsigned char **bytes_M, size_t *len_M)
{
	mpz_t B; mpz_init(B); mpz_from_bin(bytes_B, len_B, B);
	mpz_t u; mpz_init(u);
	mpz_t x; mpz_init(x);
	mpz_t k; mpz_init(k);
	mpz_t v; mpz_init(v);
	mpz_t tmp1; mpz_init(tmp1);
	mpz_t tmp2; mpz_init(tmp2);
	mpz_t tmp3; mpz_init(tmp3);
	mpz_t tmp4; mpz_init(tmp4);
	// clang-format on

	*len_M = 0;
	*bytes_M = 0;

	if (!H_nn(u, usr->hash_alg, usr->ng->N, usr->A, B)) goto cleanup_and_exit;

	srp_dbg_num(u, "Client calculated u: ");

	if (!calculate_x(x, usr->hash_alg, bytes_s, len_s, usr->username_verifier,
			usr->password, usr->password_len))
		goto cleanup_and_exit;

	srp_dbg_num(x, "Client calculated x: ");

	if (!H_nn(k, usr->hash_alg, usr->ng->N, usr->ng->N, usr->ng->g))
		goto cleanup_and_exit;

	/* SRP-6a safety check */
	if (mpz_sgn(B) != 0 && mpz_sgn(u) != 0) {
		mpz_powm(v, usr->ng->g, x, usr->ng->N);

		srp_dbg_num(v, "Client calculated v: ");

		// clang-format off
		/* S = (B - k*(g^x)) ^ (a + ux) */
		mpz_mul(tmp1, u, x);
		mpz_add(tmp2, usr->a, tmp1);               /* tmp2 = (a + ux)      */
		mpz_powm(tmp1, usr->ng->g, x, usr->ng->N); /* tmp1 = g^x           */
		mpz_mulm(tmp3, k, tmp1, usr->ng->N, tmp4); /* tmp3 = k*(g^x)       */
		mpz_subm(tmp1, B, tmp3, usr->ng->N, tmp4); /* tmp1 = (B - K*(g^x)) */
		mpz_powm(usr->S, tmp1, tmp2, usr->ng->N);
		// clang-format on

		if (!hash_num(usr->hash_alg, usr->S, usr->session_key)) goto cleanup_and_exit;

		if (!calculate_M(usr->hash_alg, usr->ng, usr->M, usr->username, bytes_s, len_s,
				usr->A, B, usr->session_key))
			goto cleanup_and_exit;
		if (!calculate_H_AMK(usr->hash_alg, usr->H_AMK, usr->A, usr->M, usr->session_key))
			goto cleanup_and_exit;

		*bytes_M = usr->M;
		if (len_M) *len_M = hash_length(usr->hash_alg);
	} else {
		*bytes_M = NULL;
		if (len_M) *len_M = 0;
	}

cleanup_and_exit:
	mpz_clear(B);
	mpz_clear(u);
	mpz_clear(x);
	mpz_clear(k);
	mpz_clear(v);
	mpz_clear(tmp1);
	mpz_clear(tmp2);
	mpz_clear(tmp3);
	mpz_clear(tmp4);
}

void srp_user_verify_session(struct SRPUser *usr, const unsigned char *bytes_HAMK)
{
	if (memcmp(usr->H_AMK, bytes_HAMK, hash_length(usr->hash_alg)) == 0)
		usr->authenticated = 1;
}
2'>4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192
# Hebrew translations for minetest package.
# Copyright (C) 2015 THE minetest'S COPYRIGHT HOLDER
# This file is distributed under the same license as the minetest package.
# Automatically generated, 2015.
#
msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-30 06:18+0200\n"
"PO-Revision-Date: 2016-05-26 21:01+0000\n"
"Last-Translator: yuval hreman <huckvrni@gmail.com>\n"
"Language-Team: Hebrew <https://hosted.weblate.org/projects/minetest/minetest/"
"he/>\n"
"Language: he\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2.7-dev\n"

#: builtin/fstk/ui.lua
msgid "An error occured in a Lua script, such as a mod:"
msgstr "אירעה שגיאה בקוד לואה (Lua), כנראה באחד המודים:"

#: builtin/fstk/ui.lua
msgid "An error occured:"
msgstr "התרחשה שגיאה:"

#: builtin/fstk/ui.lua
msgid "Main menu"
msgstr "תפריט ראשי"

#: builtin/fstk/ui.lua builtin/mainmenu/store.lua
msgid "Ok"
msgstr "אישור"

#: builtin/fstk/ui.lua
msgid "Reconnect"
msgstr "התחבר מחדש"

#: builtin/fstk/ui.lua
msgid "The server has requested a reconnect:"
msgstr "השרת מבקש שתתחבר מחדש:"

#: builtin/mainmenu/common.lua src/game.cpp
msgid "Loading..."
msgstr "טוען..."

#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
msgstr "שגיאה בגרסאות הפרוטוקול. "

#: builtin/mainmenu/common.lua
msgid "Server enforces protocol version $1. "
msgstr "השרת יפעיל את פרוטוקול גרסה $1. בכוח "

#: builtin/mainmenu/common.lua
msgid "Server supports protocol versions between $1 and $2. "
msgstr "השרת תומך בפרוטוקולים בין גרסה $1 וגרסה $2. "

#: builtin/mainmenu/common.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "נסה לצאת והכנס מחדש לרשימת השרתים ובדוק את חיבור האינטרנט שלך."

#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
msgstr "אנו תומכים רק בגירסה 1$ של הפרוטוקול."

#: builtin/mainmenu/common.lua
msgid "We support protocol versions between version $1 and $2."
msgstr "אנו תומכים בגרסאות בין 1$ ל-2$ של הפרוטוקול."

#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
#: builtin/mainmenu/dlg_rename_modpack.lua
#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
#: src/keycode.cpp
msgid "Cancel"
msgstr "ביטול"

#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua
msgid "Depends:"
msgstr "תלוי ב:"

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

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

#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
msgstr "אפשר הכל"

#: builtin/mainmenu/dlg_config_world.lua
msgid ""
"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
"chararacters [a-z0-9_] are allowed."
msgstr ""
"טעינת המוד \"1$\" נכשלה מכיוון שהוא מכיל תווים לא חוקיים. רק התווים [a-"
"z0-9_] מותרים."

#: builtin/mainmenu/dlg_config_world.lua
msgid "Hide Game"
msgstr "הסתר משחק"

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

#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "מוד:"

#: builtin/mainmenu/dlg_config_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua src/guiKeyChangeMenu.cpp
msgid "Save"
msgstr "שמור"

#: builtin/mainmenu/dlg_config_world.lua
msgid "World:"
msgstr "עולם:"

#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
msgstr "מופעל"

#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
msgstr "עולם בשם \"1$\" כבר קיים"

#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "ליצור"

#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a subgame, such as minetest_game, from minetest.net"
msgstr "הורד מפעיל משחק, למשל \"minetest_game\", מהאתר: minetest.net"

#: builtin/mainmenu/dlg_create_world.lua
msgid "Download one from minetest.net"
msgstr "הורד אחד מ-\"minetest.net\""

#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
msgstr "משחק"

#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
msgstr "מנוע מפות"

#: builtin/mainmenu/dlg_create_world.lua
msgid "No worldname given or no game selected"
msgstr "לא נבחר שם לעולם או שאף מפעיל משחק לא נבחר"

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

#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The minimal development test is meant for developers."
msgstr "אזהרה: מצב המפתחים נועד למפתחים!."

#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
msgstr "שם העולם"

#: builtin/mainmenu/dlg_create_world.lua
msgid "You have no subgames installed."
msgstr "אין לך אף מפעיל משחק מותקן."

#: builtin/mainmenu/dlg_delete_mod.lua
msgid "Are you sure you want to delete \"$1\"?"
msgstr "האם ברצונך למחוק את  \"$1\"?"

#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua
#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
#: src/keycode.cpp
msgid "Delete"
msgstr "מחק"

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

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

#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
msgstr "למחוק עולם \"$1\"?"

#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp
msgid "Accept"
msgstr "קבל"

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

#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "\"$1\" is not a valid flag."
msgstr ""

#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
msgstr ""

#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
msgstr ""

#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Browse"
msgstr ""

#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Disabled"
msgstr ""

#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Edit"
msgstr ""

#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Enabled"
msgstr ""

#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Format is 3 numbers separated by commas and inside brackets."
msgstr ""

#: builtin/mainmenu/dlg_settings_advanced.lua
msgid ""
"Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, "
"<octaves>, <persistence>"
msgstr ""

#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Games"
msgstr "משחקים"

#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_mods.lua
msgid "Mods"
msgstr "מודים"

#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Optionally the lacunarity can be appended with a leading comma."
msgstr ""

#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a comma seperated list of flags."
msgstr ""

#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid integer."
msgstr ""

#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid number."
msgstr ""

#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Possible values are: "
msgstr ""

#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Restore Default"
msgstr ""

#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select path"
msgstr ""

#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Show technical names"
msgstr ""

#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must be greater than $1."
msgstr ""

#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must be lower than $1."
msgstr ""

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

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

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

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

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

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

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

#: builtin/mainmenu/store.lua
msgid "Install"
msgstr "החקן"

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

#: builtin/mainmenu/store.lua
msgid "Rating"
msgstr "דירוג"

#: builtin/mainmenu/store.lua
msgid "Search"
msgstr "חפש"

#: builtin/mainmenu/store.lua
msgid "Shortname:"
msgstr "שם קצר:"

#: builtin/mainmenu/store.lua
msgid "Successfully installed:"
msgstr "הותקן בהצלחה:"

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

#: builtin/mainmenu/store.lua
msgid "re-Install"
msgstr "התקן מחדש"

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

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

#: builtin/mainmenu/tab_credits.lua
msgid "Credits"
msgstr "קרדיטים"

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

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

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

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

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

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

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

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

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

#: builtin/mainmenu/tab_multiplayer.lua
msgid "Address / Port"
msgstr "כתובת / פורט"

#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp
msgid "Client"
msgstr "קלינט"

#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Connect"
msgstr "התחבר"

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

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

#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Del. Favorite"
msgstr ""

#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Favorite"
msgstr ""

#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "Name / Password"
msgstr "שם/סיסמה"

#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua
msgid "PvP enabled"
msgstr "PvP אפשר"

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

#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
msgid "Configure"
msgstr "קביעת תצורה"

#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
#: builtin/mainmenu/tab_singleplayer.lua
msgid "Creative Mode"
msgstr "משחק יצירתי"

#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua
#: builtin/mainmenu/tab_singleplayer.lua
msgid "Enable Damage"
msgstr "אפשר נזק"

#: builtin/mainmenu/tab_server.lua
msgid "Name/Password"
msgstr "שם/סיסמה"

#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
msgid "New"
msgstr "חדש"

#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
msgid "No world created or selected!"
msgstr "אין עולם נוצר או נבחר!"

#: builtin/mainmenu/tab_server.lua
msgid "Port"
msgstr "פורט"

#: builtin/mainmenu/tab_server.lua
msgid "Public"
msgstr "ציבורי"

#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua
msgid "Select World:"
msgstr "בחר עולם:"

#: builtin/mainmenu/tab_server.lua
msgid "Server"
msgstr "שרת"

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

#: builtin/mainmenu/tab_server.lua
msgid "Start Game"
msgstr "התחל משחק"

#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr ""

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

#: builtin/mainmenu/tab_settings.lua
msgid "4x"
msgstr ""

#: builtin/mainmenu/tab_settings.lua
msgid "8x"
msgstr ""

#: builtin/mainmenu/tab_settings.lua
msgid "Advanced Settings"
msgstr "הגדרות מתקדמות"

#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
msgstr ""

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

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

#: builtin/mainmenu/tab_settings.lua
msgid "Bump Mapping"
msgstr ""

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

#: builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Connected Glass"
msgstr "התחבר"

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

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

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

#: builtin/mainmenu/tab_settings.lua
msgid "No"
msgstr "לא"

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

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

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

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

#: builtin/mainmenu/tab_settings.lua builtin/mainmenu/tab_texturepacks.lua
msgid "None"
msgstr ""

#: builtin/mainmenu/tab_settings.lua
msgid "Normal Mapping"
msgstr ""

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

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

#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Parallax Occlusion"
msgstr ""

#: builtin/mainmenu/tab_settings.lua
msgid "Particles"
msgstr "חלקיקים"

#: builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Reset singleplayer world"
msgstr "שרת"

#: builtin/mainmenu/tab_settings.lua
msgid "Settings"
msgstr "הגדרות"

#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
msgstr ""

#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
msgstr ""

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

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

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

#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr ""

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

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

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

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

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

#: builtin/mainmenu/tab_settings.lua
msgid "Yes"
msgstr "כן"

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

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

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

#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp
msgid "Play"
msgstr "שחק"

#: builtin/mainmenu/tab_singleplayer.lua
msgid "Singleplayer"
msgstr "שחקן יחיד"

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

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

#: builtin/mainmenu/tab_texturepacks.lua
msgid "Texturepacks"
msgstr "חבילות מרקם"

#: src/client.cpp
msgid "Connection timed out."
msgstr ""

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#: src/game.cpp
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
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
msgid "Exit to Menu"
msgstr ""

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

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

#: src/game.cpp
msgid "KiB/s"
msgstr ""

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

#: src/game.cpp
msgid "MiB/s"
msgstr ""

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

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

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

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

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

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

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

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

#: src/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr ""

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#: src/settings_translation_file.cpp
msgid ""
"(X,Y,Z) offset of fractal from world centre in units of 'scale'.\n"
"Used to move a suitable spawn area of low land close to (0, 0).\n"
"The default is suitable for mandelbrot sets, it needs to be edited for julia "
"sets.\n"
"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"0 = parallax occlusion with slope information (faster).\n"
"1 = relief mapping (slower, more accurate)."
msgstr ""

#: src/settings_translation_file.cpp
msgid "3D clouds"
msgstr ""

#: src/settings_translation_file.cpp
msgid "3D mode"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"3D support.\n"
"Currently supported:\n"
"-    none: no 3d output.\n"
"-    anaglyph: cyan/magenta color 3d.\n"
"-    interlaced: odd/even line based polarisation screen support.\n"
"-    topbottom: split screen top/bottom.\n"
"-    sidebyside: split screen side by side.\n"
"-    pageflip: quadbuffer based 3d."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"A chosen map seed for a new map, leave empty for random.\n"
"Will be overridden when creating a new world in the main menu."
msgstr ""

#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server crashes."
msgstr ""

#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server shuts down."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Absolute limit of emerge queues"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Acceleration in air"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Active Block Management interval"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Active Block Modifier interval"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Active Block Modifiers"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Active block range"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Active object send range"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Address to connect to.\n"
"Leave this blank to start a local server.\n"
"Note that the address field in the main menu overrides this setting."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
"screens."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n"
"This setting is for the client only and is ignored by the server."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Altitude Chill"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Always fly and fast"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Amplifies the valleys"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Anisotropic filtering"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Announce server"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Announce to this serverlist.\n"
"If you want to announce your ipv6 address, use  serverlist_url = v6.servers."
"minetest.net."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Approximate (X,Y,Z) scale of fractal in nodes."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Ask to reconnect after crash"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Automaticaly report to the serverlist."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Autorun key"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Base terrain height"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Basic"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Basic Privileges"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Bilinear filtering"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Bind address"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Bits per pixel (aka color depth) in fullscreen mode."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Build inside player"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Builtin"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Bumpmapping"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Camera smoothing"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Camera smoothing in cinematic mode"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Camera update toggle key"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Cave noise #1"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Cave noise #2"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Cave width"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Caves and tunnels form at the intersection of the two noises"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Chat toggle key"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Chatcommands"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Choice of 18 fractals from 9 formulas.\n"
"1 = 4D \"Roundy\" mandelbrot set.\n"
"2 = 4D \"Roundy\" julia set.\n"
"3 = 4D \"Squarry\" mandelbrot set.\n"
"4 = 4D \"Squarry\" julia set.\n"
"5 = 4D \"Mandy Cousin\" mandelbrot set.\n"
"6 = 4D \"Mandy Cousin\" julia set.\n"
"7 = 4D \"Variation\" mandelbrot set.\n"
"8 = 4D \"Variation\" julia set.\n"
"9 = 3D \"Mandelbrot/Mandelbar\" mandelbrot set.\n"
"10 = 3D \"Mandelbrot/Mandelbar\" julia set.\n"
"11 = 3D \"Christmas Tree\" mandelbrot set.\n"
"12 = 3D \"Christmas Tree\" julia set.\n"
"13 = 3D \"Mandelbulb\" mandelbrot set.\n"
"14 = 3D \"Mandelbulb\" julia set.\n"
"15 = 3D \"Cosine Mandelbulb\" mandelbrot set.\n"
"16 = 3D \"Cosine Mandelbulb\" julia set.\n"
"17 = 4D \"Mandelbulb\" mandelbrot set.\n"
"18 = 4D \"Mandelbulb\" julia set."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Chunk size"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Cinematic mode"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Cinematic mode key"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Clean transparent textures"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Client and Server"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Climbing speed"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Cloud height"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Cloud radius"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Clouds"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Clouds are a client side effect."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Clouds in menu"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Colored fog"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of mods that are allowed to access HTTP APIs, which\n"
"allow them to upload and download data to/from the internet."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of trusted mods that are allowed to access insecure\n"
"functions even when mod security is on (via request_insecure_environment())."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Command key"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Connect to external media server"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Connects glass if supported by node."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Console alpha"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Console color"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Console key"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Continuous forward"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Continuous forward movement (only used for testing)."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Controls"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Controls length of day/night cycle.\n"
"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays "
"unchanged."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Controls size of deserts and beaches in Mapgen v6.\n"
"When snowbiomes are enabled 'mgv6_freq_desert' is ignored."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Controls steepness/height of hills."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Controls width of tunnels, a smaller value creates wider tunnels."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Crash message"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Creates unpredictable lava features in caves.\n"
"These can make mining difficult. Zero disables them. (0-10)"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Creates unpredictable water features in caves.\n"
"These can make mining difficult. Zero disables them. (0-10)"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Crosshair alpha"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Crosshair alpha (opaqueness, between 0 and 255)."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Crosshair color"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Crosshair color (R,G,B)."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Crouch speed"
msgstr ""

#: src/settings_translation_file.cpp
msgid "DPI"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Damage"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Debug info toggle key"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Debug log level"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Dedicated server step"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Default acceleration"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Default game"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Default game when creating a new world.\n"
"This will be overridden when creating a world from the main menu."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Default password"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Default privileges"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Default report format"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Default timeout for cURL, stated in milliseconds.\n"
"Only has an effect if compiled with cURL."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Defines sampling step of texture.\n"
"A higher value results in smoother normal maps."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Delay in sending blocks after building"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Delay showing tooltips, stated in milliseconds."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Deprecated Lua API handling"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Depth below which you'll find large caves."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Depth below which you'll find massive caves."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Descending speed"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Description of server, to be displayed when players join and in the "
"serverlist."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Desynchronize block animation"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Determines terrain shape.\n"
"The 3 numbers in brackets control the scale of the\n"
"terrain, the 3 numbers should be identical."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Disable anticheat"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Disable escape sequences"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Disable escape sequences, e.g. chat coloring.\n"
"Use this if you want to run a server with pre-0.4.14 clients and you want to "
"disable\n"
"the escape sequences generated by mods."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Disallow empty passwords"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Double tap jump for fly"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Double-tapping the jump key toggles fly mode."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Drop item key"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Dump the mapgen debug infos."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Enable Joysticks"
msgstr ""

#: src/settings_translation_file.cpp
#, fuzzy
msgid "Enable VBO"
msgstr "אפשר בכל"

#: src/settings_translation_file.cpp
msgid "Enable mod security"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Enable players getting damage and dying."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Enable random user input (only used for testing)."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Enable to disallow old clients from connecting.\n"
"Older clients are compatible in the sense that they will not crash when "
"connecting\n"
"to new servers, but they may not support all new features that you are "
"expecting."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Enable usage of remote media server (if provided by server).\n"
"Remote servers offer a significantly faster way to download media (e.g. "
"textures)\n"
"when connecting to the server."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Enable/disable running an IPv6 server.  An IPv6 server may be restricted\n"
"to IPv6 clients, depending on system configuration.\n"
"Ignored if bind_address is set."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Enables bumpmapping for textures. Normalmaps need to be supplied by the "
"texture pack\n"
"or need to be auto-generated.\n"
"Requires shaders to be enabled."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Enables caching of facedir rotated meshes."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Enables filmic tone mapping"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Enables minimap."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Enables on the fly normalmap generation (Emboss effect).\n"
"Requires bumpmapping to be enabled."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Enables parallax occlusion mapping.\n"
"Requires shaders to be enabled."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Entity methods"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Experimental option, might cause visible spaces between blocks\n"
"when set to higher number than 0."
msgstr ""

#: src/settings_translation_file.cpp
msgid "FPS in pause menu"
msgstr ""

#: src/settings_translation_file.cpp
msgid "FSAA"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Fall bobbing"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Fallback font"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Fallback font shadow"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Fallback font shadow alpha"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Fallback font size"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Fast key"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Fast mode acceleration"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Fast mode speed"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Fast movement"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Fast movement (via use key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Field of view"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Field of view for zoom"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Field of view in degrees."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Field of view while zooming in degrees.\n"
"This requires the \"zoom\" privilege on the server."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"File in client/serverlist/ that contains your favorite servers displayed in "
"the Multiplayer Tab."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Filler Depth"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Filmic tone mapping"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Filtered textures can blend RGB values with fully-transparent neighbors,\n"
"which PNG optimizers usually discard, sometimes resulting in a dark or\n"
"light edge to transparent textures.  Apply this filter to clean that up\n"
"at texture load time."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Filtering"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Fixed map seed"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Fly key"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Flying"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Fog"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Fog toggle key"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Font path"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Font shadow"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Font shadow alpha"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Font shadow alpha (opaqueness, between 0 and 255)."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Font shadow offset, if 0 then shadow will not be drawn."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Font size"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Format of screenshots."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Forward key"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Freetype fonts"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"From how far clients know about objects, stated in mapblocks (16 nodes)."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Full screen"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Full screen BPP"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""

#: src/settings_translation_file.cpp
msgid "GUI scaling"
msgstr ""

#: src/settings_translation_file.cpp
msgid "GUI scaling filter"
msgstr ""

#: src/settings_translation_file.cpp
msgid "GUI scaling filter txr2img"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Gamma"
msgstr ""

#: src/settings_translation_file.cpp
msgid "General"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Generate normalmaps"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Global callbacks"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
"and junglegrass, in all other mapgens this flag controls all decorations.\n"
"Flags that are not specified in the flag string are not modified from the "
"default.\n"
"Flags starting with 'no' are used to explicitly disable them."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Graphics"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Gravity"
msgstr ""

#: src/settings_translation_file.cpp
#, fuzzy
msgid "HTTP Mods"
msgstr "מודים"

#: src/settings_translation_file.cpp
msgid "HUD toggle key"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Handling for deprecated lua api calls:\n"
"-    legacy: (try to) mimic old behaviour (default for release).\n"
"-    log: mimic and log backtrace of deprecated call (default for debug).\n"
"-    error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Have the profiler instrument itself:\n"
"* Instrument an empty function.\n"
"This estimates the overhead, that instrumentation is adding (+1 function "
"call).\n"
"* Instrument the sampler being used to update the statistics."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Height component of the initial window size."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Height on which clouds are appearing."
msgstr ""

#: src/settings_translation_file.cpp
msgid "High-precision FPU"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Homepage of server, to be displayed in the serverlist."
msgstr ""

#: src/settings_translation_file.cpp
msgid "How deep to make rivers"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"How large area of blocks are subject to the active block stuff, stated in "
"mapblocks (16 nodes).\n"
"In active blocks objects are loaded and ABMs run."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"How much the server will wait before unloading unused mapblocks.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""

#: src/settings_translation_file.cpp
msgid "How wide to make rivers"
msgstr ""

#: src/settings_translation_file.cpp
msgid "IPv6"
msgstr ""

#: src/settings_translation_file.cpp
msgid "IPv6 server"
msgstr ""

#: src/settings_translation_file.cpp
msgid "IPv6 support."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"If FPS would go higher than this, limit it by sleeping\n"
"to not waste CPU power for no benefit."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"If disabled \"use\" key is used to fly fast if both fly and fast mode are "
"enabled."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"If enabled together with fly mode, player is able to fly through solid "
"nodes.\n"
"This requires the \"noclip\" privilege on the server."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"If enabled, \"use\" key instead of \"sneak\" key is used for climbing down "
"and descending."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""

#: src/settings_translation_file.cpp
msgid "If enabled, disable cheat prevention in multiplayer."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"If enabled, invalid world data won't cause the server to shut down.\n"
"Only enable this if you know what you are doing."
msgstr ""

#: src/settings_translation_file.cpp
msgid "If enabled, new players cannot join with an empty password."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"If enabled, you can place blocks at the position (feet + eye level) where "
"you stand.\n"
"This is helpful when working with nodeboxes in small areas."
msgstr ""

#: src/settings_translation_file.cpp
msgid "If this is set, players will always (re)spawn at the given position."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Ignore world errors"
msgstr ""

#: src/settings_translation_file.cpp
msgid "In-Game"
msgstr ""

#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
msgstr ""

#: src/settings_translation_file.cpp
msgid "In-game chat console background color (R,G,B)."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Instrument builtin.\n"
"This is usually only needed by core/builtin contributors"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Instrument chatcommands on registration."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Instrument global callback functions on registration.\n"
"(anything you pass to a minetest.register_*() function)"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Instrument the action function of Active Block Modifiers on registration."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Instrument the action function of Loading Block Modifiers on registration."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Instrument the methods of entities on registration."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Instrumentation"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Interval of sending time of day to clients."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Inventory items animations"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Inventory key"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Invert mouse"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Invert vertical mouse movement."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Item entity TTL"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Iterations of the recursive function.\n"
"Controls the amount of fine detail."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Joystick button repetition interval"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Julia set only: W component of hypercomplex constant determining julia "
"shape.\n"
"Has no effect on 3D fractals.\n"
"Range roughly -2 to 2."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Julia set only: X component of hypercomplex constant determining julia "
"shape.\n"
"Range roughly -2 to 2."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Julia set only: Y component of hypercomplex constant determining julia "
"shape.\n"
"Range roughly -2 to 2."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Julia set only: Z component of hypercomplex constant determining julia "
"shape.\n"
"Range roughly -2 to 2."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Jump key"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Jumping speed"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for decreasing the viewing range.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for dropping the currently selected item.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for increasing the viewing range.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for jumping.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for moving fast in fast mode.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for moving the player backward.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for moving the player forward.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for moving the player left.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for moving the player right.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for opening the chat console.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for opening the chat window to type commands.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for opening the chat window.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for opening the inventory.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for printing debug stacks. Used for development.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for sneaking.\n"
"Also used for climbing down and descending in water if aux1_descends is "
"disabled.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for switching between first- and third-person camera.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for taking screenshots.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for toggling autorun.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for toggling cinematic mode.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for toggling display of minimap.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for toggling fast mode.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for toggling flying.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for toggling noclip mode.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for toggling the camera update. Only used for development\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for toggling the display of debug info.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for toggling the display of the HUD.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for toggling the display of the chat.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for toggling the display of the fog.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for toggling the display of the profiler. Used for development.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Key for toggling unlimited view range.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Key use for climbing/descending"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Language"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Large cave depth"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Lava Features"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Leaves style"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Leaves style:\n"
"-   Fancy:  all faces visible\n"
"-   Simple: only outer faces, if defined special_tiles are used\n"
"-   Opaque: disable transparency"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Left key"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over network."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Length of time between ABM execution cycles"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Length of time between NodeTimer execution cycles"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Level of logging to be written to debug.txt:\n"
"-    <nothing> (no logging)\n"
"-    none (messages with no level)\n"
"-    error\n"
"-    warning\n"
"-    action\n"
"-    info\n"
"-    verbose"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Limit of emerge queues on disk"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Limit of emerge queues to generate"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Limits number of parallel HTTP requests. Affects:\n"
"-    Media fetch if server uses remote_media setting.\n"
"-    Serverlist download and server announcement.\n"
"-    Downloads performed by main menu (e.g. mod manager).\n"
"Only has an effect if compiled with cURL."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Liquid fluidity"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Liquid fluidity smoothing"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Liquid loop max"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Liquid queue purge time"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Liquid sink"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Liquid update interval in seconds."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Liquid update tick"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Load the game profiler"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Load the game profiler to collect game profiling data.\n"
"Provides a /profiler command to access the compiled profile.\n"
"Useful for mod developers and server operators."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Loading Block Modifiers"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Main menu game manager"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Main menu mod manager"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Main menu script"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Map directory"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen Valleys.\n"
"'altitude_chill' makes higher elevations colder, which may cause biome "
"issues.\n"
"'humid_rivers' modifies the humidity around rivers and in areas where water "
"would tend to pool,\n"
"it may interfere with delicately adjusted biomes.\n"
"Flags that are not specified in the flag string are not modified from the "
"default.\n"
"Flags starting with 'no' are used to explicitly disable them."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen flat.\n"
"Occasional lakes and hills can be added to the flat world.\n"
"Flags that are not specified in the flag string are not modified from the "
"default.\n"
"Flags starting with 'no' are used to explicitly disable them."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v6.\n"
"When snowbiomes are enabled jungles are automatically enabled, the 'jungles' "
"flag is ignored.\n"
"Flags that are not specified in the flag string are not modified from the "
"default.\n"
"Flags starting with 'no' are used to explicitly disable them."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
"The 'ridges' flag controls the rivers.\n"
"Flags that are not specified in the flag string are not modified from the "
"default.\n"
"Flags starting with 'no' are used to explicitly disable them."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Map generation limit"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Map save interval"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapblock unload timeout"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen Valleys"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen biome heat noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen biome humidity blend noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen biome humidity noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen debug"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen flags"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen flat"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen flat cave width"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen flat cave1 noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen flat cave2 noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen flat filler depth noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen flat flags"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen flat ground level"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen flat hill steepness"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen flat hill threshold"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen flat lake steepness"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen flat lake threshold"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen flat large cave depth"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen flat terrain noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen fractal"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen fractal cave width"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen fractal cave1 noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen fractal cave2 noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen fractal filler depth noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen fractal fractal"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen fractal iterations"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen fractal julia w"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen fractal julia x"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen fractal julia y"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen fractal julia z"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen fractal offset"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen fractal scale"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen fractal seabed noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen fractal slice w"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen heat blend noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen name"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v5"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v5 cave width"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v5 cave1 noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v5 cave2 noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v5 factor noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v5 filler depth noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v5 height noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v6"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v6 apple trees noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v6 beach frequency"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v6 beach noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v6 biome noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v6 cave noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v6 desert frequency"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v6 flags"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v6 height select noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v6 humidity noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v6 mud noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v6 steepness noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v6 terrain altitude noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v6 terrain base noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v6 trees noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v7"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v7 cave width"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v7 cave1 noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v7 cave2 noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v7 filler depth noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v7 flags"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v7 height select noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v7 mount height noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v7 mountain noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v7 ridge noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v7 ridge water noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v7 terrain altitude noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v7 terrain base noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mapgen v7 terrain persistation noise parameters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Massive cave depth"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Massive cave noise"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Massive caves form here."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Max block generate distance"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Max block send distance"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Max liquids processed per step."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Max. clearobjects extra blocks"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Max. packets per iteration"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Maximum FPS"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Maximum FPS when game is paused."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Maximum hotbar width"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Maximum number of blocks that are simultaneously sent in total."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Maximum number of blocks that are simultaneously sent per client."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Maximum number of blocks that can be queued for loading."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
"Set to blank for an appropriate amount to be chosen automatically."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
"Set to blank for an appropriate amount to be chosen automatically."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Maximum number of mapblocks for client to be kept in memory.\n"
"Set to -1 for unlimited amount."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Maximum number of packets sent per send step, if you have a slow connection\n"
"try reducing it, but don't reduce it to a number below double of targeted\n"
"client number."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Maximum number of players that can connect simultaneously."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Maximum number of statically stored objects in a block."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Maximum objects per block"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Maximum proportion of current window to be used for hotbar.\n"
"Useful if there's something to be displayed right or left of hotbar."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Maximum simultaneous block sends per client"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Maximum simultaneous block sends total"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Maximum time in ms a file download (e.g. a mod download) may take."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Maximum users"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Menus"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mesh cache"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Message of the day"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Message of the day displayed to players connecting."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Method used to highlight selected object."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Minimap"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Minimap key"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Minimap scan height"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Minimum texture size for filters"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mipmapping"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Modstore details URL"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Modstore download URL"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Modstore mods list URL"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Monospace font path"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Monospace font size"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mouse sensitivity"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Mouse sensitivity multiplier."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Multiplier for fall bobbing.\n"
"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Multiplier for view bobbing.\n"
"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Name of map generator to be used when creating a new world.\n"
"Creating a world in the main menu will override this."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Name of the player.\n"
"When running a server, clients connecting with this name are admins.\n"
"When starting from the main menu, this is overridden."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Name of the server, to be displayed when players join and in the serverlist."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Network"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Network port to listen (UDP).\n"
"This value will be overridden when starting from the main menu."
msgstr ""

#: src/settings_translation_file.cpp
msgid "New users need to input this password."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Noclip"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Noclip key"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Node highlighting"
msgstr ""

#: src/settings_translation_file.cpp
msgid "NodeTimer interval"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Noise parameters for biome API temperature, humidity and biome blend."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Noises"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Normalmaps sampling"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Normalmaps strength"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Number of emerge threads"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Number of emerge threads to use. Make this field blank, or increase this "
"number\n"
"to use multiple threads. On multiprocessor systems, this will improve mapgen "
"speed greatly\n"
"at the cost of slightly buggy caves."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Number of extra blocks that can be loaded by /clearobjects at once.\n"
"This is a trade-off between sqlite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Number of parallax occlusion iterations."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Overall bias of parallax occlusion effect, usually scale/2."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Overall scale of parallax occlusion effect."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Parallax occlusion"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Parallax occlusion Scale"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Parallax occlusion bias"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Parallax occlusion iterations"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Parallax occlusion mode"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Parallax occlusion strength"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Path to TrueTypeFont or bitmap."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Path to save screenshots at."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Path to texture directory. All textures are first searched from here."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Physics"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Player is able to fly without being affected by gravity.\n"
"This requires the \"fly\" privilege on the server."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Player name"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Player transfer distance"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Player versus Player"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Prevent mods from doing insecure things like running shell commands."
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Print the engine's profiling data in regular intervals (in seconds). 0 = "
"disable. Useful for developers."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Privileges that players with basic_privs can grant"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Profiler"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Profiler toggle key"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Profiling"
msgstr ""

#: src/settings_translation_file.cpp
msgid ""
"Radius of cloud area stated in number of 64 node cloud squares.\n"
"Values larger than 26 will start to produce sharp cutoffs at cloud area "
"corners."
msgstr ""

#: src/settings_translation_file.cpp
msgid "Raises terrain to make valleys around the rivers"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Random input"
msgstr ""

#: src/settings_translation_file.cpp
msgid "Range select key"
msgstr ""

#: src/settings_translation_file.cpp