From: Brian Aker Date: Mon, 4 Apr 2011 19:03:55 +0000 (-0700) Subject: Merge in additional work to handle "weight" for servers. X-Git-Tag: 0.51~15^2~49 X-Git-Url: https://git.m6w6.name/?a=commitdiff_plain;h=de161b27e5e394ea0ae4a88e58fc9ebb21e821d0;p=awesomized%2Flibmemcached Merge in additional work to handle "weight" for servers. --- diff --git a/libmemcached/hosts.c b/libmemcached/hosts.c index d95dbcff..eafbb1b5 100644 --- a/libmemcached/hosts.c +++ b/libmemcached/hosts.c @@ -444,20 +444,3 @@ static memcached_return_t server_add(memcached_st *ptr, const char *hostname, return run_distribution(ptr); } - -memcached_return_t memcached_server_add_parsed(memcached_st *ptr, - const char *hostname, - size_t hostname_length, - in_port_t port, - uint32_t weight) -{ - char buffer[NI_MAXHOST]; - - memcpy(buffer, hostname, hostname_length); - buffer[hostname_length]= 0; - - return server_add(ptr, buffer, - port, - weight, - MEMCACHED_CONNECTION_TCP); -} diff --git a/libmemcached/options/context.h b/libmemcached/options/context.h index 9e4ecb3a..d65f8ede 100644 --- a/libmemcached/options/context.h +++ b/libmemcached/options/context.h @@ -49,8 +49,10 @@ public: pos(0), memc(NULL), rc(rc_arg), + _is_server(false), _end(false) { + _hostname[0]= 0; buf= option_string; length= option_string_length; memc= memc_arg; @@ -71,6 +73,35 @@ public: _end= true; } + void set_server() + { + _is_server= true; + } + + void unset_server() + { + _is_server= false; + } + + bool is_server() + { + return _is_server; + } + + const char *set_hostname(const char *str, size_t size) + { + size_t copy_length= std::min((size_t)NI_MAXHOST, size); + memcpy(_hostname, str, copy_length); + _hostname[copy_length]= 0; + + return _hostname; + } + + const char *hostname() + { + return _hostname; + } + ~Context() { destroy_scanner(); @@ -89,5 +120,7 @@ protected: void destroy_scanner(); private: + bool _is_server; bool _end; + char _hostname[NI_MAXHOST]; }; diff --git a/libmemcached/options/parser.cc b/libmemcached/options/parser.cc index 2c1d5ac9..c5a671d5 100644 --- a/libmemcached/options/parser.cc +++ b/libmemcached/options/parser.cc @@ -190,12 +190,12 @@ inline void config_error(Context *context, yyscan_t *scanner, const char *error) RANDOM = 313, TRUE = 314, FALSE = 315, - NUMBER = 316, - FLOAT = 317, - HOSTNAME = 318, - HOSTNAME_WITH_PORT = 319, + FLOAT = 316, + NUMBER = 317, + PORT = 318, + WEIGHT_START = 319, IPADDRESS = 320, - IPADDRESS_WITH_PORT = 321, + HOSTNAME = 321, STRING = 322, QUOTED_STRING = 323, FILE_PATH = 324 @@ -428,7 +428,7 @@ union yyalloc #endif /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 74 +#define YYFINAL 66 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 72 @@ -437,9 +437,9 @@ union yyalloc /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 12 /* YYNRULES -- Number of rules. */ -#define YYNRULES 69 +#define YYNRULES 65 /* YYNRULES -- Number of states. */ -#define YYNSTATES 85 +#define YYNSTATES 79 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -492,12 +492,12 @@ static const yytype_uint8 yytranslate[] = static const yytype_uint8 yyprhs[] = { 0, 0, 3, 5, 9, 11, 13, 15, 17, 19, - 21, 23, 27, 30, 33, 36, 38, 41, 44, 49, - 52, 55, 57, 59, 61, 63, 65, 67, 69, 71, - 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, - 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, - 113, 117, 120, 122, 124, 127, 129, 131, 133, 135, - 137, 139, 141, 143, 145, 147, 149, 151, 153, 155 + 21, 23, 27, 32, 37, 40, 42, 45, 48, 53, + 56, 59, 61, 63, 65, 67, 69, 71, 73, 75, + 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, + 97, 99, 101, 103, 105, 107, 109, 111, 113, 114, + 116, 117, 119, 121, 123, 125, 127, 129, 131, 133, + 135, 137, 139, 141, 143, 145 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ @@ -505,17 +505,16 @@ static const yytype_int8 yyrhs[] = { 74, 0, -1, 75, -1, 74, 72, 75, -1, 76, -1, 3, -1, 10, -1, 4, -1, 5, -1, 6, - -1, 7, -1, 8, 72, 83, -1, 11, 81, -1, - 13, 80, -1, 9, 83, -1, 77, -1, 46, 83, - -1, 20, 84, -1, 20, 84, 61, 82, -1, 21, - 82, -1, 78, 63, -1, 79, -1, 43, -1, 19, - -1, 25, -1, 23, -1, 24, -1, 29, -1, 30, - -1, 32, -1, 33, -1, 34, -1, 35, -1, 36, - -1, 37, -1, 16, -1, 17, -1, 18, -1, 22, - -1, 27, -1, 28, -1, 31, -1, 38, -1, 39, - -1, 40, -1, 41, -1, 42, -1, 44, -1, 45, - -1, 81, -1, 80, 61, 81, -1, 66, 63, -1, - 65, -1, 69, -1, 68, 63, -1, 67, -1, 47, + -1, 7, -1, 8, 72, 83, -1, 11, 68, 80, + 81, -1, 11, 67, 80, 81, -1, 9, 83, -1, + 77, -1, 46, 83, -1, 20, 84, -1, 20, 84, + 61, 82, -1, 21, 82, -1, 78, 64, -1, 79, + -1, 43, -1, 19, -1, 25, -1, 23, -1, 24, + -1, 29, -1, 30, -1, 32, -1, 33, -1, 34, + -1, 35, -1, 36, -1, 37, -1, 16, -1, 17, + -1, 18, -1, 22, -1, 28, -1, 31, -1, 38, + -1, 39, -1, 40, -1, 41, -1, 42, -1, 44, + -1, 45, -1, -1, 65, -1, -1, 66, -1, 47, -1, 48, -1, 49, -1, 50, -1, 51, -1, 52, -1, 53, -1, 54, -1, 55, -1, 69, -1, 70, -1, 56, -1, 57, -1, 58, -1 @@ -524,13 +523,13 @@ static const yytype_int8 yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 156, 156, 157, 161, 163, 165, 167, 172, 177, - 181, 185, 196, 203, 206, 210, 214, 221, 228, 239, - 246, 253, 260, 266, 270, 274, 278, 282, 286, 290, - 294, 298, 302, 306, 310, 317, 321, 325, 329, 333, - 337, 341, 345, 349, 353, 357, 361, 365, 369, 376, - 383, 393, 399, 405, 411, 417, 426, 430, 434, 438, - 442, 446, 450, 454, 458, 465, 469, 477, 481, 485 + 0, 155, 155, 156, 160, 162, 164, 166, 171, 176, + 180, 184, 195, 203, 211, 215, 219, 226, 233, 244, + 251, 258, 265, 271, 275, 279, 283, 287, 291, 295, + 299, 303, 307, 311, 315, 322, 326, 330, 334, 338, + 342, 346, 350, 354, 358, 362, 366, 370, 377, 378, + 383, 384, 389, 393, 397, 401, 405, 409, 413, 417, + 421, 428, 432, 440, 444, 448 }; #endif @@ -552,11 +551,11 @@ static const char *const yytname[] = "_TCP_KEEPALIVE", "_TCP_KEEPIDLE", "USER_DATA", "USE_UDP", "VERIFY_KEY", "PREFIX_KEY", "MD5", "CRC", "FNV1_64", "FNV1A_64", "FNV1_32", "FNV1A_32", "HSIEH", "MURMUR", "JENKINS", "CONSISTENT", "MODULA", "RANDOM", "TRUE", - "FALSE", "','", "'='", "NUMBER", "FLOAT", "HOSTNAME", - "HOSTNAME_WITH_PORT", "IPADDRESS", "IPADDRESS_WITH_PORT", "STRING", - "QUOTED_STRING", "FILE_PATH", "' '", "$accept", "begin", "statement", - "expression", "behaviors", "behavior_number", "behavior_boolean", - "server_list", "server", "hash", "string", "distribution", 0 + "FALSE", "','", "'='", "FLOAT", "NUMBER", "PORT", "WEIGHT_START", + "IPADDRESS", "HOSTNAME", "STRING", "QUOTED_STRING", "FILE_PATH", "' '", + "$accept", "begin", "statement", "expression", "behaviors", + "behavior_number", "behavior_boolean", "optional_port", + "optional_weight", "hash", "string", "distribution", 0 }; #endif @@ -583,21 +582,21 @@ static const yytype_uint8 yyr1[] = 75, 75, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, - 80, 81, 81, 81, 81, 81, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 83, 83, 84, 84, 84 + 79, 79, 79, 79, 79, 79, 79, 79, 80, 80, + 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, + 82, 83, 83, 84, 84, 84 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 1, 3, 1, 1, 1, 1, 1, 1, - 1, 3, 2, 2, 2, 1, 2, 2, 4, 2, + 1, 3, 4, 4, 2, 1, 2, 2, 4, 2, 2, 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, - 3, 2, 1, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -606,44 +605,42 @@ static const yytype_uint8 yyr2[] = static const yytype_uint8 yydefact[] = { 0, 5, 7, 8, 9, 10, 0, 0, 6, 0, - 0, 35, 36, 37, 23, 0, 0, 38, 25, 26, - 24, 39, 40, 27, 28, 41, 29, 30, 31, 32, - 33, 34, 42, 43, 44, 45, 46, 22, 47, 48, - 0, 0, 2, 4, 15, 0, 21, 0, 65, 66, - 14, 52, 0, 55, 0, 53, 12, 13, 49, 67, - 68, 69, 17, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 19, 16, 1, 0, 20, 11, 51, 54, - 0, 0, 3, 50, 18 + 35, 36, 37, 23, 0, 0, 38, 25, 26, 24, + 39, 27, 28, 40, 29, 30, 31, 32, 33, 34, + 41, 42, 43, 44, 45, 22, 46, 47, 0, 0, + 2, 4, 15, 0, 21, 0, 61, 62, 14, 48, + 48, 63, 64, 65, 17, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 19, 16, 1, 0, 20, 11, + 49, 50, 50, 0, 3, 51, 13, 12, 18 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { - -1, 41, 42, 43, 44, 45, 46, 57, 56, 72, - 50, 62 + -1, 39, 40, 41, 42, 43, 44, 71, 76, 64, + 48, 54 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -62 +#define YYPACT_NINF -60 static const yytype_int8 yypact[] = { - -1, -62, -62, -62, -62, -62, -61, -56, -62, -7, - -7, -62, -62, -62, -62, 9, 1, -62, -62, -62, - -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, - -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, - -56, 0, -62, -62, -62, -38, -62, -56, -62, -62, - -62, -62, -17, -62, -16, -62, -62, 2, -62, -62, - -62, -62, 7, -62, -62, -62, -62, -62, -62, -62, - -62, -62, -62, -62, -62, -1, -62, -62, -62, -62, - -7, 1, -62, -62, -62 + -2, -60, -60, -60, -60, -60, -59, -45, -60, -11, + -60, -60, -60, -60, -46, -1, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -45, 0, + -60, -60, -60, -19, -60, -45, -60, -60, -60, -7, + -7, -60, -60, -60, 2, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -2, -60, -60, + -60, -6, -6, -1, -60, -60, -60, -60, -60 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { - -62, -62, -6, -62, -62, -62, -62, -62, -9, -11, - 17, -62 + -60, -60, -8, -60, -60, -60, -60, 11, -5, -9, + 17, -60 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -653,26 +650,26 @@ static const yytype_int8 yypgoto[] = #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { - 74, 58, 1, 2, 3, 4, 5, 6, 7, 8, - 9, 47, 10, 48, 49, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 76, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 78, 79, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 73, 51, 52, - 53, 54, 55, 80, 77, 59, 60, 61, 81, 82, - 84, 83, 75 + 66, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 51, 52, 53, 45, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 46, 47, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 68, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 65, 49, 50, 70, 74, + 75, 72, 69, 73, 78, 0, 0, 77, 0, 0, + 0, 0, 67 }; -static const yytype_uint8 yycheck[] = +static const yytype_int8 yycheck[] = { - 0, 10, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 72, 13, 69, 70, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 63, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 63, 63, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 40, 65, 66, - 67, 68, 69, 61, 47, 56, 57, 58, 61, 75, - 81, 80, 72 + 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 56, 57, 58, 72, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 69, 70, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 64, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 38, 67, 68, 65, 67, + 66, 50, 45, 61, 73, -1, -1, 72, -1, -1, + -1, -1, 72 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -680,14 +677,13 @@ static const yytype_uint8 yycheck[] = static const yytype_uint8 yystos[] = { 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 13, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 74, 75, 76, 77, 78, 79, 72, 69, 70, - 83, 65, 66, 67, 68, 69, 81, 80, 81, 56, - 57, 58, 84, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 82, 83, 0, 72, 63, 83, 63, 63, - 61, 61, 75, 81, 82 + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 74, + 75, 76, 77, 78, 79, 72, 69, 70, 83, 67, + 68, 56, 57, 58, 84, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 82, 83, 0, 72, 64, 83, + 65, 80, 80, 61, 75, 66, 81, 81, 82 }; #define yyerrok (yyerrstatus = 0) @@ -1522,28 +1518,28 @@ yyreduce: case 4: /* Line 1464 of yacc.c */ -#line 162 "libmemcached/options/parser.yy" +#line 161 "libmemcached/options/parser.yy" { ;} break; case 5: /* Line 1464 of yacc.c */ -#line 164 "libmemcached/options/parser.yy" +#line 163 "libmemcached/options/parser.yy" { ;} break; case 6: /* Line 1464 of yacc.c */ -#line 166 "libmemcached/options/parser.yy" +#line 165 "libmemcached/options/parser.yy" { ;} break; case 7: /* Line 1464 of yacc.c */ -#line 168 "libmemcached/options/parser.yy" +#line 167 "libmemcached/options/parser.yy" { context->set_end(); YYACCEPT; @@ -1553,7 +1549,7 @@ yyreduce: case 8: /* Line 1464 of yacc.c */ -#line 173 "libmemcached/options/parser.yy" +#line 172 "libmemcached/options/parser.yy" { context->rc= MEMCACHED_PARSE_USER_ERROR; parser_abort(context, NULL); @@ -1563,7 +1559,7 @@ yyreduce: case 9: /* Line 1464 of yacc.c */ -#line 178 "libmemcached/options/parser.yy" +#line 177 "libmemcached/options/parser.yy" { memcached_reset(context->memc); ;} @@ -1572,7 +1568,7 @@ yyreduce: case 10: /* Line 1464 of yacc.c */ -#line 182 "libmemcached/options/parser.yy" +#line 181 "libmemcached/options/parser.yy" { yydebug= 1; ;} @@ -1581,7 +1577,7 @@ yyreduce: case 11: /* Line 1464 of yacc.c */ -#line 186 "libmemcached/options/parser.yy" +#line 185 "libmemcached/options/parser.yy" { if ((context->rc= memcached_parse_configure_file(context->memc, (yyvsp[(3) - (3)].string).c_str, (yyvsp[(3) - (3)].string).length)) != MEMCACHED_SUCCESS) { @@ -1593,12 +1589,13 @@ yyreduce: case 12: /* Line 1464 of yacc.c */ -#line 197 "libmemcached/options/parser.yy" - { - if ((context->rc= memcached_server_add_parsed(context->memc, (yyvsp[(2) - (2)].server).c_str, (yyvsp[(2) - (2)].server).length, (yyvsp[(2) - (2)].server).port, 0)) != MEMCACHED_SUCCESS) +#line 196 "libmemcached/options/parser.yy" + { + if ((context->rc= memcached_server_add_with_weight(context->memc, (yyvsp[(2) - (4)].server).c_str, (yyvsp[(2) - (4)].server).port, (yyvsp[(2) - (4)].server).weight)) != MEMCACHED_SUCCESS) { parser_abort(context, NULL); } + context->unset_server(); ;} break; @@ -1607,13 +1604,18 @@ yyreduce: /* Line 1464 of yacc.c */ #line 204 "libmemcached/options/parser.yy" { + if ((context->rc= memcached_server_add_with_weight(context->memc, (yyvsp[(2) - (4)].server).c_str, (yyvsp[(2) - (4)].server).port, (yyvsp[(2) - (4)].server).weight)) != MEMCACHED_SUCCESS) + { + parser_abort(context, NULL); + } + context->unset_server(); ;} break; case 14: /* Line 1464 of yacc.c */ -#line 207 "libmemcached/options/parser.yy" +#line 212 "libmemcached/options/parser.yy" { memcached_set_configuration_file(context->memc, (yyvsp[(2) - (2)].string).c_str, (yyvsp[(2) - (2)].string).length); ;} @@ -1622,7 +1624,7 @@ yyreduce: case 16: /* Line 1464 of yacc.c */ -#line 215 "libmemcached/options/parser.yy" +#line 220 "libmemcached/options/parser.yy" { if ((context->rc= memcached_set_prefix_key(context->memc, (yyvsp[(2) - (2)].string).c_str, (yyvsp[(2) - (2)].string).length)) != MEMCACHED_SUCCESS) { @@ -1634,7 +1636,7 @@ yyreduce: case 17: /* Line 1464 of yacc.c */ -#line 222 "libmemcached/options/parser.yy" +#line 227 "libmemcached/options/parser.yy" { if ((context->rc= memcached_behavior_set(context->memc, MEMCACHED_BEHAVIOR_DISTRIBUTION, (yyvsp[(2) - (2)].distribution))) != MEMCACHED_SUCCESS) { @@ -1646,7 +1648,7 @@ yyreduce: case 18: /* Line 1464 of yacc.c */ -#line 229 "libmemcached/options/parser.yy" +#line 234 "libmemcached/options/parser.yy" { if ((context->rc= memcached_behavior_set(context->memc, MEMCACHED_BEHAVIOR_DISTRIBUTION, (yyvsp[(2) - (4)].distribution))) != MEMCACHED_SUCCESS) { @@ -1662,7 +1664,7 @@ yyreduce: case 19: /* Line 1464 of yacc.c */ -#line 240 "libmemcached/options/parser.yy" +#line 245 "libmemcached/options/parser.yy" { if ((context->rc= memcached_behavior_set(context->memc, MEMCACHED_BEHAVIOR_HASH, (yyvsp[(2) - (2)].hash))) != MEMCACHED_SUCCESS) { @@ -1674,7 +1676,7 @@ yyreduce: case 20: /* Line 1464 of yacc.c */ -#line 247 "libmemcached/options/parser.yy" +#line 252 "libmemcached/options/parser.yy" { if ((context->rc= memcached_behavior_set(context->memc, (yyvsp[(1) - (2)].behavior), (yyvsp[(2) - (2)].number))) != MEMCACHED_SUCCESS) { @@ -1686,7 +1688,7 @@ yyreduce: case 21: /* Line 1464 of yacc.c */ -#line 254 "libmemcached/options/parser.yy" +#line 259 "libmemcached/options/parser.yy" { if ((context->rc= memcached_behavior_set(context->memc, (yyvsp[(1) - (1)].behavior), true)) != MEMCACHED_SUCCESS) { @@ -1698,7 +1700,7 @@ yyreduce: case 22: /* Line 1464 of yacc.c */ -#line 261 "libmemcached/options/parser.yy" +#line 266 "libmemcached/options/parser.yy" { ;} break; @@ -1706,7 +1708,7 @@ yyreduce: case 23: /* Line 1464 of yacc.c */ -#line 267 "libmemcached/options/parser.yy" +#line 272 "libmemcached/options/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT; ;} @@ -1715,7 +1717,7 @@ yyreduce: case 24: /* Line 1464 of yacc.c */ -#line 271 "libmemcached/options/parser.yy" +#line 276 "libmemcached/options/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_IO_MSG_WATERMARK; ;} @@ -1724,7 +1726,7 @@ yyreduce: case 25: /* Line 1464 of yacc.c */ -#line 275 "libmemcached/options/parser.yy" +#line 280 "libmemcached/options/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_IO_BYTES_WATERMARK; ;} @@ -1733,7 +1735,7 @@ yyreduce: case 26: /* Line 1464 of yacc.c */ -#line 279 "libmemcached/options/parser.yy" +#line 284 "libmemcached/options/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_IO_KEY_PREFETCH; ;} @@ -1742,7 +1744,7 @@ yyreduce: case 27: /* Line 1464 of yacc.c */ -#line 283 "libmemcached/options/parser.yy" +#line 288 "libmemcached/options/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_NUMBER_OF_REPLICAS; ;} @@ -1751,7 +1753,7 @@ yyreduce: case 28: /* Line 1464 of yacc.c */ -#line 287 "libmemcached/options/parser.yy" +#line 292 "libmemcached/options/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_POLL_TIMEOUT; ;} @@ -1760,7 +1762,7 @@ yyreduce: case 29: /* Line 1464 of yacc.c */ -#line 291 "libmemcached/options/parser.yy" +#line 296 "libmemcached/options/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_RCV_TIMEOUT; ;} @@ -1769,7 +1771,7 @@ yyreduce: case 30: /* Line 1464 of yacc.c */ -#line 295 "libmemcached/options/parser.yy" +#line 300 "libmemcached/options/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_RETRY_TIMEOUT; ;} @@ -1778,7 +1780,7 @@ yyreduce: case 31: /* Line 1464 of yacc.c */ -#line 299 "libmemcached/options/parser.yy" +#line 304 "libmemcached/options/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT; ;} @@ -1787,7 +1789,7 @@ yyreduce: case 32: /* Line 1464 of yacc.c */ -#line 303 "libmemcached/options/parser.yy" +#line 308 "libmemcached/options/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_SND_TIMEOUT; ;} @@ -1796,7 +1798,7 @@ yyreduce: case 33: /* Line 1464 of yacc.c */ -#line 307 "libmemcached/options/parser.yy" +#line 312 "libmemcached/options/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_SOCKET_RECV_SIZE; ;} @@ -1805,7 +1807,7 @@ yyreduce: case 34: /* Line 1464 of yacc.c */ -#line 311 "libmemcached/options/parser.yy" +#line 316 "libmemcached/options/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE; ;} @@ -1814,7 +1816,7 @@ yyreduce: case 35: /* Line 1464 of yacc.c */ -#line 318 "libmemcached/options/parser.yy" +#line 323 "libmemcached/options/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_AUTO_EJECT_HOSTS; ;} @@ -1823,7 +1825,7 @@ yyreduce: case 36: /* Line 1464 of yacc.c */ -#line 322 "libmemcached/options/parser.yy" +#line 327 "libmemcached/options/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_BINARY_PROTOCOL; ;} @@ -1832,7 +1834,7 @@ yyreduce: case 37: /* Line 1464 of yacc.c */ -#line 326 "libmemcached/options/parser.yy" +#line 331 "libmemcached/options/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_BUFFER_REQUESTS; ;} @@ -1841,7 +1843,7 @@ yyreduce: case 38: /* Line 1464 of yacc.c */ -#line 330 "libmemcached/options/parser.yy" +#line 335 "libmemcached/options/parser.yy" { (yyval.behavior)= MEMCACHED_BEHAVIOR_HASH_WITH_PREFIX_KEY; ;} @@ -1850,294 +1852,234 @@ yyreduce: case 39: /* Line 1464 of yacc.c */ -#line 334 "libmemcached/options/parser.yy" +#line 339 "libmemcached/options/parser.yy" { - (yyval.behavior)= MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED; + (yyval.behavior)= MEMCACHED_BEHAVIOR_NOREPLY; ;} break; case 40: /* Line 1464 of yacc.c */ -#line 338 "libmemcached/options/parser.yy" +#line 343 "libmemcached/options/parser.yy" { - (yyval.behavior)= MEMCACHED_BEHAVIOR_NOREPLY; + (yyval.behavior)= MEMCACHED_BEHAVIOR_RANDOMIZE_REPLICA_READ; ;} break; case 41: /* Line 1464 of yacc.c */ -#line 342 "libmemcached/options/parser.yy" +#line 347 "libmemcached/options/parser.yy" { - (yyval.behavior)= MEMCACHED_BEHAVIOR_RANDOMIZE_REPLICA_READ; + (yyval.behavior)= MEMCACHED_BEHAVIOR_SORT_HOSTS; ;} break; case 42: /* Line 1464 of yacc.c */ -#line 346 "libmemcached/options/parser.yy" +#line 351 "libmemcached/options/parser.yy" { - (yyval.behavior)= MEMCACHED_BEHAVIOR_SORT_HOSTS; + (yyval.behavior)= MEMCACHED_BEHAVIOR_SUPPORT_CAS; ;} break; case 43: /* Line 1464 of yacc.c */ -#line 350 "libmemcached/options/parser.yy" +#line 355 "libmemcached/options/parser.yy" { - (yyval.behavior)= MEMCACHED_BEHAVIOR_SUPPORT_CAS; + (yyval.behavior)= MEMCACHED_BEHAVIOR_TCP_NODELAY; ;} break; case 44: /* Line 1464 of yacc.c */ -#line 354 "libmemcached/options/parser.yy" +#line 359 "libmemcached/options/parser.yy" { - (yyval.behavior)= MEMCACHED_BEHAVIOR_TCP_NODELAY; + (yyval.behavior)= MEMCACHED_BEHAVIOR_TCP_KEEPALIVE; ;} break; case 45: /* Line 1464 of yacc.c */ -#line 358 "libmemcached/options/parser.yy" +#line 363 "libmemcached/options/parser.yy" { - (yyval.behavior)= MEMCACHED_BEHAVIOR_TCP_KEEPALIVE; + (yyval.behavior)= MEMCACHED_BEHAVIOR_TCP_KEEPIDLE; ;} break; case 46: /* Line 1464 of yacc.c */ -#line 362 "libmemcached/options/parser.yy" +#line 367 "libmemcached/options/parser.yy" { - (yyval.behavior)= MEMCACHED_BEHAVIOR_TCP_KEEPIDLE; + (yyval.behavior)= MEMCACHED_BEHAVIOR_USE_UDP; ;} break; case 47: /* Line 1464 of yacc.c */ -#line 366 "libmemcached/options/parser.yy" +#line 371 "libmemcached/options/parser.yy" { - (yyval.behavior)= MEMCACHED_BEHAVIOR_USE_UDP; + (yyval.behavior)= MEMCACHED_BEHAVIOR_VERIFY_KEY; ;} break; case 48: /* Line 1464 of yacc.c */ -#line 370 "libmemcached/options/parser.yy" - { - (yyval.behavior)= MEMCACHED_BEHAVIOR_VERIFY_KEY; - ;} +#line 377 "libmemcached/options/parser.yy" + { ;} break; case 49: /* Line 1464 of yacc.c */ -#line 377 "libmemcached/options/parser.yy" - { - if ((context->rc= memcached_server_add_parsed(context->memc, (yyvsp[(1) - (1)].server).c_str, (yyvsp[(1) - (1)].server).length, (yyvsp[(1) - (1)].server).port, 0)) != MEMCACHED_SUCCESS) - { - parser_abort(context, NULL);; - } - ;} +#line 379 "libmemcached/options/parser.yy" + { ;} break; case 50: /* Line 1464 of yacc.c */ -#line 384 "libmemcached/options/parser.yy" - { - if ((context->rc= memcached_server_add_parsed(context->memc, (yyvsp[(3) - (3)].server).c_str, (yyvsp[(3) - (3)].server).length, (yyvsp[(3) - (3)].server).port, 0)) != MEMCACHED_SUCCESS) - { - parser_abort(context, NULL);; - } - ;} +#line 383 "libmemcached/options/parser.yy" + { ;} break; case 51: /* Line 1464 of yacc.c */ -#line 394 "libmemcached/options/parser.yy" - { - (yyval.server).c_str= (yyvsp[(1) - (2)].string).c_str; - (yyval.server).length= (yyvsp[(1) - (2)].string).length -1; // -1 to remove : - (yyval.server).port= (yyvsp[(2) - (2)].number); - ;} +#line 385 "libmemcached/options/parser.yy" + { ;} break; case 52: /* Line 1464 of yacc.c */ -#line 400 "libmemcached/options/parser.yy" - { - (yyval.server).c_str= (yyvsp[(1) - (1)].string).c_str; - (yyval.server).length= (yyvsp[(1) - (1)].string).length; - (yyval.server).port= MEMCACHED_DEFAULT_PORT; - ;} - break; - - case 53: - -/* Line 1464 of yacc.c */ -#line 406 "libmemcached/options/parser.yy" - { - (yyval.server).c_str= (yyvsp[(1) - (1)].string).c_str; - (yyval.server).length= (yyvsp[(1) - (1)].string).length; - (yyval.server).port= MEMCACHED_DEFAULT_PORT; - ;} - break; - - case 54: - -/* Line 1464 of yacc.c */ -#line 412 "libmemcached/options/parser.yy" - { - (yyval.server).c_str= (yyvsp[(1) - (2)].string).c_str; - (yyval.server).length= (yyvsp[(1) - (2)].string).length -1; // -1 to remove : - (yyval.server).port= (yyvsp[(2) - (2)].number); - ;} - break; - - case 55: - -/* Line 1464 of yacc.c */ -#line 418 "libmemcached/options/parser.yy" - { - (yyval.server).c_str= (yyvsp[(1) - (1)].string).c_str; - (yyval.server).length= (yyvsp[(1) - (1)].string).length; - (yyval.server).port= MEMCACHED_DEFAULT_PORT; - ;} - break; - - case 56: - -/* Line 1464 of yacc.c */ -#line 427 "libmemcached/options/parser.yy" +#line 390 "libmemcached/options/parser.yy" { (yyval.hash)= MEMCACHED_HASH_MD5; ;} break; - case 57: + case 53: /* Line 1464 of yacc.c */ -#line 431 "libmemcached/options/parser.yy" +#line 394 "libmemcached/options/parser.yy" { (yyval.hash)= MEMCACHED_HASH_CRC; ;} break; - case 58: + case 54: /* Line 1464 of yacc.c */ -#line 435 "libmemcached/options/parser.yy" +#line 398 "libmemcached/options/parser.yy" { (yyval.hash)= MEMCACHED_HASH_FNV1_64; ;} break; - case 59: + case 55: /* Line 1464 of yacc.c */ -#line 439 "libmemcached/options/parser.yy" +#line 402 "libmemcached/options/parser.yy" { (yyval.hash)= MEMCACHED_HASH_FNV1A_64; ;} break; - case 60: + case 56: /* Line 1464 of yacc.c */ -#line 443 "libmemcached/options/parser.yy" +#line 406 "libmemcached/options/parser.yy" { (yyval.hash)= MEMCACHED_HASH_FNV1_32; ;} break; - case 61: + case 57: /* Line 1464 of yacc.c */ -#line 447 "libmemcached/options/parser.yy" +#line 410 "libmemcached/options/parser.yy" { (yyval.hash)= MEMCACHED_HASH_FNV1A_32; ;} break; - case 62: + case 58: /* Line 1464 of yacc.c */ -#line 451 "libmemcached/options/parser.yy" +#line 414 "libmemcached/options/parser.yy" { (yyval.hash)= MEMCACHED_HASH_HSIEH; ;} break; - case 63: + case 59: /* Line 1464 of yacc.c */ -#line 455 "libmemcached/options/parser.yy" +#line 418 "libmemcached/options/parser.yy" { (yyval.hash)= MEMCACHED_HASH_MURMUR; ;} break; - case 64: + case 60: /* Line 1464 of yacc.c */ -#line 459 "libmemcached/options/parser.yy" +#line 422 "libmemcached/options/parser.yy" { (yyval.hash)= MEMCACHED_HASH_JENKINS; ;} break; - case 65: + case 61: /* Line 1464 of yacc.c */ -#line 466 "libmemcached/options/parser.yy" +#line 429 "libmemcached/options/parser.yy" { (yyval.string)= (yyvsp[(1) - (1)].string); ;} break; - case 66: + case 62: /* Line 1464 of yacc.c */ -#line 470 "libmemcached/options/parser.yy" +#line 433 "libmemcached/options/parser.yy" { (yyval.string).c_str= (yyvsp[(1) - (1)].string).c_str +1; // +1 to move use passed the initial quote (yyval.string).length= (yyvsp[(1) - (1)].string).length -1; // -1 removes the end quote ;} break; - case 67: + case 63: /* Line 1464 of yacc.c */ -#line 478 "libmemcached/options/parser.yy" +#line 441 "libmemcached/options/parser.yy" { (yyval.distribution)= MEMCACHED_DISTRIBUTION_CONSISTENT; ;} break; - case 68: + case 64: /* Line 1464 of yacc.c */ -#line 482 "libmemcached/options/parser.yy" +#line 445 "libmemcached/options/parser.yy" { (yyval.distribution)= MEMCACHED_DISTRIBUTION_MODULA; ;} break; - case 69: + case 65: /* Line 1464 of yacc.c */ -#line 486 "libmemcached/options/parser.yy" +#line 449 "libmemcached/options/parser.yy" { (yyval.distribution)= MEMCACHED_DISTRIBUTION_RANDOM; ;} @@ -2146,7 +2088,7 @@ yyreduce: /* Line 1464 of yacc.c */ -#line 2150 "libmemcached/options/parser.cc" +#line 2092 "libmemcached/options/parser.cc" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -2358,7 +2300,7 @@ yyreturn: /* Line 1684 of yacc.c */ -#line 491 "libmemcached/options/parser.yy" +#line 454 "libmemcached/options/parser.yy" void Context::start() diff --git a/libmemcached/options/parser.h b/libmemcached/options/parser.h index 8023b270..f25789af 100644 --- a/libmemcached/options/parser.h +++ b/libmemcached/options/parser.h @@ -96,12 +96,12 @@ RANDOM = 313, TRUE = 314, FALSE = 315, - NUMBER = 316, - FLOAT = 317, - HOSTNAME = 318, - HOSTNAME_WITH_PORT = 319, + FLOAT = 316, + NUMBER = 317, + PORT = 318, + WEIGHT_START = 319, IPADDRESS = 320, - IPADDRESS_WITH_PORT = 321, + HOSTNAME = 321, STRING = 322, QUOTED_STRING = 323, FILE_PATH = 324 diff --git a/libmemcached/options/parser.yy b/libmemcached/options/parser.yy index e61f69ca..e950076e 100644 --- a/libmemcached/options/parser.yy +++ b/libmemcached/options/parser.yy @@ -133,17 +133,16 @@ inline void config_error(Context *context, yyscan_t *scanner, const char *error) %nonassoc ',' %nonassoc '=' -%token NUMBER %token FLOAT -%token HOSTNAME -%token HOSTNAME_WITH_PORT -%token IPADDRESS -%token IPADDRESS_WITH_PORT +%token NUMBER +%token PORT +%token WEIGHT_START +%token IPADDRESS +%token HOSTNAME %token STRING %token QUOTED_STRING %token FILE_PATH -%type server %type string %type distribution %type hash @@ -193,15 +192,21 @@ statement: expression: - SERVER server - { - if ((context->rc= memcached_server_add_parsed(context->memc, $2.c_str, $2.length, $2.port, 0)) != MEMCACHED_SUCCESS) + SERVER HOSTNAME optional_port optional_weight + { + if ((context->rc= memcached_server_add_with_weight(context->memc, $2.c_str, $2.port, $2.weight)) != MEMCACHED_SUCCESS) { parser_abort(context, NULL); } + context->unset_server(); } - | SERVERS_OPTION server_list + | SERVER IPADDRESS optional_port optional_weight { + if ((context->rc= memcached_server_add_with_weight(context->memc, $2.c_str, $2.port, $2.weight)) != MEMCACHED_SUCCESS) + { + parser_abort(context, NULL); + } + context->unset_server(); } | CONFIGURE_FILE string { @@ -330,10 +335,6 @@ behavior_boolean: { $$= MEMCACHED_BEHAVIOR_HASH_WITH_PREFIX_KEY; } - | KETAMA_WEIGHTED - { - $$= MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED; - } | NOREPLY { $$= MEMCACHED_BEHAVIOR_NOREPLY; @@ -372,54 +373,16 @@ behavior_boolean: } -server_list: - server - { - if ((context->rc= memcached_server_add_parsed(context->memc, $1.c_str, $1.length, $1.port, 0)) != MEMCACHED_SUCCESS) - { - parser_abort(context, NULL);; - } - } - | server_list ',' server - { - if ((context->rc= memcached_server_add_parsed(context->memc, $3.c_str, $3.length, $3.port, 0)) != MEMCACHED_SUCCESS) - { - parser_abort(context, NULL);; - } - } +optional_port: + { } + | PORT + { }; ; -server: - HOSTNAME_WITH_PORT NUMBER - { - $$.c_str= $1.c_str; - $$.length= $1.length -1; // -1 to remove : - $$.port= $2; - } - | HOSTNAME - { - $$.c_str= $1.c_str; - $$.length= $1.length; - $$.port= MEMCACHED_DEFAULT_PORT; - } - | STRING /* a match can be against "localhost" which is just a string */ - { - $$.c_str= $1.c_str; - $$.length= $1.length; - $$.port= MEMCACHED_DEFAULT_PORT; - } - | IPADDRESS_WITH_PORT NUMBER - { - $$.c_str= $1.c_str; - $$.length= $1.length -1; // -1 to remove : - $$.port= $2; - } - | IPADDRESS - { - $$.c_str= $1.c_str; - $$.length= $1.length; - $$.port= MEMCACHED_DEFAULT_PORT; - } +optional_weight: + { } + | WEIGHT_START + { } ; hash: diff --git a/libmemcached/options/scanner.cc b/libmemcached/options/scanner.cc index 436b419d..06a58117 100644 --- a/libmemcached/options/scanner.cc +++ b/libmemcached/options/scanner.cc @@ -448,8 +448,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); yyg->yy_c_buf_p = yy_cp; /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */ -#define YY_NUM_RULES 94 -#define YY_END_OF_BUFFER 95 +#define YY_NUM_RULES 90 +#define YY_END_OF_BUFFER 91 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -457,94 +457,92 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[791] = +static yyconst flex_int16_t yy_accept[769] = { 0, - 0, 0, 95, 93, 3, 3, 1, 93, 93, 2, - 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 93, 0, 92, 74, 0, 2, 91, 0, - 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, 0, 4, - 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 0, 0, 0, 2, 87, - 0, 91, 79, 91, 70, 91, 91, 91, 91, 91, - 91, 78, 91, 91, 91, 91, 91, 91, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, - - 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, - 88, 88, 0, 0, 0, 2, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, 91, 72, - 74, 74, 74, 74, 74, 74, 0, 0, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 0, 0, 91, 68, 71, 73, - 91, 0, 84, 91, 91, 91, 91, 91, 67, 91, - 74, 74, 74, 74, 74, 74, 74, 0, 0, 0, - 0, 0, 0, 74, 74, 74, 74, 74, 74, 0, - 0, 74, 74, 0, 0, 74, 74, 74, 0, 0, - - 0, 74, 0, 74, 0, 0, 91, 0, 0, 0, - 91, 91, 76, 85, 77, 91, 0, 0, 74, 74, - 74, 74, 74, 0, 20, 0, 0, 0, 0, 0, - 0, 0, 74, 74, 74, 0, 0, 74, 74, 0, - 0, 74, 74, 0, 0, 74, 0, 0, 74, 0, - 0, 0, 0, 0, 0, 0, 0, 74, 90, 0, - 91, 0, 0, 82, 80, 66, 86, 69, 0, 0, - 74, 74, 74, 74, 74, 0, 0, 0, 0, 0, - 0, 0, 0, 74, 74, 74, 0, 0, 74, 74, - 0, 0, 0, 0, 74, 0, 0, 74, 0, 0, - - 74, 0, 0, 0, 0, 0, 0, 0, 0, 74, - 90, 89, 91, 83, 81, 0, 0, 0, 0, 0, - 0, 74, 74, 74, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, - 0, 74, 0, 0, 0, 0, 0, 5, 74, 0, - 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, - 0, 63, 0, 0, 62, 0, 0, 90, 91, 0, - 0, 0, 0, 0, 0, 74, 0, 0, 74, 0, + 0, 0, 91, 89, 5, 5, 1, 89, 89, 89, + 2, 89, 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 0, 88, 73, 0, 0, + 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, - - 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 4, 87, 87, 2, + 3, 87, 78, 87, 69, 87, 87, 87, 87, 87, + 87, 77, 87, 87, 87, 87, 87, 87, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + + 73, 73, 73, 73, 73, 73, 73, 73, 73, 4, + 0, 87, 2, 3, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 71, 73, 73, + 73, 73, 73, 73, 0, 0, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 4, 87, 87, 3, 87, 67, 70, 72, 87, + 0, 83, 87, 87, 87, 87, 87, 66, 87, 73, + 73, 73, 73, 73, 73, 73, 0, 0, 0, 0, + 0, 0, 73, 73, 73, 73, 73, 0, 0, 73, + 73, 0, 0, 73, 73, 73, 0, 0, 0, 73, + + 0, 73, 4, 0, 87, 3, 87, 0, 87, 87, + 87, 87, 75, 84, 76, 87, 0, 0, 73, 73, + 73, 73, 73, 0, 21, 0, 0, 0, 0, 0, + 0, 0, 73, 73, 0, 0, 73, 73, 0, 0, + 73, 73, 0, 0, 73, 0, 0, 73, 0, 0, + 0, 0, 0, 0, 0, 0, 73, 4, 86, 87, + 87, 87, 87, 81, 79, 65, 85, 68, 0, 0, + 73, 73, 73, 73, 73, 0, 0, 0, 0, 0, + 0, 0, 0, 73, 73, 0, 0, 73, 73, 0, + 0, 0, 0, 73, 0, 0, 73, 0, 0, 73, + + 0, 0, 0, 0, 0, 0, 0, 0, 73, 86, + 87, 82, 80, 0, 0, 0, 0, 0, 0, 73, + 73, 73, 0, 0, 0, 0, 0, 0, 0, 0, + 30, 0, 0, 0, 0, 0, 0, 73, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, + 0, 73, 0, 0, 0, 0, 62, 0, 0, 61, + 0, 0, 86, 87, 0, 0, 0, 0, 0, 0, + 73, 0, 0, 73, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 75, 0, 0, 0, 0, 0, 0, 74, 0, - 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, + 73, 0, 0, 73, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 61, 60, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - + 0, 60, 59, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 51, 50, 0, 0, - 0, 0, 0, 0, 0, 0, 8, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 64, 65, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, - 52, 0, 0, 55, 0, 0, 54, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 39, 38, 0, 0, 0, 0, - 45, 44, 0, 0, 0, 0, 0, 59, 0, 58, + 0, 0, 0, 0, 50, 49, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 8, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, + 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 52, 51, 0, 0, 54, + 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 38, 37, + 0, 0, 0, 0, 44, 43, 0, 0, 0, 0, + + 0, 58, 0, 57, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 34, 33, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 56, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 35, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 57, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 40, 39, 0, 0, 0, 0, 0, 0, 0, + 0, 13, 12, 15, 14, 17, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 41, 40, 0, 0, 0, 0, 0, 0, 0, - 0, 12, 11, 14, 13, 16, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 11, 10, 19, - 0, 0, 0, 0, 0, 0, 0, 30, 29, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, - 9, 18, 17, 0, 0, 0, 26, 0, 0, 25, + 18, 0, 0, 0, 27, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 28, 0, 27, 0, 0, 0, - 0, 0, 0, 47, 49, 46, 48, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, - 23, 33, 32, 0, 0, 0, 0, 22, 21, 0, - 0, 0, 0, 0, 0, 43, 42, 37, 36, 0 + 0, 0, 29, 0, 28, 0, 0, 0, 0, 0, + 0, 46, 48, 45, 47, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 25, 24, 32, + 31, 0, 0, 0, 0, 23, 22, 0, 0, 0, + 0, 0, 0, 42, 41, 36, 35, 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -553,16 +551,16 @@ static yyconst flex_int32_t yy_ec[256] = 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 5, 6, 1, 1, 1, 1, 1, - 1, 1, 1, 7, 8, 9, 1, 10, 11, 12, - 13, 14, 15, 16, 10, 10, 10, 17, 1, 1, - 18, 1, 1, 1, 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, - 1, 1, 1, 1, 45, 1, 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, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 11, 11, 11, 18, 1, 1, + 19, 1, 20, 1, 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, + 1, 1, 1, 1, 47, 1, 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, 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, @@ -579,451 +577,439 @@ static yyconst flex_int32_t yy_ec[256] = 1, 1, 1, 1, 1 } ; -static yyconst flex_int32_t yy_meta[72] = +static yyconst flex_int32_t yy_meta[74] = { 0, - 1, 1, 2, 1, 1, 1, 1, 1, 3, 3, - 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, + 1, 1, 2, 1, 3, 1, 1, 3, 3, 1, + 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, + 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, 1, 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 } ; -static yyconst flex_int16_t yy_base[797] = +static yyconst flex_int16_t yy_base[773] = { 0, - 0, 957, 959, 2145, 2145, 2145, 2145, 942, 903, 63, - 71, 79, 73, 65, 81, 66, 72, 114, 112, 130, - 123, 119, 900, 897, 896, 184, 247, 255, 121, 263, - 129, 263, 264, 269, 265, 271, 273, 275, 320, 322, - 327, 331, 332, 333, 340, 371, 380, 381, 894, 2145, - 429, 77, 379, 125, 133, 183, 250, 268, 345, 376, - 441, 447, 272, 257, 290, 412, 489, 505, 514, 2145, - 522, 522, 421, 524, 528, 529, 533, 562, 577, 582, - 587, 511, 597, 588, 632, 636, 638, 644, 314, 330, - 351, 378, 378, 382, 463, 394, 504, 517, 519, 528, - - 521, 514, 518, 565, 580, 637, 573, 574, 588, 581, - 699, 707, 716, 724, 732, 741, 741, 742, 743, 747, - 643, 755, 754, 792, 794, 796, 804, 805, 825, 814, - 623, 645, 642, 741, 632, 649, 840, 852, 743, 746, - 765, 769, 812, 817, 464, 813, 813, 465, 844, 840, - 845, 466, 876, 855, 904, 913, 913, 915, 919, 920, - 921, 94, 925, 969, 957, 975, 970, 979, 990, 992, - 564, 868, 884, 906, 912, 904, 996, 898, 920, 907, - 902, 972, 960, 969, 979, 996, 753, 1004, 1001, 998, - 1005, 1001, 1022, 1009, 1010, 1026, 778, 1018, 1025, 1027, - - 1021, 956, 1023, 1040, 1083, 1091, 1052, 105, 883, 880, - 1091, 1092, 1099, 1101, 1103, 1109, 1088, 1090, 1078, 1086, - 1098, 1109, 1104, 1092, 2145, 1102, 1106, 1104, 1128, 1127, - 1124, 1143, 1156, 1146, 1141, 1140, 1141, 1139, 1151, 1156, - 1157, 1065, 1149, 1159, 1160, 1150, 1163, 1164, 1155, 1170, - 1163, 1174, 1165, 1177, 1178, 1179, 1185, 1176, 1226, 1238, - 1238, 881, 878, 2145, 2145, 1227, 1239, 1240, 1203, 1204, - 1074, 1221, 1223, 1226, 1245, 1240, 1241, 1246, 883, 882, - 1247, 844, 841, 1237, 1234, 1270, 1252, 1253, 1273, 1256, - 1253, 1254, 1248, 1255, 1301, 1274, 1277, 1306, 1283, 1284, - - 1283, 1299, 1301, 1302, 1304, 1293, 1309, 1310, 1296, 1316, - 1357, 2145, 1343, 2145, 2145, 1308, 1313, 1303, 1325, 1326, - 1341, 1342, 1337, 1341, 1343, 1345, 1347, 1351, 1346, 1351, - 1356, 1350, 1351, 1352, 0, 1361, 1362, 1365, 1366, 1369, - 1370, 1356, 1378, 1386, 1386, 1389, 1405, 2145, 827, 1406, - 1408, 1409, 1397, 1401, 1398, 1402, 1433, 1408, 1421, 1411, - 1423, 2145, 1409, 1410, 2145, 1420, 1421, 1470, 1471, 1442, - 1446, 1432, 1434, 1466, 1468, 1469, 1455, 1458, 1460, 1473, - 1474, 836, 1465, 1483, 789, 1467, 1486, 1483, 1485, 1486, - 1487, 1489, 1490, 1491, 1492, 1494, 1488, 1489, 1493, 1512, - - 1526, 2145, 1527, 1514, 1517, 1529, 1530, 1531, 1532, 1518, - 1519, 1537, 1538, 1541, 1531, 1544, 1532, 1545, 1546, 1543, - 1544, 1579, 1537, 1538, 1545, 1564, 1564, 1565, 1561, 1574, - 1577, 1580, 825, 771, 1567, 1586, 1572, 1570, 1590, 1576, - 1589, 1590, 776, 737, 1585, 1586, 1577, 1578, 1614, 1584, - 1586, 1606, 1607, 1606, 1622, 1612, 1614, 1633, 1623, 1637, - 1629, 1625, 1626, 1645, 1646, 1636, 1645, 1649, 1639, 1648, - 1652, 2145, 2145, 1629, 1630, 721, 718, 1636, 1637, 1638, - 1640, 1659, 1660, 1655, 1656, 1670, 1671, 1673, 1689, 1685, - 1689, 1696, 1692, 1694, 1693, 1694, 1684, 1685, 1683, 1684, - - 672, 669, 1688, 1689, 1688, 1689, 1695, 1696, 1701, 1703, - 1699, 1700, 1700, 1719, 1717, 1737, 2145, 2145, 1724, 1725, - 1736, 1736, 1726, 1743, 1741, 1729, 2145, 2145, 1747, 1748, - 1742, 1743, 1754, 1755, 1752, 1753, 1758, 1759, 1751, 1749, - 1751, 1753, 1769, 1758, 1757, 1788, 1777, 1789, 1790, 1794, - 1797, 1785, 1786, 2145, 2145, 1802, 1803, 666, 664, 1788, - 1789, 1790, 1791, 634, 623, 624, 623, 581, 561, 2145, - 2145, 1791, 1809, 2145, 1793, 1811, 2145, 1802, 1803, 1816, - 1818, 1804, 1808, 1816, 1818, 1816, 1832, 585, 1844, 1846, - 1847, 1833, 1843, 1854, 1840, 1848, 1842, 1843, 1848, 1849, - - 559, 550, 1850, 1851, 2145, 2145, 1848, 1849, 1852, 1853, - 2145, 2145, 1853, 1854, 1856, 1858, 1876, 2145, 1877, 2145, - 1865, 1866, 1886, 1888, 1885, 1886, 1902, 1905, 1892, 1893, - 2145, 1909, 1910, 1899, 1915, 1918, 1902, 1918, 1921, 1918, - 1919, 1913, 1914, 2145, 2145, 1915, 1917, 534, 525, 1926, - 1930, 1927, 1929, 1930, 1946, 2145, 2145, 1937, 1939, 1948, - 1949, 1945, 1948, 524, 494, 1948, 1949, 1961, 1962, 1959, - 1965, 1956, 1962, 1968, 1959, 1974, 1975, 1971, 1972, 1974, - 1976, 2145, 2145, 445, 407, 1963, 1964, 1966, 1967, 1990, - 1992, 2145, 2145, 2145, 2145, 2145, 2145, 412, 411, 1989, - - 1990, 2014, 383, 2007, 2020, 359, 2011, 2145, 2145, 2020, - 2021, 2022, 2023, 2015, 2016, 2024, 2025, 2026, 2027, 2145, - 2145, 2145, 2145, 326, 316, 2015, 2145, 333, 2016, 2145, - 327, 2034, 2036, 2038, 2042, 2035, 2037, 323, 301, 299, - 266, 2036, 2052, 2054, 2145, 2056, 2145, 2049, 2050, 193, - 146, 2059, 2062, 2145, 2145, 2145, 2145, 2071, 2072, 170, - 153, 152, 151, 2060, 2061, 2071, 2072, 2057, 2058, 2145, - 2145, 2145, 2145, 2079, 2080, 2066, 2067, 2145, 2145, 2087, - 2088, 150, 149, 2087, 2089, 2145, 2145, 2145, 2145, 2145, - 2138, 119, 2141, 117, 116, 108 - + 0, 798, 802, 2094, 2094, 2094, 2094, 778, 760, 726, + 65, 72, 0, 55, 50, 57, 71, 55, 62, 72, + 74, 78, 75, 63, 733, 716, 701, 132, 195, 103, + 208, 251, 215, 235, 228, 230, 237, 245, 265, 281, + 286, 294, 296, 311, 313, 327, 343, 354, 361, 370, + 702, 2094, 418, 63, 305, 71, 78, 89, 78, 246, + 291, 362, 361, 91, 113, 189, 419, 398, 483, 526, + 490, 416, 467, 503, 508, 510, 515, 517, 543, 551, + 558, 570, 577, 579, 591, 622, 599, 624, 209, 224, + 254, 277, 274, 306, 210, 311, 321, 323, 342, 337, + + 346, 349, 353, 376, 571, 401, 407, 419, 412, 639, + 672, 715, 758, 646, 635, 687, 670, 693, 695, 748, + 739, 704, 750, 776, 702, 782, 791, 784, 416, 432, + 436, 567, 469, 519, 779, 793, 524, 531, 533, 544, + 642, 292, 629, 628, 372, 641, 685, 702, 401, 780, + 721, 843, 856, 827, 864, 877, 879, 884, 886, 891, + 893, 900, 906, 912, 914, 920, 936, 943, 955, 485, + 741, 769, 769, 788, 776, 800, 818, 887, 888, 904, + 925, 916, 929, 943, 626, 941, 936, 932, 934, 933, + 954, 940, 941, 959, 707, 951, 957, 969, 946, 714, + + 948, 968, 1020, 1033, 1076, 2094, 1054, 1052, 1059, 1068, + 1070, 1095, 1100, 1102, 1111, 1120, 987, 999, 980, 988, + 1001, 1006, 1014, 1028, 2094, 1043, 1057, 1067, 1087, 1078, + 1081, 1100, 1098, 1095, 1095, 1096, 1093, 1105, 1114, 1115, + 731, 1108, 1119, 1121, 1111, 1124, 1127, 1118, 1141, 1133, + 1144, 1137, 1150, 1152, 1156, 1157, 1139, 2094, 1207, 1180, + 1189, 1197, 1220, 1225, 1234, 1240, 1242, 1247, 1160, 1174, + 803, 889, 1172, 1186, 1210, 1208, 1209, 1221, 682, 657, + 1232, 601, 590, 1213, 1011, 1232, 1234, 1252, 1237, 1235, + 1236, 1230, 1231, 1267, 1241, 1243, 1269, 1243, 1244, 1240, + + 1257, 1259, 1266, 1268, 1264, 1281, 1283, 1272, 1303, 1346, + 1331, 1317, 1325, 1290, 1292, 1284, 1285, 1303, 1305, 1308, + 1305, 1308, 1313, 1316, 1328, 1333, 1328, 1335, 1339, 1334, + 0, 1344, 1346, 1349, 1351, 1354, 1355, 1341, 1363, 1364, + 1361, 1362, 1369, 2094, 1371, 1374, 1375, 1381, 1390, 1364, + 1366, 1402, 1371, 1396, 1387, 1400, 2094, 1391, 1393, 2094, + 1404, 1405, 1432, 1434, 1415, 1421, 1407, 1413, 1428, 1432, + 1434, 1421, 1424, 1426, 1439, 1440, 627, 1431, 1449, 578, + 1435, 1454, 1450, 1451, 1457, 1458, 1460, 1462, 1464, 1455, + 1457, 1465, 1466, 1484, 1485, 1472, 1473, 1486, 1488, 1490, + + 1493, 1480, 1481, 1499, 1500, 1507, 1492, 1508, 1495, 1509, + 1510, 1514, 1516, 1562, 1506, 1512, 1518, 1524, 1523, 1524, + 1535, 1533, 1536, 1540, 615, 575, 1529, 1549, 1535, 1533, + 1552, 1538, 611, 567, 1546, 1548, 1539, 1540, 1582, 1550, + 1552, 1569, 1570, 1568, 1569, 1559, 1565, 1584, 1579, 1591, + 1581, 1577, 1578, 1598, 1602, 1594, 1604, 1609, 1599, 1608, + 1614, 2094, 2094, 1591, 1592, 566, 564, 1598, 1599, 1604, + 1606, 1622, 1623, 1618, 1619, 1619, 1620, 1624, 1640, 1641, + 1643, 1648, 1644, 1646, 1635, 1639, 1639, 1641, 587, 584, + 1646, 1647, 1646, 1649, 1655, 1656, 1660, 1661, 1659, 1661, + + 1660, 1679, 1663, 1682, 2094, 2094, 1669, 1671, 1685, 1683, + 1676, 1693, 1691, 1679, 2094, 2094, 1697, 1699, 1696, 1699, + 1711, 1713, 1710, 1711, 1718, 1719, 1711, 1708, 1709, 1713, + 1730, 1718, 1717, 1734, 1722, 1737, 1739, 1728, 1729, 2094, + 2094, 1750, 1751, 583, 572, 1736, 1737, 1738, 1740, 558, + 550, 553, 550, 499, 486, 2094, 2094, 1743, 1763, 2094, + 1748, 1767, 2094, 1758, 1759, 1774, 1775, 1760, 1761, 1769, + 1775, 1774, 1775, 509, 1786, 1788, 1789, 1776, 1785, 1797, + 1783, 1796, 1794, 1795, 508, 502, 1796, 1797, 2094, 2094, + 1795, 1799, 1804, 1806, 2094, 2094, 1807, 1808, 1809, 1812, + + 1827, 2094, 1828, 2094, 1815, 1816, 1826, 1828, 1824, 1825, + 1842, 1843, 1829, 1831, 2094, 1850, 1851, 1845, 1861, 1864, + 1848, 1864, 1868, 1861, 1864, 2094, 2094, 1866, 1868, 491, + 471, 1876, 1877, 1876, 1877, 1878, 1879, 2094, 2094, 1869, + 1875, 1885, 1886, 1880, 1882, 446, 442, 1882, 1884, 1897, + 1901, 1898, 1909, 1900, 1906, 1912, 1903, 1914, 1918, 1921, + 1923, 2094, 2094, 441, 381, 1908, 1909, 1910, 1913, 1921, + 1922, 2094, 2094, 2094, 2094, 2094, 2094, 386, 378, 1918, + 1919, 1948, 365, 1940, 1951, 349, 1942, 1952, 1953, 1955, + 1957, 1952, 1953, 1966, 1967, 1968, 1969, 2094, 2094, 2094, + + 2094, 300, 284, 1957, 2094, 306, 1959, 2094, 290, 1980, + 1983, 1985, 1987, 1980, 1981, 287, 274, 253, 252, 1982, + 1983, 1984, 2094, 1985, 2094, 1978, 1984, 240, 200, 1992, + 1993, 2094, 2094, 2094, 2094, 2002, 2004, 215, 196, 132, + 120, 1992, 1994, 2005, 2009, 1994, 2000, 2094, 2094, 2094, + 2094, 2021, 2022, 2008, 2009, 2094, 2094, 2030, 2034, 119, + 116, 2034, 2036, 2094, 2094, 2094, 2094, 2094, 2087, 126, + 2090, 113 } ; -static yyconst flex_int16_t yy_def[797] = +static yyconst flex_int16_t yy_def[773] = { 0, - 790, 1, 790, 790, 790, 790, 790, 791, 790, 792, - 792, 792, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 793, 791, 791, 790, 794, 792, 12, 794, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 793, 790, - 26, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 795, 796, 795, 792, 790, - 796, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 796, 795, 796, 796, 796, 792, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 51, 51, 51, 51, 51, 51, 790, 790, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 796, 796, 12, 12, 12, 12, - 12, 790, 12, 12, 12, 12, 12, 12, 12, 12, - 51, 51, 51, 51, 51, 51, 51, 790, 790, 790, - 790, 790, 790, 51, 51, 51, 51, 51, 51, 790, - 790, 51, 51, 790, 790, 51, 51, 51, 790, 790, - - 790, 51, 790, 51, 796, 796, 12, 790, 790, 790, - 12, 12, 12, 12, 12, 12, 790, 790, 51, 51, - 51, 51, 51, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 51, 51, 51, 790, 790, 51, 51, 790, - 790, 51, 51, 790, 790, 51, 790, 790, 51, 790, - 790, 790, 790, 790, 790, 790, 790, 51, 796, 796, - 12, 790, 790, 790, 790, 12, 12, 12, 790, 790, - 51, 51, 51, 51, 51, 790, 790, 790, 790, 790, - 790, 790, 790, 51, 51, 51, 790, 790, 51, 51, - 790, 790, 790, 790, 51, 790, 790, 51, 790, 790, - - 51, 790, 790, 790, 790, 790, 790, 790, 790, 51, - 796, 790, 12, 790, 790, 790, 790, 790, 790, 790, - 790, 51, 51, 51, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 51, 790, 790, 790, 790, 790, - 790, 51, 790, 790, 790, 790, 790, 790, 51, 790, - 790, 790, 790, 790, 790, 790, 51, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 796, 12, 790, - 790, 790, 790, 790, 790, 51, 790, 790, 51, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 51, 790, 790, 790, 790, - - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 12, 790, 790, 790, 790, 790, 790, 51, 790, - 790, 51, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 51, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 51, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 51, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 51, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 0, - 790, 790, 790, 790, 790, 790 - + 768, 1, 768, 768, 768, 768, 768, 769, 768, 768, + 770, 768, 770, 770, 770, 770, 770, 770, 770, 770, + 770, 770, 770, 770, 771, 769, 769, 768, 768, 772, + 772, 772, 768, 772, 772, 772, 772, 772, 772, 772, + 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, + 771, 768, 28, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 768, 772, 772, 772, + 768, 772, 772, 772, 772, 772, 772, 772, 772, 772, + 772, 772, 772, 772, 772, 772, 772, 772, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, + + 53, 53, 53, 53, 53, 53, 53, 53, 53, 768, + 772, 772, 772, 768, 772, 772, 772, 772, 772, 772, + 772, 772, 772, 772, 772, 772, 772, 772, 53, 53, + 53, 53, 53, 53, 768, 768, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 768, 772, 772, 768, 772, 772, 772, 772, 772, + 772, 772, 772, 772, 772, 772, 772, 772, 772, 53, + 53, 53, 53, 53, 53, 53, 768, 768, 768, 768, + 768, 768, 53, 53, 53, 53, 53, 768, 768, 53, + 53, 768, 768, 53, 53, 53, 768, 768, 768, 53, + + 768, 53, 768, 772, 772, 768, 772, 772, 772, 772, + 772, 772, 772, 772, 772, 772, 768, 768, 53, 53, + 53, 53, 53, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 53, 53, 768, 768, 53, 53, 768, 768, + 53, 53, 768, 768, 53, 768, 768, 53, 768, 768, + 768, 768, 768, 768, 768, 768, 53, 768, 772, 772, + 772, 772, 772, 772, 772, 772, 772, 772, 768, 768, + 53, 53, 53, 53, 53, 768, 768, 768, 768, 768, + 768, 768, 768, 53, 53, 768, 768, 53, 53, 768, + 768, 768, 768, 53, 768, 768, 53, 768, 768, 53, + + 768, 768, 768, 768, 768, 768, 768, 768, 53, 772, + 772, 772, 772, 768, 768, 768, 768, 768, 768, 53, + 53, 53, 768, 768, 768, 768, 768, 768, 768, 768, + 53, 768, 768, 768, 768, 768, 768, 53, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 53, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 772, 772, 768, 768, 768, 768, 768, 768, + 53, 768, 768, 53, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 53, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 772, 768, 768, 768, 768, 768, 768, + 53, 768, 768, 53, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 53, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 53, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 53, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 53, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 0, 768, 768, + 768, 768 } ; -static yyconst flex_int16_t yy_nxt[2217] = +static yyconst flex_int16_t yy_nxt[2168] = { 0, 4, 5, 6, 7, 8, 4, 7, 9, 4, 10, - 10, 10, 10, 10, 10, 10, 4, 7, 11, 11, - 12, 13, 14, 15, 11, 16, 17, 18, 11, 11, - 19, 11, 11, 11, 11, 20, 21, 22, 11, 11, - 11, 11, 11, 11, 4, 11, 11, 12, 13, 14, - 15, 11, 16, 17, 18, 11, 11, 19, 11, 11, - 11, 11, 20, 21, 22, 11, 11, 11, 11, 11, - 11, 27, 28, 28, 28, 28, 28, 28, 28, 30, - 31, 31, 31, 31, 31, 31, 31, 30, 31, 31, - 31, 31, 31, 31, 31, 34, 35, 29, 29, 37, - - 36, 29, 39, 40, 29, 29, 209, 29, 29, 210, - 115, 32, 38, 29, 33, 89, 29, 262, 112, 68, - 263, 29, 34, 35, 29, 29, 37, 36, 29, 39, - 40, 29, 29, 42, 29, 29, 41, 70, 32, 38, - 29, 33, 89, 29, 43, 47, 29, 29, 45, 29, - 44, 29, 46, 29, 48, 29, 29, 92, 29, 93, - 42, 29, 29, 41, 29, 29, 787, 786, 773, 772, - 771, 43, 47, 29, 29, 45, 29, 44, 29, 46, - 29, 48, 29, 29, 92, 29, 93, 770, 29, 29, - 765, 29, 29, 51, 51, 51, 51, 51, 51, 51, - - 764, 94, 52, 53, 54, 55, 51, 51, 51, 56, - 57, 51, 58, 51, 51, 59, 51, 60, 51, 61, - 62, 63, 64, 65, 51, 51, 51, 51, 94, 52, - 53, 54, 55, 51, 51, 51, 56, 57, 51, 58, - 51, 51, 59, 51, 60, 51, 61, 62, 63, 64, - 65, 51, 51, 51, 51, 66, 67, 67, 67, 67, - 67, 67, 67, 27, 69, 69, 69, 69, 69, 69, - 69, 66, 71, 71, 71, 71, 71, 71, 71, 70, - 70, 70, 95, 757, 73, 70, 75, 70, 74, 70, - 96, 70, 108, 109, 72, 29, 29, 29, 29, 29, - - 29, 29, 77, 29, 29, 29, 76, 29, 29, 95, - 29, 73, 110, 75, 78, 74, 756, 96, 755, 108, - 109, 72, 29, 29, 29, 29, 29, 29, 29, 77, - 29, 29, 29, 76, 29, 29, 70, 29, 70, 110, - 754, 78, 80, 70, 747, 82, 79, 70, 70, 70, - 745, 131, 29, 83, 29, 29, 70, 29, 81, 29, - 743, 132, 29, 29, 29, 29, 29, 29, 84, 80, - 742, 85, 29, 79, 133, 29, 730, 97, 131, 29, - 83, 29, 29, 98, 29, 81, 29, 70, 132, 29, - 29, 29, 29, 29, 29, 84, 70, 70, 85, 29, - - 727, 133, 29, 29, 97, 90, 29, 86, 99, 134, - 98, 100, 29, 29, 135, 87, 29, 91, 136, 88, - 66, 111, 111, 111, 111, 111, 111, 111, 723, 722, - 29, 139, 90, 29, 86, 99, 134, 70, 100, 29, - 29, 135, 87, 29, 91, 136, 88, 51, 51, 51, - 51, 715, 714, 29, 51, 51, 29, 51, 139, 101, - 51, 102, 51, 103, 51, 51, 51, 51, 51, 104, - 137, 190, 194, 199, 51, 51, 51, 51, 105, 106, - 29, 51, 51, 29, 51, 107, 101, 51, 102, 51, - 103, 51, 51, 51, 51, 51, 104, 113, 114, 114, - - 114, 114, 114, 114, 114, 105, 106, 138, 191, 195, - 200, 697, 107, 66, 111, 111, 111, 111, 111, 111, - 111, 70, 27, 116, 116, 116, 116, 116, 116, 116, - 71, 71, 71, 71, 71, 71, 71, 71, 70, 140, - 70, 696, 683, 29, 70, 70, 29, 141, 142, 70, - 143, 682, 144, 145, 29, 146, 29, 29, 117, 29, - 29, 119, 118, 29, 29, 29, 140, 645, 29, 120, - 29, 217, 121, 29, 141, 142, 644, 143, 70, 144, - 145, 29, 146, 29, 29, 117, 29, 29, 119, 118, - 29, 29, 29, 70, 29, 29, 120, 29, 70, 122, - - 147, 148, 631, 70, 70, 616, 151, 152, 218, 29, - 153, 123, 29, 70, 29, 124, 154, 29, 126, 29, - 29, 29, 29, 29, 29, 615, 122, 147, 148, 29, - 614, 613, 29, 151, 152, 125, 29, 153, 123, 29, - 612, 29, 124, 154, 29, 126, 29, 29, 70, 29, - 29, 611, 70, 127, 70, 171, 29, 149, 128, 29, - 70, 161, 125, 172, 29, 173, 130, 29, 29, 176, - 29, 29, 150, 29, 177, 29, 29, 129, 29, 29, - 127, 606, 171, 605, 149, 128, 555, 162, 161, 554, - 172, 29, 173, 130, 29, 29, 176, 29, 29, 150, - - 29, 177, 29, 29, 129, 29, 29, 71, 71, 71, - 71, 71, 71, 71, 71, 66, 111, 111, 111, 111, - 111, 111, 111, 70, 71, 155, 155, 155, 155, 155, - 155, 155, 113, 156, 156, 156, 156, 156, 156, 156, - 71, 71, 71, 71, 71, 71, 71, 71, 70, 30, - 116, 116, 116, 116, 116, 116, 116, 70, 70, 70, - 236, 184, 530, 70, 174, 529, 158, 157, 185, 160, - 70, 70, 175, 29, 29, 29, 29, 29, 159, 29, - 163, 498, 29, 497, 186, 247, 29, 29, 184, 29, - 29, 174, 164, 158, 157, 185, 160, 237, 187, 175, - - 29, 29, 29, 29, 29, 159, 29, 163, 70, 29, - 70, 186, 70, 29, 29, 488, 29, 29, 165, 164, - 70, 70, 248, 166, 29, 187, 29, 29, 29, 29, - 70, 29, 487, 438, 167, 188, 168, 29, 189, 29, - 29, 70, 169, 435, 402, 165, 29, 170, 192, 29, - 166, 29, 193, 29, 29, 29, 29, 29, 29, 178, - 29, 167, 188, 168, 29, 189, 29, 29, 179, 169, - 180, 181, 196, 29, 170, 192, 29, 197, 198, 193, - 182, 204, 183, 201, 29, 332, 178, 29, 331, 329, - 328, 315, 314, 265, 264, 179, 50, 180, 181, 196, - - 25, 25, 50, 219, 197, 198, 220, 182, 204, 183, - 26, 202, 205, 206, 206, 206, 206, 206, 206, 206, - 203, 113, 71, 71, 71, 71, 71, 71, 71, 70, - 219, 70, 221, 220, 222, 70, 70, 70, 202, 223, - 227, 70, 228, 229, 230, 29, 25, 29, 29, 207, - 29, 29, 29, 29, 29, 29, 29, 29, 790, 221, - 29, 222, 23, 255, 790, 208, 223, 227, 790, 228, - 229, 230, 29, 70, 29, 29, 207, 29, 29, 29, - 29, 29, 29, 29, 29, 70, 70, 29, 212, 29, - 211, 70, 29, 213, 231, 70, 232, 790, 790, 233, - - 256, 29, 29, 224, 29, 214, 70, 29, 70, 215, - 29, 29, 234, 225, 29, 212, 29, 211, 235, 29, - 213, 231, 29, 232, 29, 29, 233, 216, 29, 29, - 238, 29, 214, 239, 29, 240, 215, 29, 29, 234, - 226, 29, 241, 242, 243, 235, 244, 245, 246, 29, - 249, 29, 29, 250, 216, 252, 251, 238, 253, 254, - 239, 257, 240, 258, 790, 790, 790, 790, 70, 241, - 242, 243, 293, 244, 245, 246, 790, 249, 790, 790, - 250, 318, 252, 251, 29, 253, 254, 29, 257, 261, - 258, 71, 259, 259, 259, 259, 259, 259, 259, 205, - - 260, 260, 260, 260, 260, 260, 260, 70, 70, 294, - 269, 29, 270, 266, 29, 70, 261, 70, 319, 70, - 271, 272, 273, 29, 29, 70, 29, 29, 267, 274, - 275, 29, 276, 29, 29, 29, 29, 269, 29, 270, - 266, 29, 277, 278, 29, 268, 279, 271, 272, 273, - 29, 29, 280, 29, 29, 267, 274, 275, 29, 276, - 29, 29, 29, 29, 281, 29, 282, 283, 29, 277, - 278, 29, 268, 279, 284, 285, 286, 287, 288, 280, - 289, 290, 291, 292, 295, 296, 297, 298, 299, 300, - 301, 281, 302, 282, 283, 303, 304, 305, 306, 307, - - 308, 284, 285, 286, 287, 288, 309, 289, 290, 291, - 292, 295, 296, 297, 298, 299, 300, 301, 310, 302, - 790, 790, 303, 304, 305, 306, 307, 308, 320, 790, - 316, 317, 790, 309, 71, 311, 311, 311, 311, 311, - 311, 311, 312, 70, 333, 310, 205, 71, 71, 71, - 71, 71, 71, 71, 70, 70, 70, 316, 317, 29, - 313, 322, 29, 323, 324, 321, 325, 326, 327, 330, - 29, 29, 29, 29, 29, 29, 335, 336, 338, 339, - 340, 334, 342, 343, 344, 345, 29, 313, 322, 29, - 323, 324, 346, 325, 326, 327, 330, 29, 29, 29, - - 29, 29, 29, 335, 351, 338, 339, 352, 347, 342, - 343, 344, 345, 353, 337, 355, 356, 341, 348, 346, - 357, 358, 359, 366, 360, 361, 362, 363, 364, 365, - 370, 351, 790, 790, 352, 371, 372, 349, 790, 790, - 790, 790, 355, 356, 377, 350, 790, 357, 358, 359, - 354, 360, 361, 362, 363, 364, 365, 370, 373, 70, - 367, 374, 371, 372, 349, 71, 368, 368, 368, 368, - 368, 368, 368, 312, 369, 29, 375, 376, 29, 379, - 380, 378, 381, 382, 383, 373, 384, 385, 374, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - - 397, 369, 29, 375, 376, 29, 379, 380, 398, 381, - 382, 383, 399, 384, 385, 400, 386, 387, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 401, 403, - 404, 405, 406, 407, 410, 398, 408, 409, 411, 399, - 412, 414, 400, 415, 416, 417, 418, 419, 420, 421, - 790, 790, 790, 790, 790, 401, 403, 404, 405, 406, - 407, 410, 423, 408, 409, 411, 424, 425, 414, 426, - 415, 416, 417, 418, 419, 420, 421, 413, 71, 71, - 71, 71, 71, 71, 71, 71, 312, 70, 427, 423, - 428, 429, 430, 424, 425, 431, 426, 432, 433, 434, - - 436, 437, 439, 29, 440, 441, 29, 442, 422, 443, - 444, 445, 446, 447, 448, 427, 449, 428, 429, 430, - 450, 451, 431, 452, 432, 433, 434, 436, 437, 439, - 29, 440, 441, 29, 442, 422, 443, 444, 445, 446, - 447, 448, 453, 449, 454, 455, 456, 450, 451, 457, - 452, 458, 459, 460, 461, 462, 463, 464, 465, 466, - 468, 471, 469, 472, 473, 474, 475, 467, 482, 453, - 470, 454, 455, 456, 476, 477, 457, 478, 458, 459, - 460, 461, 462, 463, 464, 465, 466, 468, 471, 469, - 472, 473, 474, 475, 467, 70, 479, 470, 480, 481, - - 484, 476, 477, 485, 478, 483, 486, 489, 490, 491, - 492, 29, 493, 494, 29, 495, 496, 499, 500, 501, - 502, 503, 505, 479, 506, 480, 481, 484, 507, 508, - 485, 790, 509, 486, 489, 490, 491, 492, 29, 493, - 494, 29, 495, 496, 499, 500, 501, 502, 510, 505, - 511, 506, 512, 513, 514, 507, 508, 515, 504, 509, - 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, - 526, 527, 528, 531, 532, 510, 533, 511, 534, 512, - 513, 514, 535, 536, 515, 537, 538, 516, 517, 518, - 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, - - 531, 532, 539, 533, 540, 534, 541, 542, 543, 535, - 536, 544, 537, 538, 545, 546, 547, 548, 549, 550, - 551, 552, 553, 556, 557, 558, 559, 560, 561, 539, - 562, 540, 563, 541, 542, 543, 564, 565, 544, 566, - 567, 545, 546, 547, 548, 549, 550, 551, 552, 553, - 556, 557, 558, 559, 560, 561, 568, 562, 569, 563, - 570, 571, 572, 564, 565, 573, 566, 567, 574, 575, - 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, - 586, 587, 588, 568, 589, 569, 590, 570, 571, 572, - 591, 592, 573, 593, 594, 574, 575, 576, 577, 578, - - 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, - 595, 589, 596, 590, 597, 598, 599, 591, 592, 600, - 593, 594, 601, 602, 603, 604, 607, 608, 609, 610, - 617, 618, 619, 620, 621, 622, 623, 595, 624, 596, - 625, 597, 598, 599, 626, 627, 600, 628, 629, 601, - 602, 603, 604, 607, 608, 609, 610, 617, 618, 619, - 620, 621, 622, 623, 630, 624, 632, 625, 633, 634, - 635, 626, 627, 636, 628, 629, 637, 638, 639, 640, - 641, 642, 643, 646, 647, 648, 649, 650, 651, 652, - 653, 630, 654, 632, 655, 633, 634, 635, 656, 657, - - 636, 658, 659, 637, 638, 639, 640, 641, 642, 643, - 646, 647, 648, 649, 650, 651, 652, 653, 660, 654, - 661, 655, 662, 663, 664, 656, 657, 665, 658, 659, - 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, - 676, 677, 678, 679, 680, 660, 681, 661, 684, 662, - 663, 664, 685, 686, 665, 687, 688, 666, 667, 668, - 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, - 679, 680, 689, 681, 690, 684, 691, 692, 693, 685, - 686, 694, 687, 688, 695, 698, 699, 700, 701, 702, - 703, 704, 705, 706, 707, 708, 709, 710, 711, 689, - - 712, 690, 713, 691, 692, 693, 716, 717, 694, 718, - 719, 695, 698, 699, 700, 701, 702, 703, 704, 705, - 706, 707, 708, 709, 710, 711, 720, 712, 721, 713, - 724, 725, 726, 716, 717, 728, 718, 719, 729, 731, - 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, - 744, 746, 748, 720, 749, 721, 750, 724, 725, 726, - 751, 752, 728, 753, 758, 729, 731, 732, 733, 734, - 735, 736, 737, 738, 739, 740, 741, 744, 746, 748, - 759, 749, 760, 750, 761, 762, 763, 751, 752, 766, - 753, 758, 767, 768, 769, 774, 775, 776, 777, 778, - - 779, 780, 781, 782, 783, 784, 785, 759, 788, 760, - 789, 761, 762, 763, 790, 790, 766, 790, 790, 767, - 768, 769, 774, 775, 776, 777, 778, 779, 780, 781, - 782, 783, 784, 785, 790, 788, 790, 789, 24, 790, - 24, 49, 49, 49, 3, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790 + 11, 11, 11, 11, 11, 11, 11, 12, 7, 4, + 13, 13, 14, 15, 16, 17, 13, 18, 19, 20, + 13, 13, 21, 13, 13, 13, 13, 22, 23, 24, + 13, 13, 13, 13, 13, 13, 4, 13, 13, 14, + 15, 16, 17, 13, 18, 19, 20, 13, 13, 21, + 13, 13, 13, 13, 22, 23, 24, 13, 13, 13, + 13, 13, 13, 31, 36, 32, 32, 32, 32, 32, + 32, 32, 33, 33, 33, 33, 33, 33, 33, 34, + 37, 39, 35, 41, 38, 42, 43, 44, 47, 49, + + 50, 36, 48, 89, 40, 92, 93, 30, 45, 94, + 30, 30, 95, 107, 46, 68, 34, 37, 39, 35, + 41, 38, 42, 43, 44, 47, 49, 50, 30, 48, + 89, 40, 92, 93, 765, 45, 94, 764, 751, 95, + 107, 46, 53, 53, 53, 53, 53, 53, 53, 30, + 750, 108, 54, 55, 56, 57, 53, 53, 53, 58, + 59, 53, 53, 53, 53, 60, 53, 61, 53, 62, + 63, 64, 65, 66, 53, 53, 53, 53, 108, 54, + 55, 56, 57, 53, 53, 53, 58, 59, 53, 53, + 53, 53, 60, 53, 61, 53, 62, 63, 64, 65, + + 66, 53, 53, 53, 53, 67, 67, 67, 67, 67, + 67, 67, 30, 109, 749, 30, 30, 135, 69, 69, + 69, 69, 69, 69, 69, 71, 71, 71, 71, 71, + 71, 71, 30, 748, 30, 30, 30, 30, 30, 30, + 109, 30, 30, 30, 30, 30, 743, 742, 129, 30, + 73, 74, 30, 30, 30, 30, 136, 130, 30, 31, + 75, 70, 70, 70, 70, 70, 70, 70, 72, 30, + 735, 734, 30, 30, 30, 129, 30, 73, 74, 131, + 96, 30, 76, 30, 130, 30, 97, 75, 30, 30, + 30, 30, 733, 30, 30, 72, 77, 30, 30, 188, + + 30, 30, 30, 30, 30, 732, 131, 96, 725, 76, + 132, 30, 133, 97, 79, 30, 80, 30, 30, 30, + 30, 30, 78, 77, 723, 98, 82, 30, 99, 81, + 721, 30, 30, 90, 30, 30, 83, 132, 189, 133, + 30, 79, 30, 80, 134, 91, 720, 30, 137, 78, + 30, 30, 98, 138, 139, 99, 81, 30, 30, 30, + 90, 30, 30, 83, 84, 30, 140, 708, 30, 30, + 141, 134, 91, 30, 30, 137, 85, 30, 30, 192, + 138, 139, 100, 705, 101, 103, 102, 142, 143, 30, + 144, 84, 86, 140, 104, 105, 701, 141, 87, 145, + + 30, 106, 30, 85, 700, 30, 30, 30, 197, 100, + 88, 101, 103, 102, 142, 143, 30, 144, 193, 86, + 30, 104, 105, 30, 30, 87, 145, 693, 106, 110, + 110, 110, 110, 110, 110, 110, 148, 88, 53, 53, + 53, 53, 149, 150, 30, 53, 53, 198, 692, 151, + 170, 53, 171, 53, 115, 53, 53, 53, 53, 53, + 677, 172, 30, 148, 676, 53, 53, 53, 53, 149, + 150, 30, 53, 53, 30, 30, 151, 170, 53, 171, + 53, 115, 53, 53, 53, 53, 53, 30, 172, 663, + 30, 111, 217, 112, 112, 112, 112, 112, 112, 112, + + 114, 114, 114, 114, 114, 114, 114, 30, 175, 662, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 627, 30, 30, 30, 30, 30, 626, 615, 119, 30, + 30, 218, 600, 30, 31, 175, 113, 113, 113, 113, + 113, 113, 113, 116, 117, 599, 176, 30, 183, 30, + 30, 30, 184, 118, 30, 30, 30, 598, 30, 30, + 597, 30, 30, 30, 185, 30, 30, 120, 596, 186, + 116, 117, 30, 176, 30, 183, 595, 30, 30, 184, + 118, 30, 121, 30, 30, 30, 30, 30, 122, 30, + 590, 185, 173, 146, 120, 30, 186, 30, 30, 30, + + 174, 589, 541, 30, 30, 540, 30, 30, 147, 121, + 518, 124, 517, 486, 125, 122, 30, 123, 485, 173, + 146, 478, 477, 30, 430, 30, 30, 174, 30, 30, + 30, 30, 30, 235, 427, 147, 330, 30, 124, 30, + 127, 125, 30, 30, 123, 30, 126, 329, 128, 152, + 152, 152, 152, 152, 152, 152, 155, 155, 155, 155, + 155, 155, 155, 156, 327, 187, 190, 127, 30, 191, + 30, 194, 236, 126, 30, 128, 30, 30, 30, 30, + 30, 30, 153, 153, 153, 153, 153, 153, 153, 326, + 156, 30, 187, 190, 30, 30, 191, 30, 194, 30, + + 30, 30, 30, 30, 52, 27, 30, 158, 30, 30, + 30, 30, 30, 157, 246, 160, 30, 159, 30, 30, + 27, 254, 30, 111, 195, 154, 154, 154, 154, 154, + 154, 154, 164, 30, 158, 52, 167, 196, 292, 30, + 157, 161, 160, 30, 159, 29, 30, 30, 30, 202, + 30, 195, 30, 247, 30, 30, 30, 30, 30, 164, + 255, 30, 30, 167, 196, 30, 30, 28, 113, 113, + 113, 113, 113, 113, 113, 162, 202, 293, 219, 163, + 30, 165, 27, 30, 30, 30, 30, 199, 30, 30, + 30, 30, 30, 220, 30, 30, 30, 221, 30, 30, + + 177, 768, 162, 25, 30, 219, 163, 224, 165, 178, + 316, 179, 222, 223, 180, 169, 166, 200, 225, 768, + 220, 168, 30, 181, 221, 182, 201, 177, 30, 768, + 30, 30, 768, 768, 30, 111, 178, 30, 179, 222, + 223, 180, 169, 166, 200, 768, 226, 768, 168, 317, + 181, 768, 182, 203, 203, 203, 203, 203, 203, 203, + 30, 768, 227, 30, 204, 768, 205, 205, 205, 205, + 205, 205, 205, 30, 206, 206, 206, 206, 206, 206, + 206, 30, 768, 30, 30, 30, 30, 30, 30, 227, + 30, 30, 30, 30, 30, 30, 318, 30, 30, 30, + + 30, 30, 30, 768, 30, 768, 209, 30, 30, 210, + 30, 228, 768, 30, 30, 207, 30, 768, 30, 30, + 30, 30, 30, 30, 30, 30, 229, 30, 30, 211, + 30, 768, 30, 768, 213, 319, 768, 208, 228, 30, + 30, 768, 207, 30, 30, 212, 30, 30, 230, 231, + 30, 30, 30, 229, 232, 768, 211, 214, 30, 30, + 30, 213, 30, 30, 233, 768, 30, 234, 215, 237, + 238, 239, 212, 240, 768, 230, 231, 241, 242, 243, + 244, 232, 30, 245, 214, 248, 253, 249, 256, 30, + 250, 233, 216, 257, 234, 215, 237, 238, 239, 251, + + 240, 30, 252, 768, 241, 242, 243, 244, 768, 768, + 245, 269, 248, 253, 249, 256, 768, 250, 332, 216, + 257, 768, 768, 270, 271, 272, 251, 273, 274, 252, + 258, 258, 258, 258, 258, 258, 258, 30, 269, 768, + 30, 30, 275, 259, 259, 259, 259, 259, 259, 259, + 270, 271, 272, 768, 273, 274, 30, 333, 30, 30, + 30, 30, 30, 30, 768, 262, 30, 30, 263, 275, + 276, 264, 30, 768, 30, 30, 30, 30, 30, 30, + 30, 768, 265, 30, 204, 277, 260, 260, 260, 260, + 260, 260, 260, 261, 266, 768, 278, 276, 30, 30, + + 30, 768, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 279, 277, 280, 30, 30, 30, 281, 30, 30, + 261, 266, 30, 278, 30, 282, 283, 30, 30, 284, + 768, 768, 285, 267, 286, 287, 288, 289, 279, 768, + 280, 30, 290, 291, 281, 294, 30, 295, 30, 296, + 297, 298, 282, 283, 299, 300, 284, 30, 268, 285, + 267, 286, 287, 288, 289, 301, 30, 302, 303, 290, + 291, 304, 294, 305, 295, 306, 296, 297, 298, 307, + 308, 299, 300, 309, 30, 268, 768, 30, 204, 314, + 768, 768, 301, 30, 302, 303, 30, 30, 304, 768, + + 305, 30, 306, 315, 30, 30, 307, 308, 768, 312, + 309, 30, 320, 311, 30, 30, 314, 310, 310, 310, + 310, 310, 310, 310, 30, 321, 30, 30, 30, 30, + 315, 322, 30, 30, 313, 30, 323, 324, 30, 320, + 311, 30, 30, 30, 30, 325, 30, 30, 30, 30, + 30, 30, 321, 30, 30, 30, 328, 331, 322, 336, + 334, 768, 335, 323, 324, 338, 30, 339, 340, 341, + 342, 30, 325, 346, 343, 347, 348, 350, 351, 352, + 30, 353, 354, 328, 331, 344, 30, 334, 30, 335, + 355, 356, 338, 30, 339, 340, 341, 342, 337, 357, + + 346, 358, 347, 359, 350, 351, 352, 360, 353, 354, + 361, 768, 372, 345, 365, 349, 366, 355, 356, 367, + 368, 30, 768, 768, 30, 30, 357, 768, 358, 30, + 359, 768, 30, 30, 360, 30, 768, 768, 30, 30, + 369, 365, 370, 366, 768, 371, 367, 368, 374, 362, + 30, 373, 375, 30, 30, 376, 363, 363, 363, 363, + 363, 363, 363, 30, 364, 768, 377, 369, 378, 370, + 379, 30, 371, 380, 381, 374, 382, 30, 383, 375, + 384, 385, 376, 386, 387, 388, 389, 390, 391, 392, + 393, 364, 30, 377, 394, 378, 395, 379, 396, 397, + + 380, 381, 402, 382, 403, 383, 406, 384, 385, 404, + 386, 387, 388, 389, 390, 391, 392, 393, 398, 399, + 407, 394, 408, 395, 409, 396, 397, 400, 401, 402, + 410, 403, 411, 406, 412, 413, 30, 415, 30, 30, + 30, 30, 30, 416, 417, 398, 399, 407, 405, 408, + 418, 409, 419, 768, 400, 401, 420, 410, 421, 411, + 422, 412, 413, 423, 415, 424, 425, 426, 428, 429, + 416, 417, 431, 414, 432, 433, 434, 418, 30, 419, + 30, 435, 436, 420, 437, 421, 438, 422, 439, 440, + 423, 441, 424, 425, 426, 428, 429, 442, 443, 431, + + 414, 432, 433, 434, 444, 445, 446, 447, 435, 436, + 448, 437, 449, 438, 450, 439, 440, 451, 441, 452, + 453, 454, 455, 458, 442, 443, 461, 456, 459, 462, + 463, 444, 445, 446, 447, 457, 460, 448, 464, 449, + 465, 450, 472, 768, 451, 466, 452, 453, 454, 455, + 458, 467, 468, 461, 456, 459, 462, 463, 469, 470, + 471, 474, 457, 460, 475, 464, 30, 465, 476, 30, + 30, 479, 466, 480, 481, 482, 483, 484, 467, 468, + 487, 473, 488, 489, 490, 469, 470, 471, 474, 491, + 493, 475, 494, 495, 496, 476, 497, 498, 479, 499, + + 480, 481, 482, 483, 484, 500, 501, 487, 30, 488, + 489, 490, 502, 503, 504, 505, 506, 493, 507, 494, + 495, 496, 508, 497, 498, 509, 499, 510, 492, 511, + 512, 513, 500, 501, 514, 515, 516, 519, 520, 502, + 503, 504, 505, 506, 521, 507, 522, 523, 524, 508, + 525, 526, 509, 527, 510, 528, 511, 512, 513, 529, + 530, 514, 515, 516, 519, 520, 531, 532, 533, 534, + 535, 521, 536, 522, 523, 524, 537, 525, 526, 538, + 527, 539, 528, 542, 543, 544, 529, 530, 545, 546, + 547, 548, 549, 531, 532, 533, 534, 535, 550, 536, + + 551, 552, 553, 537, 554, 555, 538, 556, 539, 557, + 542, 543, 544, 558, 559, 545, 546, 547, 548, 549, + 560, 561, 562, 563, 564, 550, 565, 551, 552, 553, + 566, 554, 555, 567, 556, 568, 557, 569, 570, 571, + 558, 559, 572, 573, 574, 575, 576, 560, 561, 562, + 563, 564, 577, 565, 578, 579, 580, 566, 581, 582, + 567, 583, 568, 584, 569, 570, 571, 585, 586, 572, + 573, 574, 575, 576, 587, 588, 591, 592, 593, 577, + 594, 578, 579, 580, 601, 581, 582, 602, 583, 603, + 584, 604, 605, 606, 585, 586, 607, 608, 609, 610, + + 611, 587, 588, 591, 592, 593, 612, 594, 613, 614, + 616, 601, 617, 618, 602, 619, 603, 620, 604, 605, + 606, 621, 622, 607, 608, 609, 610, 611, 623, 624, + 625, 628, 629, 612, 630, 613, 614, 616, 631, 617, + 618, 632, 619, 633, 620, 634, 635, 636, 621, 622, + 637, 638, 639, 640, 641, 623, 624, 625, 628, 629, + 642, 630, 643, 644, 645, 631, 646, 647, 632, 648, + 633, 649, 634, 635, 636, 650, 651, 637, 638, 639, + 640, 641, 652, 653, 654, 655, 656, 642, 657, 643, + 644, 645, 658, 646, 647, 659, 648, 660, 649, 661, + + 664, 665, 650, 651, 666, 667, 668, 669, 670, 652, + 653, 654, 655, 656, 671, 657, 672, 673, 674, 658, + 675, 678, 659, 679, 660, 680, 661, 664, 665, 681, + 682, 666, 667, 668, 669, 670, 683, 684, 685, 686, + 687, 671, 688, 672, 673, 674, 689, 675, 678, 690, + 679, 691, 680, 694, 695, 696, 681, 682, 697, 698, + 699, 702, 703, 683, 684, 685, 686, 687, 704, 688, + 706, 707, 709, 689, 710, 711, 690, 712, 691, 713, + 694, 695, 696, 714, 715, 697, 698, 699, 702, 703, + 716, 717, 718, 719, 722, 704, 724, 706, 707, 709, + + 726, 710, 711, 727, 712, 728, 713, 729, 730, 731, + 714, 715, 736, 737, 738, 739, 740, 716, 717, 718, + 719, 722, 741, 724, 744, 745, 746, 726, 747, 752, + 727, 753, 728, 754, 729, 730, 731, 755, 756, 736, + 737, 738, 739, 740, 757, 758, 759, 760, 761, 741, + 762, 744, 745, 746, 763, 747, 752, 766, 753, 767, + 754, 768, 768, 768, 755, 756, 768, 768, 768, 768, + 768, 757, 758, 759, 760, 761, 768, 762, 768, 768, + 768, 763, 768, 768, 766, 768, 767, 26, 768, 26, + 51, 51, 51, 3, 768, 768, 768, 768, 768, 768, + + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768 } ; -static yyconst flex_int16_t yy_chk[2217] = +static yyconst flex_int16_t yy_chk[2168] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1032,258 +1018,250 @@ static yyconst flex_int16_t yy_chk[2217] = 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, 10, 10, 10, 10, 10, 10, 10, 10, 11, - 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, - 12, 12, 12, 12, 12, 13, 14, 14, 16, 15, - - 14, 16, 16, 17, 17, 13, 162, 17, 13, 162, - 796, 12, 15, 15, 12, 52, 15, 208, 795, 794, - 208, 792, 13, 14, 14, 16, 15, 14, 16, 16, - 17, 17, 13, 19, 17, 13, 18, 29, 12, 15, - 15, 12, 52, 15, 19, 21, 18, 19, 20, 18, - 19, 22, 20, 29, 22, 21, 29, 54, 21, 55, - 19, 31, 20, 18, 31, 20, 783, 782, 763, 762, - 761, 19, 21, 18, 19, 20, 18, 19, 22, 20, - 29, 22, 21, 29, 54, 21, 55, 760, 31, 20, - 751, 31, 20, 26, 26, 26, 26, 26, 26, 26, - - 750, 56, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 56, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, - 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, - 28, 30, 30, 30, 30, 30, 30, 30, 30, 32, - 33, 35, 57, 741, 33, 34, 35, 36, 34, 37, - 58, 38, 63, 64, 32, 32, 33, 35, 32, 33, - - 35, 34, 37, 36, 34, 37, 36, 38, 37, 57, - 38, 33, 65, 35, 38, 34, 740, 58, 739, 63, - 64, 32, 32, 33, 35, 32, 33, 35, 34, 37, - 36, 34, 37, 36, 38, 37, 39, 38, 40, 65, - 738, 38, 40, 41, 731, 42, 39, 42, 43, 44, - 728, 89, 39, 43, 40, 39, 45, 40, 41, 41, - 725, 90, 41, 42, 43, 44, 42, 43, 44, 40, - 724, 45, 45, 39, 91, 45, 706, 59, 89, 39, - 43, 40, 39, 59, 40, 41, 41, 46, 90, 41, - 42, 43, 44, 42, 43, 44, 47, 48, 45, 45, - - 703, 91, 45, 46, 59, 53, 46, 46, 60, 92, - 59, 60, 47, 48, 93, 47, 48, 53, 94, 48, - 66, 66, 66, 66, 66, 66, 66, 66, 699, 698, - 46, 96, 53, 46, 46, 60, 92, 73, 60, 47, - 48, 93, 47, 48, 53, 94, 48, 51, 51, 51, - 51, 685, 684, 73, 51, 51, 73, 51, 96, 61, - 51, 61, 51, 61, 51, 51, 51, 51, 51, 62, - 95, 145, 148, 152, 51, 51, 51, 51, 62, 62, - 73, 51, 51, 73, 51, 62, 61, 51, 61, 51, - 61, 51, 51, 51, 51, 51, 62, 67, 67, 67, - - 67, 67, 67, 67, 67, 62, 62, 95, 145, 148, - 152, 665, 62, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 69, 69, 69, 69, 69, 69, 69, 69, - 71, 71, 71, 71, 71, 71, 71, 71, 72, 97, - 74, 664, 649, 82, 75, 76, 82, 98, 99, 77, - 100, 648, 101, 102, 72, 103, 74, 72, 72, 74, - 75, 76, 74, 75, 76, 77, 97, 602, 77, 77, - 82, 171, 78, 82, 98, 99, 601, 100, 78, 101, - 102, 72, 103, 74, 72, 72, 74, 75, 76, 74, - 75, 76, 77, 79, 78, 77, 77, 78, 80, 79, - - 104, 105, 588, 81, 84, 569, 107, 108, 171, 79, - 109, 80, 79, 83, 80, 81, 110, 80, 84, 81, - 84, 78, 81, 84, 78, 568, 79, 104, 105, 83, - 567, 566, 83, 107, 108, 83, 79, 109, 80, 79, - 565, 80, 81, 110, 80, 84, 81, 84, 85, 81, - 84, 564, 86, 85, 87, 131, 83, 106, 86, 83, - 88, 121, 83, 132, 85, 133, 88, 85, 86, 135, - 87, 86, 106, 87, 136, 121, 88, 87, 121, 88, - 85, 559, 131, 558, 106, 86, 502, 121, 121, 501, - 132, 85, 133, 88, 85, 86, 135, 87, 86, 106, - - 87, 136, 121, 88, 87, 121, 88, 111, 111, 111, - 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, - 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, - 116, 116, 116, 116, 116, 116, 116, 117, 118, 119, - 187, 139, 477, 120, 134, 476, 118, 117, 140, 120, - 123, 122, 134, 117, 118, 119, 117, 118, 119, 120, - 122, 444, 120, 443, 141, 197, 123, 122, 139, 123, - 122, 134, 123, 118, 117, 140, 120, 187, 142, 134, - - 117, 118, 119, 117, 118, 119, 120, 122, 124, 120, - 125, 141, 126, 123, 122, 434, 123, 122, 124, 123, - 127, 128, 197, 125, 124, 142, 125, 124, 126, 125, - 130, 126, 433, 385, 126, 143, 127, 128, 144, 127, - 128, 129, 128, 382, 349, 124, 130, 129, 146, 130, - 125, 124, 147, 125, 124, 126, 125, 129, 126, 137, - 129, 126, 143, 127, 128, 144, 127, 128, 137, 128, - 137, 138, 149, 130, 129, 146, 130, 150, 151, 147, - 138, 154, 138, 153, 129, 283, 137, 129, 282, 280, - 279, 263, 262, 210, 209, 137, 49, 137, 138, 149, - - 25, 24, 23, 172, 150, 151, 173, 138, 154, 138, - 9, 153, 155, 155, 155, 155, 155, 155, 155, 155, - 153, 156, 156, 156, 156, 156, 156, 156, 156, 157, - 172, 158, 174, 173, 175, 159, 160, 161, 153, 176, - 178, 163, 179, 180, 181, 157, 8, 158, 157, 157, - 158, 159, 160, 161, 159, 160, 161, 163, 3, 174, - 163, 175, 2, 202, 0, 161, 176, 178, 0, 179, - 180, 181, 157, 165, 158, 157, 157, 158, 159, 160, - 161, 159, 160, 161, 163, 164, 167, 163, 165, 165, - 164, 166, 165, 166, 182, 168, 183, 0, 0, 184, - - 202, 164, 167, 177, 164, 167, 169, 166, 170, 168, - 166, 168, 185, 177, 168, 165, 165, 164, 186, 165, - 166, 182, 169, 183, 170, 169, 184, 170, 164, 167, - 188, 164, 167, 189, 166, 190, 168, 166, 168, 185, - 177, 168, 191, 192, 193, 186, 194, 195, 196, 169, - 198, 170, 169, 199, 170, 200, 199, 188, 200, 201, - 189, 203, 190, 204, 0, 0, 0, 0, 207, 191, - 192, 193, 242, 194, 195, 196, 0, 198, 0, 0, - 199, 271, 200, 199, 207, 200, 201, 207, 203, 207, - 204, 205, 205, 205, 205, 205, 205, 205, 205, 206, - - 206, 206, 206, 206, 206, 206, 206, 211, 212, 242, - 217, 207, 218, 211, 207, 213, 207, 214, 271, 215, - 219, 220, 221, 211, 212, 216, 211, 212, 212, 222, - 223, 213, 224, 214, 213, 215, 214, 217, 215, 218, - 211, 216, 226, 227, 216, 216, 228, 219, 220, 221, - 211, 212, 229, 211, 212, 212, 222, 223, 213, 224, - 214, 213, 215, 214, 230, 215, 231, 232, 216, 226, - 227, 216, 216, 228, 233, 234, 235, 236, 237, 229, - 238, 239, 240, 241, 243, 244, 245, 246, 247, 248, - 249, 230, 250, 231, 232, 251, 252, 253, 254, 255, - - 256, 233, 234, 235, 236, 237, 257, 238, 239, 240, - 241, 243, 244, 245, 246, 247, 248, 249, 258, 250, - 0, 0, 251, 252, 253, 254, 255, 256, 272, 0, - 269, 270, 0, 257, 259, 259, 259, 259, 259, 259, - 259, 259, 259, 266, 284, 258, 260, 260, 260, 260, - 260, 260, 260, 260, 261, 267, 268, 269, 270, 266, - 261, 273, 266, 274, 275, 272, 276, 277, 278, 281, - 261, 267, 268, 261, 267, 268, 285, 286, 287, 288, - 289, 284, 290, 291, 292, 293, 266, 261, 273, 266, - 274, 275, 294, 276, 277, 278, 281, 261, 267, 268, - - 261, 267, 268, 285, 296, 287, 288, 297, 295, 290, - 291, 292, 293, 298, 286, 299, 300, 289, 295, 294, - 301, 302, 303, 310, 304, 305, 306, 307, 308, 309, - 316, 296, 0, 0, 297, 317, 318, 295, 0, 0, - 0, 0, 299, 300, 323, 295, 0, 301, 302, 303, - 298, 304, 305, 306, 307, 308, 309, 316, 319, 313, - 310, 320, 317, 318, 295, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 313, 313, 321, 322, 313, 324, - 325, 323, 326, 327, 328, 319, 329, 330, 320, 331, - 332, 333, 334, 336, 337, 338, 339, 340, 341, 342, - - 343, 313, 313, 321, 322, 313, 324, 325, 344, 326, - 327, 328, 345, 329, 330, 346, 331, 332, 333, 334, - 336, 337, 338, 339, 340, 341, 342, 343, 347, 350, - 351, 352, 353, 353, 355, 344, 354, 354, 356, 345, - 357, 358, 346, 359, 360, 361, 363, 364, 366, 367, - 0, 0, 0, 0, 0, 347, 350, 351, 352, 353, - 353, 355, 370, 354, 354, 356, 371, 372, 358, 373, - 359, 360, 361, 363, 364, 366, 367, 357, 368, 368, - 368, 368, 368, 368, 368, 368, 368, 369, 374, 370, - 375, 376, 377, 371, 372, 378, 373, 379, 380, 381, - - 383, 384, 386, 369, 387, 388, 369, 389, 369, 390, - 391, 392, 393, 394, 395, 374, 396, 375, 376, 377, - 397, 398, 378, 399, 379, 380, 381, 383, 384, 386, - 369, 387, 388, 369, 389, 369, 390, 391, 392, 393, - 394, 395, 400, 396, 401, 403, 404, 397, 398, 405, - 399, 406, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 417, 416, 418, 419, 420, 421, 414, 429, 400, - 416, 401, 403, 404, 423, 424, 405, 425, 406, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 417, 416, - 418, 419, 420, 421, 414, 422, 426, 416, 427, 428, - - 430, 423, 424, 431, 425, 429, 432, 435, 436, 437, - 438, 422, 439, 440, 422, 441, 442, 445, 446, 447, - 448, 449, 450, 426, 451, 427, 428, 430, 452, 453, - 431, 0, 454, 432, 435, 436, 437, 438, 422, 439, - 440, 422, 441, 442, 445, 446, 447, 448, 455, 450, - 456, 451, 457, 458, 459, 452, 453, 460, 449, 454, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 474, 475, 478, 479, 455, 480, 456, 481, 457, - 458, 459, 482, 483, 460, 484, 485, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 470, 471, 474, 475, - - 478, 479, 486, 480, 487, 481, 488, 489, 490, 482, - 483, 491, 484, 485, 492, 493, 494, 495, 496, 497, - 498, 499, 500, 503, 504, 505, 506, 507, 508, 486, - 509, 487, 510, 488, 489, 490, 511, 512, 491, 513, - 514, 492, 493, 494, 495, 496, 497, 498, 499, 500, - 503, 504, 505, 506, 507, 508, 515, 509, 516, 510, - 519, 520, 521, 511, 512, 522, 513, 514, 523, 524, - 525, 526, 529, 530, 531, 532, 533, 534, 535, 536, - 537, 538, 539, 515, 540, 516, 541, 519, 520, 521, - 542, 543, 522, 544, 545, 523, 524, 525, 526, 529, - - 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, - 546, 540, 547, 541, 548, 549, 550, 542, 543, 551, - 544, 545, 552, 553, 556, 557, 560, 561, 562, 563, - 572, 573, 575, 576, 578, 579, 580, 546, 581, 547, - 582, 548, 549, 550, 583, 584, 551, 585, 586, 552, - 553, 556, 557, 560, 561, 562, 563, 572, 573, 575, - 576, 578, 579, 580, 587, 581, 589, 582, 590, 591, - 592, 583, 584, 593, 585, 586, 594, 595, 596, 597, - 598, 599, 600, 603, 604, 607, 608, 609, 610, 613, - 614, 587, 615, 589, 616, 590, 591, 592, 617, 619, - - 593, 621, 622, 594, 595, 596, 597, 598, 599, 600, - 603, 604, 607, 608, 609, 610, 613, 614, 623, 615, - 624, 616, 625, 626, 627, 617, 619, 628, 621, 622, - 629, 630, 632, 633, 634, 635, 636, 637, 638, 639, - 640, 641, 642, 643, 646, 623, 647, 624, 650, 625, - 626, 627, 651, 652, 628, 653, 654, 629, 630, 632, - 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, - 643, 646, 655, 647, 658, 650, 659, 660, 661, 651, - 652, 662, 653, 654, 663, 666, 667, 668, 669, 670, - 671, 672, 673, 674, 675, 676, 677, 678, 679, 655, - - 680, 658, 681, 659, 660, 661, 686, 687, 662, 688, - 689, 663, 666, 667, 668, 669, 670, 671, 672, 673, - 674, 675, 676, 677, 678, 679, 690, 680, 691, 681, - 700, 701, 702, 686, 687, 704, 688, 689, 705, 707, - 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, - 726, 729, 732, 690, 733, 691, 734, 700, 701, 702, - 735, 736, 704, 737, 742, 705, 707, 710, 711, 712, - 713, 714, 715, 716, 717, 718, 719, 726, 729, 732, - 743, 733, 744, 734, 746, 748, 749, 735, 736, 752, - 737, 742, 753, 758, 759, 764, 765, 766, 767, 768, - - 769, 774, 775, 776, 777, 780, 781, 743, 784, 744, - 785, 746, 748, 749, 0, 0, 752, 0, 0, 753, - 758, 759, 764, 765, 766, 767, 768, 769, 774, 775, - 776, 777, 780, 781, 0, 784, 0, 785, 791, 0, - 791, 793, 793, 793, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790 + 1, 1, 1, 11, 15, 11, 11, 11, 11, 11, + 11, 11, 12, 12, 12, 12, 12, 12, 12, 14, + 16, 17, 14, 18, 16, 19, 20, 21, 22, 23, + + 24, 15, 22, 54, 17, 56, 57, 30, 21, 58, + 30, 30, 59, 64, 21, 772, 14, 16, 17, 14, + 18, 16, 19, 20, 21, 22, 23, 24, 770, 22, + 54, 17, 56, 57, 761, 21, 58, 760, 741, 59, + 64, 21, 28, 28, 28, 28, 28, 28, 28, 30, + 740, 65, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 65, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + + 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, + 29, 29, 31, 66, 739, 31, 31, 95, 31, 31, + 31, 31, 31, 31, 31, 33, 33, 33, 33, 33, + 33, 33, 35, 738, 36, 35, 35, 36, 36, 34, + 66, 37, 34, 34, 37, 37, 729, 728, 89, 38, + 35, 36, 38, 38, 31, 32, 95, 90, 32, 32, + 37, 32, 32, 32, 32, 32, 32, 32, 34, 39, + 719, 718, 39, 39, 35, 89, 36, 35, 36, 91, + 60, 34, 38, 37, 90, 40, 60, 37, 40, 40, + 41, 38, 717, 41, 41, 34, 39, 32, 42, 142, + + 43, 42, 42, 43, 43, 716, 91, 60, 709, 38, + 92, 39, 93, 60, 41, 44, 42, 45, 44, 44, + 45, 45, 40, 39, 706, 61, 44, 40, 61, 43, + 703, 46, 41, 55, 46, 46, 45, 92, 142, 93, + 42, 41, 43, 42, 94, 55, 702, 47, 96, 40, + 47, 47, 61, 97, 98, 61, 43, 44, 48, 45, + 55, 48, 48, 45, 46, 49, 99, 686, 49, 49, + 100, 94, 55, 46, 50, 96, 47, 50, 50, 145, + 97, 98, 62, 683, 62, 63, 62, 101, 102, 47, + 103, 46, 48, 99, 63, 63, 679, 100, 49, 104, + + 48, 63, 68, 47, 678, 68, 68, 49, 149, 62, + 50, 62, 63, 62, 101, 102, 50, 103, 145, 48, + 72, 63, 63, 72, 72, 49, 104, 665, 63, 67, + 67, 67, 67, 67, 67, 67, 106, 50, 53, 53, + 53, 53, 107, 108, 68, 53, 53, 149, 664, 109, + 129, 53, 130, 53, 72, 53, 53, 53, 53, 53, + 647, 131, 72, 106, 646, 53, 53, 53, 53, 107, + 108, 73, 53, 53, 73, 73, 109, 129, 53, 130, + 53, 72, 53, 53, 53, 53, 53, 69, 131, 631, + 69, 69, 170, 69, 69, 69, 69, 69, 69, 69, + + 71, 71, 71, 71, 71, 71, 71, 74, 133, 630, + 74, 74, 75, 73, 76, 75, 75, 76, 76, 77, + 586, 78, 77, 77, 78, 78, 585, 574, 78, 69, + 70, 170, 555, 70, 70, 133, 70, 70, 70, 70, + 70, 70, 70, 74, 76, 554, 134, 79, 137, 74, + 79, 79, 138, 77, 75, 80, 76, 553, 80, 80, + 552, 77, 81, 78, 139, 81, 81, 79, 551, 140, + 74, 76, 70, 134, 82, 137, 550, 82, 82, 138, + 77, 83, 80, 84, 83, 83, 84, 84, 81, 79, + 545, 139, 132, 105, 79, 85, 140, 80, 85, 85, + + 132, 544, 490, 87, 81, 489, 87, 87, 105, 80, + 467, 84, 466, 434, 85, 81, 82, 83, 433, 132, + 105, 426, 425, 83, 380, 84, 86, 132, 88, 86, + 86, 88, 88, 185, 377, 105, 283, 85, 84, 115, + 87, 85, 115, 115, 83, 87, 86, 282, 88, 110, + 110, 110, 110, 110, 110, 110, 114, 114, 114, 114, + 114, 114, 114, 115, 280, 141, 143, 87, 86, 144, + 88, 146, 185, 86, 117, 88, 111, 117, 117, 111, + 111, 115, 111, 111, 111, 111, 111, 111, 111, 279, + 115, 116, 141, 143, 116, 116, 144, 118, 146, 119, + + 118, 118, 119, 119, 51, 27, 125, 117, 122, 125, + 125, 122, 122, 116, 195, 119, 117, 118, 111, 112, + 26, 200, 112, 112, 147, 112, 112, 112, 112, 112, + 112, 112, 122, 116, 117, 25, 125, 148, 241, 118, + 116, 119, 119, 121, 118, 10, 121, 121, 125, 151, + 122, 147, 120, 195, 123, 120, 120, 123, 123, 122, + 200, 112, 113, 125, 148, 113, 113, 9, 113, 113, + 113, 113, 113, 113, 113, 120, 151, 241, 171, 121, + 124, 123, 8, 124, 124, 121, 126, 150, 128, 126, + 126, 128, 128, 172, 120, 127, 123, 173, 127, 127, + + 135, 3, 120, 2, 113, 171, 121, 176, 123, 135, + 271, 135, 174, 175, 136, 127, 124, 150, 176, 0, + 172, 126, 124, 136, 173, 136, 150, 135, 126, 0, + 128, 154, 0, 0, 154, 154, 135, 127, 135, 174, + 175, 136, 127, 124, 150, 0, 176, 0, 126, 271, + 136, 0, 136, 152, 152, 152, 152, 152, 152, 152, + 153, 0, 177, 153, 153, 0, 153, 153, 153, 153, + 153, 153, 153, 154, 155, 155, 155, 155, 155, 155, + 155, 156, 0, 157, 156, 156, 157, 157, 158, 177, + 159, 158, 158, 159, 159, 160, 272, 161, 160, 160, + + 161, 161, 153, 0, 162, 0, 161, 162, 162, 161, + 163, 178, 0, 163, 163, 156, 164, 0, 165, 164, + 164, 165, 165, 156, 166, 157, 179, 166, 166, 163, + 158, 0, 159, 0, 165, 272, 0, 160, 178, 161, + 167, 0, 156, 167, 167, 164, 162, 168, 180, 181, + 168, 168, 163, 179, 182, 0, 163, 166, 164, 169, + 165, 165, 169, 169, 183, 0, 166, 184, 167, 186, + 187, 188, 164, 189, 0, 180, 181, 190, 191, 192, + 193, 182, 167, 194, 166, 196, 199, 197, 201, 168, + 197, 183, 169, 202, 184, 167, 186, 187, 188, 198, + + 189, 169, 198, 0, 190, 191, 192, 193, 0, 0, + 194, 217, 196, 199, 197, 201, 0, 197, 285, 169, + 202, 0, 0, 218, 219, 220, 198, 221, 222, 198, + 203, 203, 203, 203, 203, 203, 203, 204, 217, 0, + 204, 204, 223, 204, 204, 204, 204, 204, 204, 204, + 218, 219, 220, 0, 221, 222, 208, 285, 207, 208, + 208, 207, 207, 209, 0, 208, 209, 209, 208, 223, + 224, 209, 210, 0, 211, 210, 210, 211, 211, 204, + 205, 0, 210, 205, 205, 226, 205, 205, 205, 205, + 205, 205, 205, 207, 211, 0, 227, 224, 208, 212, + + 207, 0, 212, 212, 213, 209, 214, 213, 213, 214, + 214, 228, 226, 229, 210, 215, 211, 230, 215, 215, + 207, 211, 205, 227, 216, 231, 232, 216, 216, 233, + 0, 0, 234, 212, 235, 236, 237, 238, 228, 0, + 229, 212, 239, 240, 230, 242, 213, 243, 214, 244, + 245, 246, 231, 232, 247, 248, 233, 215, 216, 234, + 212, 235, 236, 237, 238, 249, 216, 250, 251, 239, + 240, 252, 242, 253, 243, 254, 244, 245, 246, 255, + 256, 247, 248, 257, 260, 216, 0, 260, 260, 269, + 0, 0, 249, 261, 250, 251, 261, 261, 252, 0, + + 253, 262, 254, 270, 262, 262, 255, 256, 0, 262, + 257, 259, 273, 261, 259, 259, 269, 259, 259, 259, + 259, 259, 259, 259, 263, 274, 260, 263, 263, 264, + 270, 275, 264, 264, 263, 261, 276, 277, 265, 273, + 261, 265, 265, 262, 266, 278, 267, 266, 266, 267, + 267, 268, 274, 259, 268, 268, 281, 284, 275, 288, + 286, 0, 287, 276, 277, 289, 263, 290, 291, 292, + 293, 264, 278, 295, 294, 296, 297, 298, 299, 300, + 265, 301, 302, 281, 284, 294, 266, 286, 267, 287, + 303, 304, 289, 268, 290, 291, 292, 293, 288, 305, + + 295, 306, 296, 307, 298, 299, 300, 308, 301, 302, + 309, 0, 321, 294, 314, 297, 315, 303, 304, 316, + 317, 312, 0, 0, 312, 312, 305, 0, 306, 313, + 307, 0, 313, 313, 308, 311, 0, 0, 311, 311, + 318, 314, 319, 315, 0, 320, 316, 317, 322, 309, + 310, 321, 323, 310, 310, 324, 310, 310, 310, 310, + 310, 310, 310, 312, 311, 0, 325, 318, 326, 319, + 327, 313, 320, 328, 329, 322, 330, 311, 332, 323, + 333, 334, 324, 335, 336, 337, 338, 339, 340, 341, + 342, 311, 310, 325, 343, 326, 345, 327, 346, 347, + + 328, 329, 350, 330, 351, 332, 353, 333, 334, 352, + 335, 336, 337, 338, 339, 340, 341, 342, 348, 348, + 354, 343, 355, 345, 356, 346, 347, 349, 349, 350, + 358, 351, 359, 353, 361, 362, 363, 365, 364, 363, + 363, 364, 364, 366, 367, 348, 348, 354, 352, 355, + 368, 356, 369, 0, 349, 349, 370, 358, 371, 359, + 372, 361, 362, 373, 365, 374, 375, 376, 378, 379, + 366, 367, 381, 364, 382, 383, 384, 368, 363, 369, + 364, 385, 386, 370, 387, 371, 388, 372, 389, 390, + 373, 391, 374, 375, 376, 378, 379, 392, 393, 381, + + 364, 382, 383, 384, 394, 395, 396, 397, 385, 386, + 398, 387, 399, 388, 400, 389, 390, 401, 391, 402, + 403, 404, 405, 407, 392, 393, 409, 406, 408, 410, + 411, 394, 395, 396, 397, 406, 408, 398, 412, 399, + 413, 400, 421, 0, 401, 415, 402, 403, 404, 405, + 407, 416, 417, 409, 406, 408, 410, 411, 418, 419, + 420, 422, 406, 408, 423, 412, 414, 413, 424, 414, + 414, 427, 415, 428, 429, 430, 431, 432, 416, 417, + 435, 421, 436, 437, 438, 418, 419, 420, 422, 439, + 440, 423, 441, 442, 443, 424, 444, 445, 427, 446, + + 428, 429, 430, 431, 432, 447, 448, 435, 414, 436, + 437, 438, 449, 450, 451, 452, 453, 440, 454, 441, + 442, 443, 455, 444, 445, 456, 446, 457, 439, 458, + 459, 460, 447, 448, 461, 464, 465, 468, 469, 449, + 450, 451, 452, 453, 470, 454, 471, 472, 473, 455, + 474, 475, 456, 476, 457, 477, 458, 459, 460, 478, + 479, 461, 464, 465, 468, 469, 480, 481, 482, 483, + 484, 470, 485, 471, 472, 473, 486, 474, 475, 487, + 476, 488, 477, 491, 492, 493, 478, 479, 494, 495, + 496, 497, 498, 480, 481, 482, 483, 484, 499, 485, + + 500, 501, 502, 486, 503, 504, 487, 507, 488, 508, + 491, 492, 493, 509, 510, 494, 495, 496, 497, 498, + 511, 512, 513, 514, 517, 499, 518, 500, 501, 502, + 519, 503, 504, 520, 507, 521, 508, 522, 523, 524, + 509, 510, 525, 526, 527, 528, 529, 511, 512, 513, + 514, 517, 530, 518, 531, 532, 533, 519, 534, 535, + 520, 536, 521, 537, 522, 523, 524, 538, 539, 525, + 526, 527, 528, 529, 542, 543, 546, 547, 548, 530, + 549, 531, 532, 533, 558, 534, 535, 559, 536, 561, + 537, 562, 564, 565, 538, 539, 566, 567, 568, 569, + + 570, 542, 543, 546, 547, 548, 571, 549, 572, 573, + 575, 558, 576, 577, 559, 578, 561, 579, 562, 564, + 565, 580, 581, 566, 567, 568, 569, 570, 582, 583, + 584, 587, 588, 571, 591, 572, 573, 575, 592, 576, + 577, 593, 578, 594, 579, 597, 598, 599, 580, 581, + 600, 601, 603, 605, 606, 582, 583, 584, 587, 588, + 607, 591, 608, 609, 610, 592, 611, 612, 593, 613, + 594, 614, 597, 598, 599, 616, 617, 600, 601, 603, + 605, 606, 618, 619, 620, 621, 622, 607, 623, 608, + 609, 610, 624, 611, 612, 625, 613, 628, 614, 629, + + 632, 633, 616, 617, 634, 635, 636, 637, 640, 618, + 619, 620, 621, 622, 641, 623, 642, 643, 644, 624, + 645, 648, 625, 649, 628, 650, 629, 632, 633, 651, + 652, 634, 635, 636, 637, 640, 653, 654, 655, 656, + 657, 641, 658, 642, 643, 644, 659, 645, 648, 660, + 649, 661, 650, 666, 667, 668, 651, 652, 669, 670, + 671, 680, 681, 653, 654, 655, 656, 657, 682, 658, + 684, 685, 687, 659, 688, 689, 660, 690, 661, 691, + 666, 667, 668, 692, 693, 669, 670, 671, 680, 681, + 694, 695, 696, 697, 704, 682, 707, 684, 685, 687, + + 710, 688, 689, 711, 690, 712, 691, 713, 714, 715, + 692, 693, 720, 721, 722, 724, 726, 694, 695, 696, + 697, 704, 727, 707, 730, 731, 736, 710, 737, 742, + 711, 743, 712, 744, 713, 714, 715, 745, 746, 720, + 721, 722, 724, 726, 747, 752, 753, 754, 755, 727, + 758, 730, 731, 736, 759, 737, 742, 762, 743, 763, + 744, 0, 0, 0, 745, 746, 0, 0, 0, 0, + 0, 747, 752, 753, 754, 755, 0, 758, 0, 0, + 0, 759, 0, 0, 762, 0, 763, 769, 0, 769, + 771, 771, 771, 768, 768, 768, 768, 768, 768, 768, + + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 768, 768, 768, 768, 768 } ; -static yyconst flex_int16_t yy_rule_linenum[94] = +static yyconst flex_int16_t yy_rule_linenum[90] = { 0, - 76, 79, 81, 83, 87, 88, 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, 148, 149, 151, 152, 153, 154, 155, - 156, 158, 159, 162, 167, 168, 169, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 181, 187, 193, 199, - 205, 211, 217 - + 76, 78, 80, 82, 84, 87, 91, 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, 149, 150, 152, 153, 154, 155, 156, 157, + 159, 160, 163, 168, 169, 170, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 182, 191, 209, 215 } ; /* The intent behind this definition is that it'll catch @@ -1338,7 +1316,7 @@ static yyconst flex_int16_t yy_rule_linenum[94] = #define YY_INPUT(buffer, result, max_size) get_lex_chars(buffer, result, max_size, PARAM) -#line 1342 "libmemcached/options/scanner.cc" +#line 1320 "libmemcached/options/scanner.cc" #define INITIAL 0 @@ -1645,7 +1623,7 @@ YY_DECL -#line 1649 "libmemcached/options/scanner.cc" +#line 1627 "libmemcached/options/scanner.cc" yylval = yylval_param; @@ -1711,13 +1689,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 >= 791 ) + if ( yy_current_state >= 769 ) 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] != 2145 ); + while ( yy_base[yy_current_state] != 2094 ); yy_find_action: /* %% [10.0] code to find the action number goes here */ @@ -1740,13 +1718,13 @@ do_action: /* This label is used only to access EOF actions. */ { if ( yy_act == 0 ) fprintf( stderr, "--scanner backing up\n" ); - else if ( yy_act < 94 ) + else if ( yy_act < 90 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", (long)yy_rule_linenum[yy_act], yytext ); - else if ( yy_act == 94 ) + else if ( yy_act == 90 ) fprintf( stderr, "--accepting default rule (\"%s\")\n", yytext ); - else if ( yy_act == 95 ) + else if ( yy_act == 91 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); @@ -1769,506 +1747,489 @@ YY_RULE_SETUP YY_BREAK case 2: YY_RULE_SETUP -#line 79 "libmemcached/options/scanner.l" +#line 78 "libmemcached/options/scanner.l" { yylval->number = atoi(yytext); return (NUMBER); } YY_BREAK case 3: -/* rule 3 can match eol */ YY_RULE_SETUP -#line 81 "libmemcached/options/scanner.l" -; /* skip whitespace */ +#line 80 "libmemcached/options/scanner.l" +{ yylval->server.port = atoi(yytext +1); return PORT; } YY_BREAK case 4: -*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ -yyg->yy_c_buf_p = yy_cp -= 1; -YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 83 "libmemcached/options/scanner.l" -{ - return COMMENT; - } +#line 82 "libmemcached/options/scanner.l" +{ yylval->server.weight = atoi(yytext +2); return WEIGHT_START; } YY_BREAK case 5: +/* rule 5 can match eol */ YY_RULE_SETUP -#line 87 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return SERVER; } +#line 84 "libmemcached/options/scanner.l" +; /* skip whitespace */ YY_BREAK case 6: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 88 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return SERVERS_OPTION; } +#line 87 "libmemcached/options/scanner.l" +{ + return COMMENT; + } YY_BREAK case 7: YY_RULE_SETUP -#line 90 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return VERIFY_KEY; } +#line 91 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; yyextra->set_server(); return SERVER; } YY_BREAK case 8: YY_RULE_SETUP -#line 91 "libmemcached/options/scanner.l" +#line 93 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return VERIFY_KEY; } YY_BREAK case 9: YY_RULE_SETUP -#line 92 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return AUTO_EJECT_HOSTS; } +#line 94 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return VERIFY_KEY; } YY_BREAK case 10: YY_RULE_SETUP -#line 93 "libmemcached/options/scanner.l" +#line 95 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return AUTO_EJECT_HOSTS; } YY_BREAK case 11: YY_RULE_SETUP -#line 94 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return BINARY_PROTOCOL; } +#line 96 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return AUTO_EJECT_HOSTS; } YY_BREAK case 12: YY_RULE_SETUP -#line 95 "libmemcached/options/scanner.l" +#line 97 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return BINARY_PROTOCOL; } YY_BREAK case 13: YY_RULE_SETUP -#line 96 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return BUFFER_REQUESTS; } +#line 98 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return BINARY_PROTOCOL; } YY_BREAK case 14: YY_RULE_SETUP -#line 97 "libmemcached/options/scanner.l" +#line 99 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return BUFFER_REQUESTS; } YY_BREAK case 15: YY_RULE_SETUP -#line 98 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return CONFIGURE_FILE; } +#line 100 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return BUFFER_REQUESTS; } YY_BREAK case 16: YY_RULE_SETUP -#line 99 "libmemcached/options/scanner.l" +#line 101 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return CONFIGURE_FILE; } YY_BREAK case 17: YY_RULE_SETUP -#line 100 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return CONNECT_TIMEOUT; } +#line 102 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return CONFIGURE_FILE; } YY_BREAK case 18: YY_RULE_SETUP -#line 101 "libmemcached/options/scanner.l" +#line 103 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return CONNECT_TIMEOUT; } YY_BREAK case 19: YY_RULE_SETUP -#line 102 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return DISTRIBUTION; } +#line 104 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return CONNECT_TIMEOUT; } YY_BREAK case 20: YY_RULE_SETUP -#line 103 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return HASH; } +#line 105 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return DISTRIBUTION; } YY_BREAK case 21: YY_RULE_SETUP -#line 104 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return HASH_WITH_PREFIX_KEY; } +#line 106 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return HASH; } YY_BREAK case 22: YY_RULE_SETUP -#line 105 "libmemcached/options/scanner.l" +#line 107 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return HASH_WITH_PREFIX_KEY; } YY_BREAK case 23: YY_RULE_SETUP -#line 106 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return IO_BYTES_WATERMARK; } +#line 108 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return HASH_WITH_PREFIX_KEY; } YY_BREAK case 24: YY_RULE_SETUP -#line 107 "libmemcached/options/scanner.l" +#line 109 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return IO_BYTES_WATERMARK; } YY_BREAK case 25: YY_RULE_SETUP -#line 108 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return IO_KEY_PREFETCH; } +#line 110 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return IO_BYTES_WATERMARK; } YY_BREAK case 26: YY_RULE_SETUP -#line 109 "libmemcached/options/scanner.l" +#line 111 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return IO_KEY_PREFETCH; } YY_BREAK case 27: YY_RULE_SETUP -#line 110 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return IO_MSG_WATERMARK; } +#line 112 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return IO_KEY_PREFETCH; } YY_BREAK case 28: YY_RULE_SETUP -#line 111 "libmemcached/options/scanner.l" +#line 113 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return IO_MSG_WATERMARK; } YY_BREAK case 29: YY_RULE_SETUP -#line 112 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return KETAMA_WEIGHTED; } +#line 114 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return IO_MSG_WATERMARK; } YY_BREAK case 30: YY_RULE_SETUP -#line 113 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return KETAMA_WEIGHTED; } +#line 115 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return NOREPLY; } YY_BREAK case 31: YY_RULE_SETUP -#line 114 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return NOREPLY; } +#line 116 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return NUMBER_OF_REPLICAS; } YY_BREAK case 32: YY_RULE_SETUP -#line 115 "libmemcached/options/scanner.l" +#line 117 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return NUMBER_OF_REPLICAS; } YY_BREAK case 33: YY_RULE_SETUP -#line 116 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return NUMBER_OF_REPLICAS; } +#line 118 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return POLL_TIMEOUT; } YY_BREAK case 34: YY_RULE_SETUP -#line 117 "libmemcached/options/scanner.l" +#line 119 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return POLL_TIMEOUT; } YY_BREAK case 35: YY_RULE_SETUP -#line 118 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return POLL_TIMEOUT; } +#line 120 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return RANDOMIZE_REPLICA_READ; } YY_BREAK case 36: YY_RULE_SETUP -#line 119 "libmemcached/options/scanner.l" +#line 121 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return RANDOMIZE_REPLICA_READ; } YY_BREAK case 37: YY_RULE_SETUP -#line 120 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return RANDOMIZE_REPLICA_READ; } +#line 122 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return RCV_TIMEOUT; } YY_BREAK case 38: YY_RULE_SETUP -#line 121 "libmemcached/options/scanner.l" +#line 123 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return RCV_TIMEOUT; } YY_BREAK case 39: YY_RULE_SETUP -#line 122 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return RCV_TIMEOUT; } +#line 124 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return RETRY_TIMEOUT; } YY_BREAK case 40: YY_RULE_SETUP -#line 123 "libmemcached/options/scanner.l" +#line 125 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return RETRY_TIMEOUT; } YY_BREAK case 41: YY_RULE_SETUP -#line 124 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return RETRY_TIMEOUT; } +#line 126 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return SERVER_FAILURE_LIMIT; } YY_BREAK case 42: YY_RULE_SETUP -#line 125 "libmemcached/options/scanner.l" +#line 127 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return SERVER_FAILURE_LIMIT; } YY_BREAK case 43: YY_RULE_SETUP -#line 126 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return SERVER_FAILURE_LIMIT; } +#line 128 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return SND_TIMEOUT; } YY_BREAK case 44: YY_RULE_SETUP -#line 127 "libmemcached/options/scanner.l" +#line 129 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return SND_TIMEOUT; } YY_BREAK case 45: YY_RULE_SETUP -#line 128 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return SND_TIMEOUT; } +#line 130 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return SOCKET_RECV_SIZE; } YY_BREAK case 46: YY_RULE_SETUP -#line 129 "libmemcached/options/scanner.l" +#line 131 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return SOCKET_RECV_SIZE; } YY_BREAK case 47: YY_RULE_SETUP -#line 130 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return SOCKET_RECV_SIZE; } +#line 132 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return SOCKET_SEND_SIZE; } YY_BREAK case 48: YY_RULE_SETUP -#line 131 "libmemcached/options/scanner.l" +#line 133 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return SOCKET_SEND_SIZE; } YY_BREAK case 49: YY_RULE_SETUP -#line 132 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return SOCKET_SEND_SIZE; } +#line 134 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return SORT_HOSTS; } YY_BREAK case 50: YY_RULE_SETUP -#line 133 "libmemcached/options/scanner.l" +#line 135 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return SORT_HOSTS; } YY_BREAK case 51: YY_RULE_SETUP -#line 134 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return SORT_HOSTS; } +#line 136 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return SUPPORT_CAS; } YY_BREAK case 52: YY_RULE_SETUP -#line 135 "libmemcached/options/scanner.l" +#line 137 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return SUPPORT_CAS; } YY_BREAK case 53: YY_RULE_SETUP -#line 136 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return SUPPORT_CAS; } +#line 138 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return _TCP_NODELAY; } YY_BREAK case 54: YY_RULE_SETUP -#line 137 "libmemcached/options/scanner.l" +#line 139 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return _TCP_NODELAY; } YY_BREAK case 55: YY_RULE_SETUP -#line 138 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return _TCP_NODELAY; } +#line 140 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return _TCP_KEEPALIVE; } YY_BREAK case 56: YY_RULE_SETUP -#line 139 "libmemcached/options/scanner.l" +#line 141 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return _TCP_KEEPALIVE; } YY_BREAK case 57: YY_RULE_SETUP -#line 140 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return _TCP_KEEPALIVE; } +#line 142 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return _TCP_KEEPIDLE; } YY_BREAK case 58: YY_RULE_SETUP -#line 141 "libmemcached/options/scanner.l" +#line 143 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return _TCP_KEEPIDLE; } YY_BREAK case 59: YY_RULE_SETUP -#line 142 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return _TCP_KEEPIDLE; } +#line 144 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return USER_DATA; } YY_BREAK case 60: YY_RULE_SETUP -#line 143 "libmemcached/options/scanner.l" +#line 145 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return USER_DATA; } YY_BREAK case 61: YY_RULE_SETUP -#line 144 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return USER_DATA; } +#line 146 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return USE_UDP; } YY_BREAK case 62: YY_RULE_SETUP -#line 145 "libmemcached/options/scanner.l" +#line 147 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return USE_UDP; } YY_BREAK case 63: YY_RULE_SETUP -#line 146 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return USE_UDP; } +#line 149 "libmemcached/options/scanner.l" +{ yyextra->begin= yytext; return PREFIX_KEY; } YY_BREAK case 64: YY_RULE_SETUP -#line 148 "libmemcached/options/scanner.l" +#line 150 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return PREFIX_KEY; } YY_BREAK case 65: YY_RULE_SETUP -#line 149 "libmemcached/options/scanner.l" -{ yyextra->begin= yytext; return PREFIX_KEY; } - YY_BREAK -case 66: -YY_RULE_SETUP -#line 151 "libmemcached/options/scanner.l" +#line 152 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return INCLUDE; } YY_BREAK -case 67: +case 66: YY_RULE_SETUP -#line 152 "libmemcached/options/scanner.l" +#line 153 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return RESET; } YY_BREAK -case 68: +case 67: YY_RULE_SETUP -#line 153 "libmemcached/options/scanner.l" +#line 154 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return PARSER_DEBUG; } YY_BREAK -case 69: +case 68: YY_RULE_SETUP -#line 154 "libmemcached/options/scanner.l" +#line 155 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return SERVERS; } YY_BREAK -case 70: +case 69: YY_RULE_SETUP -#line 155 "libmemcached/options/scanner.l" +#line 156 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return END; } YY_BREAK -case 71: +case 70: YY_RULE_SETUP -#line 156 "libmemcached/options/scanner.l" +#line 157 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return ERROR; } YY_BREAK -case 72: +case 71: YY_RULE_SETUP -#line 158 "libmemcached/options/scanner.l" +#line 159 "libmemcached/options/scanner.l" { return TRUE; } YY_BREAK -case 73: +case 72: YY_RULE_SETUP -#line 159 "libmemcached/options/scanner.l" +#line 160 "libmemcached/options/scanner.l" { return FALSE; } YY_BREAK -case 74: +case 73: YY_RULE_SETUP -#line 162 "libmemcached/options/scanner.l" +#line 163 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return UNKNOWN_OPTION; } YY_BREAK -case 75: +case 74: YY_RULE_SETUP -#line 167 "libmemcached/options/scanner.l" +#line 168 "libmemcached/options/scanner.l" { return CONSISTENT; } YY_BREAK -case 76: +case 75: YY_RULE_SETUP -#line 168 "libmemcached/options/scanner.l" +#line 169 "libmemcached/options/scanner.l" { return MODULA; } YY_BREAK -case 77: +case 76: YY_RULE_SETUP -#line 169 "libmemcached/options/scanner.l" +#line 170 "libmemcached/options/scanner.l" { return RANDOM; } YY_BREAK -case 78: +case 77: YY_RULE_SETUP -#line 171 "libmemcached/options/scanner.l" +#line 172 "libmemcached/options/scanner.l" { return MD5; } YY_BREAK -case 79: +case 78: YY_RULE_SETUP -#line 172 "libmemcached/options/scanner.l" +#line 173 "libmemcached/options/scanner.l" { return CRC; } YY_BREAK -case 80: +case 79: YY_RULE_SETUP -#line 173 "libmemcached/options/scanner.l" +#line 174 "libmemcached/options/scanner.l" { return FNV1_64; } YY_BREAK -case 81: +case 80: YY_RULE_SETUP -#line 174 "libmemcached/options/scanner.l" +#line 175 "libmemcached/options/scanner.l" { return FNV1A_64; } YY_BREAK -case 82: +case 81: YY_RULE_SETUP -#line 175 "libmemcached/options/scanner.l" +#line 176 "libmemcached/options/scanner.l" { return FNV1_32; } YY_BREAK -case 83: +case 82: YY_RULE_SETUP -#line 176 "libmemcached/options/scanner.l" +#line 177 "libmemcached/options/scanner.l" { return FNV1A_32; } YY_BREAK -case 84: +case 83: YY_RULE_SETUP -#line 177 "libmemcached/options/scanner.l" +#line 178 "libmemcached/options/scanner.l" { return HSIEH; } YY_BREAK -case 85: +case 84: YY_RULE_SETUP -#line 178 "libmemcached/options/scanner.l" +#line 179 "libmemcached/options/scanner.l" { return MURMUR; } YY_BREAK -case 86: +case 85: YY_RULE_SETUP -#line 179 "libmemcached/options/scanner.l" +#line 180 "libmemcached/options/scanner.l" { return JENKINS; } YY_BREAK -case 87: -YY_RULE_SETUP -#line 181 "libmemcached/options/scanner.l" -{ - yylval->string.c_str = yytext; - yylval->string.length = yyleng; - return HOSTNAME_WITH_PORT; - } - YY_BREAK -case 88: -YY_RULE_SETUP -#line 187 "libmemcached/options/scanner.l" -{ - yylval->string.c_str = yytext; - yylval->string.length = yyleng; - return HOSTNAME; - } - YY_BREAK -case 89: -YY_RULE_SETUP -#line 193 "libmemcached/options/scanner.l" -{ - yylval->string.c_str = yytext; - yylval->string.length = yyleng; - return IPADDRESS_WITH_PORT; - } - YY_BREAK -case 90: +case 86: YY_RULE_SETUP -#line 199 "libmemcached/options/scanner.l" +#line 182 "libmemcached/options/scanner.l" { - yylval->string.c_str = yytext; - yylval->string.length = yyleng; + yylval->server.port= MEMCACHED_DEFAULT_PORT; + yylval->server.weight= 1; + yylval->server.c_str= yyextra->set_hostname(yytext, yyleng); + if (yylval->server.c_str) + yylval->server.length= yyleng; return IPADDRESS; } YY_BREAK -case 91: +case 87: YY_RULE_SETUP -#line 205 "libmemcached/options/scanner.l" +#line 191 "libmemcached/options/scanner.l" { + if (yyextra->is_server()) + { + yylval->server.port= MEMCACHED_DEFAULT_PORT; + yylval->server.weight= 1; + yylval->server.c_str= yyextra->set_hostname(yytext, yyleng); + if (yylval->server.c_str) + yylval->server.length= yyleng; + + return HOSTNAME; + } + yylval->string.c_str = yytext; yylval->string.length = yyleng; + return STRING; } YY_BREAK -case 92: +case 88: YY_RULE_SETUP -#line 211 "libmemcached/options/scanner.l" +#line 209 "libmemcached/options/scanner.l" { yylval->string.c_str = yytext; yylval->string.length = yyleng; return QUOTED_STRING; } YY_BREAK -case 93: +case 89: YY_RULE_SETUP -#line 217 "libmemcached/options/scanner.l" +#line 215 "libmemcached/options/scanner.l" { yyextra->begin= yytext; return UNKNOWN; } YY_BREAK -case 94: +case 90: YY_RULE_SETUP -#line 222 "libmemcached/options/scanner.l" +#line 220 "libmemcached/options/scanner.l" ECHO; YY_BREAK -#line 2272 "libmemcached/options/scanner.cc" +#line 2233 "libmemcached/options/scanner.cc" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -2584,7 +2545,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) 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 >= 791 ) + if ( yy_current_state >= 769 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -2618,11 +2579,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) 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 >= 791 ) + if ( yy_current_state >= 769 ) 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 == 790); + yy_is_jam = (yy_current_state == 768); return yy_is_jam ? 0 : yy_current_state; } @@ -3534,7 +3495,7 @@ void config_free (void * ptr , yyscan_t yyscanner) /* %ok-for-header */ -#line 222 "libmemcached/options/scanner.l" +#line 220 "libmemcached/options/scanner.l" diff --git a/libmemcached/options/scanner.h b/libmemcached/options/scanner.h index 96266ab0..de36df46 100644 --- a/libmemcached/options/scanner.h +++ b/libmemcached/options/scanner.h @@ -470,7 +470,7 @@ extern int config_lex \ #undef YY_DECL #endif -#line 222 "libmemcached/options/scanner.l" +#line 220 "libmemcached/options/scanner.l" #line 477 "libmemcached/options/scanner.h" diff --git a/libmemcached/options/scanner.l b/libmemcached/options/scanner.l index 57826e8e..c5b7962f 100644 --- a/libmemcached/options/scanner.l +++ b/libmemcached/options/scanner.l @@ -75,17 +75,20 @@ =|,|[ ] { return yytext[0];} - [[:digit:]]+ { yylval->number = atoi(yytext); return (NUMBER); } +:[[:digit:]]{1,5} { yylval->server.port = atoi(yytext +1); return PORT; } + +"/?"[[:digit:]]{1,5} { yylval->server.weight = atoi(yytext +2); return WEIGHT_START; } + [\t\r\n] ; /* skip whitespace */ + ^#.*$ { return COMMENT; } -"--SERVER=" { yyextra->begin= yytext; return SERVER; } -"--SERVERS=" { yyextra->begin= yytext; return SERVERS_OPTION; } +"--SERVER=" { yyextra->begin= yytext; yyextra->set_server(); return SERVER; } "--VERIFY_KEY" { yyextra->begin= yytext; return VERIFY_KEY; } "--VERIFY-KEY" { yyextra->begin= yytext; return VERIFY_KEY; } @@ -109,8 +112,6 @@ "--IO-KEY-PREFETCH=" { yyextra->begin= yytext; return IO_KEY_PREFETCH; } "--IO_MSG_WATERMARK=" { yyextra->begin= yytext; return IO_MSG_WATERMARK; } "--IO-MSG-WATERMARK=" { yyextra->begin= yytext; return IO_MSG_WATERMARK; } -"--KETAMA_WEIGHTED" { yyextra->begin= yytext; return KETAMA_WEIGHTED; } -"--KETAMA-WEIGHTED" { yyextra->begin= yytext; return KETAMA_WEIGHTED; } "--NOREPLY" { yyextra->begin= yytext; return NOREPLY; } "--NUMBER_OF_REPLICAS=" { yyextra->begin= yytext; return NUMBER_OF_REPLICAS; } "--NUMBER-OF-REPLICAS=" { yyextra->begin= yytext; return NUMBER_OF_REPLICAS; } @@ -178,33 +179,30 @@ HSIEH { return HSIEH; } MURMUR { return MURMUR; } JENKINS { return JENKINS; } -[[:alnum:]][[:alnum:].]*[[:alpha:]]: { - yylval->string.c_str = yytext; - yylval->string.length = yyleng; - return HOSTNAME_WITH_PORT; +(([[:digit:]]{1,3}"."){3}([[:digit:]]{1,3})) { + yylval->server.port= MEMCACHED_DEFAULT_PORT; + yylval->server.weight= 1; + yylval->server.c_str= yyextra->set_hostname(yytext, yyleng); + if (yylval->server.c_str) + yylval->server.length= yyleng; + return IPADDRESS; } -[[:alnum:]]+"."[[:alpha:].]+[[:alnum:]] { - yylval->string.c_str = yytext; - yylval->string.length = yyleng; - return HOSTNAME; - } +[[:alnum:]]["."[:alnum:]_-]+[[:alnum:]] { + if (yyextra->is_server()) + { + yylval->server.port= MEMCACHED_DEFAULT_PORT; + yylval->server.weight= 1; + yylval->server.c_str= yyextra->set_hostname(yytext, yyleng); + if (yylval->server.c_str) + yylval->server.length= yyleng; -(([[:digit:]]{1,3}"."){3}([[:digit:]]{1,3})): { - yylval->string.c_str = yytext; - yylval->string.length = yyleng; - return IPADDRESS_WITH_PORT; - } + return HOSTNAME; + } -(([[:digit:]]{1,3}"."){3}([[:digit:]]{1,3})) { yylval->string.c_str = yytext; yylval->string.length = yyleng; - return IPADDRESS; - } -[[:alnum:]]+ { - yylval->string.c_str = yytext; - yylval->string.length = yyleng; return STRING; } diff --git a/libmemcached/options/server.h b/libmemcached/options/server.h index af6e0f3e..2f666f49 100644 --- a/libmemcached/options/server.h +++ b/libmemcached/options/server.h @@ -43,14 +43,16 @@ struct server_t { - const char *c_str; - size_t length; in_port_t port; + uint32_t weight; + size_t length; + const char *c_str; }; inline std::ostream& operator<<(std::ostream& output, const server_t& arg) { output.write(arg.c_str, arg.length); output << ':' << arg.port; + output << '+' << arg.weight; return output; } diff --git a/libmemcached/options/symbol.h b/libmemcached/options/symbol.h index b14eb331..919d3f17 100644 --- a/libmemcached/options/symbol.h +++ b/libmemcached/options/symbol.h @@ -46,12 +46,12 @@ union YYSTYPE long long number; string_t string; string_t option; - server_t server; double double_number; memcached_server_distribution_t distribution; memcached_hash_t hash; memcached_behavior_t behavior; bool boolean; + server_t server; }; typedef union YYSTYPE YYSTYPE; diff --git a/libmemcached/server.h b/libmemcached/server.h index b0872014..136fa8a8 100644 --- a/libmemcached/server.h +++ b/libmemcached/server.h @@ -96,13 +96,6 @@ LIBMEMCACHED_API memcached_return_t memcached_server_add(memcached_st *ptr, const char *hostname, in_port_t port); -LIBMEMCACHED_LOCAL - memcached_return_t memcached_server_add_parsed(memcached_st *ptr, - const char *hostname, - size_t hostname_length, - in_port_t port, - uint32_t weight); - LIBMEMCACHED_API memcached_return_t memcached_server_add_udp_with_weight(memcached_st *ptr, const char *hostname, diff --git a/libtest/test.h b/libtest/test.h index b7a2f5ee..58d24373 100644 --- a/libtest/test.h +++ b/libtest/test.h @@ -242,7 +242,7 @@ do \ { \ if (strcmp((A), (B))) \ { \ - fprintf(stderr, "\n%s:%d: %s -> %s\n", __FILE__, __LINE__, (A), (B)); \ + fprintf(stderr, "\n%s:%d: `%s` -> `%s`\n", __FILE__, __LINE__, (A), (B)); \ create_core(); \ return TEST_FAILURE; \ } \ diff --git a/tests/mem_functions.c b/tests/mem_functions.c index f6b429a8..96d0ac20 100644 --- a/tests/mem_functions.c +++ b/tests/mem_functions.c @@ -6219,7 +6219,8 @@ test_st parser_tests[] ={ {"randomly generated options", 0, (test_callback_fn)random_statement_build_test }, {"prefix_key", 0, (test_callback_fn)parser_key_prefix_test }, {"server", 0, (test_callback_fn)server_test }, - {"servers", 0, (test_callback_fn)servers_test }, + {"bad server strings", 0, (test_callback_fn)servers_bad_test }, + {"server with weights", 0, (test_callback_fn)server_with_weight_test }, {0, 0, (test_callback_fn)0} }; diff --git a/tests/parser.cc b/tests/parser.cc index 0a466189..b330db64 100644 --- a/tests/parser.cc +++ b/tests/parser.cc @@ -156,18 +156,18 @@ scanner_variable_t test_server_strings[]= { { NIL, scanner_string_null, scanner_string_null, NULL } }; -scanner_variable_t test_servers_strings[]= { - { ARRAY, make_scanner_string("--servers=localhost:11221,localhost:11222,localhost:11223,localhost:11224,localhost:11225"), scanner_string_null, NULL }, - { ARRAY, make_scanner_string("--servers=a.example.com:81,localhost:82,b.example.com"), scanner_string_null, NULL }, - { ARRAY, make_scanner_string("--servers=localhost,localhost:80"), scanner_string_null, NULL }, - { NIL, scanner_string_null, scanner_string_null, NULL} +scanner_variable_t test_server_strings_with_weights[]= { + { ARRAY, make_scanner_string("--server=10.0.2.1:30/?40"), make_scanner_string("10.0.2.1"), __check_host }, + { ARRAY, make_scanner_string("--server=example.com:1024/?30"), make_scanner_string("example.com"), __check_host }, + { ARRAY, make_scanner_string("--server=10.0.2.1/?20"), make_scanner_string("10.0.2.1"), __check_host }, + { ARRAY, make_scanner_string("--server=example.com/?10"), make_scanner_string("example.com"), __check_host }, + { NIL, scanner_string_null, scanner_string_null, NULL } }; - scanner_variable_t bad_test_strings[]= { { ARRAY, make_scanner_string("-servers=localhost:11221,localhost:11222,localhost:11223,localhost:11224,localhost:11225"), scanner_string_null, NULL }, { ARRAY, make_scanner_string("-- servers=a.example.com:81,localhost:82,b.example.com"), scanner_string_null, NULL }, - { ARRAY, make_scanner_string("--servers=localhost+80"), scanner_string_null, NULL}, + { ARRAY, make_scanner_string("--servers=localhost:+80"), scanner_string_null, NULL}, { ARRAY, make_scanner_string("--servers=localhost.com."), scanner_string_null, NULL}, { ARRAY, make_scanner_string("--server=localhost.com."), scanner_string_null, NULL}, { ARRAY, make_scanner_string("--server=localhost.com.:80"), scanner_string_null, NULL}, @@ -195,7 +195,6 @@ scanner_variable_t test_boolean_options[]= { { ARRAY, make_scanner_string("--BINARY_PROTOCOL"), scanner_string_null, NULL }, { ARRAY, make_scanner_string("--BUFFER_REQUESTS"), scanner_string_null, NULL }, { ARRAY, make_scanner_string("--HASH_WITH_PREFIX_KEY"), scanner_string_null, NULL }, - { ARRAY, make_scanner_string("--KETAMA_WEIGHTED"), scanner_string_null, NULL }, { ARRAY, make_scanner_string("--NOREPLY"), scanner_string_null, __check_NOREPLY }, { ARRAY, make_scanner_string("--RANDOMIZE_REPLICA_READ"), scanner_string_null, NULL }, { ARRAY, make_scanner_string("--SORT_HOSTS"), scanner_string_null, NULL }, @@ -250,13 +249,17 @@ static test_return_t _test_option(scanner_variable_t *scanner, bool test_true= t if (test_true) { if (rc != MEMCACHED_SUCCESS) + { memcached_error_print(memc); + } test_true(rc == MEMCACHED_SUCCESS); if (ptr->check_func) { - (*ptr->check_func)(memc, ptr->result); + test_return_t test_rc= (*ptr->check_func)(memc, ptr->result); + if (test_rc != TEST_SUCCESS) + return test_rc; } } else @@ -270,28 +273,19 @@ static test_return_t _test_option(scanner_variable_t *scanner, bool test_true= t return TEST_SUCCESS; } -test_return_t server_test(memcached_st *junk) +test_return_t server_test(memcached_st *) { - (void)junk; return _test_option(test_server_strings); } -test_return_t servers_test(memcached_st *junk) +test_return_t server_with_weight_test(memcached_st *) { - (void)junk; + return _test_option(test_server_strings_with_weights); +} +test_return_t servers_bad_test(memcached_st *) +{ test_return_t rc; - if ((rc= _test_option(test_server_strings)) != TEST_SUCCESS) - { - return rc; - } - -#if 0 - memcached_server_fn callbacks[1]; - callbacks[0]= server_print_callback; - memcached_server_cursor(memc, callbacks, NULL, 1); -#endif - if ((rc= _test_option(bad_test_strings, false)) != TEST_SUCCESS) { return rc; @@ -300,48 +294,40 @@ test_return_t servers_test(memcached_st *junk) return TEST_SUCCESS; } -test_return_t parser_number_options_test(memcached_st *junk) +test_return_t parser_number_options_test(memcached_st*) { - (void)junk; return _test_option(test_number_options); } -test_return_t parser_boolean_options_test(memcached_st *junk) +test_return_t parser_boolean_options_test(memcached_st*) { - (void)junk; return _test_option(test_boolean_options); } -test_return_t behavior_parser_test(memcached_st *junk) +test_return_t behavior_parser_test(memcached_st*) { - (void)junk; return TEST_SUCCESS; } -test_return_t parser_hash_test(memcached_st *junk) +test_return_t parser_hash_test(memcached_st*) { - (void)junk; return _test_option(hash_strings); } -test_return_t parser_distribution_test(memcached_st *junk) +test_return_t parser_distribution_test(memcached_st*) { - (void)junk; return _test_option(distribution_strings); } -test_return_t parser_key_prefix_test(memcached_st *junk) +test_return_t parser_key_prefix_test(memcached_st*) { - (void)junk; return _test_option(distribution_strings); } #define SUPPORT_EXAMPLE_CNF "support/example.cnf" -test_return_t memcached_parse_configure_file_test(memcached_st *junk) +test_return_t memcached_parse_configure_file_test(memcached_st*) { - (void)junk; - if (access(SUPPORT_EXAMPLE_CNF, R_OK)) return TEST_SKIPPED; @@ -357,9 +343,8 @@ test_return_t memcached_parse_configure_file_test(memcached_st *junk) return TEST_SUCCESS; } -test_return_t memcached_create_with_options_with_filename(memcached_st *junk) +test_return_t memcached_create_with_options_with_filename(memcached_st*) { - (void)junk; if (access(SUPPORT_EXAMPLE_CNF, R_OK)) return TEST_SKIPPED; @@ -371,10 +356,8 @@ test_return_t memcached_create_with_options_with_filename(memcached_st *junk) return TEST_SUCCESS; } -test_return_t libmemcached_check_configuration_with_filename_test(memcached_st *junk) +test_return_t libmemcached_check_configuration_with_filename_test(memcached_st*) { - (void)junk; - if (access(SUPPORT_EXAMPLE_CNF, R_OK)) return TEST_SKIPPED; @@ -393,10 +376,8 @@ test_return_t libmemcached_check_configuration_with_filename_test(memcached_st * return TEST_SUCCESS; } -test_return_t libmemcached_check_configuration_test(memcached_st *junk) +test_return_t libmemcached_check_configuration_test(memcached_st*) { - (void)junk; - memcached_return_t rc; char buffer[BUFSIZ]; @@ -410,10 +391,8 @@ test_return_t libmemcached_check_configuration_test(memcached_st *junk) return TEST_SUCCESS; } -test_return_t memcached_create_with_options_test(memcached_st *junk) +test_return_t memcached_create_with_options_test(memcached_st*) { - (void)junk; - memcached_st *memc_ptr; memc_ptr= memcached_create_with_options(STRING_WITH_LEN("--server=localhost")); test_true_got(memc_ptr, memcached_last_error_message(memc_ptr)); @@ -425,12 +404,11 @@ test_return_t memcached_create_with_options_test(memcached_st *junk) return TEST_SUCCESS; } -test_return_t test_include_keyword(memcached_st *junk) +test_return_t test_include_keyword(memcached_st*) { if (access(SUPPORT_EXAMPLE_CNF, R_OK)) return TEST_SKIPPED; - (void)junk; char buffer[BUFSIZ]; memcached_return_t rc; rc= libmemcached_check_configuration(STRING_WITH_LEN("INCLUDE \"support/example.cnf\""), buffer, sizeof(buffer)); @@ -439,9 +417,8 @@ test_return_t test_include_keyword(memcached_st *junk) return TEST_SUCCESS; } -test_return_t test_end_keyword(memcached_st *junk) +test_return_t test_end_keyword(memcached_st*) { - (void)junk; char buffer[BUFSIZ]; memcached_return_t rc; rc= libmemcached_check_configuration(STRING_WITH_LEN("--server=localhost END bad keywords"), buffer, sizeof(buffer)); @@ -450,9 +427,8 @@ test_return_t test_end_keyword(memcached_st *junk) return TEST_SUCCESS; } -test_return_t test_reset_keyword(memcached_st *junk) +test_return_t test_reset_keyword(memcached_st*) { - (void)junk; char buffer[BUFSIZ]; memcached_return_t rc; rc= libmemcached_check_configuration(STRING_WITH_LEN("--server=localhost reset --server=bad.com"), buffer, sizeof(buffer)); @@ -461,9 +437,8 @@ test_return_t test_reset_keyword(memcached_st *junk) return TEST_SUCCESS; } -test_return_t test_error_keyword(memcached_st *junk) +test_return_t test_error_keyword(memcached_st*) { - (void)junk; char buffer[BUFSIZ]; memcached_return_t rc; rc= libmemcached_check_configuration(STRING_WITH_LEN("--server=localhost ERROR --server=bad.com"), buffer, sizeof(buffer)); @@ -473,19 +448,13 @@ test_return_t test_error_keyword(memcached_st *junk) } #define RANDOM_STRINGS 50 -test_return_t random_statement_build_test(memcached_st *junk) +test_return_t random_statement_build_test(memcached_st*) { - (void)junk; std::vector option_list; for (scanner_variable_t *ptr= test_server_strings; ptr->type != NIL; ptr++) option_list.push_back(&ptr->option); -#if 0 - for (scanner_variable_t *ptr= test_servers_strings; ptr->type != NIL; ptr++) - option_list.push_back(&ptr->option); -#endif - for (scanner_variable_t *ptr= test_number_options; ptr->type != NIL; ptr++) option_list.push_back(&ptr->option); diff --git a/tests/parser.h b/tests/parser.h index b21cdf70..c12a7bdf 100644 --- a/tests/parser.h +++ b/tests/parser.h @@ -47,55 +47,58 @@ LIBTEST_INTERNAL_API test_return_t server_test(memcached_st *memc); LIBTEST_INTERNAL_API -test_return_t servers_test(memcached_st *memc); +test_return_t servers_bad_test(memcached_st *memc); LIBTEST_INTERNAL_API -test_return_t behavior_parser_test(memcached_st *junk); +test_return_t behavior_parser_test(memcached_st*); LIBTEST_INTERNAL_API -test_return_t parser_number_options_test(memcached_st *junk); +test_return_t parser_number_options_test(memcached_st*); LIBTEST_INTERNAL_API -test_return_t parser_distribution_test(memcached_st *junk); +test_return_t parser_distribution_test(memcached_st*); LIBTEST_INTERNAL_API -test_return_t parser_hash_test(memcached_st *junk); +test_return_t parser_hash_test(memcached_st*); LIBTEST_INTERNAL_API -test_return_t parser_boolean_options_test(memcached_st *junk); +test_return_t parser_boolean_options_test(memcached_st*); LIBTEST_INTERNAL_API -test_return_t parser_key_prefix_test(memcached_st *junk); +test_return_t parser_key_prefix_test(memcached_st*); LIBTEST_INTERNAL_API -test_return_t memcached_parse_configure_file_test(memcached_st *junk); +test_return_t memcached_parse_configure_file_test(memcached_st*); LIBTEST_INTERNAL_API - test_return_t libmemcached_check_configuration_test(memcached_st *junk); + test_return_t libmemcached_check_configuration_test(memcached_st*); LIBTEST_INTERNAL_API - test_return_t memcached_create_with_options_test(memcached_st *junk); + test_return_t memcached_create_with_options_test(memcached_st*); LIBTEST_INTERNAL_API - test_return_t memcached_create_with_options_with_filename(memcached_st *junk); + test_return_t memcached_create_with_options_with_filename(memcached_st*); LIBTEST_INTERNAL_API - test_return_t libmemcached_check_configuration_with_filename_test(memcached_st *junk); + test_return_t libmemcached_check_configuration_with_filename_test(memcached_st*); LIBTEST_INTERNAL_API - test_return_t random_statement_build_test(memcached_st *junk); + test_return_t random_statement_build_test(memcached_st*); LIBTEST_INTERNAL_API -test_return_t test_include_keyword(memcached_st *junk); +test_return_t test_include_keyword(memcached_st*); LIBTEST_INTERNAL_API -test_return_t test_end_keyword(memcached_st *junk); +test_return_t test_end_keyword(memcached_st*); LIBTEST_INTERNAL_API -test_return_t test_reset_keyword(memcached_st *junk); +test_return_t test_reset_keyword(memcached_st*); LIBTEST_INTERNAL_API -test_return_t test_error_keyword(memcached_st *junk); +test_return_t test_error_keyword(memcached_st*); + +LIBTEST_INTERNAL_API +test_return_t server_with_weight_test(memcached_st *); #ifdef __cplusplus }