From: Todd C. Miller Date: Mon, 4 Oct 2004 16:07:19 +0000 (+0000) Subject: No longer call it tracing, it is now "monitoring" which should be more X-Git-Tag: SUDO_1_7_0~901 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3c8145a923f9136a7dc77783d980e7d29c6c5791;p=sudo No longer call it tracing, it is now "monitoring" which should be more a obvious name to non-hackers. --- diff --git a/Makefile.in b/Makefile.in index d942786a1..0aabae59d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -101,10 +101,10 @@ PROGS = @PROGS@ SRCS = alloc.c alloca.c check.c closefrom.c def_data.c defaults.c env.c err.c \ fileops.c find_path.c fnmatch.c getcwd.c getprogname.c getspwuid.c \ gettime.c goodpath.c interfaces.c ldap.c lex.yy.c lsearch.c logging.c \ - parse.c parse.lex parse.yacc set_perms.c sigaction.c snprintf.c \ - strcasecmp.c strerror.c strlcat.c strlcpy.c sudo.c sudo_noexec.c \ - sudo.tab.c sudo_edit.c testsudoers.c tgetpass.c utimes.c \ - trace_systrace.c visudo.c zero_bytes.c $(AUTH_SRCS) + mon_systrace.c parse.c parse.lex parse.yacc set_perms.c sigaction.c \ + snprintf.c strcasecmp.c strerror.c strlcat.c strlcpy.c sudo.c \ + sudo_noexec.c sudo.tab.c sudo_edit.c testsudoers.c tgetpass.c utimes.c \ + visudo.c zero_bytes.c $(AUTH_SRCS) AUTH_SRCS = auth/afs.c auth/aix_auth.c auth/bsdauth.c auth/dce.c auth/fwtk.c \ auth/kerb4.c auth/kerb5.c auth/pam.c auth/passwd.c auth/rfc1938.c \ @@ -234,7 +234,7 @@ strlcpy.o: strlcpy.c config.h strerror.o: strerror.c config.h utime.o: utime.c config.h pathnames.h compat.h emul/utime.h ldap.o: ldap.c $(SUDODEP) parse.h -trace_systrace.o: trace_systrace.c $(SUDODEP) trace_systrace.h +mon_systrace.o: mon_systrace.c $(SUDODEP) mon_systrace.h # Build special copy of alloc.c for visudo that calls Exit() vsalloc.o: alloc.c $(SUDODEP) diff --git a/configure b/configure index a89e119f4..9130c5371 100755 --- a/configure +++ b/configure @@ -30290,7 +30290,7 @@ done else CPPFLAGS="$CPPFLAGS -I${with_systrace}" fi - SUDO_OBJS="${SUDO_OBJS} trace_systrace.o" + SUDO_OBJS="${SUDO_OBJS} mon_systrace.o" for ac_func in setproctitle do diff --git a/configure.in b/configure.in index 2d88b3865..ebc096a3e 100644 --- a/configure.in +++ b/configure.in @@ -1786,7 +1786,7 @@ if test -n "$with_systrace"; then else CPPFLAGS="$CPPFLAGS -I${with_systrace}" fi - SUDO_OBJS="${SUDO_OBJS} trace_systrace.o" + SUDO_OBJS="${SUDO_OBJS} mon_systrace.o" AC_CHECK_FUNCS(setproctitle) fi dnl diff --git a/def_data.c b/def_data.c index b18a20976..6cfa9dbce 100644 --- a/def_data.c +++ b/def_data.c @@ -256,8 +256,8 @@ struct sudo_defs_types sudo_defs_table[] = { "If LDAP directory is up, do we ignore local sudoers file", NULL, }, { - "trace", T_FLAG, - "Trace children of cmnd and apply sudoers restrictions to them", + "monitor", T_FLAG, + "Monitor children of cmnd and apply sudoers restrictions to them", NULL, }, { NULL, 0, NULL diff --git a/def_data.h b/def_data.h index 716a39104..fde88336f 100644 --- a/def_data.h +++ b/def_data.h @@ -114,8 +114,8 @@ #define I_ENV_KEEP 56 #define def_ignore_local_sudoers (sudo_defs_table[57].sd_un.flag) #define I_IGNORE_LOCAL_SUDOERS 57 -#define def_trace (sudo_defs_table[58].sd_un.flag) -#define I_TRACE 58 +#define def_monitor (sudo_defs_table[58].sd_un.flag) +#define I_MONITOR 58 enum def_tupple { never, diff --git a/def_data.in b/def_data.in index 2fe2f1af0..a5bb36d56 100644 --- a/def_data.in +++ b/def_data.in @@ -185,6 +185,6 @@ env_keep ignore_local_sudoers T_FLAG "If LDAP directory is up, do we ignore local sudoers file" -trace +monitor T_FLAG - "Trace children of cmnd and apply sudoers restrictions to them" + "Monitor children of cmnd and apply sudoers restrictions to them" diff --git a/lex.yy.c b/lex.yy.c index e0599887f..510e918af 100644 --- a/lex.yy.c +++ b/lex.yy.c @@ -287,7 +287,7 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); #define YY_NUM_RULES 42 #define YY_END_OF_BUFFER 43 -static yyconst short int yy_accept[374] = +static yyconst short int yy_accept[382] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 32, 38, 37, 36, 41, 32, 26, @@ -314,22 +314,23 @@ static yyconst short int yy_accept[374] = 27, 27, 27, 28, 7, 32, 32, 32, 0, 19, 27, 27, 27, 27, 27, 32, 0, 32, 32, 28, 28, 28, 27, 27, 27, 27, 27, 28, 32, 32, - 32, 32, 32, 27, 27, 27, 27, 0, 21, 32, - 0, 32, 32, 28, 28, 28, 28, 28, 27, 27, - 27, 27, 28, 24, 24, 24, 0, 18, 27, 27, - 0, 17, 32, 0, 32, 32, 24, 24, 24, 27, - 27, 28, 32, 24, 24, 24, 24, 27, 0, 20, - 30, 0, 32, 14, 28, 24, 24, 24, 24, 27, - 28, 32, 25, 25, 25, 0, 16, 0, 32, 0, - - 28, 25, 25, 25, 32, 32, 25, 25, 25, 25, - 25, 0, 0, 13, 15, 14, 0, 28, 28, 25, - 25, 25, 25, 25, 32, 32, 32, 25, 25, 28, - 28, 28, 25, 25, 32, 32, 32, 32, 32, 28, - 28, 28, 28, 28, 32, 32, 32, 28, 28, 28, - 32, 32, 32, 32, 32, 28, 28, 28, 28, 28, + 32, 32, 32, 27, 27, 27, 27, 27, 32, 0, + 32, 32, 28, 28, 28, 28, 28, 27, 27, 27, + 27, 27, 28, 24, 24, 24, 27, 0, 18, 27, + 27, 0, 17, 32, 0, 32, 32, 24, 24, 24, + 27, 27, 27, 28, 32, 24, 24, 24, 24, 0, + 21, 27, 27, 30, 0, 32, 14, 28, 24, 24, + 24, 24, 27, 27, 28, 32, 25, 25, 25, 27, + + 0, 16, 0, 32, 0, 28, 25, 25, 25, 27, + 32, 32, 25, 25, 25, 25, 25, 0, 20, 0, + 0, 13, 15, 14, 0, 28, 28, 25, 25, 25, + 25, 25, 32, 32, 32, 25, 25, 28, 28, 28, + 25, 25, 32, 32, 32, 32, 32, 28, 28, 28, + 28, 28, 32, 32, 32, 28, 28, 28, 32, 32, + 32, 32, 32, 28, 28, 28, 28, 28, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 0 + 0 } ; static yyconst int yy_ec[256] = @@ -341,13 +342,13 @@ static yyconst int yy_ec[256] = 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 22, 22, 22, 23, 1, 1, 24, 25, 10, 25, 26, 27, 28, 29, 30, 27, - 27, 31, 27, 27, 27, 27, 27, 32, 33, 34, - 27, 35, 36, 37, 38, 27, 39, 40, 27, 27, - 10, 41, 10, 1, 42, 1, 43, 44, 45, 46, + 27, 31, 32, 27, 27, 27, 33, 34, 35, 36, + 27, 37, 38, 39, 40, 27, 41, 42, 27, 27, + 10, 43, 10, 1, 44, 1, 45, 46, 47, 48, - 47, 48, 44, 44, 49, 44, 44, 50, 51, 52, - 53, 44, 44, 54, 55, 56, 57, 44, 44, 44, - 44, 44, 1, 1, 1, 1, 1, 1, 1, 1, + 49, 50, 46, 46, 51, 46, 46, 52, 53, 54, + 55, 46, 46, 56, 57, 58, 59, 46, 46, 46, + 46, 46, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -364,804 +365,846 @@ static yyconst int yy_ec[256] = 1, 1, 1, 1, 1 } ; -static yyconst int yy_meta[58] = +static yyconst int yy_meta[60] = { 0, 1, 2, 2, 3, 1, 4, 1, 3, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 4, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7 + 1, 1, 6, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7 } ; -static yyconst short int yy_base[395] = +static yyconst short int yy_base[403] = { 0, - 0, 52, 90, 0, 57, 58, 146, 151, 191, 247, - 303, 343, 991, 949, 986, 3061, 983, 981, 941, 3061, - 3061, 939, 3061, 157, 371, 399, 427, 3061, 3061, 468, - 935, 933, 938, 928, 524, 20, 153, 909, 911, 903, - 894, 895, 899, 54, 898, 3061, 895, 163, 536, 564, - 592, 633, 894, 899, 901, 888, 689, 21, 919, 0, - 3061, 916, 0, 3061, 713, 66, 0, 878, 316, 127, - 3061, 135, 3061, 82, 877, 753, 913, 908, 907, 3061, - 867, 777, 864, 801, 175, 863, 825, 189, 148, 837, - 865, 238, 0, 865, 52, 858, 864, 178, 3061, 132, - - 161, 144, 173, 136, 149, 171, 839, 905, 207, 836, - 929, 821, 953, 325, 977, 244, 269, 989, 1017, 354, - 0, 831, 237, 824, 826, 270, 176, 845, 0, 842, - 266, 3061, 3061, 273, 0, 804, 311, 357, 279, 336, - 3061, 3061, 803, 284, 399, 1045, 1073, 1101, 815, 801, - 814, 803, 800, 804, 162, 267, 236, 237, 295, 283, - 145, 1129, 1157, 1185, 802, 788, 797, 779, 770, 776, - 289, 758, 3061, 338, 426, 450, 521, 317, 1213, 1241, - 547, 330, 758, 746, 754, 730, 738, 335, 349, 296, - 323, 342, 553, 386, 1269, 1297, 579, 363, 737, 730, - - 738, 719, 726, 355, 373, 1325, 1353, 1381, 401, 3061, - 718, 699, 706, 695, 402, 389, 403, 368, 38, 1409, - 1437, 1465, 690, 675, 681, 671, 431, 393, 686, 396, - 1493, 1521, 712, 434, 655, 602, 440, 449, 3061, 417, - 489, 420, 424, 722, 546, 1549, 1577, 731, 599, 591, - 562, 600, 510, 1604, 1631, 1658, 601, 3061, 550, 602, - 605, 3061, 488, 542, 577, 535, 1685, 1712, 1739, 505, - 613, 490, 774, 576, 1766, 1793, 801, 614, 619, 3061, - 452, 405, 586, 616, 847, 604, 1820, 1847, 855, 633, - 430, 1875, 1903, 1931, 1959, 697, 3061, 474, 655, 423, - - 1987, 2015, 2043, 2071, 881, 617, 2099, 2127, 2155, 2183, - 757, 456, 719, 3061, 385, 320, 2223, 926, 746, 2235, - 2263, 2291, 2319, 875, 2347, 2375, 2403, 952, 908, 2431, - 2459, 2487, 999, 981, 1007, 756, 2515, 2543, 1033, 1059, - 770, 2571, 2599, 1085, 2627, 2655, 2683, 2711, 2739, 2767, - 1091, 794, 2795, 2823, 1117, 1143, 798, 2851, 2879, 1169, - 1175, 1201, 1227, 1253, 1279, 1286, 240, 1312, 1338, 190, - 1364, 1371, 3061, 2920, 2927, 2934, 2941, 2948, 2955, 2962, - 2969, 2976, 2983, 2990, 2997, 3004, 153, 3011, 3018, 3025, - 3032, 3039, 3046, 3053 - + 0, 54, 94, 0, 59, 60, 152, 157, 199, 257, + 315, 357, 1026, 982, 1020, 3235, 1016, 1015, 962, 3235, + 3235, 961, 3235, 163, 387, 417, 447, 3235, 3235, 490, + 960, 966, 963, 970, 548, 20, 159, 941, 940, 933, + 919, 920, 931, 56, 929, 3235, 927, 169, 560, 590, + 620, 663, 923, 929, 924, 932, 721, 21, 955, 0, + 3235, 950, 0, 3235, 745, 68, 0, 910, 180, 141, + 3235, 144, 3235, 84, 907, 787, 946, 942, 940, 3235, + 884, 811, 883, 835, 189, 882, 859, 219, 156, 871, + 901, 250, 0, 886, 879, 183, 874, 187, 3235, 41, + + 154, 38, 168, 164, 166, 179, 868, 943, 259, 867, + 967, 866, 991, 321, 1015, 331, 182, 1027, 1057, 324, + 0, 878, 862, 252, 857, 231, 45, 892, 0, 882, + 224, 3235, 3235, 281, 0, 838, 370, 386, 174, 289, + 3235, 3235, 837, 288, 373, 1087, 1117, 1147, 842, 837, + 824, 829, 836, 819, 243, 226, 323, 244, 279, 252, + 280, 1177, 1207, 1237, 828, 823, 807, 813, 820, 807, + 322, 799, 3235, 291, 416, 446, 455, 340, 1267, 1297, + 545, 333, 801, 792, 787, 780, 775, 335, 163, 343, + 314, 356, 573, 381, 1327, 1357, 601, 388, 775, 778, + + 773, 763, 759, 371, 350, 1387, 1417, 1447, 400, 3235, + 763, 766, 758, 748, 755, 369, 321, 148, 373, 1477, + 1507, 1537, 724, 728, 722, 715, 721, 384, 580, 401, + 1567, 1597, 610, 691, 424, 687, 630, 439, 399, 440, + 402, 435, 629, 439, 1627, 1657, 718, 632, 479, 623, + 619, 490, 436, 1686, 1715, 1744, 492, 582, 3235, 617, + 596, 612, 3235, 441, 564, 532, 512, 1773, 1802, 1831, + 652, 551, 541, 510, 754, 440, 1860, 1889, 762, 663, + 3235, 521, 664, 453, 454, 542, 717, 808, 471, 1918, + 1947, 857, 448, 665, 437, 1977, 2007, 2037, 2067, 729, + + 739, 3235, 653, 600, 403, 2097, 2127, 2157, 2187, 741, + 885, 618, 2217, 2247, 2277, 2307, 749, 783, 3235, 330, + 656, 3235, 256, 222, 2349, 913, 744, 2361, 2391, 2421, + 2451, 836, 2481, 2511, 2541, 920, 881, 2571, 2601, 2631, + 964, 944, 1012, 788, 2661, 2691, 992, 1040, 789, 2721, + 2751, 1068, 2781, 2811, 2841, 2871, 2901, 2931, 1047, 790, + 2961, 2991, 1077, 1097, 795, 3021, 3051, 1107, 1127, 1135, + 1163, 1191, 1219, 1226, 188, 1254, 1247, 181, 1282, 1310, + 3235, 3094, 3101, 3108, 3115, 3122, 3129, 3136, 3143, 3150, + 3157, 3164, 3171, 3178, 83, 3185, 3192, 3199, 3206, 3213, + + 3220, 3227 } ; -static yyconst short int yy_def[395] = +static yyconst short int yy_def[403] = { 0, - 373, 1, 373, 3, 1, 1, 374, 374, 375, 375, - 376, 376, 373, 377, 373, 373, 373, 378, 379, 373, - 373, 380, 373, 381, 377, 377, 377, 373, 373, 373, - 30, 30, 30, 30, 377, 377, 378, 30, 30, 30, - 30, 30, 382, 373, 383, 373, 384, 385, 382, 382, - 382, 373, 52, 52, 52, 52, 382, 382, 373, 386, - 373, 386, 386, 373, 373, 373, 387, 388, 389, 388, - 373, 388, 373, 390, 377, 377, 373, 373, 378, 373, - 379, 379, 380, 380, 381, 391, 377, 377, 377, 377, - 377, 377, 30, 30, 30, 30, 30, 377, 373, 377, - - 378, 377, 377, 377, 377, 377, 382, 382, 373, 383, - 383, 384, 384, 385, 382, 382, 382, 382, 382, 382, - 52, 52, 52, 52, 52, 382, 382, 373, 386, 386, - 373, 373, 373, 373, 387, 388, 388, 389, 392, 389, - 373, 373, 388, 388, 373, 377, 377, 377, 30, 30, - 30, 30, 30, 30, 377, 378, 377, 377, 377, 377, - 377, 382, 382, 382, 52, 52, 52, 52, 52, 52, - 382, 388, 373, 392, 389, 389, 377, 377, 377, 377, - 377, 30, 30, 30, 30, 30, 30, 377, 378, 377, - 377, 377, 382, 382, 382, 382, 382, 52, 52, 52, - - 52, 52, 52, 382, 392, 377, 377, 377, 373, 373, - 30, 30, 30, 30, 30, 377, 378, 377, 377, 382, - 382, 382, 52, 52, 52, 52, 52, 382, 377, 377, - 377, 377, 377, 30, 30, 30, 30, 373, 373, 377, - 378, 377, 377, 382, 382, 382, 382, 382, 52, 52, - 52, 52, 382, 377, 377, 377, 373, 373, 30, 30, - 373, 373, 377, 378, 377, 377, 382, 382, 382, 52, - 52, 382, 377, 377, 377, 377, 377, 30, 373, 373, - 377, 378, 377, 377, 382, 382, 382, 382, 382, 52, - 382, 377, 377, 377, 377, 373, 373, 393, 377, 394, - - 382, 382, 382, 382, 377, 377, 377, 377, 377, 377, - 377, 393, 393, 373, 377, 394, 394, 382, 382, 382, - 382, 382, 382, 382, 377, 377, 377, 377, 377, 382, - 382, 382, 382, 382, 377, 377, 377, 377, 377, 382, - 382, 382, 382, 382, 377, 377, 377, 382, 382, 382, - 377, 377, 377, 377, 377, 382, 382, 382, 382, 382, - 377, 377, 377, 382, 382, 382, 377, 377, 377, 382, - 382, 382, 0, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373 - + 381, 1, 381, 3, 1, 1, 382, 382, 383, 383, + 384, 384, 381, 385, 381, 381, 381, 386, 387, 381, + 381, 388, 381, 389, 385, 385, 385, 381, 381, 381, + 30, 30, 30, 30, 385, 385, 386, 30, 30, 30, + 30, 30, 390, 381, 391, 381, 392, 393, 390, 390, + 390, 381, 52, 52, 52, 52, 390, 390, 381, 394, + 381, 394, 394, 381, 381, 381, 395, 396, 397, 396, + 381, 396, 381, 398, 385, 385, 381, 381, 386, 381, + 387, 387, 388, 388, 389, 399, 385, 385, 385, 385, + 385, 385, 30, 30, 30, 30, 30, 385, 381, 385, + + 386, 385, 385, 385, 385, 385, 390, 390, 381, 391, + 391, 392, 392, 393, 390, 390, 390, 390, 390, 390, + 52, 52, 52, 52, 52, 390, 390, 381, 394, 394, + 381, 381, 381, 381, 395, 396, 396, 397, 400, 397, + 381, 381, 396, 396, 381, 385, 385, 385, 30, 30, + 30, 30, 30, 30, 385, 386, 385, 385, 385, 385, + 385, 390, 390, 390, 52, 52, 52, 52, 52, 52, + 390, 396, 381, 400, 397, 397, 385, 385, 385, 385, + 385, 30, 30, 30, 30, 30, 30, 385, 386, 385, + 385, 385, 390, 390, 390, 390, 390, 52, 52, 52, + + 52, 52, 52, 390, 400, 385, 385, 385, 381, 381, + 30, 30, 30, 30, 30, 385, 386, 385, 385, 390, + 390, 390, 52, 52, 52, 52, 52, 390, 385, 385, + 385, 385, 385, 30, 30, 30, 30, 30, 385, 386, + 385, 385, 390, 390, 390, 390, 390, 52, 52, 52, + 52, 52, 390, 385, 385, 385, 30, 381, 381, 30, + 30, 381, 381, 385, 386, 385, 385, 390, 390, 390, + 52, 52, 52, 390, 385, 385, 385, 385, 385, 381, + 381, 30, 30, 385, 386, 385, 385, 390, 390, 390, + 390, 390, 52, 52, 390, 385, 385, 385, 385, 30, + + 381, 381, 401, 385, 402, 390, 390, 390, 390, 52, + 385, 385, 385, 385, 385, 385, 385, 381, 381, 401, + 401, 381, 385, 402, 402, 390, 390, 390, 390, 390, + 390, 390, 385, 385, 385, 385, 385, 390, 390, 390, + 390, 390, 385, 385, 385, 385, 385, 390, 390, 390, + 390, 390, 385, 385, 385, 390, 390, 390, 385, 385, + 385, 385, 385, 390, 390, 390, 390, 390, 385, 385, + 385, 390, 390, 390, 385, 385, 385, 390, 390, 390, + 0, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + + 381, 381 } ; -static yyconst short int yy_nxt[3119] = +static yyconst short int yy_nxt[3295] = { 0, 14, 15, 16, 17, 14, 18, 19, 20, 21, 14, 22, 23, 14, 14, 24, 25, 26, 27, 25, 25, 25, 25, 28, 29, 21, 30, 30, 30, 30, 31, - 30, 32, 30, 33, 30, 30, 34, 30, 30, 30, - 35, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 36, 14, 14, 37, 59, 59, - 76, 108, 21, 21, 21, 21, 109, 134, 99, 109, - 109, 109, 109, 109, 109, 109, 100, 127, 76, 38, - 39, 150, 40, 144, 99, 151, 41, 243, 152, 42, - 43, 15, 16, 17, 43, 44, 45, 21, 46, 43, - - 47, 23, 43, 43, 48, 49, 50, 51, 49, 49, - 49, 49, 28, 29, 21, 52, 52, 52, 52, 53, - 52, 54, 52, 55, 52, 52, 56, 52, 52, 52, - 57, 43, 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 58, 43, 43, 15, 61, 62, - 141, 63, 15, 61, 62, 80, 63, 64, 142, 135, - 86, 88, 64, 80, 86, 86, 86, 137, 64, 63, - 86, 86, 76, 64, 63, 137, 76, 155, 86, 134, - 99, 86, 86, 86, 76, 76, 65, 86, 76, 76, - 159, 65, 15, 16, 17, 157, 18, 87, 190, 86, - - 160, 101, 76, 115, 146, 147, 148, 146, 146, 146, - 146, 76, 156, 76, 188, 87, 108, 161, 76, 109, - 158, 171, 109, 109, 109, 109, 109, 109, 109, 76, - 108, 66, 67, 67, 67, 67, 67, 67, 67, 67, + 30, 30, 32, 33, 30, 34, 30, 30, 30, 30, + 30, 30, 35, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 36, 14, 14, 37, + 59, 59, 76, 108, 21, 21, 21, 21, 109, 134, + 99, 109, 109, 109, 109, 109, 109, 109, 100, 127, + 76, 38, 39, 76, 40, 144, 99, 108, 155, 135, + 41, 157, 171, 42, 43, 15, 16, 17, 43, 44, + + 45, 21, 46, 43, 47, 23, 43, 43, 48, 49, + 50, 51, 49, 49, 49, 49, 28, 29, 21, 52, + 52, 52, 52, 53, 52, 52, 54, 55, 52, 56, + 52, 52, 52, 52, 52, 52, 57, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 58, 43, 43, 15, 61, 62, 80, 63, 15, 61, + 62, 80, 63, 64, 141, 80, 86, 142, 64, 88, + 86, 86, 86, 241, 64, 63, 86, 86, 173, 64, + 63, 139, 139, 137, 136, 139, 137, 86, 134, 99, + 76, 139, 86, 86, 65, 116, 86, 86, 76, 65, + + 15, 16, 17, 139, 18, 87, 76, 156, 76, 101, + 76, 115, 151, 86, 217, 152, 174, 158, 153, 160, + 159, 76, 140, 108, 108, 134, 99, 161, 80, 76, + 76, 87, 134, 99, 146, 147, 148, 146, 146, 146, + 146, 66, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 15, 16, - 17, 88, 18, 89, 89, 89, 89, 89, 89, 162, - 163, 164, 162, 162, 162, 162, 166, 134, 99, 80, - 167, 134, 99, 168, 134, 99, 76, 76, 76, 191, - 76, 190, 116, 173, 108, 134, 99, 66, 67, 67, - 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, + 17, 76, 18, 88, 325, 89, 89, 89, 89, 89, + 89, 109, 189, 108, 109, 109, 109, 109, 109, 109, + 109, 167, 134, 99, 168, 76, 76, 169, 191, 134, + 99, 139, 76, 175, 76, 205, 192, 188, 76, 66, - 67, 67, 67, 67, 15, 16, 17, 69, 18, 108, - 108, 189, 136, 70, 71, 72, 136, 139, 139, 174, - 136, 139, 136, 76, 137, 192, 73, 139, 86, 108, - 177, 209, 86, 86, 136, 76, 76, 218, 139, 139, - 175, 204, 205, 74, 15, 16, 17, 69, 18, 86, - 190, 80, 210, 70, 71, 72, 140, 76, 139, 139, - 317, 172, 139, 76, 209, 115, 73, 116, 139, 117, - 117, 117, 117, 117, 117, 76, 176, 173, 174, 219, - 139, 216, 76, 74, 88, 210, 89, 89, 89, 89, - 89, 89, 89, 242, 108, 108, 190, 140, 217, 193, - - 86, 228, 209, 238, 86, 80, 298, 80, 76, 229, - 86, 76, 88, 174, 90, 90, 90, 90, 90, 90, - 90, 86, 86, 210, 239, 76, 108, 139, 139, 76, - 172, 139, 238, 108, 240, 257, 76, 139, 253, 76, - 88, 261, 91, 91, 91, 91, 91, 92, 89, 139, - 238, 139, 139, 239, 175, 139, 258, 76, 314, 241, - 76, 139, 262, 317, 76, 263, 140, 76, 75, 265, - 108, 239, 75, 139, 75, 313, 314, 75, 75, 266, - 75, 75, 75, 93, 93, 93, 93, 93, 93, 93, - 140, 80, 76, 93, 93, 93, 93, 93, 93, 93, - - 93, 93, 93, 93, 93, 93, 93, 93, 76, 93, - 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 98, 99, 75, 76, 75, - 108, 75, 75, 290, 264, 75, 206, 207, 208, 206, - 206, 206, 206, 281, 80, 291, 75, 75, 75, 116, - 108, 117, 117, 117, 117, 117, 117, 117, 272, 244, - 177, 76, 178, 178, 178, 178, 178, 178, 220, 221, - 222, 220, 220, 220, 220, 76, 108, 116, 278, 118, - 118, 118, 118, 118, 118, 118, 108, 76, 282, 284, - 273, 271, 193, 108, 194, 194, 194, 194, 194, 194, - - 257, 261, 257, 279, 108, 116, 261, 119, 119, 119, - 119, 119, 120, 117, 279, 296, 76, 76, 285, 108, - 279, 258, 262, 258, 280, 283, 76, 262, 299, 270, - 305, 260, 108, 107, 296, 280, 297, 107, 300, 107, - 300, 280, 107, 107, 108, 107, 107, 107, 121, 121, - 121, 121, 121, 121, 121, 297, 76, 76, 121, 121, + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 15, 16, 17, 69, + 18, 76, 76, 80, 86, 70, 71, 72, 86, 86, + 137, 176, 322, 174, 209, 190, 190, 116, 73, 117, + 117, 117, 117, 117, 117, 86, 162, 163, 164, 162, + 162, 162, 162, 177, 173, 210, 76, 74, 15, 16, + 17, 69, 18, 115, 108, 76, 108, 70, 71, 72, + 190, 136, 219, 108, 86, 136, 204, 76, 86, 240, + 73, 136, 76, 216, 86, 76, 218, 139, 139, 209, + 172, 139, 174, 136, 193, 86, 86, 139, 76, 74, + + 88, 209, 89, 89, 89, 89, 89, 89, 89, 139, + 210, 76, 190, 108, 229, 76, 239, 139, 139, 228, + 172, 139, 210, 108, 242, 258, 108, 139, 140, 76, + 88, 253, 90, 90, 90, 90, 90, 90, 90, 139, + 262, 76, 80, 76, 76, 325, 259, 139, 139, 264, + 175, 139, 243, 266, 275, 303, 80, 139, 140, 76, + 88, 263, 91, 91, 91, 91, 91, 92, 89, 139, + 206, 207, 208, 206, 206, 206, 206, 76, 108, 108, + 258, 108, 76, 76, 310, 288, 274, 265, 140, 76, + 75, 262, 267, 280, 75, 76, 75, 76, 284, 75, + + 75, 259, 75, 75, 75, 93, 93, 93, 93, 93, + 93, 93, 263, 108, 281, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 76, 93, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 98, + 99, 75, 108, 75, 76, 75, 75, 300, 177, 75, + 178, 178, 178, 178, 178, 178, 80, 295, 287, 294, + 75, 75, 75, 116, 76, 117, 117, 117, 117, 117, + 117, 117, 286, 258, 76, 293, 304, 76, 220, 221, + 222, 220, 220, 220, 220, 254, 255, 256, 254, 254, + + 254, 254, 108, 116, 259, 118, 118, 118, 118, 118, + 118, 118, 285, 262, 193, 108, 194, 194, 194, 194, + 194, 194, 76, 229, 283, 230, 230, 230, 230, 230, + 230, 311, 108, 116, 263, 119, 119, 119, 119, 119, + 120, 117, 76, 108, 268, 269, 270, 268, 268, 268, + 268, 282, 76, 280, 321, 322, 323, 321, 322, 273, + 76, 272, 108, 107, 280, 301, 301, 107, 271, 107, + 261, 108, 107, 107, 281, 107, 107, 107, 121, 121, + 121, 121, 121, 121, 121, 281, 302, 302, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 108, 121, 107, 107, 107, 107, 107, + + 121, 121, 121, 121, 121, 108, 121, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 126, 99, 107, 259, 107, 76, 107, 107, 296, 252, - - 107, 254, 255, 256, 254, 254, 254, 254, 251, 315, - 250, 107, 107, 107, 131, 99, 132, 249, 133, 297, - 313, 314, 132, 237, 133, 229, 76, 230, 230, 230, - 230, 230, 230, 236, 235, 133, 133, 267, 268, 269, - 267, 267, 267, 267, 244, 234, 245, 245, 245, 245, - 245, 245, 76, 133, 75, 227, 75, 226, 75, 318, - 75, 75, 108, 225, 75, 224, 223, 215, 214, 335, - 305, 108, 329, 329, 329, 75, 75, 75, 81, 213, - 81, 212, 81, 340, 81, 81, 108, 211, 81, 292, - 293, 294, 295, 292, 292, 292, 76, 76, 137, 81, - - 81, 81, 83, 203, 83, 202, 83, 351, 83, 83, - 108, 356, 83, 201, 76, 273, 274, 274, 274, 274, - 274, 274, 200, 83, 83, 83, 85, 199, 75, 198, - 85, 187, 75, 75, 76, 186, 85, 185, 108, 184, - 183, 76, 182, 137, 137, 130, 128, 85, 85, 75, - 88, 170, 89, 89, 89, 89, 89, 89, 89, 169, - 165, 113, 301, 302, 303, 304, 301, 301, 301, 285, - 286, 286, 286, 286, 286, 286, 111, 76, 88, 108, - 89, 89, 89, 89, 89, 89, 89, 108, 318, 154, - 334, 334, 334, 153, 149, 108, 325, 326, 327, 325, - - 325, 325, 325, 145, 84, 76, 107, 82, 107, 80, - 107, 78, 107, 107, 77, 108, 107, 76, 137, 130, - 128, 76, 125, 329, 329, 329, 124, 107, 107, 107, - 110, 123, 110, 122, 110, 113, 110, 110, 111, 108, - 110, 330, 331, 332, 330, 330, 330, 330, 76, 106, - 105, 110, 110, 110, 112, 104, 112, 103, 112, 102, - 112, 112, 97, 96, 112, 95, 108, 328, 328, 328, - 328, 328, 328, 328, 94, 112, 112, 112, 114, 84, - 107, 82, 114, 80, 107, 107, 78, 77, 114, 76, - 373, 373, 76, 373, 373, 373, 334, 334, 334, 114, - - 114, 107, 116, 373, 117, 117, 117, 117, 117, 117, - 117, 373, 373, 373, 333, 333, 333, 333, 333, 333, - 333, 108, 345, 346, 347, 345, 345, 345, 345, 108, - 116, 373, 117, 117, 117, 117, 117, 117, 117, 108, - 373, 373, 373, 373, 373, 373, 335, 76, 336, 336, - 336, 336, 336, 336, 373, 373, 373, 108, 177, 373, - 178, 178, 178, 178, 178, 178, 178, 373, 373, 373, - 373, 373, 373, 76, 348, 349, 350, 348, 348, 348, - 348, 373, 373, 373, 373, 76, 177, 373, 179, 179, - 179, 179, 179, 179, 179, 373, 373, 373, 340, 108, - - 341, 341, 341, 341, 341, 341, 361, 362, 363, 361, - 361, 361, 361, 76, 177, 373, 180, 180, 180, 180, - 180, 181, 178, 373, 373, 108, 373, 373, 373, 373, - 351, 76, 352, 352, 352, 352, 352, 352, 373, 373, - 373, 76, 193, 373, 194, 194, 194, 194, 194, 194, - 194, 373, 373, 373, 373, 373, 373, 76, 364, 365, - 366, 364, 364, 364, 364, 373, 373, 373, 373, 108, - 193, 373, 195, 195, 195, 195, 195, 195, 195, 373, - 373, 373, 356, 108, 357, 357, 357, 357, 357, 357, - 367, 367, 367, 367, 367, 367, 367, 108, 193, 373, - - 196, 196, 196, 196, 196, 197, 194, 373, 373, 108, - 373, 373, 373, 373, 373, 76, 361, 361, 361, 361, - 361, 361, 361, 373, 373, 108, 177, 373, 178, 178, - 178, 178, 178, 178, 178, 373, 373, 373, 373, 373, - 373, 76, 368, 368, 368, 368, 368, 369, 367, 373, - 373, 373, 373, 76, 177, 373, 178, 178, 178, 178, - 178, 178, 178, 373, 373, 373, 373, 76, 370, 370, - 370, 370, 370, 370, 370, 373, 373, 373, 373, 373, - 373, 76, 193, 373, 194, 194, 194, 194, 194, 194, - 194, 373, 373, 108, 364, 364, 364, 364, 364, 364, - - 364, 371, 371, 371, 371, 371, 372, 370, 373, 108, - 193, 373, 194, 194, 194, 194, 194, 194, 194, 108, - 373, 373, 373, 373, 373, 373, 108, 367, 367, 367, - 367, 367, 367, 367, 373, 373, 373, 108, 229, 373, - 230, 230, 230, 230, 230, 230, 230, 373, 373, 373, - 373, 373, 76, 367, 367, 367, 367, 367, 367, 373, - 373, 373, 373, 373, 373, 76, 229, 373, 231, 231, - 231, 231, 231, 231, 231, 373, 373, 373, 76, 370, - 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, - 370, 370, 373, 76, 229, 373, 232, 232, 232, 232, - - 232, 233, 230, 373, 108, 373, 373, 373, 373, 373, - 373, 108, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 76, 244, 373, 245, 245, 245, 245, 245, 245, - 245, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 108, - 244, 373, 246, 246, 246, 246, 246, 246, 246, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 108, 244, 373, - 247, 247, 247, 247, 247, 248, 245, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - - 373, 373, 373, 373, 373, 108, 229, 373, 230, 230, - 230, 230, 230, 230, 230, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 76, 229, 373, 230, 230, 230, 230, - 230, 230, 230, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 76, 244, 373, 245, 245, 245, 245, 245, 245, - 245, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 108, - 244, 373, 245, 245, 245, 245, 245, 245, 245, 373, - - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 108, 273, 274, - 274, 274, 274, 274, 274, 274, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 76, 273, 275, 275, 275, 275, - 275, 275, 275, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 76, 273, 276, 276, 276, 276, 276, 277, 274, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 76, 285, - - 286, 286, 286, 286, 286, 286, 286, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 108, 285, 287, 287, 287, - 287, 287, 287, 287, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 108, 285, 288, 288, 288, 288, 288, 289, - 286, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 108, - 273, 274, 274, 274, 274, 274, 274, 274, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - - 373, 373, 373, 373, 373, 373, 76, 273, 274, 274, - 274, 274, 274, 274, 274, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 76, 285, 286, 286, 286, 286, 286, - 286, 286, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 108, 285, 286, 286, 286, 286, 286, 286, 286, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 108, 305, 373, - 306, 306, 306, 306, 306, 306, 306, 373, 373, 373, - - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 76, 305, 373, 307, 307, - 307, 307, 307, 307, 307, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 76, 305, 373, 308, 308, 308, 308, - 308, 309, 310, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 76, 305, 373, 311, 311, 311, 306, 306, 306, - 306, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 76, - - 318, 373, 319, 319, 319, 319, 319, 319, 319, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 108, 318, 373, - 320, 320, 320, 320, 320, 320, 320, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 108, 318, 373, 321, 321, - 321, 321, 321, 322, 323, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 108, 318, 373, 324, 324, 324, 319, - 319, 319, 319, 373, 373, 373, 373, 373, 373, 373, - - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 108, 305, 373, 310, 310, 310, 310, 310, 310, - 310, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 76, - 305, 373, 310, 310, 310, 310, 310, 310, 310, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 76, 305, 373, - 310, 310, 310, 310, 310, 310, 328, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 76, 305, 373, 328, 328, - - 328, 328, 328, 328, 328, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 76, 316, 373, 316, 373, 316, 373, - 316, 316, 373, 373, 316, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 316, 316, 316, 318, 373, - 323, 323, 323, 323, 323, 323, 323, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 108, 318, 373, 323, 323, - 323, 323, 323, 323, 323, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - - 373, 373, 373, 108, 318, 373, 323, 323, 323, 323, - 323, 323, 333, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 108, 318, 373, 333, 333, 333, 333, 333, 333, - 333, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 108, - 335, 373, 336, 336, 336, 336, 336, 336, 336, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 76, 335, 373, - 337, 337, 337, 337, 337, 337, 337, 373, 373, 373, - - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 76, 335, 373, 338, 338, - 338, 338, 338, 339, 336, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 76, 340, 373, 341, 341, 341, 341, - 341, 341, 341, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 108, 340, 373, 342, 342, 342, 342, 342, 342, - 342, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 108, - - 340, 373, 343, 343, 343, 343, 343, 344, 341, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 108, 335, 373, - 336, 336, 336, 336, 336, 336, 336, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 76, 335, 373, 336, 336, - 336, 336, 336, 336, 336, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 76, 340, 373, 341, 341, 341, 341, - 341, 341, 341, 373, 373, 373, 373, 373, 373, 373, - - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 108, 340, 373, 341, 341, 341, 341, 341, 341, - 341, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 108, - 351, 373, 352, 352, 352, 352, 352, 352, 352, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 76, 351, 373, - 353, 353, 353, 353, 353, 353, 353, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 76, 351, 373, 354, 354, - - 354, 354, 354, 355, 352, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 76, 356, 373, 357, 357, 357, 357, - 357, 357, 357, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 108, 356, 373, 358, 358, 358, 358, 358, 358, - 358, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 108, - 356, 373, 359, 359, 359, 359, 359, 360, 357, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - - 373, 373, 373, 373, 373, 373, 373, 108, 351, 373, - 352, 352, 352, 352, 352, 352, 352, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 76, 351, 373, 352, 352, - 352, 352, 352, 352, 352, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 76, 356, 373, 357, 357, 357, 357, - 357, 357, 357, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 108, 356, 373, 357, 357, 357, 357, 357, 357, - - 357, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 108, - 60, 60, 60, 60, 60, 60, 60, 21, 21, 21, - 21, 21, 21, 21, 68, 68, 68, 68, 68, 68, - 68, 75, 373, 373, 373, 373, 75, 75, 79, 79, - 79, 79, 79, 79, 79, 81, 373, 373, 373, 373, - 81, 81, 83, 373, 373, 373, 373, 83, 83, 85, - 373, 85, 373, 373, 85, 85, 107, 373, 373, 373, - 373, 107, 107, 110, 373, 373, 373, 373, 110, 110, - 112, 373, 373, 373, 373, 112, 112, 114, 373, 114, - - 373, 373, 114, 114, 129, 373, 129, 129, 373, 373, - 129, 136, 373, 136, 373, 136, 136, 136, 138, 138, - 138, 138, 138, 138, 138, 143, 143, 143, 143, 143, - 143, 143, 86, 373, 86, 373, 373, 86, 86, 139, - 139, 139, 139, 139, 139, 139, 312, 312, 312, 312, - 312, 312, 312, 316, 373, 373, 373, 373, 316, 316, - 13, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373 + 107, 107, 126, 99, 107, 260, 107, 257, 107, 107, + 318, 243, 107, 244, 244, 244, 244, 244, 244, 305, + 301, 305, 318, 107, 107, 107, 131, 99, 132, 252, + 133, 319, 251, 250, 132, 249, 133, 326, 248, 76, + 108, 302, 311, 319, 337, 337, 337, 133, 133, 296, + 297, 298, 299, 296, 296, 296, 275, 276, 276, 276, + 276, 276, 276, 238, 318, 237, 108, 133, 75, 236, + 75, 76, 75, 235, 75, 75, 76, 234, 75, 227, + + 226, 343, 348, 359, 76, 319, 225, 224, 364, 75, + 75, 75, 81, 223, 81, 215, 81, 214, 81, 81, + 213, 212, 81, 306, 307, 308, 309, 306, 306, 306, + 76, 108, 76, 81, 81, 81, 83, 108, 83, 211, + 83, 137, 83, 83, 203, 202, 83, 201, 200, 326, + 108, 342, 342, 342, 199, 198, 187, 83, 83, 83, + 85, 186, 75, 185, 85, 184, 75, 75, 183, 182, + 85, 288, 289, 289, 289, 289, 289, 289, 108, 137, + 137, 85, 85, 75, 88, 130, 89, 89, 89, 89, + 89, 89, 89, 128, 170, 166, 337, 337, 337, 108, + + 333, 334, 335, 333, 333, 333, 333, 165, 113, 111, + 108, 154, 150, 76, 88, 149, 89, 89, 89, 89, + 89, 89, 89, 76, 145, 84, 82, 76, 338, 339, + 340, 338, 338, 338, 338, 336, 336, 336, 336, 336, + 336, 336, 80, 76, 107, 78, 107, 77, 107, 76, + 107, 107, 137, 130, 107, 108, 128, 125, 124, 342, + 342, 342, 76, 123, 122, 107, 107, 107, 110, 113, + 110, 111, 110, 108, 110, 110, 106, 105, 110, 341, + 341, 341, 341, 341, 341, 341, 108, 104, 103, 110, + 110, 110, 112, 102, 112, 97, 112, 96, 112, 112, + + 95, 94, 112, 84, 82, 343, 108, 344, 344, 344, + 344, 344, 344, 112, 112, 112, 114, 80, 107, 78, + 114, 77, 107, 107, 76, 381, 114, 353, 354, 355, + 353, 353, 353, 353, 76, 381, 381, 114, 114, 107, + 116, 381, 117, 117, 117, 117, 117, 117, 117, 381, + 381, 381, 381, 381, 76, 356, 357, 358, 356, 356, + 356, 356, 369, 370, 371, 369, 369, 369, 369, 108, + 116, 381, 117, 117, 117, 117, 117, 117, 117, 381, + 381, 348, 108, 349, 349, 349, 349, 349, 349, 76, + 359, 381, 360, 360, 360, 360, 360, 360, 381, 108, + + 177, 381, 178, 178, 178, 178, 178, 178, 178, 381, + 108, 381, 372, 373, 374, 372, 372, 372, 372, 76, + 364, 381, 365, 365, 365, 365, 365, 365, 381, 76, + 177, 381, 179, 179, 179, 179, 179, 179, 179, 108, + 381, 381, 375, 375, 375, 375, 375, 375, 375, 108, + 369, 369, 369, 369, 369, 369, 369, 381, 381, 76, + 177, 381, 180, 180, 180, 180, 180, 181, 178, 76, + 381, 381, 381, 381, 381, 381, 381, 76, 376, 376, + 376, 376, 376, 377, 375, 381, 381, 381, 381, 76, + 193, 381, 194, 194, 194, 194, 194, 194, 194, 381, + + 381, 381, 381, 381, 381, 76, 378, 378, 378, 378, + 378, 378, 378, 381, 381, 381, 381, 381, 381, 108, + 193, 381, 195, 195, 195, 195, 195, 195, 195, 381, + 381, 381, 381, 108, 372, 372, 372, 372, 372, 372, + 372, 379, 379, 379, 379, 379, 380, 378, 381, 108, + 193, 381, 196, 196, 196, 196, 196, 197, 194, 381, + 381, 108, 375, 375, 375, 375, 375, 375, 108, 375, + 375, 375, 375, 375, 375, 375, 381, 381, 381, 108, + 177, 381, 178, 178, 178, 178, 178, 178, 178, 76, + 381, 381, 381, 381, 381, 381, 76, 378, 378, 378, + + 378, 378, 378, 378, 381, 381, 381, 381, 381, 76, + 177, 381, 178, 178, 178, 178, 178, 178, 178, 381, + 381, 381, 381, 381, 108, 378, 378, 378, 378, 378, + 378, 381, 381, 381, 381, 381, 381, 381, 381, 76, + 193, 381, 194, 194, 194, 194, 194, 194, 194, 381, + 381, 381, 108, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 108, + 193, 381, 194, 194, 194, 194, 194, 194, 194, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 108, + + 229, 381, 230, 230, 230, 230, 230, 230, 230, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 76, + 229, 381, 231, 231, 231, 231, 231, 231, 231, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 76, + 229, 381, 232, 232, 232, 232, 232, 233, 230, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 76, + 243, 381, 244, 244, 244, 244, 244, 244, 244, 381, + + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 108, + 243, 381, 245, 245, 245, 245, 245, 245, 245, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 108, + 243, 381, 246, 246, 246, 246, 246, 247, 244, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 108, + 229, 381, 230, 230, 230, 230, 230, 230, 230, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + + 381, 381, 381, 381, 381, 381, 381, 381, 381, 76, + 229, 381, 230, 230, 230, 230, 230, 230, 230, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 76, + 243, 381, 244, 244, 244, 244, 244, 244, 244, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 108, + 243, 381, 244, 244, 244, 244, 244, 244, 244, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 108, + + 275, 276, 276, 276, 276, 276, 276, 276, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 76, 275, + 277, 277, 277, 277, 277, 277, 277, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 76, 275, 278, + 278, 278, 278, 278, 279, 276, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 76, 288, 289, 289, + 289, 289, 289, 289, 289, 381, 381, 381, 381, 381, + + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 108, 288, 290, 290, 290, + 290, 290, 290, 290, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 108, 288, 291, 291, 291, 291, + 291, 292, 289, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 108, 275, 276, 276, 276, 276, 276, + 276, 276, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + + 381, 381, 76, 275, 276, 276, 276, 276, 276, 276, + 276, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 76, 288, 289, 289, 289, 289, 289, 289, 289, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 108, 288, 289, 289, 289, 289, 289, 289, 289, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 108, + 311, 381, 312, 312, 312, 312, 312, 312, 312, 381, + + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 76, + 311, 381, 313, 313, 313, 313, 313, 313, 313, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 76, + 311, 381, 314, 314, 314, 314, 314, 315, 316, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 76, + 311, 381, 317, 317, 317, 312, 312, 312, 312, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + + 381, 381, 381, 381, 381, 381, 381, 381, 381, 76, + 326, 381, 327, 327, 327, 327, 327, 327, 327, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 108, + 326, 381, 328, 328, 328, 328, 328, 328, 328, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 108, + 326, 381, 329, 329, 329, 329, 329, 330, 331, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 108, + + 326, 381, 332, 332, 332, 327, 327, 327, 327, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 108, + 311, 381, 316, 316, 316, 316, 316, 316, 316, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 76, + 311, 381, 316, 316, 316, 316, 316, 316, 316, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 76, + 311, 381, 316, 316, 316, 316, 316, 316, 336, 381, + + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 76, + 311, 381, 336, 336, 336, 336, 336, 336, 336, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 76, + 324, 381, 324, 381, 324, 381, 324, 324, 381, 381, + 324, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 324, 324, 324, 326, 381, 331, 331, 331, 331, + 331, 331, 331, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + + 381, 381, 381, 108, 326, 381, 331, 331, 331, 331, + 331, 331, 331, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 108, 326, 381, 331, 331, 331, 331, + 331, 331, 341, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 108, 326, 381, 341, 341, 341, 341, + 341, 341, 341, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 108, 343, 381, 344, 344, 344, 344, + + 344, 344, 344, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 76, 343, 381, 345, 345, 345, 345, + 345, 345, 345, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 76, 343, 381, 346, 346, 346, 346, + 346, 347, 344, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 76, 348, 381, 349, 349, 349, 349, + 349, 349, 349, 381, 381, 381, 381, 381, 381, 381, + + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 108, 348, 381, 350, 350, 350, 350, + 350, 350, 350, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 108, 348, 381, 351, 351, 351, 351, + 351, 352, 349, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 108, 343, 381, 344, 344, 344, 344, + 344, 344, 344, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + + 381, 381, 381, 76, 343, 381, 344, 344, 344, 344, + 344, 344, 344, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 76, 348, 381, 349, 349, 349, 349, + 349, 349, 349, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 108, 348, 381, 349, 349, 349, 349, + 349, 349, 349, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 108, 359, 381, 360, 360, 360, 360, + + 360, 360, 360, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 76, 359, 381, 361, 361, 361, 361, + 361, 361, 361, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 76, 359, 381, 362, 362, 362, 362, + 362, 363, 360, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 76, 364, 381, 365, 365, 365, 365, + 365, 365, 365, 381, 381, 381, 381, 381, 381, 381, + + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 108, 364, 381, 366, 366, 366, 366, + 366, 366, 366, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 108, 364, 381, 367, 367, 367, 367, + 367, 368, 365, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 108, 359, 381, 360, 360, 360, 360, + 360, 360, 360, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + + 381, 381, 381, 76, 359, 381, 360, 360, 360, 360, + 360, 360, 360, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 76, 364, 381, 365, 365, 365, 365, + 365, 365, 365, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 108, 364, 381, 365, 365, 365, 365, + 365, 365, 365, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 108, 60, 60, 60, 60, 60, 60, + + 60, 21, 21, 21, 21, 21, 21, 21, 68, 68, + 68, 68, 68, 68, 68, 75, 381, 381, 381, 381, + 75, 75, 79, 79, 79, 79, 79, 79, 79, 81, + 381, 381, 381, 381, 81, 81, 83, 381, 381, 381, + 381, 83, 83, 85, 381, 85, 381, 381, 85, 85, + 107, 381, 381, 381, 381, 107, 107, 110, 381, 381, + 381, 381, 110, 110, 112, 381, 381, 381, 381, 112, + 112, 114, 381, 114, 381, 381, 114, 114, 129, 381, + 129, 129, 381, 381, 129, 136, 381, 136, 381, 136, + 136, 136, 138, 138, 138, 138, 138, 138, 138, 143, + + 143, 143, 143, 143, 143, 143, 86, 381, 86, 381, + 381, 86, 86, 139, 139, 139, 139, 139, 139, 139, + 320, 320, 320, 320, 320, 320, 320, 324, 381, 381, + 381, 381, 324, 324, 13, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381 + } ; -static yyconst short int yy_chk[3119] = +static yyconst short int yy_chk[3295] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 5, 6, - 36, 58, 5, 6, 5, 6, 44, 66, 66, 44, - 44, 44, 44, 44, 44, 44, 36, 58, 219, 2, - 2, 95, 2, 74, 74, 95, 2, 219, 95, 2, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 5, 6, 36, 58, 5, 6, 5, 6, 44, 66, + 66, 44, 44, 44, 44, 44, 44, 44, 36, 58, + 102, 2, 2, 100, 2, 74, 74, 127, 100, 395, + 2, 102, 127, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, - 70, 7, 8, 8, 8, 37, 8, 7, 72, 387, - 24, 89, 8, 101, 24, 24, 48, 70, 7, 7, - 48, 48, 100, 8, 8, 72, 104, 100, 85, 98, - 98, 24, 85, 85, 102, 161, 7, 48, 89, 105, - 104, 8, 9, 9, 9, 102, 9, 24, 161, 85, - - 105, 37, 155, 48, 88, 88, 88, 88, 88, 88, - 88, 106, 101, 103, 155, 85, 127, 106, 98, 109, - 103, 127, 109, 109, 109, 109, 109, 109, 109, 88, - 370, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 7, 7, 7, 101, 7, 8, 8, + 8, 37, 8, 7, 70, 189, 24, 72, 8, 89, + 24, 24, 48, 218, 7, 7, 48, 48, 139, 8, + 8, 69, 69, 70, 69, 69, 72, 24, 98, 98, + 218, 69, 85, 48, 7, 117, 85, 85, 89, 8, + + 9, 9, 9, 69, 9, 24, 104, 101, 105, 37, + 103, 48, 96, 85, 189, 96, 139, 103, 96, 105, + 104, 106, 69, 378, 117, 131, 131, 106, 156, 98, + 375, 85, 126, 126, 88, 88, 88, 88, 88, 88, + 88, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, - 10, 92, 10, 92, 92, 92, 92, 92, 92, 116, - 116, 116, 116, 116, 116, 116, 123, 131, 131, 156, - 123, 126, 126, 123, 134, 134, 157, 158, 92, 158, - 367, 157, 117, 139, 116, 144, 144, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - - 10, 10, 10, 10, 11, 11, 11, 11, 11, 117, - 126, 156, 137, 11, 11, 11, 137, 69, 69, 139, - 69, 69, 137, 160, 144, 160, 11, 69, 114, 171, - 178, 182, 114, 114, 137, 159, 190, 190, 140, 69, - 140, 171, 174, 11, 12, 12, 12, 12, 12, 114, - 159, 189, 182, 12, 12, 12, 69, 178, 138, 138, - 316, 138, 138, 191, 198, 114, 12, 120, 138, 120, - 120, 120, 120, 120, 120, 188, 140, 205, 174, 191, - 138, 188, 192, 12, 25, 198, 25, 25, 25, 25, - 25, 25, 25, 218, 120, 204, 192, 138, 189, 194, - - 145, 204, 209, 215, 145, 217, 282, 282, 218, 230, - 145, 25, 26, 205, 26, 26, 26, 26, 26, 26, - 26, 145, 145, 209, 215, 315, 194, 175, 175, 216, - 175, 175, 227, 228, 216, 234, 230, 175, 228, 26, - 27, 237, 27, 27, 27, 27, 27, 27, 27, 175, - 238, 176, 176, 227, 176, 176, 234, 240, 312, 217, - 242, 176, 237, 300, 243, 240, 175, 27, 30, 242, - 291, 238, 30, 176, 30, 298, 298, 30, 30, 243, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 176, 241, 281, 30, 30, 30, 30, 30, 30, 30, + 10, 88, 10, 92, 324, 92, 92, 92, 92, 92, + 92, 109, 156, 126, 109, 109, 109, 109, 109, 109, + 109, 124, 134, 134, 124, 155, 158, 124, 158, 144, + 144, 140, 92, 140, 160, 174, 160, 155, 323, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, + 11, 159, 161, 217, 114, 11, 11, 11, 114, 114, + 144, 140, 320, 174, 182, 161, 159, 120, 11, 120, + 120, 120, 120, 120, 120, 114, 116, 116, 116, 116, + 116, 116, 116, 178, 205, 182, 191, 11, 12, 12, + 12, 12, 12, 114, 171, 157, 120, 12, 12, 12, + 157, 137, 191, 116, 145, 137, 171, 188, 145, 217, + 12, 137, 178, 188, 145, 190, 190, 138, 138, 198, + 138, 138, 205, 137, 194, 145, 145, 138, 192, 12, + + 25, 209, 25, 25, 25, 25, 25, 25, 25, 138, + 198, 216, 192, 204, 230, 219, 216, 175, 175, 204, + 175, 175, 209, 194, 219, 235, 228, 175, 138, 25, + 26, 228, 26, 26, 26, 26, 26, 26, 26, 175, + 238, 239, 240, 230, 241, 305, 235, 176, 176, 239, + 176, 176, 244, 241, 276, 285, 285, 176, 175, 26, + 27, 238, 27, 27, 27, 27, 27, 27, 27, 176, + 177, 177, 177, 177, 177, 177, 177, 242, 253, 295, + 249, 244, 276, 264, 293, 289, 253, 240, 176, 27, + 30, 252, 242, 257, 30, 284, 30, 177, 264, 30, + + 30, 249, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 252, 289, 257, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 35, 35, 35, 263, 35, - 272, 35, 35, 270, 241, 35, 177, 177, 177, 177, - 177, 177, 177, 263, 264, 272, 35, 35, 35, 49, - 253, 49, 49, 49, 49, 49, 49, 49, 253, 245, - 181, 177, 181, 181, 181, 181, 181, 181, 193, 193, - 193, 193, 193, 193, 193, 266, 49, 50, 259, 50, - 50, 50, 50, 50, 50, 50, 245, 181, 264, 266, - 274, 251, 197, 193, 197, 197, 197, 197, 197, 197, - - 249, 252, 257, 260, 50, 51, 261, 51, 51, 51, - 51, 51, 51, 51, 271, 278, 274, 265, 286, 197, - 279, 249, 252, 257, 260, 265, 283, 261, 283, 250, - 306, 236, 51, 52, 290, 271, 278, 52, 284, 52, - 284, 279, 52, 52, 286, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 290, 284, 306, 52, 52, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 35, + 35, 35, 274, 35, 267, 35, 35, 282, 181, 35, + 181, 181, 181, 181, 181, 181, 265, 274, 267, 273, + 35, 35, 35, 49, 266, 49, 49, 49, 49, 49, + 49, 49, 266, 258, 286, 272, 286, 181, 193, 193, + 193, 193, 193, 193, 193, 229, 229, 229, 229, 229, + + 229, 229, 49, 50, 258, 50, 50, 50, 50, 50, + 50, 50, 265, 262, 197, 193, 197, 197, 197, 197, + 197, 197, 229, 233, 261, 233, 233, 233, 233, 233, + 233, 312, 50, 51, 262, 51, 51, 51, 51, 51, + 51, 51, 304, 197, 243, 243, 243, 243, 243, 243, + 243, 260, 233, 271, 303, 303, 304, 321, 321, 251, + 312, 250, 51, 52, 280, 283, 294, 52, 248, 52, + 237, 243, 52, 52, 271, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 280, 283, 294, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 57, 57, 57, 235, 57, 299, 57, 57, 296, 226, - - 57, 229, 229, 229, 229, 229, 229, 229, 225, 299, - 224, 57, 57, 57, 65, 65, 65, 223, 65, 296, - 313, 313, 65, 214, 65, 233, 229, 233, 233, 233, - 233, 233, 233, 213, 212, 65, 65, 244, 244, 244, - 244, 244, 244, 244, 248, 211, 248, 248, 248, 248, - 248, 248, 233, 65, 76, 203, 76, 202, 76, 319, - 76, 76, 244, 201, 76, 200, 199, 187, 186, 336, - 311, 248, 311, 311, 311, 76, 76, 76, 82, 185, - 82, 184, 82, 341, 82, 82, 319, 183, 82, 273, - 273, 273, 273, 273, 273, 273, 336, 311, 172, 82, - - 82, 82, 84, 170, 84, 169, 84, 352, 84, 84, - 341, 357, 84, 168, 273, 277, 277, 277, 277, 277, - 277, 277, 167, 84, 84, 84, 87, 166, 87, 165, - 87, 154, 87, 87, 352, 153, 87, 152, 357, 151, - 150, 277, 149, 143, 136, 130, 128, 87, 87, 87, - 90, 125, 90, 90, 90, 90, 90, 90, 90, 124, - 122, 112, 285, 285, 285, 285, 285, 285, 285, 289, - 289, 289, 289, 289, 289, 289, 110, 90, 91, 107, - 91, 91, 91, 91, 91, 91, 91, 285, 324, 97, - 324, 324, 324, 96, 94, 289, 305, 305, 305, 305, - - 305, 305, 305, 86, 83, 91, 108, 81, 108, 79, - 108, 78, 108, 108, 77, 324, 108, 75, 68, 62, - 59, 305, 56, 329, 329, 329, 55, 108, 108, 108, - 111, 54, 111, 53, 111, 47, 111, 111, 45, 43, - 111, 318, 318, 318, 318, 318, 318, 318, 329, 42, - 41, 111, 111, 111, 113, 40, 113, 39, 113, 38, - 113, 113, 34, 33, 113, 32, 318, 328, 328, 328, - 328, 328, 328, 328, 31, 113, 113, 113, 115, 22, - 115, 19, 115, 18, 115, 115, 17, 15, 115, 14, - 13, 0, 328, 0, 0, 0, 334, 334, 334, 115, - - 115, 115, 118, 0, 118, 118, 118, 118, 118, 118, - 118, 0, 0, 0, 333, 333, 333, 333, 333, 333, - 333, 334, 335, 335, 335, 335, 335, 335, 335, 118, - 119, 0, 119, 119, 119, 119, 119, 119, 119, 333, - 0, 0, 0, 0, 0, 0, 339, 335, 339, 339, - 339, 339, 339, 339, 0, 0, 0, 119, 146, 0, - 146, 146, 146, 146, 146, 146, 146, 0, 0, 0, - 0, 0, 0, 339, 340, 340, 340, 340, 340, 340, - 340, 0, 0, 0, 0, 146, 147, 0, 147, 147, - 147, 147, 147, 147, 147, 0, 0, 0, 344, 340, - - 344, 344, 344, 344, 344, 344, 351, 351, 351, 351, - 351, 351, 351, 147, 148, 0, 148, 148, 148, 148, - 148, 148, 148, 0, 0, 344, 0, 0, 0, 0, - 355, 351, 355, 355, 355, 355, 355, 355, 0, 0, - 0, 148, 162, 0, 162, 162, 162, 162, 162, 162, - 162, 0, 0, 0, 0, 0, 0, 355, 356, 356, - 356, 356, 356, 356, 356, 0, 0, 0, 0, 162, + 52, 52, 57, 57, 57, 236, 57, 234, 57, 57, + 300, 247, 57, 247, 247, 247, 247, 247, 247, 287, + 301, 287, 310, 57, 57, 57, 65, 65, 65, 227, + 65, 300, 226, 225, 65, 224, 65, 327, 223, 287, + 247, 301, 317, 310, 317, 317, 317, 65, 65, 275, + 275, 275, 275, 275, 275, 275, 279, 279, 279, 279, + 279, 279, 279, 215, 318, 214, 327, 65, 76, 213, + 76, 317, 76, 212, 76, 76, 275, 211, 76, 203, + + 202, 344, 349, 360, 279, 318, 201, 200, 365, 76, + 76, 76, 82, 199, 82, 187, 82, 186, 82, 82, + 185, 184, 82, 288, 288, 288, 288, 288, 288, 288, + 344, 349, 360, 82, 82, 82, 84, 365, 84, 183, + 84, 172, 84, 84, 170, 169, 84, 168, 167, 332, + 288, 332, 332, 332, 166, 165, 154, 84, 84, 84, + 87, 153, 87, 152, 87, 151, 87, 87, 150, 149, + 87, 292, 292, 292, 292, 292, 292, 292, 332, 143, + 136, 87, 87, 87, 90, 130, 90, 90, 90, 90, + 90, 90, 90, 128, 125, 123, 337, 337, 337, 292, + + 311, 311, 311, 311, 311, 311, 311, 122, 112, 110, + 107, 97, 95, 90, 91, 94, 91, 91, 91, 91, + 91, 91, 91, 337, 86, 83, 81, 311, 326, 326, + 326, 326, 326, 326, 326, 336, 336, 336, 336, 336, + 336, 336, 79, 91, 108, 78, 108, 77, 108, 75, + 108, 108, 68, 62, 108, 326, 59, 56, 55, 342, + 342, 342, 336, 54, 53, 108, 108, 108, 111, 47, + 111, 45, 111, 43, 111, 111, 42, 41, 111, 341, + 341, 341, 341, 341, 341, 341, 342, 40, 39, 111, + 111, 111, 113, 38, 113, 34, 113, 33, 113, 113, + + 32, 31, 113, 22, 19, 347, 341, 347, 347, 347, + 347, 347, 347, 113, 113, 113, 115, 18, 115, 17, + 115, 15, 115, 115, 14, 13, 115, 343, 343, 343, + 343, 343, 343, 343, 347, 0, 0, 115, 115, 115, + 118, 0, 118, 118, 118, 118, 118, 118, 118, 0, + 0, 0, 0, 0, 343, 348, 348, 348, 348, 348, + 348, 348, 359, 359, 359, 359, 359, 359, 359, 118, + 119, 0, 119, 119, 119, 119, 119, 119, 119, 0, + 0, 352, 348, 352, 352, 352, 352, 352, 352, 359, + 363, 0, 363, 363, 363, 363, 363, 363, 0, 119, + + 146, 0, 146, 146, 146, 146, 146, 146, 146, 0, + 352, 0, 364, 364, 364, 364, 364, 364, 364, 363, + 368, 0, 368, 368, 368, 368, 368, 368, 0, 146, + 147, 0, 147, 147, 147, 147, 147, 147, 147, 364, + 0, 0, 369, 369, 369, 369, 369, 369, 369, 368, + 370, 370, 370, 370, 370, 370, 370, 0, 0, 147, + 148, 0, 148, 148, 148, 148, 148, 148, 148, 369, + 0, 0, 0, 0, 0, 0, 0, 370, 371, 371, + 371, 371, 371, 371, 371, 0, 0, 0, 0, 148, + 162, 0, 162, 162, 162, 162, 162, 162, 162, 0, + + 0, 0, 0, 0, 0, 371, 372, 372, 372, 372, + 372, 372, 372, 0, 0, 0, 0, 0, 0, 162, 163, 0, 163, 163, 163, 163, 163, 163, 163, 0, - 0, 0, 360, 356, 360, 360, 360, 360, 360, 360, - 361, 361, 361, 361, 361, 361, 361, 163, 164, 0, - - 164, 164, 164, 164, 164, 164, 164, 0, 0, 360, - 0, 0, 0, 0, 0, 361, 362, 362, 362, 362, - 362, 362, 362, 0, 0, 164, 179, 0, 179, 179, - 179, 179, 179, 179, 179, 0, 0, 0, 0, 0, - 0, 362, 363, 363, 363, 363, 363, 363, 363, 0, - 0, 0, 0, 179, 180, 0, 180, 180, 180, 180, - 180, 180, 180, 0, 0, 0, 0, 363, 364, 364, - 364, 364, 364, 364, 364, 0, 0, 0, 0, 0, - 0, 180, 195, 0, 195, 195, 195, 195, 195, 195, - 195, 0, 0, 364, 365, 365, 365, 365, 365, 365, - - 365, 366, 366, 366, 366, 366, 366, 366, 0, 195, - 196, 0, 196, 196, 196, 196, 196, 196, 196, 365, - 0, 0, 0, 0, 0, 0, 366, 368, 368, 368, - 368, 368, 368, 368, 0, 0, 0, 196, 206, 0, - 206, 206, 206, 206, 206, 206, 206, 0, 0, 0, - 0, 0, 368, 369, 369, 369, 369, 369, 369, 0, - 0, 0, 0, 0, 0, 206, 207, 0, 207, 207, - 207, 207, 207, 207, 207, 0, 0, 0, 369, 371, - 371, 371, 371, 371, 371, 371, 372, 372, 372, 372, - 372, 372, 0, 207, 208, 0, 208, 208, 208, 208, - - 208, 208, 208, 0, 371, 0, 0, 0, 0, 0, - 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 208, 220, 0, 220, 220, 220, 220, 220, 220, - 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 372, 373, 373, 373, 373, 373, 373, + 373, 374, 374, 374, 374, 374, 374, 374, 0, 163, + 164, 0, 164, 164, 164, 164, 164, 164, 164, 0, + 0, 373, 377, 377, 377, 377, 377, 377, 374, 376, + 376, 376, 376, 376, 376, 376, 0, 0, 0, 164, + 179, 0, 179, 179, 179, 179, 179, 179, 179, 377, + 0, 0, 0, 0, 0, 0, 376, 379, 379, 379, + + 379, 379, 379, 379, 0, 0, 0, 0, 0, 179, + 180, 0, 180, 180, 180, 180, 180, 180, 180, 0, + 0, 0, 0, 0, 379, 380, 380, 380, 380, 380, + 380, 0, 0, 0, 0, 0, 0, 0, 0, 180, + 195, 0, 195, 195, 195, 195, 195, 195, 195, 0, + 0, 0, 380, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, + 196, 0, 196, 196, 196, 196, 196, 196, 196, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, + + 206, 0, 206, 206, 206, 206, 206, 206, 206, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, + 207, 0, 207, 207, 207, 207, 207, 207, 207, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, + 208, 0, 208, 208, 208, 208, 208, 208, 208, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, + 220, 0, 220, 220, 220, 220, 220, 220, 220, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 221, 0, 221, 221, 221, 221, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 221, 222, 0, - 222, 222, 222, 222, 222, 222, 222, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, + 222, 0, 222, 222, 222, 222, 222, 222, 222, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, + 231, 0, 231, 231, 231, 231, 231, 231, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 222, 231, 0, 231, 231, - 231, 231, 231, 231, 231, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, + 232, 0, 232, 232, 232, 232, 232, 232, 232, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, + 245, 0, 245, 245, 245, 245, 245, 245, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 231, 232, 0, 232, 232, 232, 232, - 232, 232, 232, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, + 246, 0, 246, 246, 246, 246, 246, 246, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 232, 246, 0, 246, 246, 246, 246, 246, 246, - 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, - 247, 0, 247, 247, 247, 247, 247, 247, 247, 0, + 254, 254, 254, 254, 254, 254, 254, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 247, 254, 254, - 254, 254, 254, 254, 254, 254, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 254, 255, 255, 255, 255, 255, - 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 254, 255, + 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 255, 256, 256, 256, 256, 256, 256, 256, 256, + 0, 0, 0, 0, 0, 0, 0, 255, 256, 256, + 256, 256, 256, 256, 256, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 256, 267, + 0, 0, 0, 0, 0, 0, 256, 268, 268, 268, + 268, 268, 268, 268, 268, 0, 0, 0, 0, 0, - 267, 267, 267, 267, 267, 267, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 267, 268, 268, 268, 268, - 268, 268, 268, 268, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 268, 269, 269, 269, 269, + 269, 269, 269, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 268, 269, 269, 269, 269, 269, 269, 269, - 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, - 275, 275, 275, 275, 275, 275, 275, 275, 0, 0, + 0, 0, 0, 0, 269, 270, 270, 270, 270, 270, + 270, 270, 270, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 270, 277, 277, 277, 277, 277, 277, + 277, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 275, 276, 276, 276, - 276, 276, 276, 276, 276, 0, 0, 0, 0, 0, + 0, 0, 277, 278, 278, 278, 278, 278, 278, 278, + 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 278, 290, 290, 290, 290, 290, 290, 290, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 276, 287, 287, 287, 287, 287, 287, - 287, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 287, 288, 288, 288, 288, 288, 288, 288, 288, 0, + 290, 291, 291, 291, 291, 291, 291, 291, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 288, 292, 0, - 292, 292, 292, 292, 292, 292, 292, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, + 296, 0, 296, 296, 296, 296, 296, 296, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 292, 293, 0, 293, 293, - 293, 293, 293, 293, 293, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 297, 0, 297, 297, 297, 297, 297, 297, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 293, 294, 0, 294, 294, 294, 294, - 294, 294, 294, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, + 298, 0, 298, 298, 298, 298, 298, 298, 298, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, + 299, 0, 299, 299, 299, 299, 299, 299, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 294, 295, 0, 295, 295, 295, 295, 295, 295, - 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, - 301, 0, 301, 301, 301, 301, 301, 301, 301, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, + 306, 0, 306, 306, 306, 306, 306, 306, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 301, 302, 0, - 302, 302, 302, 302, 302, 302, 302, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, + 307, 0, 307, 307, 307, 307, 307, 307, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 302, 303, 0, 303, 303, - 303, 303, 303, 303, 303, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, + 308, 0, 308, 308, 308, 308, 308, 308, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 303, 304, 0, 304, 304, 304, 304, - 304, 304, 304, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, + 309, 0, 309, 309, 309, 309, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 304, 307, 0, 307, 307, 307, 307, 307, 307, - 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, - 308, 0, 308, 308, 308, 308, 308, 308, 308, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, + 313, 0, 313, 313, 313, 313, 313, 313, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 308, 309, 0, - 309, 309, 309, 309, 309, 309, 309, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 314, 0, 314, 314, 314, 314, 314, 314, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 309, 310, 0, 310, 310, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, + 315, 0, 315, 315, 315, 315, 315, 315, 315, 0, - 310, 310, 310, 310, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 310, 317, 0, 317, 0, 317, 0, - 317, 317, 0, 0, 317, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 317, 317, 317, 320, 0, - 320, 320, 320, 320, 320, 320, 320, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, + 316, 0, 316, 316, 316, 316, 316, 316, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 320, 321, 0, 321, 321, - 321, 321, 321, 321, 321, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, + 325, 0, 325, 0, 325, 0, 325, 325, 0, 0, + 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 325, 325, 325, 328, 0, 328, 328, 328, 328, + 328, 328, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 321, 322, 0, 322, 322, 322, 322, - 322, 322, 322, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 328, 329, 0, 329, 329, 329, 329, + 329, 329, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 322, 323, 0, 323, 323, 323, 323, 323, 323, - 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, - 325, 0, 325, 325, 325, 325, 325, 325, 325, 0, + 0, 0, 0, 329, 330, 0, 330, 330, 330, 330, + 330, 330, 330, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 330, 331, 0, 331, 331, 331, 331, + 331, 331, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 325, 326, 0, - 326, 326, 326, 326, 326, 326, 326, 0, 0, 0, + 0, 0, 0, 331, 333, 0, 333, 333, 333, 333, + 333, 333, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 326, 327, 0, 327, 327, - 327, 327, 327, 327, 327, 0, 0, 0, 0, 0, + 0, 0, 0, 333, 334, 0, 334, 334, 334, 334, + 334, 334, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 327, 330, 0, 330, 330, 330, 330, - 330, 330, 330, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 334, 335, 0, 335, 335, 335, 335, + 335, 335, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 330, 331, 0, 331, 331, 331, 331, 331, 331, - 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, + 0, 0, 0, 335, 338, 0, 338, 338, 338, 338, + 338, 338, 338, 0, 0, 0, 0, 0, 0, 0, - 332, 0, 332, 332, 332, 332, 332, 332, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 332, 337, 0, - 337, 337, 337, 337, 337, 337, 337, 0, 0, 0, + 0, 0, 0, 338, 339, 0, 339, 339, 339, 339, + 339, 339, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 337, 338, 0, 338, 338, - 338, 338, 338, 338, 338, 0, 0, 0, 0, 0, + 0, 0, 0, 339, 340, 0, 340, 340, 340, 340, + 340, 340, 340, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 340, 345, 0, 345, 345, 345, 345, + 345, 345, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 338, 342, 0, 342, 342, 342, 342, - 342, 342, 342, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 345, 346, 0, 346, 346, 346, 346, + 346, 346, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 342, 343, 0, 343, 343, 343, 343, 343, 343, - 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, - 345, 0, 345, 345, 345, 345, 345, 345, 345, 0, + 0, 0, 0, 346, 350, 0, 350, 350, 350, 350, + 350, 350, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 345, 346, 0, - 346, 346, 346, 346, 346, 346, 346, 0, 0, 0, + 0, 0, 0, 350, 351, 0, 351, 351, 351, 351, + 351, 351, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 346, 347, 0, 347, 347, + 0, 0, 0, 351, 353, 0, 353, 353, 353, 353, - 347, 347, 347, 347, 347, 0, 0, 0, 0, 0, + 353, 353, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 347, 348, 0, 348, 348, 348, 348, - 348, 348, 348, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 353, 354, 0, 354, 354, 354, 354, + 354, 354, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 348, 349, 0, 349, 349, 349, 349, 349, 349, - 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, - 350, 0, 350, 350, 350, 350, 350, 350, 350, 0, + 0, 0, 0, 354, 355, 0, 355, 355, 355, 355, + 355, 355, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 355, 356, 0, 356, 356, 356, 356, + 356, 356, 356, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 350, 353, 0, - 353, 353, 353, 353, 353, 353, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 353, 354, 0, 354, 354, - 354, 354, 354, 354, 354, 0, 0, 0, 0, 0, + 0, 0, 0, 356, 357, 0, 357, 357, 357, 357, + 357, 357, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 354, 358, 0, 358, 358, 358, 358, + 0, 0, 0, 357, 358, 0, 358, 358, 358, 358, 358, 358, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 358, 359, 0, 359, 359, 359, 359, 359, 359, - - 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, - 374, 374, 374, 374, 374, 374, 374, 375, 375, 375, - 375, 375, 375, 375, 376, 376, 376, 376, 376, 376, - 376, 377, 0, 0, 0, 0, 377, 377, 378, 378, - 378, 378, 378, 378, 378, 379, 0, 0, 0, 0, - 379, 379, 380, 0, 0, 0, 0, 380, 380, 381, - 0, 381, 0, 0, 381, 381, 382, 0, 0, 0, - 0, 382, 382, 383, 0, 0, 0, 0, 383, 383, - 384, 0, 0, 0, 0, 384, 384, 385, 0, 385, - - 0, 0, 385, 385, 386, 0, 386, 386, 0, 0, - 386, 388, 0, 388, 0, 388, 388, 388, 389, 389, - 389, 389, 389, 389, 389, 390, 390, 390, 390, 390, - 390, 390, 391, 0, 391, 0, 0, 391, 391, 392, - 392, 392, 392, 392, 392, 392, 393, 393, 393, 393, - 393, 393, 393, 394, 0, 0, 0, 0, 394, 394, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373 + 0, 0, 0, 358, 361, 0, 361, 361, 361, 361, + 361, 361, 361, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 361, 362, 0, 362, 362, 362, 362, + 362, 362, 362, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 362, 366, 0, 366, 366, 366, 366, + 366, 366, 366, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 366, 367, 0, 367, 367, 367, 367, + 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 367, 382, 382, 382, 382, 382, 382, + + 382, 383, 383, 383, 383, 383, 383, 383, 384, 384, + 384, 384, 384, 384, 384, 385, 0, 0, 0, 0, + 385, 385, 386, 386, 386, 386, 386, 386, 386, 387, + 0, 0, 0, 0, 387, 387, 388, 0, 0, 0, + 0, 388, 388, 389, 0, 389, 0, 0, 389, 389, + 390, 0, 0, 0, 0, 390, 390, 391, 0, 0, + 0, 0, 391, 391, 392, 0, 0, 0, 0, 392, + 392, 393, 0, 393, 0, 0, 393, 393, 394, 0, + 394, 394, 0, 0, 394, 396, 0, 396, 0, 396, + 396, 396, 397, 397, 397, 397, 397, 397, 397, 398, + + 398, 398, 398, 398, 398, 398, 399, 0, 399, 0, + 0, 399, 399, 400, 400, 400, 400, 400, 400, 400, + 401, 401, 401, 401, 401, 401, 401, 402, 0, 0, + 0, 0, 402, 402, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381 + } ; static yy_state_type yy_last_accepting_state; @@ -1276,7 +1319,7 @@ extern void yyerror __P((const char *)); #define INDEFS 5 -#line 1280 "lex.yy.c" +#line 1323 "lex.yy.c" /* Macros after this point can all be overridden by user definitions in * section 1. @@ -1432,7 +1475,7 @@ YY_DECL #line 106 "parse.lex" -#line 1436 "lex.yy.c" +#line 1479 "lex.yy.c" if ( yy_init ) { @@ -1484,13 +1527,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 374 ) + if ( yy_current_state >= 382 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 3061 ); + while ( yy_base[yy_current_state] != 3235 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -1734,16 +1777,16 @@ case 20: YY_RULE_SETUP #line 264 "parse.lex" { - LEXTRACE("NOTRACE "); - return(NOTRACE); + LEXTRACE("NOMONITOR "); + return(NOMONITOR); } YY_BREAK case 21: YY_RULE_SETUP #line 269 "parse.lex" { - LEXTRACE("TRACE "); - return(TRACE); + LEXTRACE("MONITOR "); + return(MONITOR); } YY_BREAK case 22: @@ -1967,7 +2010,7 @@ YY_RULE_SETUP #line 423 "parse.lex" ECHO; YY_BREAK -#line 1971 "lex.yy.c" +#line 2014 "lex.yy.c" case YY_END_OF_BUFFER: { @@ -2258,7 +2301,7 @@ static yy_state_type yy_get_previous_state() while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 374 ) + if ( yy_current_state >= 382 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -2293,11 +2336,11 @@ yy_state_type yy_current_state; while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 374 ) + if ( yy_current_state >= 382 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 373); + yy_is_jam = (yy_current_state == 381); return yy_is_jam ? 0 : yy_current_state; } diff --git a/parse.c b/parse.c index 38c54a216..57f6424e6 100644 --- a/parse.c +++ b/parse.c @@ -193,7 +193,7 @@ sudoers_lookup(pwflag) return(VALIDATE_OK | (no_passwd == TRUE ? FLAG_NOPASS : 0) | (no_execve == TRUE ? FLAG_NOEXEC : 0) | - (trace_cmnd == TRUE ? FLAG_TRACE : 0)); + (monitor_cmnd == TRUE ? FLAG_MONITOR : 0)); } else if ((runas_matches == TRUE && cmnd_matches == FALSE) || (runas_matches == FALSE && cmnd_matches == TRUE)) { /* @@ -203,7 +203,7 @@ sudoers_lookup(pwflag) return(VALIDATE_NOT_OK | (no_passwd == TRUE ? FLAG_NOPASS : 0) | (no_execve == TRUE ? FLAG_NOEXEC : 0) | - (trace_cmnd == TRUE ? FLAG_TRACE : 0)); + (monitor_cmnd == TRUE ? FLAG_MONITOR : 0)); } } top--; diff --git a/parse.h b/parse.h index 4f98e9117..c5ad4e0a7 100644 --- a/parse.h +++ b/parse.h @@ -33,7 +33,7 @@ struct matchstack { int runas; int nopass; int noexec; - int trace; + int monitor; }; /* @@ -51,7 +51,7 @@ struct sudo_command { #define runas_matches (match[top-1].runas) #define no_passwd (match[top-1].nopass) #define no_execve (match[top-1].noexec) -#define trace_cmnd (match[top-1].trace) +#define monitor_cmnd (match[top-1].monitor) /* * Structure containing command matches if "sudo -l" is used. @@ -65,7 +65,7 @@ struct command_match { size_t cmnd_size; int nopasswd; int noexecve; - int trace; + int monitor; }; /* diff --git a/parse.lex b/parse.lex index 502597383..b385153aa 100644 --- a/parse.lex +++ b/parse.lex @@ -261,14 +261,14 @@ EXEC[[:blank:]]*: { return(EXEC); } -NOTRACE[[:blank:]]*: { - LEXTRACE("NOTRACE "); - return(NOTRACE); +NOMONITOR[[:blank:]]*: { + LEXTRACE("NOMONITOR "); + return(NOMONITOR); } -TRACE[[:blank:]]*: { - LEXTRACE("TRACE "); - return(TRACE); +MONITOR[[:blank:]]*: { + LEXTRACE("MONITOR "); + return(MONITOR); } \+{WORD} { diff --git a/parse.yacc b/parse.yacc index 1c6771f66..fe465d0e1 100644 --- a/parse.yacc +++ b/parse.yacc @@ -126,7 +126,7 @@ int top = 0, stacksize = 0; match[top].runas = UNSPEC; \ match[top].nopass = def_authenticate ? UNSPEC : TRUE; \ match[top].noexec = def_noexec ? TRUE : UNSPEC; \ - match[top].trace = def_trace ? TRUE : UNSPEC; \ + match[top].monitor = def_monitor ? TRUE : UNSPEC; \ top++; \ } while (0) @@ -136,13 +136,13 @@ int top = 0, stacksize = 0; while ((stacksize += STACKINCREMENT) < top); \ match = (struct matchstack *) erealloc3(match, stacksize, sizeof(struct matchstack)); \ } \ - match[top].user = match[top-1].user; \ - match[top].cmnd = match[top-1].cmnd; \ - match[top].host = match[top-1].host; \ - match[top].runas = match[top-1].runas; \ - match[top].nopass = match[top-1].nopass; \ - match[top].noexec = match[top-1].noexec; \ - match[top].trace = match[top-1].trace; \ + match[top].user = match[top-1].user; \ + match[top].cmnd = match[top-1].cmnd; \ + match[top].host = match[top-1].host; \ + match[top].runas = match[top-1].runas; \ + match[top].nopass = match[top-1].nopass; \ + match[top].noexec = match[top-1].noexec; \ + match[top].monitor = match[top-1].monitor; \ top++; \ } while (0) @@ -247,8 +247,8 @@ yyerror(s) %token PASSWD /* passwd req for command (default) */ %token NOEXEC /* preload dummy execve() for cmnd */ %token EXEC /* don't preload dummy execve() */ -%token TRACE /* trace children of cmnd */ -%token NOTRACE /* disable tracing of children */ +%token MONITOR /* monitor children of cmnd */ +%token NOMONITOR /* disable monitoring of children */ %token ALL /* ALL keyword */ %token COMMENT /* comment and/or carriage return */ %token HOSTALIAS /* Host_Alias keyword */ @@ -385,7 +385,7 @@ privilege : hostlist '=' cmndspeclist { runas_matches = UNSPEC; no_passwd = def_authenticate ? UNSPEC : TRUE; no_execve = def_noexec ? TRUE : UNSPEC; - trace_cmnd = def_trace ? TRUE : UNSPEC; + monitor_cmnd = def_monitor ? TRUE : UNSPEC; } ; @@ -648,10 +648,10 @@ cmndtag : /* empty */ { cm_list[cm_list_len].noexecve = TRUE; else cm_list[cm_list_len].noexecve = FALSE; - if (trace_cmnd == TRUE) - cm_list[cm_list_len].trace = TRUE; + if (monitor_cmnd == TRUE) + cm_list[cm_list_len].monitor = TRUE; else - cm_list[cm_list_len].trace = FALSE; + cm_list[cm_list_len].monitor = FALSE; } } | cmndtag NOPASSWD { @@ -678,17 +678,17 @@ cmndtag : /* empty */ { user_matches == TRUE) cm_list[cm_list_len].noexecve = FALSE; } - | cmndtag TRACE { - trace_cmnd = TRUE; + | cmndtag MONITOR { + monitor_cmnd = TRUE; if (printmatches == TRUE && host_matches == TRUE && user_matches == TRUE) - cm_list[cm_list_len].trace = TRUE; + cm_list[cm_list_len].monitor = TRUE; } - | cmndtag NOTRACE { - trace_cmnd = FALSE; + | cmndtag NOMONITOR { + monitor_cmnd = FALSE; if (printmatches == TRUE && host_matches == TRUE && user_matches == TRUE) - cm_list[cm_list_len].trace = FALSE; + cm_list[cm_list_len].monitor = FALSE; } ; @@ -1110,11 +1110,11 @@ list_matches() else if (cm_list[count].noexecve == FALSE && def_noexec) (void) fputs("EXEC: ", stdout); - /* Is tracing enabled? */ - if (cm_list[count].trace == TRUE && !def_trace) - (void) fputs("TRACE: ", stdout); - else if (cm_list[count].trace == FALSE && def_trace) - (void) fputs("NOTRACE: ", stdout); + /* Is monitoring enabled? */ + if (cm_list[count].monitor == TRUE && !def_monitor) + (void) fputs("MONITOR: ", stdout); + else if (cm_list[count].monitor == FALSE && def_monitor) + (void) fputs("NOMONITOR: ", stdout); /* Is a password required? */ if (cm_list[count].nopasswd == TRUE && def_authenticate) @@ -1249,7 +1249,7 @@ expand_match_list() cm_list[cm_list_len].runas = cm_list[cm_list_len].cmnd = NULL; cm_list[cm_list_len].nopasswd = FALSE; cm_list[cm_list_len].noexecve = FALSE; - cm_list[cm_list_len].trace = FALSE; + cm_list[cm_list_len].monitor = FALSE; } /* diff --git a/sudo.c b/sudo.c index ed4e01c54..d18da6aaf 100644 --- a/sudo.c +++ b/sudo.c @@ -400,7 +400,7 @@ main(argc, argv, envp) } #ifdef HAVE_SYSTRACE - if (ISSET(validated, FLAG_TRACE)) + if (ISSET(validated, FLAG_MONITOR)) systrace_attach(getpid()); #endif diff --git a/sudo.h b/sudo.h index 8fe84dc08..cc010af41 100644 --- a/sudo.h +++ b/sudo.h @@ -65,7 +65,7 @@ struct sudo_user { #define FLAG_NO_HOST 0x080 #define FLAG_NO_CHECK 0x100 #define FLAG_NOEXEC 0x200 -#define FLAG_TRACE 0x400 +#define FLAG_MONITOR 0x400 /* * Pseudo-boolean values diff --git a/sudo.tab.c b/sudo.tab.c index be4b0a761..dc1092010 100644 --- a/sudo.tab.c +++ b/sudo.tab.c @@ -144,7 +144,7 @@ int top = 0, stacksize = 0; match[top].runas = UNSPEC; \ match[top].nopass = def_authenticate ? UNSPEC : TRUE; \ match[top].noexec = def_noexec ? TRUE : UNSPEC; \ - match[top].trace = def_trace ? TRUE : UNSPEC; \ + match[top].monitor = def_monitor ? TRUE : UNSPEC; \ top++; \ } while (0) @@ -154,13 +154,13 @@ int top = 0, stacksize = 0; while ((stacksize += STACKINCREMENT) < top); \ match = (struct matchstack *) erealloc3(match, stacksize, sizeof(struct matchstack)); \ } \ - match[top].user = match[top-1].user; \ - match[top].cmnd = match[top-1].cmnd; \ - match[top].host = match[top-1].host; \ - match[top].runas = match[top-1].runas; \ - match[top].nopass = match[top-1].nopass; \ - match[top].noexec = match[top-1].noexec; \ - match[top].trace = match[top-1].trace; \ + match[top].user = match[top-1].user; \ + match[top].cmnd = match[top-1].cmnd; \ + match[top].host = match[top-1].host; \ + match[top].runas = match[top-1].runas; \ + match[top].nopass = match[top-1].nopass; \ + match[top].noexec = match[top-1].noexec; \ + match[top].monitor = match[top-1].monitor; \ top++; \ } while (0) @@ -266,8 +266,8 @@ typedef union { #define PASSWD 270 #define NOEXEC 271 #define EXEC 272 -#define TRACE 273 -#define NOTRACE 274 +#define MONITOR 273 +#define NOMONITOR 274 #define ALL 275 #define COMMENT 276 #define HOSTALIAS 277 @@ -547,7 +547,7 @@ char *yyname[] = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, "COMMAND","ALIAS","DEFVAR","NTWKADDR","NETGROUP","USERGROUP","WORD","DEFAULTS", "DEFAULTS_HOST","DEFAULTS_USER","DEFAULTS_RUNAS","RUNAS","NOPASSWD","PASSWD", -"NOEXEC","EXEC","TRACE","NOTRACE","ALL","COMMENT","HOSTALIAS","CMNDALIAS", +"NOEXEC","EXEC","MONITOR","NOMONITOR","ALL","COMMENT","HOSTALIAS","CMNDALIAS", "USERALIAS","RUNASALIAS","ERROR", }; #if defined(__cplusplus) || defined(__STDC__) @@ -617,8 +617,8 @@ char *yyrule[] = "cmndtag : cmndtag PASSWD", "cmndtag : cmndtag NOEXEC", "cmndtag : cmndtag EXEC", -"cmndtag : cmndtag TRACE", -"cmndtag : cmndtag NOTRACE", +"cmndtag : cmndtag MONITOR", +"cmndtag : cmndtag NOMONITOR", "cmnd : ALL", "cmnd : ALIAS", "cmnd : COMMAND", @@ -873,11 +873,11 @@ list_matches() else if (cm_list[count].noexecve == FALSE && def_noexec) (void) fputs("EXEC: ", stdout); - /* Is tracing enabled? */ - if (cm_list[count].trace == TRUE && !def_trace) - (void) fputs("TRACE: ", stdout); - else if (cm_list[count].trace == FALSE && def_trace) - (void) fputs("NOTRACE: ", stdout); + /* Is monitoring enabled? */ + if (cm_list[count].monitor == TRUE && !def_monitor) + (void) fputs("MONITOR: ", stdout); + else if (cm_list[count].monitor == FALSE && def_monitor) + (void) fputs("NOMONITOR: ", stdout); /* Is a password required? */ if (cm_list[count].nopasswd == TRUE && def_authenticate) @@ -1012,7 +1012,7 @@ expand_match_list() cm_list[cm_list_len].runas = cm_list[cm_list_len].cmnd = NULL; cm_list[cm_list_len].nopasswd = FALSE; cm_list[cm_list_len].noexecve = FALSE; - cm_list[cm_list_len].trace = FALSE; + cm_list[cm_list_len].monitor = FALSE; } /* @@ -1391,7 +1391,7 @@ case 31: runas_matches = UNSPEC; no_passwd = def_authenticate ? UNSPEC : TRUE; no_execve = def_noexec ? TRUE : UNSPEC; - trace_cmnd = def_trace ? TRUE : UNSPEC; + monitor_cmnd = def_monitor ? TRUE : UNSPEC; } break; case 32: @@ -1706,10 +1706,10 @@ case 57: cm_list[cm_list_len].noexecve = TRUE; else cm_list[cm_list_len].noexecve = FALSE; - if (trace_cmnd == TRUE) - cm_list[cm_list_len].trace = TRUE; + if (monitor_cmnd == TRUE) + cm_list[cm_list_len].monitor = TRUE; else - cm_list[cm_list_len].trace = FALSE; + cm_list[cm_list_len].monitor = FALSE; } } break; @@ -1752,19 +1752,19 @@ break; case 62: #line 681 "parse.yacc" { - trace_cmnd = TRUE; + monitor_cmnd = TRUE; if (printmatches == TRUE && host_matches == TRUE && user_matches == TRUE) - cm_list[cm_list_len].trace = TRUE; + cm_list[cm_list_len].monitor = TRUE; } break; case 63: #line 687 "parse.yacc" { - trace_cmnd = FALSE; + monitor_cmnd = FALSE; if (printmatches == TRUE && host_matches == TRUE && user_matches == TRUE) - cm_list[cm_list_len].trace = FALSE; + cm_list[cm_list_len].monitor = FALSE; } break; case 64: diff --git a/sudo.tab.h b/sudo.tab.h index d94a9234e..e4ade693f 100644 --- a/sudo.tab.h +++ b/sudo.tab.h @@ -14,8 +14,8 @@ #define PASSWD 270 #define NOEXEC 271 #define EXEC 272 -#define TRACE 273 -#define NOTRACE 274 +#define MONITOR 273 +#define NOMONITOR 274 #define ALL 275 #define COMMENT 276 #define HOSTALIAS 277 diff --git a/sudoers.pod b/sudoers.pod index 6422e4c17..9ba4c25da 100644 --- a/sudoers.pod +++ b/sudoers.pod @@ -255,7 +255,7 @@ This flag is I by default. =item mail_badpass -Send mail to the I user if the user running sudo does not +Send mail to the I user if the user running B does not enter the correct password. This flag is I by default. =item mail_no_user @@ -428,7 +428,7 @@ changes that behavior such that the real UID is left as the invoking user's UID. In other words, this makes B act as a setuid wrapper. This can be useful on systems that disable some potentially dangerous functionality when a program is run setuid. Note, however, -that this means that sudo will run with the real uid of the invoking +that this means that B will run with the real uid of the invoking user which may allow that user to kill B before it can log a failure, depending on how your OS defines the interaction between signals and setuid processes. @@ -453,16 +453,16 @@ the --with-logincap option. This flag is I by default. =item noexec -If set, all commands run via sudo will behave as if the C +If set, all commands run via B will behave as if the C tag has been set, unless overridden by a C tag. See the description of I below as well as the L section at the end of this manual. This flag is I by default. -=item trace +=item monitor -If set, all commands run via sudo will behave as if the C -tag has been set, unless overridden by a C tag. See the -description of I below as well as the L will behave as if the C +tag has been set, unless overridden by a C tag. See the +description of I below as well as the L section at the end of this manual. Be aware that tracing is only supported on certain operating systems. On systems where it is not supported this flag will have no effect. @@ -475,7 +475,7 @@ This is intended for an Enterprises that wish to prevent the usage of local sudoers files so that only LDAP is used. This thwarts the efforts of rogue operators who would attempt to add roles to @sysconfdir@/sudoers. When this option is present, @sysconfdir@/sudoers does not even need to exist. -Since this options tells sudo how to behave when no specific LDAP entries +Since this options tells B how to behave when no specific LDAP entries have been matched, this sudoOption is only meaningful for the cn=defaults section. This flag is I by default. @@ -647,7 +647,7 @@ The default value is I<@lecture@>. =item lecture_file -Path to a file containing an alternate sudo lecture that will +Path to a file containing an alternate B lecture that will be used in place of the standard lecture if the named file exists. =item logfile @@ -672,7 +672,7 @@ Flags to use when invoking mailer. Defaults to B<-t>. =item mailto Address to send warning and error mail to. The address should -be enclosed in double quotes (C<">) to protect against sudo +be enclosed in double quotes (C<">) to protect against B interpreting the C<@> sign. Defaults to C<@mailto@>. =item exempt_group @@ -801,7 +801,7 @@ B, and B. Runas_Spec ::= '(' Runas_List ')' Tag_Spec ::= ('NOPASSWD:' | 'PASSWD:' | 'NOEXEC:' | 'EXEC:' | - 'TRACE' | 'NOTRACE') + 'MONITOR' | 'NOMONITOR') A B determines which commands a user may run (and as what user) on specified hosts. By default, commands are @@ -836,11 +836,11 @@ but F and F as B. A command may have zero or more tags associated with it. There are four possible tag values, C, C, C, C, -C and C. +C and C. Once a tag is set on a C, subsequent Cs in the C, inherit the tag unless it is overridden by the -opposite tag (ie: C overrides C and C -overrides C). +opposite tag (ie: C overrides C and C +overrides C). =head3 NOPASSWD and PASSWD @@ -884,22 +884,22 @@ and F but shell escapes will be disabled. See the L section below for more details on how C works and whether or not it will work on your system. -=head3 TRACE and NOTRACE +=head3 MONITOR and NOMONITOR If B has been configured with the C<--with-systrace> option, -the C tag can be used to cause programs spawned by a command +the C tag can be used to cause programs spawned by a command to be checked against I and logged just like they would be if run through B directly. This is useful in conjunction with commands that allow shell escapes such as editors, shells and paginators. In the following example, user B may run any command on the -machine research with tracing enabled. +machine research in monitor mode. - chuck research = TRACE: ALL + chuck research = MONITOR: ALL See the L section below for more details -on how C works and whether or not it will work on your system. +on how C works and whether or not it will work on your system. =head2 Wildcards @@ -1244,7 +1244,7 @@ There are three basic approaches to this problem: Avoid giving users access to commands that allow the user to run arbitrary commands. Many editors have a restricted mode where shell escapes are disabled, though B is a better solution to -running editors via sudo. Due to the large number of programs that +running editors via B. Due to the large number of programs that offer shell escapes, restricting users to the set of programs that do not if often unworkable. @@ -1254,7 +1254,7 @@ Many systems that support shared libraries have the ability to override default library functions by pointing an environment variable (usually C) to an alternate shared library. On such systems, B's I functionality can be used to -prevent a program run by sudo from executing any other programs. +prevent a program run by B from executing any other programs. Note, however, that this applies only to native dynamically-linked executables. Statically-linked executables and foreign executables running under binary emulation are not affected. @@ -1290,25 +1290,25 @@ executing other commands (such as a shell). If you are unsure whether or not your system is capable of supporting I you can always just try it out and see if it works. -=item tracing +=item monitor On operating systems that support the B pseudo-device, the C<--with-systrace> configure option can be used to compile -support for command tracing in B. With B support +support for proccess monitoring in B. In monitor mode B can transparently intercept a new command, allow or deny it based on I, and log the result. This does require that B become a daemon that persists until the command and all its -descendents have finished. +descendents have exited. -To enable tracing on a per-command basis, use the C tag as -documented in the User Specification section above. Here is that -example again: +To enable monitor mode on a per-command basis, use the C +tag as documented in the User Specification section above. Here +is that example again: - chuck research = TRACE: ALL + chuck research = MONITOR: ALL This allows user B to run any command on the machine research -with tracing enabled. Any commands run via shell escapes will be -logged by sudo. +in monitor mode. Any commands run via shell escapes will be logged +by B. At the time of this writing the B pseudo-device comes standard with OpenBSD and NetBSD and is available as patches to