1 /* A Bison parser, made by GNU Bison 3.8.2. */
2
3 /* Bison implementation for Yacc-like parsers in C
4
5 Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
6 Inc.
7
8 This program is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <https://www.gnu.org/licenses/>. */
20
21 /* As a special exception, you may create a larger work that contains
22 part or all of the Bison parser skeleton and distribute that work
23 under terms of your choice, so long as that work isn't itself a
24 parser generator using the skeleton or a modified version thereof
25 as a parser skeleton. Alternatively, if you modify or redistribute
26 the parser skeleton itself, you may (at your option) remove this
27 special exception, which will cause the skeleton and the resulting
28 Bison output files to be licensed under the GNU General Public
29 License without this special exception.
30
31 This special exception was added by the Free Software Foundation in
32 version 2.2 of Bison. */
33
34 /* C LALR(1) parser skeleton written by Richard Stallman, by
35 simplifying the original so-called "semantic" parser. */
36
37 /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
38 especially those whose name start with YY_ or yy_. They are
39 private implementation details that can be changed or removed. */
40
41 /* All symbols defined below should begin with yy or YY, to avoid
42 infringing on user name space. This should be done even for local
43 variables, as they might otherwise be expanded by user macros.
44 There are some unavoidable exceptions within include files to
45 define necessary library symbols; they are noted "INFRINGES ON
46 USER NAME SPACE" below. */
47
48 /* Identify Bison output, and Bison version. */
49 #define YYBISON 30802
50
51 /* Bison version string. */
52 #define YYBISON_VERSION "3.8.2"
53
54 /* Skeleton name. */
55 #define YYSKELETON_NAME "yacc.c"
56
57 /* Pure parsers. */
58 #define YYPURE 1
59
60 /* Push parsers. */
61 #define YYPUSH 0
62
63 /* Pull parsers. */
64 #define YYPULL 1
65
66 /* Substitute the type names. */
67 #define YYSTYPE FILTER_EXPR_STYPE
68 #define YYLTYPE FILTER_EXPR_LTYPE
69 /* Substitute the variable and function names. */
70 #define yyparse filter_expr_parse
71 #define yylex filter_expr_lex
72 #define yyerror filter_expr_error
73 #define yydebug filter_expr_debug
74 #define yynerrs filter_expr_nerrs
75
76
77 # ifndef YY_CAST
78 # ifdef __cplusplus
79 # define YY_CAST(Type, Val) static_cast<Type> (Val)
80 # define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
81 # else
82 # define YY_CAST(Type, Val) ((Type) (Val))
83 # define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
84 # endif
85 # endif
86 # ifndef YY_NULLPTR
87 # if defined __cplusplus
88 # if 201103L <= __cplusplus
89 # define YY_NULLPTR nullptr
90 # else
91 # define YY_NULLPTR 0
92 # endif
93 # else
94 # define YY_NULLPTR ((void*)0)
95 # endif
96 # endif
97
98 /* Use api.header.include to #include this header
99 instead of duplicating it here. */
100 #ifndef YY_FILTER_EXPR_LIB_FILTER_FILTER_EXPR_GRAMMAR_H_INCLUDED
101 # define YY_FILTER_EXPR_LIB_FILTER_FILTER_EXPR_GRAMMAR_H_INCLUDED
102 /* Debug traces. */
103 #ifndef FILTER_EXPR_DEBUG
104 # if defined YYDEBUG
105 #if YYDEBUG
106 # define FILTER_EXPR_DEBUG 1
107 # else
108 # define FILTER_EXPR_DEBUG 0
109 # endif
110 # else /* ! defined YYDEBUG */
111 # define FILTER_EXPR_DEBUG 0
112 # endif /* ! defined YYDEBUG */
113 #endif /* ! defined FILTER_EXPR_DEBUG */
114 #if FILTER_EXPR_DEBUG
115 extern int filter_expr_debug;
116 #endif
117 /* "%code requires" blocks. */
118 #line 25 "lib/filter/filter-expr-grammar.y"
119
120
121 #include "filter/filter-expr-parser.h"
122
123
124 #line 125 "lib/filter/filter-expr-grammar.c"
125
126 /* Token kinds. */
127 #ifndef FILTER_EXPR_TOKENTYPE
128 # define FILTER_EXPR_TOKENTYPE
129 enum filter_expr_tokentype
130 {
131 FILTER_EXPR_EMPTY = -2,
132 FILTER_EXPR_EOF = 0, /* "end of file" */
133 FILTER_EXPR_error = 256, /* error */
134 FILTER_EXPR_UNDEF = 10514, /* "invalid token" */
135 LL_CONTEXT_ROOT = 1, /* LL_CONTEXT_ROOT */
136 LL_CONTEXT_DESTINATION = 2, /* LL_CONTEXT_DESTINATION */
137 LL_CONTEXT_SOURCE = 3, /* LL_CONTEXT_SOURCE */
138 LL_CONTEXT_PARSER = 4, /* LL_CONTEXT_PARSER */
139 LL_CONTEXT_REWRITE = 5, /* LL_CONTEXT_REWRITE */
140 LL_CONTEXT_FILTER = 6, /* LL_CONTEXT_FILTER */
141 LL_CONTEXT_LOG = 7, /* LL_CONTEXT_LOG */
142 LL_CONTEXT_BLOCK_DEF = 8, /* LL_CONTEXT_BLOCK_DEF */
143 LL_CONTEXT_BLOCK_REF = 9, /* LL_CONTEXT_BLOCK_REF */
144 LL_CONTEXT_BLOCK_CONTENT = 10, /* LL_CONTEXT_BLOCK_CONTENT */
145 LL_CONTEXT_BLOCK_ARG = 11, /* LL_CONTEXT_BLOCK_ARG */
146 LL_CONTEXT_PRAGMA = 12, /* LL_CONTEXT_PRAGMA */
147 LL_CONTEXT_FORMAT = 13, /* LL_CONTEXT_FORMAT */
148 LL_CONTEXT_TEMPLATE_FUNC = 14, /* LL_CONTEXT_TEMPLATE_FUNC */
149 LL_CONTEXT_INNER_DEST = 15, /* LL_CONTEXT_INNER_DEST */
150 LL_CONTEXT_INNER_SRC = 16, /* LL_CONTEXT_INNER_SRC */
151 LL_CONTEXT_CLIENT_PROTO = 17, /* LL_CONTEXT_CLIENT_PROTO */
152 LL_CONTEXT_SERVER_PROTO = 18, /* LL_CONTEXT_SERVER_PROTO */
153 LL_CONTEXT_OPTIONS = 19, /* LL_CONTEXT_OPTIONS */
154 LL_CONTEXT_CONFIG = 20, /* LL_CONTEXT_CONFIG */
155 LL_CONTEXT_MAX = 21, /* LL_CONTEXT_MAX */
156 KW_SOURCE = 10000, /* KW_SOURCE */
157 KW_FILTER = 10001, /* KW_FILTER */
158 KW_PARSER = 10002, /* KW_PARSER */
159 KW_DESTINATION = 10003, /* KW_DESTINATION */
160 KW_LOG = 10004, /* KW_LOG */
161 KW_OPTIONS = 10005, /* KW_OPTIONS */
162 KW_INCLUDE = 10006, /* KW_INCLUDE */
163 KW_BLOCK = 10007, /* KW_BLOCK */
164 KW_JUNCTION = 10008, /* KW_JUNCTION */
165 KW_CHANNEL = 10009, /* KW_CHANNEL */
166 KW_IF = 10010, /* KW_IF */
167 KW_ELSE = 10011, /* KW_ELSE */
168 KW_ELIF = 10012, /* KW_ELIF */
169 KW_INTERNAL = 10020, /* KW_INTERNAL */
170 KW_SYSLOG = 10060, /* KW_SYSLOG */
171 KW_MARK_FREQ = 10071, /* KW_MARK_FREQ */
172 KW_STATS_FREQ = 10072, /* KW_STATS_FREQ */
173 KW_STATS_LEVEL = 10073, /* KW_STATS_LEVEL */
174 KW_STATS_LIFETIME = 10074, /* KW_STATS_LIFETIME */
175 KW_FLUSH_LINES = 10075, /* KW_FLUSH_LINES */
176 KW_SUPPRESS = 10076, /* KW_SUPPRESS */
177 KW_FLUSH_TIMEOUT = 10077, /* KW_FLUSH_TIMEOUT */
178 KW_LOG_MSG_SIZE = 10078, /* KW_LOG_MSG_SIZE */
179 KW_FILE_TEMPLATE = 10079, /* KW_FILE_TEMPLATE */
180 KW_PROTO_TEMPLATE = 10080, /* KW_PROTO_TEMPLATE */
181 KW_MARK_MODE = 10081, /* KW_MARK_MODE */
182 KW_ENCODING = 10082, /* KW_ENCODING */
183 KW_TYPE = 10083, /* KW_TYPE */
184 KW_STATS_MAX_DYNAMIC = 10084, /* KW_STATS_MAX_DYNAMIC */
185 KW_MIN_IW_SIZE_PER_READER = 10085, /* KW_MIN_IW_SIZE_PER_READER */
186 KW_WORKERS = 10086, /* KW_WORKERS */
187 KW_BATCH_LINES = 10087, /* KW_BATCH_LINES */
188 KW_BATCH_TIMEOUT = 10088, /* KW_BATCH_TIMEOUT */
189 KW_TRIM_LARGE_MESSAGES = 10089, /* KW_TRIM_LARGE_MESSAGES */
190 KW_CHAIN_HOSTNAMES = 10090, /* KW_CHAIN_HOSTNAMES */
191 KW_NORMALIZE_HOSTNAMES = 10091, /* KW_NORMALIZE_HOSTNAMES */
192 KW_KEEP_HOSTNAME = 10092, /* KW_KEEP_HOSTNAME */
193 KW_CHECK_HOSTNAME = 10093, /* KW_CHECK_HOSTNAME */
194 KW_BAD_HOSTNAME = 10094, /* KW_BAD_HOSTNAME */
195 KW_KEEP_TIMESTAMP = 10100, /* KW_KEEP_TIMESTAMP */
196 KW_USE_DNS = 10110, /* KW_USE_DNS */
197 KW_USE_FQDN = 10111, /* KW_USE_FQDN */
198 KW_CUSTOM_DOMAIN = 10112, /* KW_CUSTOM_DOMAIN */
199 KW_DNS_CACHE = 10120, /* KW_DNS_CACHE */
200 KW_DNS_CACHE_SIZE = 10121, /* KW_DNS_CACHE_SIZE */
201 KW_DNS_CACHE_EXPIRE = 10130, /* KW_DNS_CACHE_EXPIRE */
202 KW_DNS_CACHE_EXPIRE_FAILED = 10131, /* KW_DNS_CACHE_EXPIRE_FAILED */
203 KW_DNS_CACHE_HOSTS = 10132, /* KW_DNS_CACHE_HOSTS */
204 KW_PERSIST_ONLY = 10140, /* KW_PERSIST_ONLY */
205 KW_USE_RCPTID = 10141, /* KW_USE_RCPTID */
206 KW_USE_UNIQID = 10142, /* KW_USE_UNIQID */
207 KW_TZ_CONVERT = 10150, /* KW_TZ_CONVERT */
208 KW_TS_FORMAT = 10151, /* KW_TS_FORMAT */
209 KW_FRAC_DIGITS = 10152, /* KW_FRAC_DIGITS */
210 KW_LOG_FIFO_SIZE = 10160, /* KW_LOG_FIFO_SIZE */
211 KW_LOG_FETCH_LIMIT = 10162, /* KW_LOG_FETCH_LIMIT */
212 KW_LOG_IW_SIZE = 10163, /* KW_LOG_IW_SIZE */
213 KW_LOG_PREFIX = 10164, /* KW_LOG_PREFIX */
214 KW_PROGRAM_OVERRIDE = 10165, /* KW_PROGRAM_OVERRIDE */
215 KW_HOST_OVERRIDE = 10166, /* KW_HOST_OVERRIDE */
216 KW_THROTTLE = 10170, /* KW_THROTTLE */
217 KW_THREADED = 10171, /* KW_THREADED */
218 KW_PASS_UNIX_CREDENTIALS = 10231, /* KW_PASS_UNIX_CREDENTIALS */
219 KW_PERSIST_NAME = 10302, /* KW_PERSIST_NAME */
220 KW_READ_OLD_RECORDS = 10304, /* KW_READ_OLD_RECORDS */
221 KW_USE_SYSLOGNG_PID = 10305, /* KW_USE_SYSLOGNG_PID */
222 KW_FLAGS = 10190, /* KW_FLAGS */
223 KW_PAD_SIZE = 10200, /* KW_PAD_SIZE */
224 KW_TIME_ZONE = 10201, /* KW_TIME_ZONE */
225 KW_RECV_TIME_ZONE = 10202, /* KW_RECV_TIME_ZONE */
226 KW_SEND_TIME_ZONE = 10203, /* KW_SEND_TIME_ZONE */
227 KW_LOCAL_TIME_ZONE = 10204, /* KW_LOCAL_TIME_ZONE */
228 KW_FORMAT = 10205, /* KW_FORMAT */
229 KW_TRUNCATE_SIZE = 10206, /* KW_TRUNCATE_SIZE */
230 KW_TIME_REOPEN = 10210, /* KW_TIME_REOPEN */
231 KW_TIME_REAP = 10211, /* KW_TIME_REAP */
232 KW_TIME_SLEEP = 10212, /* KW_TIME_SLEEP */
233 KW_TMPL_ESCAPE = 10220, /* KW_TMPL_ESCAPE */
234 KW_OPTIONAL = 10230, /* KW_OPTIONAL */
235 KW_CREATE_DIRS = 10240, /* KW_CREATE_DIRS */
236 KW_OWNER = 10250, /* KW_OWNER */
237 KW_GROUP = 10251, /* KW_GROUP */
238 KW_PERM = 10252, /* KW_PERM */
239 KW_DIR_OWNER = 10260, /* KW_DIR_OWNER */
240 KW_DIR_GROUP = 10261, /* KW_DIR_GROUP */
241 KW_DIR_PERM = 10262, /* KW_DIR_PERM */
242 KW_TEMPLATE = 10270, /* KW_TEMPLATE */
243 KW_TEMPLATE_ESCAPE = 10271, /* KW_TEMPLATE_ESCAPE */
244 KW_TEMPLATE_FUNCTION = 10272, /* KW_TEMPLATE_FUNCTION */
245 KW_DEFAULT_FACILITY = 10300, /* KW_DEFAULT_FACILITY */
246 KW_DEFAULT_SEVERITY = 10301, /* KW_DEFAULT_SEVERITY */
247 KW_PORT = 10323, /* KW_PORT */
248 KW_USE_TIME_RECVD = 10340, /* KW_USE_TIME_RECVD */
249 KW_FACILITY = 10350, /* KW_FACILITY */
250 KW_SEVERITY = 10351, /* KW_SEVERITY */
251 KW_HOST = 10352, /* KW_HOST */
252 KW_MATCH = 10353, /* KW_MATCH */
253 KW_MESSAGE = 10354, /* KW_MESSAGE */
254 KW_NETMASK = 10355, /* KW_NETMASK */
255 KW_TAGS = 10356, /* KW_TAGS */
256 KW_NETMASK6 = 10357, /* KW_NETMASK6 */
257 KW_REWRITE = 10370, /* KW_REWRITE */
258 KW_CONDITION = 10371, /* KW_CONDITION */
259 KW_VALUE = 10372, /* KW_VALUE */
260 KW_YES = 10380, /* KW_YES */
261 KW_NO = 10381, /* KW_NO */
262 KW_IFDEF = 10410, /* KW_IFDEF */
263 KW_ENDIF = 10411, /* KW_ENDIF */
264 LL_DOTDOT = 10420, /* LL_DOTDOT */
265 LL_DOTDOTDOT = 10421, /* LL_DOTDOTDOT */
266 LL_PRAGMA = 10422, /* LL_PRAGMA */
267 LL_EOL = 10423, /* LL_EOL */
268 LL_ERROR = 10424, /* LL_ERROR */
269 LL_ARROW = 10425, /* LL_ARROW */
270 LL_IDENTIFIER = 10430, /* LL_IDENTIFIER */
271 LL_NUMBER = 10431, /* LL_NUMBER */
272 LL_FLOAT = 10432, /* LL_FLOAT */
273 LL_STRING = 10433, /* LL_STRING */
274 LL_TOKEN = 10434, /* LL_TOKEN */
275 LL_BLOCK = 10435, /* LL_BLOCK */
276 KW_VALUE_PAIRS = 10500, /* KW_VALUE_PAIRS */
277 KW_EXCLUDE = 10502, /* KW_EXCLUDE */
278 KW_PAIR = 10503, /* KW_PAIR */
279 KW_KEY = 10504, /* KW_KEY */
280 KW_SCOPE = 10505, /* KW_SCOPE */
281 KW_SHIFT = 10506, /* KW_SHIFT */
282 KW_SHIFT_LEVELS = 10507, /* KW_SHIFT_LEVELS */
283 KW_REKEY = 10508, /* KW_REKEY */
284 KW_ADD_PREFIX = 10509, /* KW_ADD_PREFIX */
285 KW_REPLACE_PREFIX = 10510, /* KW_REPLACE_PREFIX */
286 KW_ON_ERROR = 10511, /* KW_ON_ERROR */
287 KW_RETRIES = 10512, /* KW_RETRIES */
288 KW_FETCH_NO_DATA_DELAY = 10513, /* KW_FETCH_NO_DATA_DELAY */
289 KW_PROGRAM = 10515, /* KW_PROGRAM */
290 KW_IN_LIST = 10516, /* KW_IN_LIST */
291 KW_RATE = 10517, /* KW_RATE */
292 KW_OR = 10518, /* KW_OR */
293 KW_AND = 10519, /* KW_AND */
294 KW_NOT = 10520, /* KW_NOT */
295 KW_LT = 10521, /* KW_LT */
296 KW_LE = 10522, /* KW_LE */
297 KW_EQ = 10523, /* KW_EQ */
298 KW_NE = 10524, /* KW_NE */
299 KW_GE = 10525, /* KW_GE */
300 KW_GT = 10526, /* KW_GT */
301 KW_NUM_LT = 10527, /* KW_NUM_LT */
302 KW_NUM_LE = 10528, /* KW_NUM_LE */
303 KW_NUM_EQ = 10529, /* KW_NUM_EQ */
304 KW_NUM_NE = 10530, /* KW_NUM_NE */
305 KW_NUM_GE = 10531, /* KW_NUM_GE */
306 KW_NUM_GT = 10532 /* KW_NUM_GT */
307 };
308 typedef enum filter_expr_tokentype filter_expr_token_kind_t;
309 #endif
310 /* Token kinds. */
311 #define FILTER_EXPR_EMPTY -2
312 #define FILTER_EXPR_EOF 0
313 #define FILTER_EXPR_error 256
314 #define FILTER_EXPR_UNDEF 10514
315 #define LL_CONTEXT_ROOT 1
316 #define LL_CONTEXT_DESTINATION 2
317 #define LL_CONTEXT_SOURCE 3
318 #define LL_CONTEXT_PARSER 4
319 #define LL_CONTEXT_REWRITE 5
320 #define LL_CONTEXT_FILTER 6
321 #define LL_CONTEXT_LOG 7
322 #define LL_CONTEXT_BLOCK_DEF 8
323 #define LL_CONTEXT_BLOCK_REF 9
324 #define LL_CONTEXT_BLOCK_CONTENT 10
325 #define LL_CONTEXT_BLOCK_ARG 11
326 #define LL_CONTEXT_PRAGMA 12
327 #define LL_CONTEXT_FORMAT 13
328 #define LL_CONTEXT_TEMPLATE_FUNC 14
329 #define LL_CONTEXT_INNER_DEST 15
330 #define LL_CONTEXT_INNER_SRC 16
331 #define LL_CONTEXT_CLIENT_PROTO 17
332 #define LL_CONTEXT_SERVER_PROTO 18
333 #define LL_CONTEXT_OPTIONS 19
334 #define LL_CONTEXT_CONFIG 20
335 #define LL_CONTEXT_MAX 21
336 #define KW_SOURCE 10000
337 #define KW_FILTER 10001
338 #define KW_PARSER 10002
339 #define KW_DESTINATION 10003
340 #define KW_LOG 10004
341 #define KW_OPTIONS 10005
342 #define KW_INCLUDE 10006
343 #define KW_BLOCK 10007
344 #define KW_JUNCTION 10008
345 #define KW_CHANNEL 10009
346 #define KW_IF 10010
347 #define KW_ELSE 10011
348 #define KW_ELIF 10012
349 #define KW_INTERNAL 10020
350 #define KW_SYSLOG 10060
351 #define KW_MARK_FREQ 10071
352 #define KW_STATS_FREQ 10072
353 #define KW_STATS_LEVEL 10073
354 #define KW_STATS_LIFETIME 10074
355 #define KW_FLUSH_LINES 10075
356 #define KW_SUPPRESS 10076
357 #define KW_FLUSH_TIMEOUT 10077
358 #define KW_LOG_MSG_SIZE 10078
359 #define KW_FILE_TEMPLATE 10079
360 #define KW_PROTO_TEMPLATE 10080
361 #define KW_MARK_MODE 10081
362 #define KW_ENCODING 10082
363 #define KW_TYPE 10083
364 #define KW_STATS_MAX_DYNAMIC 10084
365 #define KW_MIN_IW_SIZE_PER_READER 10085
366 #define KW_WORKERS 10086
367 #define KW_BATCH_LINES 10087
368 #define KW_BATCH_TIMEOUT 10088
369 #define KW_TRIM_LARGE_MESSAGES 10089
370 #define KW_CHAIN_HOSTNAMES 10090
371 #define KW_NORMALIZE_HOSTNAMES 10091
372 #define KW_KEEP_HOSTNAME 10092
373 #define KW_CHECK_HOSTNAME 10093
374 #define KW_BAD_HOSTNAME 10094
375 #define KW_KEEP_TIMESTAMP 10100
376 #define KW_USE_DNS 10110
377 #define KW_USE_FQDN 10111
378 #define KW_CUSTOM_DOMAIN 10112
379 #define KW_DNS_CACHE 10120
380 #define KW_DNS_CACHE_SIZE 10121
381 #define KW_DNS_CACHE_EXPIRE 10130
382 #define KW_DNS_CACHE_EXPIRE_FAILED 10131
383 #define KW_DNS_CACHE_HOSTS 10132
384 #define KW_PERSIST_ONLY 10140
385 #define KW_USE_RCPTID 10141
386 #define KW_USE_UNIQID 10142
387 #define KW_TZ_CONVERT 10150
388 #define KW_TS_FORMAT 10151
389 #define KW_FRAC_DIGITS 10152
390 #define KW_LOG_FIFO_SIZE 10160
391 #define KW_LOG_FETCH_LIMIT 10162
392 #define KW_LOG_IW_SIZE 10163
393 #define KW_LOG_PREFIX 10164
394 #define KW_PROGRAM_OVERRIDE 10165
395 #define KW_HOST_OVERRIDE 10166
396 #define KW_THROTTLE 10170
397 #define KW_THREADED 10171
398 #define KW_PASS_UNIX_CREDENTIALS 10231
399 #define KW_PERSIST_NAME 10302
400 #define KW_READ_OLD_RECORDS 10304
401 #define KW_USE_SYSLOGNG_PID 10305
402 #define KW_FLAGS 10190
403 #define KW_PAD_SIZE 10200
404 #define KW_TIME_ZONE 10201
405 #define KW_RECV_TIME_ZONE 10202
406 #define KW_SEND_TIME_ZONE 10203
407 #define KW_LOCAL_TIME_ZONE 10204
408 #define KW_FORMAT 10205
409 #define KW_TRUNCATE_SIZE 10206
410 #define KW_TIME_REOPEN 10210
411 #define KW_TIME_REAP 10211
412 #define KW_TIME_SLEEP 10212
413 #define KW_TMPL_ESCAPE 10220
414 #define KW_OPTIONAL 10230
415 #define KW_CREATE_DIRS 10240
416 #define KW_OWNER 10250
417 #define KW_GROUP 10251
418 #define KW_PERM 10252
419 #define KW_DIR_OWNER 10260
420 #define KW_DIR_GROUP 10261
421 #define KW_DIR_PERM 10262
422 #define KW_TEMPLATE 10270
423 #define KW_TEMPLATE_ESCAPE 10271
424 #define KW_TEMPLATE_FUNCTION 10272
425 #define KW_DEFAULT_FACILITY 10300
426 #define KW_DEFAULT_SEVERITY 10301
427 #define KW_PORT 10323
428 #define KW_USE_TIME_RECVD 10340
429 #define KW_FACILITY 10350
430 #define KW_SEVERITY 10351
431 #define KW_HOST 10352
432 #define KW_MATCH 10353
433 #define KW_MESSAGE 10354
434 #define KW_NETMASK 10355
435 #define KW_TAGS 10356
436 #define KW_NETMASK6 10357
437 #define KW_REWRITE 10370
438 #define KW_CONDITION 10371
439 #define KW_VALUE 10372
440 #define KW_YES 10380
441 #define KW_NO 10381
442 #define KW_IFDEF 10410
443 #define KW_ENDIF 10411
444 #define LL_DOTDOT 10420
445 #define LL_DOTDOTDOT 10421
446 #define LL_PRAGMA 10422
447 #define LL_EOL 10423
448 #define LL_ERROR 10424
449 #define LL_ARROW 10425
450 #define LL_IDENTIFIER 10430
451 #define LL_NUMBER 10431
452 #define LL_FLOAT 10432
453 #define LL_STRING 10433
454 #define LL_TOKEN 10434
455 #define LL_BLOCK 10435
456 #define KW_VALUE_PAIRS 10500
457 #define KW_EXCLUDE 10502
458 #define KW_PAIR 10503
459 #define KW_KEY 10504
460 #define KW_SCOPE 10505
461 #define KW_SHIFT 10506
462 #define KW_SHIFT_LEVELS 10507
463 #define KW_REKEY 10508
464 #define KW_ADD_PREFIX 10509
465 #define KW_REPLACE_PREFIX 10510
466 #define KW_ON_ERROR 10511
467 #define KW_RETRIES 10512
468 #define KW_FETCH_NO_DATA_DELAY 10513
469 #define KW_PROGRAM 10515
470 #define KW_IN_LIST 10516
471 #define KW_RATE 10517
472 #define KW_OR 10518
473 #define KW_AND 10519
474 #define KW_NOT 10520
475 #define KW_LT 10521
476 #define KW_LE 10522
477 #define KW_EQ 10523
478 #define KW_NE 10524
479 #define KW_GE 10525
480 #define KW_GT 10526
481 #define KW_NUM_LT 10527
482 #define KW_NUM_LE 10528
483 #define KW_NUM_EQ 10529
484 #define KW_NUM_NE 10530
485 #define KW_NUM_GE 10531
486 #define KW_NUM_GT 10532
487
488 /* Value type. */
489 #if ! defined FILTER_EXPR_STYPE && ! defined FILTER_EXPR_STYPE_IS_DECLARED
490 typedef CFG_STYPE FILTER_EXPR_STYPE;
491 # define FILTER_EXPR_STYPE_IS_TRIVIAL 1
492 # define FILTER_EXPR_STYPE_IS_DECLARED 1
493 #endif
494
495 /* Location type. */
496 typedef CFG_LTYPE FILTER_EXPR_LTYPE;
497
498
499
500
501 int filter_expr_parse (CfgLexer *lexer, FilterExprNode **result, gpointer arg);
502
503
504 #endif /* !YY_FILTER_EXPR_LIB_FILTER_FILTER_EXPR_GRAMMAR_H_INCLUDED */
505 /* Symbol kind. */
506 enum yysymbol_kind_t
507 {
508 YYSYMBOL_YYEMPTY = -2,
509 YYSYMBOL_YYEOF = 0, /* "end of file" */
510 YYSYMBOL_YYerror = 1, /* error */
511 YYSYMBOL_YYUNDEF = 2, /* "invalid token" */
512 YYSYMBOL_LL_CONTEXT_ROOT = 3, /* LL_CONTEXT_ROOT */
513 YYSYMBOL_LL_CONTEXT_DESTINATION = 4, /* LL_CONTEXT_DESTINATION */
514 YYSYMBOL_LL_CONTEXT_SOURCE = 5, /* LL_CONTEXT_SOURCE */
515 YYSYMBOL_LL_CONTEXT_PARSER = 6, /* LL_CONTEXT_PARSER */
516 YYSYMBOL_LL_CONTEXT_REWRITE = 7, /* LL_CONTEXT_REWRITE */
517 YYSYMBOL_LL_CONTEXT_FILTER = 8, /* LL_CONTEXT_FILTER */
518 YYSYMBOL_LL_CONTEXT_LOG = 9, /* LL_CONTEXT_LOG */
519 YYSYMBOL_LL_CONTEXT_BLOCK_DEF = 10, /* LL_CONTEXT_BLOCK_DEF */
520 YYSYMBOL_LL_CONTEXT_BLOCK_REF = 11, /* LL_CONTEXT_BLOCK_REF */
521 YYSYMBOL_LL_CONTEXT_BLOCK_CONTENT = 12, /* LL_CONTEXT_BLOCK_CONTENT */
522 YYSYMBOL_LL_CONTEXT_BLOCK_ARG = 13, /* LL_CONTEXT_BLOCK_ARG */
523 YYSYMBOL_LL_CONTEXT_PRAGMA = 14, /* LL_CONTEXT_PRAGMA */
524 YYSYMBOL_LL_CONTEXT_FORMAT = 15, /* LL_CONTEXT_FORMAT */
525 YYSYMBOL_LL_CONTEXT_TEMPLATE_FUNC = 16, /* LL_CONTEXT_TEMPLATE_FUNC */
526 YYSYMBOL_LL_CONTEXT_INNER_DEST = 17, /* LL_CONTEXT_INNER_DEST */
527 YYSYMBOL_LL_CONTEXT_INNER_SRC = 18, /* LL_CONTEXT_INNER_SRC */
528 YYSYMBOL_LL_CONTEXT_CLIENT_PROTO = 19, /* LL_CONTEXT_CLIENT_PROTO */
529 YYSYMBOL_LL_CONTEXT_SERVER_PROTO = 20, /* LL_CONTEXT_SERVER_PROTO */
530 YYSYMBOL_LL_CONTEXT_OPTIONS = 21, /* LL_CONTEXT_OPTIONS */
531 YYSYMBOL_LL_CONTEXT_CONFIG = 22, /* LL_CONTEXT_CONFIG */
532 YYSYMBOL_LL_CONTEXT_MAX = 23, /* LL_CONTEXT_MAX */
533 YYSYMBOL_KW_SOURCE = 24, /* KW_SOURCE */
534 YYSYMBOL_KW_FILTER = 25, /* KW_FILTER */
535 YYSYMBOL_KW_PARSER = 26, /* KW_PARSER */
536 YYSYMBOL_KW_DESTINATION = 27, /* KW_DESTINATION */
537 YYSYMBOL_KW_LOG = 28, /* KW_LOG */
538 YYSYMBOL_KW_OPTIONS = 29, /* KW_OPTIONS */
539 YYSYMBOL_KW_INCLUDE = 30, /* KW_INCLUDE */
540 YYSYMBOL_KW_BLOCK = 31, /* KW_BLOCK */
541 YYSYMBOL_KW_JUNCTION = 32, /* KW_JUNCTION */
542 YYSYMBOL_KW_CHANNEL = 33, /* KW_CHANNEL */
543 YYSYMBOL_KW_IF = 34, /* KW_IF */
544 YYSYMBOL_KW_ELSE = 35, /* KW_ELSE */
545 YYSYMBOL_KW_ELIF = 36, /* KW_ELIF */
546 YYSYMBOL_KW_INTERNAL = 37, /* KW_INTERNAL */
547 YYSYMBOL_KW_SYSLOG = 38, /* KW_SYSLOG */
548 YYSYMBOL_KW_MARK_FREQ = 39, /* KW_MARK_FREQ */
549 YYSYMBOL_KW_STATS_FREQ = 40, /* KW_STATS_FREQ */
550 YYSYMBOL_KW_STATS_LEVEL = 41, /* KW_STATS_LEVEL */
551 YYSYMBOL_KW_STATS_LIFETIME = 42, /* KW_STATS_LIFETIME */
552 YYSYMBOL_KW_FLUSH_LINES = 43, /* KW_FLUSH_LINES */
553 YYSYMBOL_KW_SUPPRESS = 44, /* KW_SUPPRESS */
554 YYSYMBOL_KW_FLUSH_TIMEOUT = 45, /* KW_FLUSH_TIMEOUT */
555 YYSYMBOL_KW_LOG_MSG_SIZE = 46, /* KW_LOG_MSG_SIZE */
556 YYSYMBOL_KW_FILE_TEMPLATE = 47, /* KW_FILE_TEMPLATE */
557 YYSYMBOL_KW_PROTO_TEMPLATE = 48, /* KW_PROTO_TEMPLATE */
558 YYSYMBOL_KW_MARK_MODE = 49, /* KW_MARK_MODE */
559 YYSYMBOL_KW_ENCODING = 50, /* KW_ENCODING */
560 YYSYMBOL_KW_TYPE = 51, /* KW_TYPE */
561 YYSYMBOL_KW_STATS_MAX_DYNAMIC = 52, /* KW_STATS_MAX_DYNAMIC */
562 YYSYMBOL_KW_MIN_IW_SIZE_PER_READER = 53, /* KW_MIN_IW_SIZE_PER_READER */
563 YYSYMBOL_KW_WORKERS = 54, /* KW_WORKERS */
564 YYSYMBOL_KW_BATCH_LINES = 55, /* KW_BATCH_LINES */
565 YYSYMBOL_KW_BATCH_TIMEOUT = 56, /* KW_BATCH_TIMEOUT */
566 YYSYMBOL_KW_TRIM_LARGE_MESSAGES = 57, /* KW_TRIM_LARGE_MESSAGES */
567 YYSYMBOL_KW_CHAIN_HOSTNAMES = 58, /* KW_CHAIN_HOSTNAMES */
568 YYSYMBOL_KW_NORMALIZE_HOSTNAMES = 59, /* KW_NORMALIZE_HOSTNAMES */
569 YYSYMBOL_KW_KEEP_HOSTNAME = 60, /* KW_KEEP_HOSTNAME */
570 YYSYMBOL_KW_CHECK_HOSTNAME = 61, /* KW_CHECK_HOSTNAME */
571 YYSYMBOL_KW_BAD_HOSTNAME = 62, /* KW_BAD_HOSTNAME */
572 YYSYMBOL_KW_KEEP_TIMESTAMP = 63, /* KW_KEEP_TIMESTAMP */
573 YYSYMBOL_KW_USE_DNS = 64, /* KW_USE_DNS */
574 YYSYMBOL_KW_USE_FQDN = 65, /* KW_USE_FQDN */
575 YYSYMBOL_KW_CUSTOM_DOMAIN = 66, /* KW_CUSTOM_DOMAIN */
576 YYSYMBOL_KW_DNS_CACHE = 67, /* KW_DNS_CACHE */
577 YYSYMBOL_KW_DNS_CACHE_SIZE = 68, /* KW_DNS_CACHE_SIZE */
578 YYSYMBOL_KW_DNS_CACHE_EXPIRE = 69, /* KW_DNS_CACHE_EXPIRE */
579 YYSYMBOL_KW_DNS_CACHE_EXPIRE_FAILED = 70, /* KW_DNS_CACHE_EXPIRE_FAILED */
580 YYSYMBOL_KW_DNS_CACHE_HOSTS = 71, /* KW_DNS_CACHE_HOSTS */
581 YYSYMBOL_KW_PERSIST_ONLY = 72, /* KW_PERSIST_ONLY */
582 YYSYMBOL_KW_USE_RCPTID = 73, /* KW_USE_RCPTID */
583 YYSYMBOL_KW_USE_UNIQID = 74, /* KW_USE_UNIQID */
584 YYSYMBOL_KW_TZ_CONVERT = 75, /* KW_TZ_CONVERT */
585 YYSYMBOL_KW_TS_FORMAT = 76, /* KW_TS_FORMAT */
586 YYSYMBOL_KW_FRAC_DIGITS = 77, /* KW_FRAC_DIGITS */
587 YYSYMBOL_KW_LOG_FIFO_SIZE = 78, /* KW_LOG_FIFO_SIZE */
588 YYSYMBOL_KW_LOG_FETCH_LIMIT = 79, /* KW_LOG_FETCH_LIMIT */
589 YYSYMBOL_KW_LOG_IW_SIZE = 80, /* KW_LOG_IW_SIZE */
590 YYSYMBOL_KW_LOG_PREFIX = 81, /* KW_LOG_PREFIX */
591 YYSYMBOL_KW_PROGRAM_OVERRIDE = 82, /* KW_PROGRAM_OVERRIDE */
592 YYSYMBOL_KW_HOST_OVERRIDE = 83, /* KW_HOST_OVERRIDE */
593 YYSYMBOL_KW_THROTTLE = 84, /* KW_THROTTLE */
594 YYSYMBOL_KW_THREADED = 85, /* KW_THREADED */
595 YYSYMBOL_KW_PASS_UNIX_CREDENTIALS = 86, /* KW_PASS_UNIX_CREDENTIALS */
596 YYSYMBOL_KW_PERSIST_NAME = 87, /* KW_PERSIST_NAME */
597 YYSYMBOL_KW_READ_OLD_RECORDS = 88, /* KW_READ_OLD_RECORDS */
598 YYSYMBOL_KW_USE_SYSLOGNG_PID = 89, /* KW_USE_SYSLOGNG_PID */
599 YYSYMBOL_KW_FLAGS = 90, /* KW_FLAGS */
600 YYSYMBOL_KW_PAD_SIZE = 91, /* KW_PAD_SIZE */
601 YYSYMBOL_KW_TIME_ZONE = 92, /* KW_TIME_ZONE */
602 YYSYMBOL_KW_RECV_TIME_ZONE = 93, /* KW_RECV_TIME_ZONE */
603 YYSYMBOL_KW_SEND_TIME_ZONE = 94, /* KW_SEND_TIME_ZONE */
604 YYSYMBOL_KW_LOCAL_TIME_ZONE = 95, /* KW_LOCAL_TIME_ZONE */
605 YYSYMBOL_KW_FORMAT = 96, /* KW_FORMAT */
606 YYSYMBOL_KW_TRUNCATE_SIZE = 97, /* KW_TRUNCATE_SIZE */
607 YYSYMBOL_KW_TIME_REOPEN = 98, /* KW_TIME_REOPEN */
608 YYSYMBOL_KW_TIME_REAP = 99, /* KW_TIME_REAP */
609 YYSYMBOL_KW_TIME_SLEEP = 100, /* KW_TIME_SLEEP */
610 YYSYMBOL_KW_TMPL_ESCAPE = 101, /* KW_TMPL_ESCAPE */
611 YYSYMBOL_KW_OPTIONAL = 102, /* KW_OPTIONAL */
612 YYSYMBOL_KW_CREATE_DIRS = 103, /* KW_CREATE_DIRS */
613 YYSYMBOL_KW_OWNER = 104, /* KW_OWNER */
614 YYSYMBOL_KW_GROUP = 105, /* KW_GROUP */
615 YYSYMBOL_KW_PERM = 106, /* KW_PERM */
616 YYSYMBOL_KW_DIR_OWNER = 107, /* KW_DIR_OWNER */
617 YYSYMBOL_KW_DIR_GROUP = 108, /* KW_DIR_GROUP */
618 YYSYMBOL_KW_DIR_PERM = 109, /* KW_DIR_PERM */
619 YYSYMBOL_KW_TEMPLATE = 110, /* KW_TEMPLATE */
620 YYSYMBOL_KW_TEMPLATE_ESCAPE = 111, /* KW_TEMPLATE_ESCAPE */
621 YYSYMBOL_KW_TEMPLATE_FUNCTION = 112, /* KW_TEMPLATE_FUNCTION */
622 YYSYMBOL_KW_DEFAULT_FACILITY = 113, /* KW_DEFAULT_FACILITY */
623 YYSYMBOL_KW_DEFAULT_SEVERITY = 114, /* KW_DEFAULT_SEVERITY */
624 YYSYMBOL_KW_PORT = 115, /* KW_PORT */
625 YYSYMBOL_KW_USE_TIME_RECVD = 116, /* KW_USE_TIME_RECVD */
626 YYSYMBOL_KW_FACILITY = 117, /* KW_FACILITY */
627 YYSYMBOL_KW_SEVERITY = 118, /* KW_SEVERITY */
628 YYSYMBOL_KW_HOST = 119, /* KW_HOST */
629 YYSYMBOL_KW_MATCH = 120, /* KW_MATCH */
630 YYSYMBOL_KW_MESSAGE = 121, /* KW_MESSAGE */
631 YYSYMBOL_KW_NETMASK = 122, /* KW_NETMASK */
632 YYSYMBOL_KW_TAGS = 123, /* KW_TAGS */
633 YYSYMBOL_KW_NETMASK6 = 124, /* KW_NETMASK6 */
634 YYSYMBOL_KW_REWRITE = 125, /* KW_REWRITE */
635 YYSYMBOL_KW_CONDITION = 126, /* KW_CONDITION */
636 YYSYMBOL_KW_VALUE = 127, /* KW_VALUE */
637 YYSYMBOL_KW_YES = 128, /* KW_YES */
638 YYSYMBOL_KW_NO = 129, /* KW_NO */
639 YYSYMBOL_KW_IFDEF = 130, /* KW_IFDEF */
640 YYSYMBOL_KW_ENDIF = 131, /* KW_ENDIF */
641 YYSYMBOL_LL_DOTDOT = 132, /* LL_DOTDOT */
642 YYSYMBOL_LL_DOTDOTDOT = 133, /* LL_DOTDOTDOT */
643 YYSYMBOL_LL_PRAGMA = 134, /* LL_PRAGMA */
644 YYSYMBOL_LL_EOL = 135, /* LL_EOL */
645 YYSYMBOL_LL_ERROR = 136, /* LL_ERROR */
646 YYSYMBOL_LL_ARROW = 137, /* LL_ARROW */
647 YYSYMBOL_LL_IDENTIFIER = 138, /* LL_IDENTIFIER */
648 YYSYMBOL_LL_NUMBER = 139, /* LL_NUMBER */
649 YYSYMBOL_LL_FLOAT = 140, /* LL_FLOAT */
650 YYSYMBOL_LL_STRING = 141, /* LL_STRING */
651 YYSYMBOL_LL_TOKEN = 142, /* LL_TOKEN */
652 YYSYMBOL_LL_BLOCK = 143, /* LL_BLOCK */
653 YYSYMBOL_KW_VALUE_PAIRS = 144, /* KW_VALUE_PAIRS */
654 YYSYMBOL_KW_EXCLUDE = 145, /* KW_EXCLUDE */
655 YYSYMBOL_KW_PAIR = 146, /* KW_PAIR */
656 YYSYMBOL_KW_KEY = 147, /* KW_KEY */
657 YYSYMBOL_KW_SCOPE = 148, /* KW_SCOPE */
658 YYSYMBOL_KW_SHIFT = 149, /* KW_SHIFT */
659 YYSYMBOL_KW_SHIFT_LEVELS = 150, /* KW_SHIFT_LEVELS */
660 YYSYMBOL_KW_REKEY = 151, /* KW_REKEY */
661 YYSYMBOL_KW_ADD_PREFIX = 152, /* KW_ADD_PREFIX */
662 YYSYMBOL_KW_REPLACE_PREFIX = 153, /* KW_REPLACE_PREFIX */
663 YYSYMBOL_KW_ON_ERROR = 154, /* KW_ON_ERROR */
664 YYSYMBOL_KW_RETRIES = 155, /* KW_RETRIES */
665 YYSYMBOL_KW_FETCH_NO_DATA_DELAY = 156, /* KW_FETCH_NO_DATA_DELAY */
666 YYSYMBOL_KW_PROGRAM = 157, /* KW_PROGRAM */
667 YYSYMBOL_KW_IN_LIST = 158, /* KW_IN_LIST */
668 YYSYMBOL_KW_RATE = 159, /* KW_RATE */
669 YYSYMBOL_160_ = 160, /* ';' */
670 YYSYMBOL_KW_OR = 161, /* KW_OR */
671 YYSYMBOL_KW_AND = 162, /* KW_AND */
672 YYSYMBOL_KW_NOT = 163, /* KW_NOT */
673 YYSYMBOL_KW_LT = 164, /* KW_LT */
674 YYSYMBOL_KW_LE = 165, /* KW_LE */
675 YYSYMBOL_KW_EQ = 166, /* KW_EQ */
676 YYSYMBOL_KW_NE = 167, /* KW_NE */
677 YYSYMBOL_KW_GE = 168, /* KW_GE */
678 YYSYMBOL_KW_GT = 169, /* KW_GT */
679 YYSYMBOL_KW_NUM_LT = 170, /* KW_NUM_LT */
680 YYSYMBOL_KW_NUM_LE = 171, /* KW_NUM_LE */
681 YYSYMBOL_KW_NUM_EQ = 172, /* KW_NUM_EQ */
682 YYSYMBOL_KW_NUM_NE = 173, /* KW_NUM_NE */
683 YYSYMBOL_KW_NUM_GE = 174, /* KW_NUM_GE */
684 YYSYMBOL_KW_NUM_GT = 175, /* KW_NUM_GT */
685 YYSYMBOL_176_ = 176, /* '(' */
686 YYSYMBOL_177_ = 177, /* ')' */
687 YYSYMBOL_178_ = 178, /* '{' */
688 YYSYMBOL_179_ = 179, /* '}' */
689 YYSYMBOL_180_ = 180, /* ':' */
690 YYSYMBOL_YYACCEPT = 181, /* $accept */
691 YYSYMBOL_start = 182, /* start */
692 YYSYMBOL_filter_expr = 183, /* filter_expr */
693 YYSYMBOL_filter_simple_expr = 184, /* filter_simple_expr */
694 YYSYMBOL_filter_plugin = 185, /* filter_plugin */
695 YYSYMBOL_filter_comparison = 186, /* filter_comparison */
696 YYSYMBOL_operator = 187, /* operator */
697 YYSYMBOL_filter_re = 188, /* filter_re */
698 YYSYMBOL_189_1 = 189, /* $@1 */
699 YYSYMBOL_190_2 = 190, /* $@2 */
700 YYSYMBOL_191_3 = 191, /* $@3 */
701 YYSYMBOL_192_4 = 192, /* $@4 */
702 YYSYMBOL_193_5 = 193, /* $@5 */
703 YYSYMBOL_filter_re_params = 194, /* filter_re_params */
704 YYSYMBOL_filter_re_opts = 195, /* filter_re_opts */
705 YYSYMBOL_filter_re_opt = 196, /* filter_re_opt */
706 YYSYMBOL_197_6 = 197, /* $@6 */
707 YYSYMBOL_filter_match_params = 198, /* filter_match_params */
708 YYSYMBOL_filter_match_opts = 199, /* filter_match_opts */
709 YYSYMBOL_filter_match_opt = 200, /* filter_match_opt */
710 YYSYMBOL_filter_fac_list = 201, /* filter_fac_list */
711 YYSYMBOL_filter_fac = 202, /* filter_fac */
712 YYSYMBOL_filter_severity_list = 203, /* filter_severity_list */
713 YYSYMBOL_filter_severity = 204, /* filter_severity */
714 YYSYMBOL_filter_throttle_arg = 205, /* filter_throttle_arg */
715 YYSYMBOL_filter_throttle_args = 206, /* filter_throttle_args */
716 YYSYMBOL_filter_throttle = 207, /* filter_throttle */
717 YYSYMBOL_208_7 = 208, /* $@7 */
718 YYSYMBOL_template_content_inner = 209, /* template_content_inner */
719 YYSYMBOL_template_content = 210, /* template_content */
720 YYSYMBOL_211_13 = 211, /* $@13 */
721 YYSYMBOL_string = 212, /* string */
722 YYSYMBOL_positive_integer64 = 213, /* positive_integer64 */
723 YYSYMBOL_positive_integer = 214, /* positive_integer */
724 YYSYMBOL_string_list = 215, /* string_list */
725 YYSYMBOL_string_list_build = 216, /* string_list_build */
726 YYSYMBOL_severity_string = 217, /* severity_string */
727 YYSYMBOL_facility_string = 218, /* facility_string */
728 YYSYMBOL_matcher_option = 219, /* matcher_option */
729 YYSYMBOL_matcher_flags = 220 /* matcher_flags */
730 };
731 typedef enum yysymbol_kind_t yysymbol_kind_t;
732
733
734
735 /* Unqualified %code blocks. */
736 #line 31 "lib/filter/filter-expr-grammar.y"
737
738
739 #include "filter/filter-netmask.h"
740 #include "filter/filter-netmask6.h"
741 #include "filter/filter-op.h"
742 #include "filter/filter-cmp.h"
743 #include "filter/filter-in-list.h"
744 #include "filter/filter-tags.h"
745 #include "filter/filter-call.h"
746 #include "filter/filter-re.h"
747 #include "filter/filter-pri.h"
748 #include "filter/filter-throttle.h"
749 #include "messages.h"
750 #include "template/templates.h"
751 #include "syslog-names.h"
752 #include "plugin.h"
753 #include "cfg-grammar-internal.h"
754
755 FilterExprNode *last_filter_expr;
756
757 #line 67 "lib/filter/filter-expr-grammar.y"
758
759
760 # define YYLLOC_DEFAULT(Current, Rhs, N) \
761 do { \
762 if (N) \
763 { \
764 (Current).level = YYRHSLOC(Rhs, 1).level; \
765 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
766 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
767 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
768 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
769 } \
770 else \
771 { \
772 (Current).level = YYRHSLOC(Rhs, 0).level; \
773 (Current).first_line = (Current).last_line = \
774 YYRHSLOC (Rhs, 0).last_line; \
775 (Current).first_column = (Current).last_column = \
776 YYRHSLOC (Rhs, 0).last_column; \
777 } \
778 } while (0)
779
780 #define CHECK_ERROR_WITHOUT_MESSAGE(val, token) do { \
781 if (!(val)) \
782 { \
783 YYERROR; \
784 } \
785 } while (0)
786
787 #define CHECK_ERROR(val, token, errorfmt, ...) do { \
788 if (!(val)) \
789 { \
790 if (errorfmt) \
791 { \
792 gchar __buf[256]; \
793 g_snprintf(__buf, sizeof(__buf), errorfmt, ## __VA_ARGS__); \
794 yyerror(& (token), lexer, NULL, NULL, __buf); \
795 } \
796 YYERROR; \
797 } \
798 } while (0)
799
800 #define CHECK_ERROR_GERROR(val, token, error, errorfmt, ...) do { \
801 if (!(val)) \
802 { \
803 if (errorfmt) \
804 { \
805 gchar __buf[256]; \
806 g_snprintf(__buf, sizeof(__buf), errorfmt ", error=%s", ## __VA_ARGS__, error->message); \
807 yyerror(& (token), lexer, NULL, NULL, __buf); \
808 } \
809 g_clear_error(&error); \
810 YYERROR; \
811 } \
812 } while (0)
813
814 #define YYMAXDEPTH 20000
815
816
817
818 #line 819 "lib/filter/filter-expr-grammar.c"
819
820 #ifdef short
821 # undef short
822 #endif
823
824 /* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
825 <limits.h> and (if available) <stdint.h> are included
826 so that the code can choose integer types of a good width. */
827
828 #ifndef __PTRDIFF_MAX__
829 # include <limits.h> /* INFRINGES ON USER NAME SPACE */
830 # if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
831 # include <stdint.h> /* INFRINGES ON USER NAME SPACE */
832 # define YY_STDINT_H
833 # endif
834 #endif
835
836 /* Narrow types that promote to a signed type and that can represent a
837 signed or unsigned integer of at least N bits. In tables they can
838 save space and decrease cache pressure. Promoting to a signed type
839 helps avoid bugs in integer arithmetic. */
840
841 #ifdef __INT_LEAST8_MAX__
842 typedef __INT_LEAST8_TYPE__ yytype_int8;
843 #elif defined YY_STDINT_H
844 typedef int_least8_t yytype_int8;
845 #else
846 typedef signed char yytype_int8;
847 #endif
848
849 #ifdef __INT_LEAST16_MAX__
850 typedef __INT_LEAST16_TYPE__ yytype_int16;
851 #elif defined YY_STDINT_H
852 typedef int_least16_t yytype_int16;
853 #else
854 typedef short yytype_int16;
855 #endif
856
857 /* Work around bug in HP-UX 11.23, which defines these macros
858 incorrectly for preprocessor constants. This workaround can likely
859 be removed in 2023, as HPE has promised support for HP-UX 11.23
860 (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
861 <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */
862 #ifdef __hpux
863 # undef UINT_LEAST8_MAX
864 # undef UINT_LEAST16_MAX
865 # define UINT_LEAST8_MAX 255
866 # define UINT_LEAST16_MAX 65535
867 #endif
868
869 #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
870 typedef __UINT_LEAST8_TYPE__ yytype_uint8;
871 #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
872 && UINT_LEAST8_MAX <= INT_MAX)
873 typedef uint_least8_t yytype_uint8;
874 #elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
875 typedef unsigned char yytype_uint8;
876 #else
877 typedef short yytype_uint8;
878 #endif
879
880 #if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
881 typedef __UINT_LEAST16_TYPE__ yytype_uint16;
882 #elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
883 && UINT_LEAST16_MAX <= INT_MAX)
884 typedef uint_least16_t yytype_uint16;
885 #elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
886 typedef unsigned short yytype_uint16;
887 #else
888 typedef int yytype_uint16;
889 #endif
890
891 #ifndef YYPTRDIFF_T
892 # if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
893 # define YYPTRDIFF_T __PTRDIFF_TYPE__
894 # define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
895 # elif defined PTRDIFF_MAX
896 # ifndef ptrdiff_t
897 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
898 # endif
899 # define YYPTRDIFF_T ptrdiff_t
900 # define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
901 # else
902 # define YYPTRDIFF_T long
903 # define YYPTRDIFF_MAXIMUM LONG_MAX
904 # endif
905 #endif
906
907 #ifndef YYSIZE_T
908 # ifdef __SIZE_TYPE__
909 # define YYSIZE_T __SIZE_TYPE__
910 # elif defined size_t
911 # define YYSIZE_T size_t
912 # elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
913 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
914 # define YYSIZE_T size_t
915 # else
916 # define YYSIZE_T unsigned
917 # endif
918 #endif
919
920 #define YYSIZE_MAXIMUM \
921 YY_CAST (YYPTRDIFF_T, \
922 (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \
923 ? YYPTRDIFF_MAXIMUM \
924 : YY_CAST (YYSIZE_T, -1)))
925
926 #define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
927
928
929 /* Stored state numbers (used for stacks). */
930 typedef yytype_uint8 yy_state_t;
931
932 /* State numbers in computations. */
933 typedef int yy_state_fast_t;
934
935 #ifndef YY_
936 # if defined YYENABLE_NLS && YYENABLE_NLS
937 # if ENABLE_NLS
938 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
939 # define YY_(Msgid) dgettext ("bison-runtime", Msgid)
940 # endif
941 # endif
942 # ifndef YY_
943 # define YY_(Msgid) Msgid
944 # endif
945 #endif
946
947
948 #ifndef YY_ATTRIBUTE_PURE
949 # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
950 # define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
951 # else
952 # define YY_ATTRIBUTE_PURE
953 # endif
954 #endif
955
956 #ifndef YY_ATTRIBUTE_UNUSED
957 # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
958 # define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
959 # else
960 # define YY_ATTRIBUTE_UNUSED
961 # endif
962 #endif
963
964 /* Suppress unused-variable warnings by "using" E. */
965 #if ! defined lint || defined __GNUC__
966 # define YY_USE(E) ((void) (E))
967 #else
968 # define YY_USE(E) /* empty */
969 #endif
970
971 /* Suppress an incorrect diagnostic about yylval being uninitialized. */
972 #if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
973 # if __GNUC__ * 100 + __GNUC_MINOR__ < 407
974 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
975 _Pragma ("GCC diagnostic push") \
976 _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
977 # else
978 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
979 _Pragma ("GCC diagnostic push") \
980 _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
981 _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
982 # endif
983 # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
984 _Pragma ("GCC diagnostic pop")
985 #else
986 # define YY_INITIAL_VALUE(Value) Value
987 #endif
988 #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
989 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
990 # define YY_IGNORE_MAYBE_UNINITIALIZED_END
991 #endif
992 #ifndef YY_INITIAL_VALUE
993 # define YY_INITIAL_VALUE(Value) /* Nothing. */
994 #endif
995
996 #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
997 # define YY_IGNORE_USELESS_CAST_BEGIN \
998 _Pragma ("GCC diagnostic push") \
999 _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
1000 # define YY_IGNORE_USELESS_CAST_END \
1001 _Pragma ("GCC diagnostic pop")
1002 #endif
1003 #ifndef YY_IGNORE_USELESS_CAST_BEGIN
1004 # define YY_IGNORE_USELESS_CAST_BEGIN
1005 # define YY_IGNORE_USELESS_CAST_END
1006 #endif
1007
1008
1009 #define YY_ASSERT(E) ((void) (0 && (E)))
1010
1011 #if 1
1012
1013 /* The parser invokes alloca or malloc; define the necessary symbols. */
1014
1015 # ifdef YYSTACK_USE_ALLOCA
1016 # if YYSTACK_USE_ALLOCA
1017 # ifdef __GNUC__
1018 # define YYSTACK_ALLOC __builtin_alloca
1019 # elif defined __BUILTIN_VA_ARG_INCR
1020 # include <alloca.h> /* INFRINGES ON USER NAME SPACE */
1021 # elif defined _AIX
1022 # define YYSTACK_ALLOC __alloca
1023 # elif defined _MSC_VER
1024 # include <malloc.h> /* INFRINGES ON USER NAME SPACE */
1025 # define alloca _alloca
1026 # else
1027 # define YYSTACK_ALLOC alloca
1028 # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
1029 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1030 /* Use EXIT_SUCCESS as a witness for stdlib.h. */
1031 # ifndef EXIT_SUCCESS
1032 # define EXIT_SUCCESS 0
1033 # endif
1034 # endif
1035 # endif
1036 # endif
1037 # endif
1038
1039 # ifdef YYSTACK_ALLOC
1040 /* Pacify GCC's 'empty if-body' warning. */
1041 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
1042 # ifndef YYSTACK_ALLOC_MAXIMUM
1043 /* The OS might guarantee only one guard page at the bottom of the stack,
1044 and a page size can be as small as 4096 bytes. So we cannot safely
1045 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1046 to allow for a few compiler-allocated temporary stack slots. */
1047 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
1048 # endif
1049 # else
1050 # define YYSTACK_ALLOC YYMALLOC
1051 # define YYSTACK_FREE YYFREE
1052 # ifndef YYSTACK_ALLOC_MAXIMUM
1053 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
1054 # endif
1055 # if (defined __cplusplus && ! defined EXIT_SUCCESS \
1056 && ! ((defined YYMALLOC || defined malloc) \
1057 && (defined YYFREE || defined free)))
1058 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1059 # ifndef EXIT_SUCCESS
1060 # define EXIT_SUCCESS 0
1061 # endif
1062 # endif
1063 # ifndef YYMALLOC
1064 # define YYMALLOC malloc
1065 # if ! defined malloc && ! defined EXIT_SUCCESS
1066 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1067 # endif
1068 # endif
1069 # ifndef YYFREE
1070 # define YYFREE free
1071 # if ! defined free && ! defined EXIT_SUCCESS
1072 void free (void *); /* INFRINGES ON USER NAME SPACE */
1073 # endif
1074 # endif
1075 # endif
1076 #endif /* 1 */
1077
1078 #if (! defined yyoverflow \
1079 && (! defined __cplusplus \
1080 || (defined FILTER_EXPR_LTYPE_IS_TRIVIAL && FILTER_EXPR_LTYPE_IS_TRIVIAL \
1081 && defined FILTER_EXPR_STYPE_IS_TRIVIAL && FILTER_EXPR_STYPE_IS_TRIVIAL)))
1082
1083 /* A type that is properly aligned for any stack member. */
1084 union yyalloc
1085 {
1086 yy_state_t yyss_alloc;
1087 YYSTYPE yyvs_alloc;
1088 YYLTYPE yyls_alloc;
1089 };
1090
1091 /* The size of the maximum gap between one aligned stack and the next. */
1092 # define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
1093
1094 /* The size of an array large to enough to hold all stacks, each with
1095 N elements. */
1096 # define YYSTACK_BYTES(N) \
1097 ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE) \
1098 + YYSIZEOF (YYLTYPE)) \
1099 + 2 * YYSTACK_GAP_MAXIMUM)
1100
1101 # define YYCOPY_NEEDED 1
1102
1103 /* Relocate STACK from its old location to the new one. The
1104 local variables YYSIZE and YYSTACKSIZE give the old and new number of
1105 elements in the stack, and YYPTR gives the new location of the
1106 stack. Advance YYPTR to a properly aligned location for the next
1107 stack. */
1108 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
1109 do \
1110 { \
1111 YYPTRDIFF_T yynewbytes; \
1112 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
1113 Stack = &yyptr->Stack_alloc; \
1114 yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
1115 yyptr += yynewbytes / YYSIZEOF (*yyptr); \
1116 } \
1117 while (0)
1118
1119 #endif
1120
1121 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
1122 /* Copy COUNT objects from SRC to DST. The source and destination do
1123 not overlap. */
1124 # ifndef YYCOPY
1125 # if defined __GNUC__ && 1 < __GNUC__
1126 # define YYCOPY(Dst, Src, Count) \
1127 __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
1128 # else
1129 # define YYCOPY(Dst, Src, Count) \
1130 do \
1131 { \
1132 YYPTRDIFF_T yyi; \
1133 for (yyi = 0; yyi < (Count); yyi++) \
1134 (Dst)[yyi] = (Src)[yyi]; \
1135 } \
1136 while (0)
1137 # endif
1138 # endif
1139 #endif /* !YYCOPY_NEEDED */
1140
1141 /* YYFINAL -- State number of the termination state. */
1142 #define YYFINAL 53
1143 /* YYLAST -- Last index in YYTABLE. */
1144 #define YYLAST 152
1145
1146 /* YYNTOKENS -- Number of terminals. */
1147 #define YYNTOKENS 181
1148 /* YYNNTS -- Number of nonterminals. */
1149 #define YYNNTS 40
1150 /* YYNRULES -- Number of rules. */
1151 #define YYNRULES 89
1152 /* YYNSTATES -- Number of states. */
1153 #define YYNSTATES 162
1154
1155 /* YYMAXUTOK -- Last valid token kind. */
1156 #define YYMAXUTOK 10532
1157
1158
1159 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
1160 as returned by yylex, with out-of-bounds checking. */
1161 #define YYTRANSLATE(YYX) \
1162 (0 <= (YYX) && (YYX) <= YYMAXUTOK \
1163 ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \
1164 : YYSYMBOL_YYUNDEF)
1165
1166 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
1167 as returned by yylex. */
1168 static const yytype_uint8 yytranslate[] =
1169 {
1170 0, 3, 4, 5, 6, 7, 8, 9, 10, 11,
1171 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
1172 22, 23, 2, 2, 2, 2, 2, 2, 2, 2,
1173 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1174 176, 177, 2, 2, 2, 2, 2, 2, 2, 2,
1175 2, 2, 2, 2, 2, 2, 2, 2, 180, 160,
1176 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1177 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1178 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1179 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1180 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1181 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1182 2, 2, 2, 178, 2, 179, 2, 2, 2, 2,
1183 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1184 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1185 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1186 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1187 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1188 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1189 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1190 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1191 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1192 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1193 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1194 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1195 2, 2, 2, 2, 2, 2, 1, 2, 2, 2,
1196 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1197 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1198 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1199 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1200 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1201 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1202 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1203 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1204 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1205 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1206 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1207 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1208 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1209 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1210 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1211 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1212 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1213 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1214 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1215 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1216 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1217 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1218 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1219 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1220 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1221 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1222 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1223 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1224 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1225 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1226 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1227 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1228 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1229 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1230 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1231 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1232 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1233 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1234 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1235 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1236 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1237 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1238 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1239 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1240 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1241 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1242 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1243 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1244 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1245 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1246 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1247 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1248 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1249 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1250 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1251 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1252 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1253 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1254 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1255 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1256 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1257 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1258 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1259 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1260 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1261 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1262 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1263 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1264 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1265 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1266 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1267 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1268 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1269 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1270 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1271 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1272 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1273 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1274 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1275 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1276 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1277 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1278 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1279 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1280 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1281 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1282 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1283 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1284 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1285 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1286 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1287 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1288 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1289 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1290 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1291 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1292 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1293 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1294 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1295 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1296 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1297 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1298 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1299 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1300 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1301 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1302 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1303 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1304 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1305 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1306 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1307 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1308 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1309 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1310 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1311 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1312 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1313 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1314 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1315 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1316 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1317 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1318 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1319 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1320 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1321 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1322 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1323 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1324 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1325 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1326 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1327 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1328 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1329 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1330 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1331 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1332 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1333 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1334 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1335 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1336 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1337 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1338 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1339 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1340 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1341 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1342 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1343 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1344 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1345 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1346 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1347 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1348 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1349 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1350 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1351 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1352 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1353 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1354 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1355 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1356 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1357 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1358 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1359 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1360 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1361 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1362 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1363 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1364 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1365 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1366 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1367 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1368 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1369 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1370 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1371 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1372 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1373 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1374 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1375 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1376 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1377 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1378 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1379 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1380 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1381 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1382 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1383 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1384 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1385 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1386 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1387 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1388 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1389 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1390 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1391 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1392 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1393 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1394 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1395 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1396 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1397 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1398 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1399 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1400 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1401 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1402 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1403 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1404 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1405 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1406 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1407 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1408 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1409 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1410 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1411 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1412 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1413 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1414 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1415 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1416 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1417 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1418 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1419 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1420 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1421 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1422 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1423 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1424 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1425 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1426 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1427 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1428 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1429 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1430 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1431 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1432 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1433 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1434 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1435 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1436 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1437 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1438 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1439 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1440 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1441 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1442 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1443 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1444 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1445 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1446 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1447 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1448 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1449 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1450 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1451 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1452 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1453 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1454 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1455 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1456 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1457 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1458 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1459 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1460 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1461 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1462 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1463 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1464 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1465 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1466 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1467 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1468 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1469 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1470 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1471 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1472 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1473 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1474 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1475 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1476 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1477 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1478 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1479 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1480 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1481 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1482 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1483 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1484 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1485 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1486 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1487 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1488 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1489 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1490 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1491 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1492 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1493 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1494 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1495 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1496 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1497 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1498 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1499 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1500 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1501 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1502 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1503 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1504 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1505 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1506 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1507 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1508 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1509 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1510 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1511 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1512 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1513 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1514 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1515 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1516 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1517 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1518 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1519 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1520 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1521 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1522 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1523 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1524 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1525 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1526 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1527 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1528 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1529 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1530 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1531 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1532 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1533 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1534 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1535 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1536 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1537 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1538 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1539 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1540 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1541 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1542 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1543 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1544 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1545 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1546 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1547 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1548 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1549 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1550 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1551 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1552 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1553 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1554 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1555 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1556 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1557 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1558 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1559 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1560 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1561 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1562 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1563 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1564 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1565 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1566 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1567 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1568 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1569 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1570 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1571 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1572 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1573 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1574 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1575 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1576 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1577 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1578 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1579 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1580 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1581 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1582 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1583 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1584 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1585 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1586 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1587 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1588 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1589 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1590 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1591 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1592 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1593 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1594 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1595 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1596 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1597 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1598 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1599 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1600 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1601 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1602 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1603 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1604 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1605 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1606 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1607 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1608 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1609 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1610 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1611 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1612 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1613 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1614 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1615 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1616 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1617 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1618 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1619 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1620 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1621 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1622 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1623 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1624 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1625 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1626 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1627 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1628 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1629 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1630 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1631 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1632 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1633 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1634 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1635 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1636 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1637 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1638 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1639 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1640 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1641 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1642 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1643 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1644 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1645 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1646 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1647 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1648 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1649 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1650 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1651 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1652 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1653 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1654 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1655 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1656 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1657 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1658 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1659 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1660 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1661 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1662 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1663 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1664 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1665 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1666 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1667 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1668 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1669 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1670 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1671 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1672 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1673 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1674 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1675 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1676 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1677 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1678 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1679 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1680 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1681 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1682 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1683 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1684 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1685 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1686 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1687 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1688 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1689 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1690 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1691 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1692 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1693 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1694 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1695 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1696 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1697 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1698 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1699 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1700 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1701 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1702 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1703 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1704 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1705 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1706 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1707 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1708 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1709 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1710 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1711 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1712 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1713 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1714 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1715 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1716 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1717 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1718 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1719 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1720 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1721 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1722 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1723 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1724 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1725 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1726 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1727 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1728 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1729 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1730 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1731 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1732 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1733 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1734 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1735 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1736 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1737 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1738 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1739 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1740 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1741 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1742 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1743 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1744 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1745 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1746 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1747 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1748 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1749 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1750 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1751 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1752 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1753 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1754 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1755 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1756 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1757 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1758 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1759 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1760 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1761 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1762 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1763 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1764 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1765 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1766 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1767 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1768 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1769 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1770 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1771 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1772 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1773 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1774 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1775 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1776 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1777 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1778 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1779 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1780 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1781 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1782 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1783 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1784 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1785 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1786 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1787 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1788 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1789 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1790 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1791 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1792 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1793 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1794 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1795 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1796 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1797 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1798 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1799 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1800 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1801 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1802 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1803 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1804 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1805 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1806 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1807 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1808 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1809 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1810 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1811 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1812 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1813 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1814 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1815 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1816 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1817 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1818 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1819 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1820 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1821 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1822 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1823 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1824 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1825 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1826 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1827 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1828 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1829 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1830 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1831 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1832 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1833 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1834 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1835 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1836 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1837 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1838 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1839 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1840 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1841 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1842 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1843 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1844 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1845 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1846 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1847 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1848 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1849 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1850 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1851 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1852 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1853 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1854 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1855 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1856 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1857 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1858 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1859 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1860 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1861 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1862 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1863 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1864 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1865 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1866 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1867 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1868 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1869 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1870 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1871 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1872 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1873 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1874 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1875 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1876 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1877 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1878 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1879 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1880 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1881 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1882 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1883 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1884 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1885 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1886 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1887 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1888 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1889 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1890 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1891 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1892 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1893 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1894 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1895 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1896 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1897 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1898 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1899 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1900 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1901 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1902 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1903 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1904 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1905 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1906 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1907 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1908 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1909 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1910 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1911 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1912 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1913 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1914 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1915 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1916 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1917 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1918 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1919 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1920 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1921 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1922 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1923 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1924 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1925 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1926 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1927 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1928 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1929 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1930 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1931 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1932 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1933 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1934 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1935 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1936 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1937 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1938 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1939 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1940 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1941 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1942 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1943 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1944 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1945 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1946 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1947 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1948 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1949 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1950 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1951 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1952 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1953 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1954 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1955 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1956 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1957 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1958 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1959 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1960 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1961 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1962 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1963 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1964 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1965 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1966 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1967 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1968 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1969 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1970 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1971 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1972 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1973 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1974 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1975 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1976 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1977 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1978 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1979 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1980 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1981 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1982 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1983 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1984 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1985 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1986 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1987 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1988 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1989 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1990 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1991 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1992 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1993 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1994 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1995 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1996 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1997 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1998 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1999 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2000 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2001 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2002 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2003 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2004 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2005 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2006 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2007 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2008 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2009 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2010 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2011 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2012 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2013 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2014 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2015 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2016 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2017 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2018 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2019 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2020 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2021 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2022 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2023 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2024 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2025 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2026 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2027 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2028 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2029 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2030 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2031 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2032 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2033 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2034 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2035 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2036 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2037 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2038 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2039 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2040 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2041 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2042 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2043 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2044 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2045 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2046 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2047 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2048 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2049 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2050 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2051 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2052 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2053 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2054 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2055 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2056 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2057 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2058 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2059 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2060 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2061 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2062 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2063 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2064 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2065 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2066 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2067 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2068 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2069 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2070 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2071 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2072 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2073 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2074 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2075 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2076 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2077 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2078 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2079 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2080 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2081 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2082 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2083 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2084 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2085 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2086 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2087 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2088 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2089 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2090 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2091 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2092 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2093 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2094 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2095 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2096 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2097 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2098 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2099 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2100 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2101 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2102 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2103 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2104 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2105 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2106 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2107 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2108 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2109 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2110 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2111 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2112 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2113 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2114 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2115 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2116 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2117 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2118 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2119 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2120 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2121 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2122 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2123 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2124 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2125 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2126 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2127 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2128 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2129 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2130 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2131 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2132 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2133 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2134 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2135 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2136 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2137 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2138 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2139 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2140 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2141 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2142 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2143 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2144 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2145 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2146 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2147 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2148 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2149 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2150 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2151 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2152 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2153 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2154 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2155 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2156 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2157 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2158 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2159 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2160 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2161 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2162 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2163 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2164 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2165 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2166 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2167 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2168 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2169 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2170 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
2171 34, 35, 36, 2, 2, 2, 2, 2, 2, 2,
2172 37, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2173 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2174 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2175 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2176 38, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2177 2, 39, 40, 41, 42, 43, 44, 45, 46, 47,
2178 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
2179 58, 59, 60, 61, 62, 2, 2, 2, 2, 2,
2180 63, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2181 64, 65, 66, 2, 2, 2, 2, 2, 2, 2,
2182 67, 68, 2, 2, 2, 2, 2, 2, 2, 2,
2183 69, 70, 71, 2, 2, 2, 2, 2, 2, 2,
2184 72, 73, 74, 2, 2, 2, 2, 2, 2, 2,
2185 75, 76, 77, 2, 2, 2, 2, 2, 2, 2,
2186 78, 2, 79, 80, 81, 82, 83, 2, 2, 2,
2187 84, 85, 2, 2, 2, 2, 2, 2, 2, 2,
2188 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2189 90, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2190 91, 92, 93, 94, 95, 96, 97, 2, 2, 2,
2191 98, 99, 100, 2, 2, 2, 2, 2, 2, 2,
2192 101, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2193 102, 86, 2, 2, 2, 2, 2, 2, 2, 2,
2194 103, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2195 104, 105, 106, 2, 2, 2, 2, 2, 2, 2,
2196 107, 108, 109, 2, 2, 2, 2, 2, 2, 2,
2197 110, 111, 112, 2, 2, 2, 2, 2, 2, 2,
2198 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2199 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2200 113, 114, 87, 2, 88, 89, 2, 2, 2, 2,
2201 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2202 2, 2, 2, 115, 2, 2, 2, 2, 2, 2,
2203 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2204 116, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2205 117, 118, 119, 120, 121, 122, 123, 124, 2, 2,
2206 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2207 125, 126, 127, 2, 2, 2, 2, 2, 2, 2,
2208 128, 129, 2, 2, 2, 2, 2, 2, 2, 2,
2209 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2210 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2211 130, 131, 2, 2, 2, 2, 2, 2, 2, 2,
2212 132, 133, 134, 135, 136, 137, 2, 2, 2, 2,
2213 138, 139, 140, 141, 142, 143, 2, 2, 2, 2,
2214 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2215 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2216 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2217 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2218 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2219 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2220 144, 2, 145, 146, 147, 148, 149, 150, 151, 152,
2221 153, 154, 155, 156, 2, 157, 158, 159, 161, 162,
2222 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
2223 173, 174, 175
2224 };
2225
2226 #if FILTER_EXPR_DEBUG
2227 /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
2228 static const yytype_int16 yyrline[] =
2229 {
2230 0, 433, 433, 437, 438, 439, 440, 441, 442, 443,
2231 447, 448, 449, 450, 451, 452, 460, 461, 475, 489,
2232 490, 491, 492, 497, 517, 534, 535, 536, 537, 538,
2233 539, 540, 541, 542, 543, 544, 545, 549, 549, 550,
2234 550, 551, 551, 552, 552, 553, 553, 557, 567, 568,
2235 572, 572, 577, 595, 596, 600, 601, 622, 629, 630,
2236 634, 638, 642, 643, 647, 651, 658, 663, 670, 671,
2237 675, 675, 911, 918, 931, 931, 942, 943, 972, 979,
2238 1040, 1044, 1045, 1054, 1065, 1073, 1343, 1344, 1348, 1349
2239 };
2240 #endif
2241
2242 /** Accessing symbol of state STATE. */
2243 #define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
2244
2245 #if 1
2246 /* The user-facing name of the symbol whose (internal) number is
2247 YYSYMBOL. No bounds checking. */
2248 static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
2249
2250 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
2251 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
2252 static const char *const yytname[] =
2253 {
2254 "\"end of file\"", "error", "\"invalid token\"", "LL_CONTEXT_ROOT",
2255 "LL_CONTEXT_DESTINATION", "LL_CONTEXT_SOURCE", "LL_CONTEXT_PARSER",
2256 "LL_CONTEXT_REWRITE", "LL_CONTEXT_FILTER", "LL_CONTEXT_LOG",
2257 "LL_CONTEXT_BLOCK_DEF", "LL_CONTEXT_BLOCK_REF",
2258 "LL_CONTEXT_BLOCK_CONTENT", "LL_CONTEXT_BLOCK_ARG", "LL_CONTEXT_PRAGMA",
2259 "LL_CONTEXT_FORMAT", "LL_CONTEXT_TEMPLATE_FUNC", "LL_CONTEXT_INNER_DEST",
2260 "LL_CONTEXT_INNER_SRC", "LL_CONTEXT_CLIENT_PROTO",
2261 "LL_CONTEXT_SERVER_PROTO", "LL_CONTEXT_OPTIONS", "LL_CONTEXT_CONFIG",
2262 "LL_CONTEXT_MAX", "KW_SOURCE", "KW_FILTER", "KW_PARSER",
2263 "KW_DESTINATION", "KW_LOG", "KW_OPTIONS", "KW_INCLUDE", "KW_BLOCK",
2264 "KW_JUNCTION", "KW_CHANNEL", "KW_IF", "KW_ELSE", "KW_ELIF",
2265 "KW_INTERNAL", "KW_SYSLOG", "KW_MARK_FREQ", "KW_STATS_FREQ",
2266 "KW_STATS_LEVEL", "KW_STATS_LIFETIME", "KW_FLUSH_LINES", "KW_SUPPRESS",
2267 "KW_FLUSH_TIMEOUT", "KW_LOG_MSG_SIZE", "KW_FILE_TEMPLATE",
2268 "KW_PROTO_TEMPLATE", "KW_MARK_MODE", "KW_ENCODING", "KW_TYPE",
2269 "KW_STATS_MAX_DYNAMIC", "KW_MIN_IW_SIZE_PER_READER", "KW_WORKERS",
2270 "KW_BATCH_LINES", "KW_BATCH_TIMEOUT", "KW_TRIM_LARGE_MESSAGES",
2271 "KW_CHAIN_HOSTNAMES", "KW_NORMALIZE_HOSTNAMES", "KW_KEEP_HOSTNAME",
2272 "KW_CHECK_HOSTNAME", "KW_BAD_HOSTNAME", "KW_KEEP_TIMESTAMP",
2273 "KW_USE_DNS", "KW_USE_FQDN", "KW_CUSTOM_DOMAIN", "KW_DNS_CACHE",
2274 "KW_DNS_CACHE_SIZE", "KW_DNS_CACHE_EXPIRE", "KW_DNS_CACHE_EXPIRE_FAILED",
2275 "KW_DNS_CACHE_HOSTS", "KW_PERSIST_ONLY", "KW_USE_RCPTID",
2276 "KW_USE_UNIQID", "KW_TZ_CONVERT", "KW_TS_FORMAT", "KW_FRAC_DIGITS",
2277 "KW_LOG_FIFO_SIZE", "KW_LOG_FETCH_LIMIT", "KW_LOG_IW_SIZE",
2278 "KW_LOG_PREFIX", "KW_PROGRAM_OVERRIDE", "KW_HOST_OVERRIDE",
2279 "KW_THROTTLE", "KW_THREADED", "KW_PASS_UNIX_CREDENTIALS",
2280 "KW_PERSIST_NAME", "KW_READ_OLD_RECORDS", "KW_USE_SYSLOGNG_PID",
2281 "KW_FLAGS", "KW_PAD_SIZE", "KW_TIME_ZONE", "KW_RECV_TIME_ZONE",
2282 "KW_SEND_TIME_ZONE", "KW_LOCAL_TIME_ZONE", "KW_FORMAT",
2283 "KW_TRUNCATE_SIZE", "KW_TIME_REOPEN", "KW_TIME_REAP", "KW_TIME_SLEEP",
2284 "KW_TMPL_ESCAPE", "KW_OPTIONAL", "KW_CREATE_DIRS", "KW_OWNER",
2285 "KW_GROUP", "KW_PERM", "KW_DIR_OWNER", "KW_DIR_GROUP", "KW_DIR_PERM",
2286 "KW_TEMPLATE", "KW_TEMPLATE_ESCAPE", "KW_TEMPLATE_FUNCTION",
2287 "KW_DEFAULT_FACILITY", "KW_DEFAULT_SEVERITY", "KW_PORT",
2288 "KW_USE_TIME_RECVD", "KW_FACILITY", "KW_SEVERITY", "KW_HOST", "KW_MATCH",
2289 "KW_MESSAGE", "KW_NETMASK", "KW_TAGS", "KW_NETMASK6", "KW_REWRITE",
2290 "KW_CONDITION", "KW_VALUE", "KW_YES", "KW_NO", "KW_IFDEF", "KW_ENDIF",
2291 "LL_DOTDOT", "LL_DOTDOTDOT", "LL_PRAGMA", "LL_EOL", "LL_ERROR",
2292 "LL_ARROW", "LL_IDENTIFIER", "LL_NUMBER", "LL_FLOAT", "LL_STRING",
2293 "LL_TOKEN", "LL_BLOCK", "KW_VALUE_PAIRS", "KW_EXCLUDE", "KW_PAIR",
2294 "KW_KEY", "KW_SCOPE", "KW_SHIFT", "KW_SHIFT_LEVELS", "KW_REKEY",
2295 "KW_ADD_PREFIX", "KW_REPLACE_PREFIX", "KW_ON_ERROR", "KW_RETRIES",
2296 "KW_FETCH_NO_DATA_DELAY", "KW_PROGRAM", "KW_IN_LIST", "KW_RATE", "';'",
2297 "KW_OR", "KW_AND", "KW_NOT", "KW_LT", "KW_LE", "KW_EQ", "KW_NE", "KW_GE",
2298 "KW_GT", "KW_NUM_LT", "KW_NUM_LE", "KW_NUM_EQ", "KW_NUM_NE", "KW_NUM_GE",
2299 "KW_NUM_GT", "'('", "')'", "'{'", "'}'", "':'", "$accept", "start",
2300 "filter_expr", "filter_simple_expr", "filter_plugin",
2301 "filter_comparison", "operator", "filter_re", "$@1", "$@2", "$@3", "$@4",
2302 "$@5", "filter_re_params", "filter_re_opts", "filter_re_opt", "$@6",
2303 "filter_match_params", "filter_match_opts", "filter_match_opt",
2304 "filter_fac_list", "filter_fac", "filter_severity_list",
2305 "filter_severity", "filter_throttle_arg", "filter_throttle_args",
2306 "filter_throttle", "$@7", "template_content_inner", "template_content",
2307 "$@13", "string", "positive_integer64", "positive_integer",
2308 "string_list", "string_list_build", "severity_string", "facility_string",
2309 "matcher_option", "matcher_flags", YY_NULLPTR
2310 };
2311
2312 static const char *
yysymbol_name(yysymbol_kind_t yysymbol)2313 yysymbol_name (yysymbol_kind_t yysymbol)
2314 {
2315 return yytname[yysymbol];
2316 }
2317 #endif
2318
2319 #define YYPACT_NINF (-170)
2320
2321 #define yypact_value_is_default(Yyn) \
2322 ((Yyn) == YYPACT_NINF)
2323
2324 #define YYTABLE_NINF (-55)
2325
2326 #define yytable_value_is_error(Yyn) \
2327 0
2328
2329 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
2330 STATE-NUM. */
2331 static const yytype_int16 yypact[] =
2332 {
2333 -24, -170, -169, -170, -165, -160, -170, -170, -170, -158,
2334 -153, -132, -170, -83, -170, -131, -24, -24, 46, -129,
2335 -170, -170, -170, -170, -170, -128, -113, -126, -35, -113,
2336 -128, -125, -128, -113, -113, -113, -170, -170, -170, -170,
2337 -170, -170, -170, -170, -170, -170, -170, -170, -94, -128,
2338 -113, -170, -140, -170, -24, -24, -24, -113, -170, -170,
2339 -170, -123, -104, -170, -119, -118, -29, -170, -80, -116,
2340 -113, -170, -76, -170, -113, -170, -170, -115, -113, -110,
2341 -170, -109, -170, -170, -103, -170, -121, -91, -170, -107,
2342 -170, -102, -101, -104, -105, -170, -170, -170, -29, -170,
2343 -170, -113, -108, -170, -170, -170, -170, -100, -98, -72,
2344 -107, -47, -170, -66, -170, -170, -170, -170, -75, -69,
2345 -170, -64, -108, -113, -170, -170, -170, -68, -65, -170,
2346 -61, -99, -170, -170, -59, -170, -113, -170, -170, -56,
2347 -113, -113, -170, -54, -170, -170, -170, -53, -52, -51,
2348 -50, -113, -49, -113, -170, -170, -170, -170, -170, -170,
2349 -48, -170
2350 };
2351
2352 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
2353 Performed when YYTABLE does not specify something else to do. Zero
2354 means the default is an error. */
2355 static const yytype_int8 yydefact[] =
2356 {
2357 0, 43, 0, 70, 0, 0, 39, 45, 41, 0,
2358 0, 0, 23, 0, 37, 0, 0, 0, 0, 2,
2359 3, 20, 21, 19, 22, 0, 0, 0, 0, 0,
2360 0, 0, 0, 0, 82, 0, 31, 32, 33, 34,
2361 35, 36, 25, 26, 27, 28, 29, 30, 0, 0,
2362 0, 4, 0, 1, 8, 0, 0, 0, 44, 76,
2363 77, 0, 69, 85, 0, 0, 59, 84, 61, 0,
2364 63, 83, 65, 40, 0, 46, 42, 0, 82, 0,
2365 80, 0, 24, 38, 0, 9, 7, 5, 6, 50,
2366 13, 0, 0, 69, 0, 11, 10, 58, 0, 12,
2367 62, 0, 50, 14, 81, 16, 15, 0, 0, 0,
2368 50, 0, 74, 0, 68, 71, 60, 64, 0, 0,
2369 55, 0, 50, 0, 17, 47, 48, 0, 0, 51,
2370 0, 0, 78, 79, 0, 74, 0, 52, 53, 0,
2371 0, 89, 66, 76, 75, 72, 67, 0, 0, 0,
2372 0, 89, 0, 0, 57, 56, 18, 86, 88, 87,
2373 0, 73
2374 };
2375
2376 /* YYPGOTO[NTERM-NUM]. */
2377 static const yytype_int16 yypgoto[] =
2378 {
2379 -170, -170, 10, -170, -170, -170, -170, -170, -170, -170,
2380 -170, -170, -170, -15, -33, -92, -170, -170, -44, -170,
2381 57, -170, 61, -170, -170, 42, -170, -170, -170, 1,
2382 -170, -21, -170, -170, -170, 59, 37, 43, -170, -11
2383 };
2384
2385 /* YYDEFGOTO[NTERM-NUM]. */
2386 static const yytype_uint8 yydefgoto[] =
2387 {
2388 0, 18, 19, 20, 21, 22, 48, 23, 49, 30,
2389 32, 25, 31, 58, 109, 110, 111, 75, 121, 122,
2390 65, 66, 69, 70, 93, 94, 24, 27, 144, 130,
2391 131, 67, 133, 134, 79, 80, 72, 68, 129, 152
2392 };
2393
2394 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
2395 positive, shift that token. If negative, reduce the rule whose
2396 number is the opposite. If YYTABLE_NINF, syntax error. */
2397 static const yytype_int16 yytable[] =
2398 {
2399 1, 2, 118, 63, 127, 61, 91, 26, 71, 63,
2400 120, 28, 77, 78, 81, 73, 29, 76, 33, 119,
2401 54, 55, 56, 34, 107, 59, 51, 52, 60, 84,
2402 120, 54, 55, 56, 83, 59, 89, 85, 60, 143,
2403 55, 56, 60, 128, 35, 50, 53, 82, 57, 71,
2404 62, 74, 98, 102, 90, 92, 101, 78, 95, 96,
2405 3, 99, 103, 108, 86, 87, 88, 105, 106, -54,
2406 -49, 56, 115, 132, 112, 113, 123, 126, 138, 124,
2407 71, 36, 37, 38, 39, 40, 41, 42, 43, 44,
2408 45, 46, 47, 4, 5, 6, 7, 8, 9, 10,
2409 11, 135, 139, 59, 64, 125, 60, 136, 140, 59,
2410 145, 141, 60, 137, 12, 148, 142, 13, 146, 150,
2411 151, 149, 153, 97, 154, 155, 156, 157, 159, 161,
2412 151, 100, 160, 14, 15, 114, 147, 104, 117, 16,
2413 158, 116, 0, 0, 0, 0, 0, 0, 0, 0,
2414 0, 0, 17
2415 };
2416
2417 static const yytype_int16 yycheck[] =
2418 {
2419 24, 25, 110, 38, 51, 26, 110, 176, 29, 38,
2420 102, 176, 33, 34, 35, 30, 176, 32, 176, 127,
2421 160, 161, 162, 176, 127, 138, 16, 17, 141, 50,
2422 122, 160, 161, 162, 49, 138, 57, 177, 141, 138,
2423 161, 162, 141, 90, 176, 176, 0, 141, 176, 70,
2424 176, 176, 132, 74, 177, 159, 132, 78, 177, 177,
2425 84, 177, 177, 84, 54, 55, 56, 177, 177, 177,
2426 177, 162, 177, 139, 176, 176, 176, 110, 122, 177,
2427 101, 164, 165, 166, 167, 168, 169, 170, 171, 172,
2428 173, 174, 175, 117, 118, 119, 120, 121, 122, 123,
2429 124, 176, 123, 138, 139, 177, 141, 176, 176, 138,
2430 131, 176, 141, 177, 138, 136, 177, 141, 177, 140,
2431 141, 177, 176, 66, 177, 177, 177, 177, 177, 177,
2432 151, 70, 153, 157, 158, 93, 135, 78, 101, 163,
2433 151, 98, -1, -1, -1, -1, -1, -1, -1, -1,
2434 -1, -1, 176
2435 };
2436
2437 /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
2438 state STATE-NUM. */
2439 static const yytype_uint8 yystos[] =
2440 {
2441 0, 24, 25, 84, 117, 118, 119, 120, 121, 122,
2442 123, 124, 138, 141, 157, 158, 163, 176, 182, 183,
2443 184, 185, 186, 188, 207, 192, 176, 208, 176, 176,
2444 190, 193, 191, 176, 176, 176, 164, 165, 166, 167,
2445 168, 169, 170, 171, 172, 173, 174, 175, 187, 189,
2446 176, 183, 183, 0, 160, 161, 162, 176, 194, 138,
2447 141, 212, 176, 38, 139, 201, 202, 212, 218, 203,
2448 204, 212, 217, 194, 176, 198, 194, 212, 212, 215,
2449 216, 212, 141, 194, 212, 177, 183, 183, 183, 212,
2450 177, 110, 159, 205, 206, 177, 177, 201, 132, 177,
2451 203, 132, 212, 177, 216, 177, 177, 127, 212, 195,
2452 196, 197, 176, 176, 206, 177, 218, 217, 110, 127,
2453 196, 199, 200, 176, 177, 177, 195, 51, 90, 219,
2454 210, 211, 139, 213, 214, 176, 176, 177, 199, 212,
2455 176, 176, 177, 138, 209, 212, 177, 210, 212, 177,
2456 212, 212, 220, 176, 177, 177, 177, 177, 220, 177,
2457 212, 177
2458 };
2459
2460 /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */
2461 static const yytype_uint8 yyr1[] =
2462 {
2463 0, 181, 182, 183, 183, 183, 183, 183, 183, 183,
2464 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
2465 184, 184, 184, 185, 186, 187, 187, 187, 187, 187,
2466 187, 187, 187, 187, 187, 187, 187, 189, 188, 190,
2467 188, 191, 188, 192, 188, 193, 188, 194, 195, 195,
2468 197, 196, 198, 199, 199, 200, 200, 200, 201, 201,
2469 202, 202, 203, 203, 204, 204, 205, 205, 206, 206,
2470 208, 207, 209, 209, 211, 210, 212, 212, 213, 214,
2471 215, 216, 216, 217, 218, 218, 219, 219, 220, 220
2472 };
2473
2474 /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */
2475 static const yytype_int8 yyr2[] =
2476 {
2477 0, 2, 1, 1, 2, 3, 3, 3, 2, 3,
2478 4, 4, 4, 4, 4, 4, 4, 5, 8, 1,
2479 1, 1, 1, 1, 3, 1, 1, 1, 1, 1,
2480 1, 1, 1, 1, 1, 1, 1, 0, 3, 0,
2481 3, 0, 3, 0, 3, 0, 3, 4, 2, 0,
2482 0, 2, 4, 2, 0, 1, 4, 4, 2, 1,
2483 3, 1, 2, 1, 3, 1, 4, 4, 2, 0,
2484 0, 5, 1, 4, 0, 2, 1, 1, 1, 1,
2485 1, 2, 0, 1, 1, 1, 4, 4, 2, 0
2486 };
2487
2488
2489 enum { YYENOMEM = -2 };
2490
2491 #define yyerrok (yyerrstatus = 0)
2492 #define yyclearin (yychar = FILTER_EXPR_EMPTY)
2493
2494 #define YYACCEPT goto yyacceptlab
2495 #define YYABORT goto yyabortlab
2496 #define YYERROR goto yyerrorlab
2497 #define YYNOMEM goto yyexhaustedlab
2498
2499
2500 #define YYRECOVERING() (!!yyerrstatus)
2501
2502 #define YYBACKUP(Token, Value) \
2503 do \
2504 if (yychar == FILTER_EXPR_EMPTY) \
2505 { \
2506 yychar = (Token); \
2507 yylval = (Value); \
2508 YYPOPSTACK (yylen); \
2509 yystate = *yyssp; \
2510 goto yybackup; \
2511 } \
2512 else \
2513 { \
2514 yyerror (&yylloc, lexer, result, arg, YY_("syntax error: cannot back up")); \
2515 YYERROR; \
2516 } \
2517 while (0)
2518
2519 /* Backward compatibility with an undocumented macro.
2520 Use FILTER_EXPR_error or FILTER_EXPR_UNDEF. */
2521 #define YYERRCODE FILTER_EXPR_UNDEF
2522
2523 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
2524 If N is 0, then set CURRENT to the empty location which ends
2525 the previous symbol: RHS[0] (always defined). */
2526
2527 #ifndef YYLLOC_DEFAULT
2528 # define YYLLOC_DEFAULT(Current, Rhs, N) \
2529 do \
2530 if (N) \
2531 { \
2532 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
2533 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
2534 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
2535 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
2536 } \
2537 else \
2538 { \
2539 (Current).first_line = (Current).last_line = \
2540 YYRHSLOC (Rhs, 0).last_line; \
2541 (Current).first_column = (Current).last_column = \
2542 YYRHSLOC (Rhs, 0).last_column; \
2543 } \
2544 while (0)
2545 #endif
2546
2547 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
2548
2549
2550 /* Enable debugging if requested. */
2551 #if FILTER_EXPR_DEBUG
2552
2553 # ifndef YYFPRINTF
2554 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2555 # define YYFPRINTF fprintf
2556 # endif
2557
2558 # define YYDPRINTF(Args) \
2559 do { \
2560 if (yydebug) \
2561 YYFPRINTF Args; \
2562 } while (0)
2563
2564
2565 /* YYLOCATION_PRINT -- Print the location on the stream.
2566 This macro was not mandated originally: define only if we know
2567 we won't break user code: when these are the locations we know. */
2568
2569 # ifndef YYLOCATION_PRINT
2570
2571 # if defined YY_LOCATION_PRINT
2572
2573 /* Temporary convenience wrapper in case some people defined the
2574 undocumented and private YY_LOCATION_PRINT macros. */
2575 # define YYLOCATION_PRINT(File, Loc) YY_LOCATION_PRINT(File, *(Loc))
2576
2577 # elif defined FILTER_EXPR_LTYPE_IS_TRIVIAL && FILTER_EXPR_LTYPE_IS_TRIVIAL
2578
2579 /* Print *YYLOCP on YYO. Private, do not rely on its existence. */
2580
2581 YY_ATTRIBUTE_UNUSED
2582 static int
yy_location_print_(FILE * yyo,YYLTYPE const * const yylocp)2583 yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp)
2584 {
2585 int res = 0;
2586 int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0;
2587 if (0 <= yylocp->first_line)
2588 {
2589 res += YYFPRINTF (yyo, "%d", yylocp->first_line);
2590 if (0 <= yylocp->first_column)
2591 res += YYFPRINTF (yyo, ".%d", yylocp->first_column);
2592 }
2593 if (0 <= yylocp->last_line)
2594 {
2595 if (yylocp->first_line < yylocp->last_line)
2596 {
2597 res += YYFPRINTF (yyo, "-%d", yylocp->last_line);
2598 if (0 <= end_col)
2599 res += YYFPRINTF (yyo, ".%d", end_col);
2600 }
2601 else if (0 <= end_col && yylocp->first_column < end_col)
2602 res += YYFPRINTF (yyo, "-%d", end_col);
2603 }
2604 return res;
2605 }
2606
2607 # define YYLOCATION_PRINT yy_location_print_
2608
2609 /* Temporary convenience wrapper in case some people defined the
2610 undocumented and private YY_LOCATION_PRINT macros. */
2611 # define YY_LOCATION_PRINT(File, Loc) YYLOCATION_PRINT(File, &(Loc))
2612
2613 # else
2614
2615 # define YYLOCATION_PRINT(File, Loc) ((void) 0)
2616 /* Temporary convenience wrapper in case some people defined the
2617 undocumented and private YY_LOCATION_PRINT macros. */
2618 # define YY_LOCATION_PRINT YYLOCATION_PRINT
2619
2620 # endif
2621 # endif /* !defined YYLOCATION_PRINT */
2622
2623
2624 # define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \
2625 do { \
2626 if (yydebug) \
2627 { \
2628 YYFPRINTF (stderr, "%s ", Title); \
2629 yy_symbol_print (stderr, \
2630 Kind, Value, Location, lexer, result, arg); \
2631 YYFPRINTF (stderr, "\n"); \
2632 } \
2633 } while (0)
2634
2635
2636 /*-----------------------------------.
2637 | Print this symbol's value on YYO. |
2638 `-----------------------------------*/
2639
2640 static void
yy_symbol_value_print(FILE * yyo,yysymbol_kind_t yykind,YYSTYPE const * const yyvaluep,YYLTYPE const * const yylocationp,CfgLexer * lexer,FilterExprNode ** result,gpointer arg)2641 yy_symbol_value_print (FILE *yyo,
2642 yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, CfgLexer *lexer, FilterExprNode **result, gpointer arg)
2643 {
2644 FILE *yyoutput = yyo;
2645 YY_USE (yyoutput);
2646 YY_USE (yylocationp);
2647 YY_USE (lexer);
2648 YY_USE (result);
2649 YY_USE (arg);
2650 if (!yyvaluep)
2651 return;
2652 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2653 YY_USE (yykind);
2654 YY_IGNORE_MAYBE_UNINITIALIZED_END
2655 }
2656
2657
2658 /*---------------------------.
2659 | Print this symbol on YYO. |
2660 `---------------------------*/
2661
2662 static void
yy_symbol_print(FILE * yyo,yysymbol_kind_t yykind,YYSTYPE const * const yyvaluep,YYLTYPE const * const yylocationp,CfgLexer * lexer,FilterExprNode ** result,gpointer arg)2663 yy_symbol_print (FILE *yyo,
2664 yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, CfgLexer *lexer, FilterExprNode **result, gpointer arg)
2665 {
2666 YYFPRINTF (yyo, "%s %s (",
2667 yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
2668
2669 YYLOCATION_PRINT (yyo, yylocationp);
2670 YYFPRINTF (yyo, ": ");
2671 yy_symbol_value_print (yyo, yykind, yyvaluep, yylocationp, lexer, result, arg);
2672 YYFPRINTF (yyo, ")");
2673 }
2674
2675 /*------------------------------------------------------------------.
2676 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
2677 | TOP (included). |
2678 `------------------------------------------------------------------*/
2679
2680 static void
yy_stack_print(yy_state_t * yybottom,yy_state_t * yytop)2681 yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
2682 {
2683 YYFPRINTF (stderr, "Stack now");
2684 for (; yybottom <= yytop; yybottom++)
2685 {
2686 int yybot = *yybottom;
2687 YYFPRINTF (stderr, " %d", yybot);
2688 }
2689 YYFPRINTF (stderr, "\n");
2690 }
2691
2692 # define YY_STACK_PRINT(Bottom, Top) \
2693 do { \
2694 if (yydebug) \
2695 yy_stack_print ((Bottom), (Top)); \
2696 } while (0)
2697
2698
2699 /*------------------------------------------------.
2700 | Report that the YYRULE is going to be reduced. |
2701 `------------------------------------------------*/
2702
2703 static void
yy_reduce_print(yy_state_t * yyssp,YYSTYPE * yyvsp,YYLTYPE * yylsp,int yyrule,CfgLexer * lexer,FilterExprNode ** result,gpointer arg)2704 yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp,
2705 int yyrule, CfgLexer *lexer, FilterExprNode **result, gpointer arg)
2706 {
2707 int yylno = yyrline[yyrule];
2708 int yynrhs = yyr2[yyrule];
2709 int yyi;
2710 YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
2711 yyrule - 1, yylno);
2712 /* The symbols being reduced. */
2713 for (yyi = 0; yyi < yynrhs; yyi++)
2714 {
2715 YYFPRINTF (stderr, " $%d = ", yyi + 1);
2716 yy_symbol_print (stderr,
2717 YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
2718 &yyvsp[(yyi + 1) - (yynrhs)],
2719 &(yylsp[(yyi + 1) - (yynrhs)]), lexer, result, arg);
2720 YYFPRINTF (stderr, "\n");
2721 }
2722 }
2723
2724 # define YY_REDUCE_PRINT(Rule) \
2725 do { \
2726 if (yydebug) \
2727 yy_reduce_print (yyssp, yyvsp, yylsp, Rule, lexer, result, arg); \
2728 } while (0)
2729
2730 /* Nonzero means print parse trace. It is left uninitialized so that
2731 multiple parsers can coexist. */
2732 int yydebug;
2733 #else /* !FILTER_EXPR_DEBUG */
2734 # define YYDPRINTF(Args) ((void) 0)
2735 # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
2736 # define YY_STACK_PRINT(Bottom, Top)
2737 # define YY_REDUCE_PRINT(Rule)
2738 #endif /* !FILTER_EXPR_DEBUG */
2739
2740
2741 /* YYINITDEPTH -- initial size of the parser's stacks. */
2742 #ifndef YYINITDEPTH
2743 # define YYINITDEPTH 200
2744 #endif
2745
2746 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2747 if the built-in stack extension method is used).
2748
2749 Do not make this value too large; the results are undefined if
2750 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
2751 evaluated with infinite-precision integer arithmetic. */
2752
2753 #ifndef YYMAXDEPTH
2754 # define YYMAXDEPTH 10000
2755 #endif
2756
2757
2758 /* Context of a parse error. */
2759 typedef struct
2760 {
2761 yy_state_t *yyssp;
2762 yysymbol_kind_t yytoken;
2763 YYLTYPE *yylloc;
2764 } yypcontext_t;
2765
2766 /* Put in YYARG at most YYARGN of the expected tokens given the
2767 current YYCTX, and return the number of tokens stored in YYARG. If
2768 YYARG is null, return the number of expected tokens (guaranteed to
2769 be less than YYNTOKENS). Return YYENOMEM on memory exhaustion.
2770 Return 0 if there are more than YYARGN expected tokens, yet fill
2771 YYARG up to YYARGN. */
2772 static int
yypcontext_expected_tokens(const yypcontext_t * yyctx,yysymbol_kind_t yyarg[],int yyargn)2773 yypcontext_expected_tokens (const yypcontext_t *yyctx,
2774 yysymbol_kind_t yyarg[], int yyargn)
2775 {
2776 /* Actual size of YYARG. */
2777 int yycount = 0;
2778 int yyn = yypact[+*yyctx->yyssp];
2779 if (!yypact_value_is_default (yyn))
2780 {
2781 /* Start YYX at -YYN if negative to avoid negative indexes in
2782 YYCHECK. In other words, skip the first -YYN actions for
2783 this state because they are default actions. */
2784 int yyxbegin = yyn < 0 ? -yyn : 0;
2785 /* Stay within bounds of both yycheck and yytname. */
2786 int yychecklim = YYLAST - yyn + 1;
2787 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
2788 int yyx;
2789 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
2790 if (yycheck[yyx + yyn] == yyx && yyx != YYSYMBOL_YYerror
2791 && !yytable_value_is_error (yytable[yyx + yyn]))
2792 {
2793 if (!yyarg)
2794 ++yycount;
2795 else if (yycount == yyargn)
2796 return 0;
2797 else
2798 yyarg[yycount++] = YY_CAST (yysymbol_kind_t, yyx);
2799 }
2800 }
2801 if (yyarg && yycount == 0 && 0 < yyargn)
2802 yyarg[0] = YYSYMBOL_YYEMPTY;
2803 return yycount;
2804 }
2805
2806
2807
2808
2809 #ifndef yystrlen
2810 # if defined __GLIBC__ && defined _STRING_H
2811 # define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
2812 # else
2813 /* Return the length of YYSTR. */
2814 static YYPTRDIFF_T
yystrlen(const char * yystr)2815 yystrlen (const char *yystr)
2816 {
2817 YYPTRDIFF_T yylen;
2818 for (yylen = 0; yystr[yylen]; yylen++)
2819 continue;
2820 return yylen;
2821 }
2822 # endif
2823 #endif
2824
2825 #ifndef yystpcpy
2826 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
2827 # define yystpcpy stpcpy
2828 # else
2829 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
2830 YYDEST. */
2831 static char *
yystpcpy(char * yydest,const char * yysrc)2832 yystpcpy (char *yydest, const char *yysrc)
2833 {
2834 char *yyd = yydest;
2835 const char *yys = yysrc;
2836
2837 while ((*yyd++ = *yys++) != '\0')
2838 continue;
2839
2840 return yyd - 1;
2841 }
2842 # endif
2843 #endif
2844
2845 #ifndef yytnamerr
2846 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
2847 quotes and backslashes, so that it's suitable for yyerror. The
2848 heuristic is that double-quoting is unnecessary unless the string
2849 contains an apostrophe, a comma, or backslash (other than
2850 backslash-backslash). YYSTR is taken from yytname. If YYRES is
2851 null, do not copy; instead, return the length of what the result
2852 would have been. */
2853 static YYPTRDIFF_T
yytnamerr(char * yyres,const char * yystr)2854 yytnamerr (char *yyres, const char *yystr)
2855 {
2856 if (*yystr == '"')
2857 {
2858 YYPTRDIFF_T yyn = 0;
2859 char const *yyp = yystr;
2860 for (;;)
2861 switch (*++yyp)
2862 {
2863 case '\'':
2864 case ',':
2865 goto do_not_strip_quotes;
2866
2867 case '\\':
2868 if (*++yyp != '\\')
2869 goto do_not_strip_quotes;
2870 else
2871 goto append;
2872
2873 append:
2874 default:
2875 if (yyres)
2876 yyres[yyn] = *yyp;
2877 yyn++;
2878 break;
2879
2880 case '"':
2881 if (yyres)
2882 yyres[yyn] = '\0';
2883 return yyn;
2884 }
2885 do_not_strip_quotes: ;
2886 }
2887
2888 if (yyres)
2889 return yystpcpy (yyres, yystr) - yyres;
2890 else
2891 return yystrlen (yystr);
2892 }
2893 #endif
2894
2895
2896 static int
yy_syntax_error_arguments(const yypcontext_t * yyctx,yysymbol_kind_t yyarg[],int yyargn)2897 yy_syntax_error_arguments (const yypcontext_t *yyctx,
2898 yysymbol_kind_t yyarg[], int yyargn)
2899 {
2900 /* Actual size of YYARG. */
2901 int yycount = 0;
2902 /* There are many possibilities here to consider:
2903 - If this state is a consistent state with a default action, then
2904 the only way this function was invoked is if the default action
2905 is an error action. In that case, don't check for expected
2906 tokens because there are none.
2907 - The only way there can be no lookahead present (in yychar) is if
2908 this state is a consistent state with a default action. Thus,
2909 detecting the absence of a lookahead is sufficient to determine
2910 that there is no unexpected or expected token to report. In that
2911 case, just report a simple "syntax error".
2912 - Don't assume there isn't a lookahead just because this state is a
2913 consistent state with a default action. There might have been a
2914 previous inconsistent state, consistent state with a non-default
2915 action, or user semantic action that manipulated yychar.
2916 - Of course, the expected token list depends on states to have
2917 correct lookahead information, and it depends on the parser not
2918 to perform extra reductions after fetching a lookahead from the
2919 scanner and before detecting a syntax error. Thus, state merging
2920 (from LALR or IELR) and default reductions corrupt the expected
2921 token list. However, the list is correct for canonical LR with
2922 one exception: it will still contain any token that will not be
2923 accepted due to an error action in a later state.
2924 */
2925 if (yyctx->yytoken != YYSYMBOL_YYEMPTY)
2926 {
2927 int yyn;
2928 if (yyarg)
2929 yyarg[yycount] = yyctx->yytoken;
2930 ++yycount;
2931 yyn = yypcontext_expected_tokens (yyctx,
2932 yyarg ? yyarg + 1 : yyarg, yyargn - 1);
2933 if (yyn == YYENOMEM)
2934 return YYENOMEM;
2935 else
2936 yycount += yyn;
2937 }
2938 return yycount;
2939 }
2940
2941 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
2942 about the unexpected token YYTOKEN for the state stack whose top is
2943 YYSSP.
2944
2945 Return 0 if *YYMSG was successfully written. Return -1 if *YYMSG is
2946 not large enough to hold the message. In that case, also set
2947 *YYMSG_ALLOC to the required number of bytes. Return YYENOMEM if the
2948 required number of bytes is too large to store. */
2949 static int
yysyntax_error(YYPTRDIFF_T * yymsg_alloc,char ** yymsg,const yypcontext_t * yyctx)2950 yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg,
2951 const yypcontext_t *yyctx)
2952 {
2953 enum { YYARGS_MAX = 5 };
2954 /* Internationalized format string. */
2955 const char *yyformat = YY_NULLPTR;
2956 /* Arguments of yyformat: reported tokens (one for the "unexpected",
2957 one per "expected"). */
2958 yysymbol_kind_t yyarg[YYARGS_MAX];
2959 /* Cumulated lengths of YYARG. */
2960 YYPTRDIFF_T yysize = 0;
2961
2962 /* Actual size of YYARG. */
2963 int yycount = yy_syntax_error_arguments (yyctx, yyarg, YYARGS_MAX);
2964 if (yycount == YYENOMEM)
2965 return YYENOMEM;
2966
2967 switch (yycount)
2968 {
2969 #define YYCASE_(N, S) \
2970 case N: \
2971 yyformat = S; \
2972 break
2973 default: /* Avoid compiler warnings. */
2974 YYCASE_(0, YY_("syntax error"));
2975 YYCASE_(1, YY_("syntax error, unexpected %s"));
2976 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
2977 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
2978 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
2979 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
2980 #undef YYCASE_
2981 }
2982
2983 /* Compute error message size. Don't count the "%s"s, but reserve
2984 room for the terminator. */
2985 yysize = yystrlen (yyformat) - 2 * yycount + 1;
2986 {
2987 int yyi;
2988 for (yyi = 0; yyi < yycount; ++yyi)
2989 {
2990 YYPTRDIFF_T yysize1
2991 = yysize + yytnamerr (YY_NULLPTR, yytname[yyarg[yyi]]);
2992 if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
2993 yysize = yysize1;
2994 else
2995 return YYENOMEM;
2996 }
2997 }
2998
2999 if (*yymsg_alloc < yysize)
3000 {
3001 *yymsg_alloc = 2 * yysize;
3002 if (! (yysize <= *yymsg_alloc
3003 && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
3004 *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
3005 return -1;
3006 }
3007
3008 /* Avoid sprintf, as that infringes on the user's name space.
3009 Don't have undefined behavior even if the translation
3010 produced a string with the wrong number of "%s"s. */
3011 {
3012 char *yyp = *yymsg;
3013 int yyi = 0;
3014 while ((*yyp = *yyformat) != '\0')
3015 if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
3016 {
3017 yyp += yytnamerr (yyp, yytname[yyarg[yyi++]]);
3018 yyformat += 2;
3019 }
3020 else
3021 {
3022 ++yyp;
3023 ++yyformat;
3024 }
3025 }
3026 return 0;
3027 }
3028
3029
3030 /*-----------------------------------------------.
3031 | Release the memory associated to this symbol. |
3032 `-----------------------------------------------*/
3033
3034 static void
yydestruct(const char * yymsg,yysymbol_kind_t yykind,YYSTYPE * yyvaluep,YYLTYPE * yylocationp,CfgLexer * lexer,FilterExprNode ** result,gpointer arg)3035 yydestruct (const char *yymsg,
3036 yysymbol_kind_t yykind, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, CfgLexer *lexer, FilterExprNode **result, gpointer arg)
3037 {
3038 YY_USE (yyvaluep);
3039 YY_USE (yylocationp);
3040 YY_USE (lexer);
3041 YY_USE (result);
3042 YY_USE (arg);
3043 if (!yymsg)
3044 yymsg = "Deleting";
3045 YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
3046
3047 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
3048 switch (yykind)
3049 {
3050 case YYSYMBOL_LL_IDENTIFIER: /* LL_IDENTIFIER */
3051 #line 325 "lib/filter/filter-expr-grammar.y"
3052 { free(((*yyvaluep).cptr)); }
3053 #line 3054 "lib/filter/filter-expr-grammar.c"
3054 break;
3055
3056 case YYSYMBOL_LL_STRING: /* LL_STRING */
3057 #line 325 "lib/filter/filter-expr-grammar.y"
3058 { free(((*yyvaluep).cptr)); }
3059 #line 3060 "lib/filter/filter-expr-grammar.c"
3060 break;
3061
3062 case YYSYMBOL_LL_BLOCK: /* LL_BLOCK */
3063 #line 325 "lib/filter/filter-expr-grammar.y"
3064 { free(((*yyvaluep).cptr)); }
3065 #line 3066 "lib/filter/filter-expr-grammar.c"
3066 break;
3067
3068 case YYSYMBOL_string: /* string */
3069 #line 325 "lib/filter/filter-expr-grammar.y"
3070 { free(((*yyvaluep).cptr)); }
3071 #line 3072 "lib/filter/filter-expr-grammar.c"
3072 break;
3073
3074 default:
3075 break;
3076 }
3077 YY_IGNORE_MAYBE_UNINITIALIZED_END
3078 }
3079
3080
3081
3082
3083
3084
3085 /*----------.
3086 | yyparse. |
3087 `----------*/
3088
3089 int
yyparse(CfgLexer * lexer,FilterExprNode ** result,gpointer arg)3090 yyparse (CfgLexer *lexer, FilterExprNode **result, gpointer arg)
3091 {
3092 /* Lookahead token kind. */
3093 int yychar;
3094
3095
3096 /* The semantic value of the lookahead symbol. */
3097 /* Default value used for initialization, for pacifying older GCCs
3098 or non-GCC compilers. */
3099 YY_INITIAL_VALUE (static YYSTYPE yyval_default;)
3100 YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
3101
3102 /* Location data for the lookahead symbol. */
3103 static YYLTYPE yyloc_default
3104 # if defined FILTER_EXPR_LTYPE_IS_TRIVIAL && FILTER_EXPR_LTYPE_IS_TRIVIAL
3105 = { 1, 1, 1, 1 }
3106 # endif
3107 ;
3108 YYLTYPE yylloc = yyloc_default;
3109
3110 /* Number of syntax errors so far. */
3111 int yynerrs = 0;
3112
3113 yy_state_fast_t yystate = 0;
3114 /* Number of tokens to shift before error messages enabled. */
3115 int yyerrstatus = 0;
3116
3117 /* Refer to the stacks through separate pointers, to allow yyoverflow
3118 to reallocate them elsewhere. */
3119
3120 /* Their size. */
3121 YYPTRDIFF_T yystacksize = YYINITDEPTH;
3122
3123 /* The state stack: array, bottom, top. */
3124 yy_state_t yyssa[YYINITDEPTH];
3125 yy_state_t *yyss = yyssa;
3126 yy_state_t *yyssp = yyss;
3127
3128 /* The semantic value stack: array, bottom, top. */
3129 YYSTYPE yyvsa[YYINITDEPTH];
3130 YYSTYPE *yyvs = yyvsa;
3131 YYSTYPE *yyvsp = yyvs;
3132
3133 /* The location stack: array, bottom, top. */
3134 YYLTYPE yylsa[YYINITDEPTH];
3135 YYLTYPE *yyls = yylsa;
3136 YYLTYPE *yylsp = yyls;
3137
3138 int yyn;
3139 /* The return value of yyparse. */
3140 int yyresult;
3141 /* Lookahead symbol kind. */
3142 yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
3143 /* The variables used to return semantic value and location from the
3144 action routines. */
3145 YYSTYPE yyval;
3146 YYLTYPE yyloc;
3147
3148 /* The locations where the error started and ended. */
3149 YYLTYPE yyerror_range[3];
3150
3151 /* Buffer for error messages, and its allocated size. */
3152 char yymsgbuf[128];
3153 char *yymsg = yymsgbuf;
3154 YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf;
3155
3156 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N))
3157
3158 /* The number of symbols on the RHS of the reduced rule.
3159 Keep to zero when no symbol should be popped. */
3160 int yylen = 0;
3161
3162 YYDPRINTF ((stderr, "Starting parse\n"));
3163
3164 yychar = FILTER_EXPR_EMPTY; /* Cause a token to be read. */
3165
3166 yylsp[0] = yylloc;
3167 goto yysetstate;
3168
3169
3170 /*------------------------------------------------------------.
3171 | yynewstate -- push a new state, which is found in yystate. |
3172 `------------------------------------------------------------*/
3173 yynewstate:
3174 /* In all cases, when you get here, the value and location stacks
3175 have just been pushed. So pushing a state here evens the stacks. */
3176 yyssp++;
3177
3178
3179 /*--------------------------------------------------------------------.
3180 | yysetstate -- set current state (the top of the stack) to yystate. |
3181 `--------------------------------------------------------------------*/
3182 yysetstate:
3183 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
3184 YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
3185 YY_IGNORE_USELESS_CAST_BEGIN
3186 *yyssp = YY_CAST (yy_state_t, yystate);
3187 YY_IGNORE_USELESS_CAST_END
3188 YY_STACK_PRINT (yyss, yyssp);
3189
3190 if (yyss + yystacksize - 1 <= yyssp)
3191 #if !defined yyoverflow && !defined YYSTACK_RELOCATE
3192 YYNOMEM;
3193 #else
3194 {
3195 /* Get the current used size of the three stacks, in elements. */
3196 YYPTRDIFF_T yysize = yyssp - yyss + 1;
3197
3198 # if defined yyoverflow
3199 {
3200 /* Give user a chance to reallocate the stack. Use copies of
3201 these so that the &'s don't force the real ones into
3202 memory. */
3203 yy_state_t *yyss1 = yyss;
3204 YYSTYPE *yyvs1 = yyvs;
3205 YYLTYPE *yyls1 = yyls;
3206
3207 /* Each stack pointer address is followed by the size of the
3208 data in use in that stack, in bytes. This used to be a
3209 conditional around just the two extra args, but that might
3210 be undefined if yyoverflow is a macro. */
3211 yyoverflow (YY_("memory exhausted"),
3212 &yyss1, yysize * YYSIZEOF (*yyssp),
3213 &yyvs1, yysize * YYSIZEOF (*yyvsp),
3214 &yyls1, yysize * YYSIZEOF (*yylsp),
3215 &yystacksize);
3216 yyss = yyss1;
3217 yyvs = yyvs1;
3218 yyls = yyls1;
3219 }
3220 # else /* defined YYSTACK_RELOCATE */
3221 /* Extend the stack our own way. */
3222 if (YYMAXDEPTH <= yystacksize)
3223 YYNOMEM;
3224 yystacksize *= 2;
3225 if (YYMAXDEPTH < yystacksize)
3226 yystacksize = YYMAXDEPTH;
3227
3228 {
3229 yy_state_t *yyss1 = yyss;
3230 union yyalloc *yyptr =
3231 YY_CAST (union yyalloc *,
3232 YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
3233 if (! yyptr)
3234 YYNOMEM;
3235 YYSTACK_RELOCATE (yyss_alloc, yyss);
3236 YYSTACK_RELOCATE (yyvs_alloc, yyvs);
3237 YYSTACK_RELOCATE (yyls_alloc, yyls);
3238 # undef YYSTACK_RELOCATE
3239 if (yyss1 != yyssa)
3240 YYSTACK_FREE (yyss1);
3241 }
3242 # endif
3243
3244 yyssp = yyss + yysize - 1;
3245 yyvsp = yyvs + yysize - 1;
3246 yylsp = yyls + yysize - 1;
3247
3248 YY_IGNORE_USELESS_CAST_BEGIN
3249 YYDPRINTF ((stderr, "Stack size increased to %ld\n",
3250 YY_CAST (long, yystacksize)));
3251 YY_IGNORE_USELESS_CAST_END
3252
3253 if (yyss + yystacksize - 1 <= yyssp)
3254 YYABORT;
3255 }
3256 #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
3257
3258
3259 if (yystate == YYFINAL)
3260 YYACCEPT;
3261
3262 goto yybackup;
3263
3264
3265 /*-----------.
3266 | yybackup. |
3267 `-----------*/
3268 yybackup:
3269 /* Do appropriate processing given the current state. Read a
3270 lookahead token if we need one and don't already have one. */
3271
3272 /* First try to decide what to do without reference to lookahead token. */
3273 yyn = yypact[yystate];
3274 if (yypact_value_is_default (yyn))
3275 goto yydefault;
3276
3277 /* Not known => get a lookahead token if don't already have one. */
3278
3279 /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */
3280 if (yychar == FILTER_EXPR_EMPTY)
3281 {
3282 YYDPRINTF ((stderr, "Reading a token\n"));
3283 yychar = yylex (&yylval, &yylloc, lexer);
3284 }
3285
3286 if (yychar <= FILTER_EXPR_EOF)
3287 {
3288 yychar = FILTER_EXPR_EOF;
3289 yytoken = YYSYMBOL_YYEOF;
3290 YYDPRINTF ((stderr, "Now at end of input.\n"));
3291 }
3292 else if (yychar == FILTER_EXPR_error)
3293 {
3294 /* The scanner already issued an error message, process directly
3295 to error recovery. But do not keep the error token as
3296 lookahead, it is too special and may lead us to an endless
3297 loop in error recovery. */
3298 yychar = FILTER_EXPR_UNDEF;
3299 yytoken = YYSYMBOL_YYerror;
3300 yyerror_range[1] = yylloc;
3301 goto yyerrlab1;
3302 }
3303 else
3304 {
3305 yytoken = YYTRANSLATE (yychar);
3306 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
3307 }
3308
3309 /* If the proper action on seeing token YYTOKEN is to reduce or to
3310 detect an error, take that action. */
3311 yyn += yytoken;
3312 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
3313 goto yydefault;
3314 yyn = yytable[yyn];
3315 if (yyn <= 0)
3316 {
3317 if (yytable_value_is_error (yyn))
3318 goto yyerrlab;
3319 yyn = -yyn;
3320 goto yyreduce;
3321 }
3322
3323 /* Count tokens shifted since error; after three, turn off error
3324 status. */
3325 if (yyerrstatus)
3326 yyerrstatus--;
3327
3328 /* Shift the lookahead token. */
3329 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
3330 yystate = yyn;
3331 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
3332 *++yyvsp = yylval;
3333 YY_IGNORE_MAYBE_UNINITIALIZED_END
3334 *++yylsp = yylloc;
3335
3336 /* Discard the shifted token. */
3337 yychar = FILTER_EXPR_EMPTY;
3338 goto yynewstate;
3339
3340
3341 /*-----------------------------------------------------------.
3342 | yydefault -- do the default action for the current state. |
3343 `-----------------------------------------------------------*/
3344 yydefault:
3345 yyn = yydefact[yystate];
3346 if (yyn == 0)
3347 goto yyerrlab;
3348 goto yyreduce;
3349
3350
3351 /*-----------------------------.
3352 | yyreduce -- do a reduction. |
3353 `-----------------------------*/
3354 yyreduce:
3355 /* yyn is the number of a rule to reduce with. */
3356 yylen = yyr2[yyn];
3357
3358 /* If YYLEN is nonzero, implement the default value of the action:
3359 '$$ = $1'.
3360
3361 Otherwise, the following line sets YYVAL to garbage.
3362 This behavior is undocumented and Bison
3363 users should not rely upon it. Assigning to YYVAL
3364 unconditionally makes the parser a bit smaller, and it avoids a
3365 GCC warning that YYVAL may be used uninitialized. */
3366 yyval = yyvsp[1-yylen];
3367
3368 /* Default location. */
3369 YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
3370 yyerror_range[1] = yyloc;
3371 YY_REDUCE_PRINT (yyn);
3372 switch (yyn)
3373 {
3374 case 2: /* start: filter_expr */
3375 #line 433 "lib/filter/filter-expr-grammar.y"
3376 { *result = (yyvsp[0].node); if (yychar != FILTER_EXPR_EMPTY) { cfg_lexer_unput_token(lexer, &yylval); } YYACCEPT; }
3377 #line 3378 "lib/filter/filter-expr-grammar.c"
3378 break;
3379
3380 case 3: /* filter_expr: filter_simple_expr */
3381 #line 437 "lib/filter/filter-expr-grammar.y"
3382 { (yyval.node) = (yyvsp[0].node); if (!(yyvsp[0].node)) YYERROR; }
3383 #line 3384 "lib/filter/filter-expr-grammar.c"
3384 break;
3385
3386 case 4: /* filter_expr: KW_NOT filter_expr */
3387 #line 438 "lib/filter/filter-expr-grammar.y"
3388 { ((FilterExprNode *) (yyvsp[0].node))->comp = !(((FilterExprNode *) (yyvsp[0].node))->comp); (yyval.node) = (yyvsp[0].node); }
3389 #line 3390 "lib/filter/filter-expr-grammar.c"
3390 break;
3391
3392 case 5: /* filter_expr: filter_expr KW_OR filter_expr */
3393 #line 439 "lib/filter/filter-expr-grammar.y"
3394 { (yyval.node) = fop_or_new((yyvsp[-2].node), (yyvsp[0].node)); }
3395 #line 3396 "lib/filter/filter-expr-grammar.c"
3396 break;
3397
3398 case 6: /* filter_expr: filter_expr KW_AND filter_expr */
3399 #line 440 "lib/filter/filter-expr-grammar.y"
3400 { (yyval.node) = fop_and_new((yyvsp[-2].node), (yyvsp[0].node)); }
3401 #line 3402 "lib/filter/filter-expr-grammar.c"
3402 break;
3403
3404 case 7: /* filter_expr: filter_expr ';' filter_expr */
3405 #line 441 "lib/filter/filter-expr-grammar.y"
3406 { (yyval.node) = fop_and_new((yyvsp[-2].node), (yyvsp[0].node)); }
3407 #line 3408 "lib/filter/filter-expr-grammar.c"
3408 break;
3409
3410 case 8: /* filter_expr: filter_expr ';' */
3411 #line 442 "lib/filter/filter-expr-grammar.y"
3412 { (yyval.node) = (yyvsp[-1].node); }
3413 #line 3414 "lib/filter/filter-expr-grammar.c"
3414 break;
3415
3416 case 9: /* filter_expr: '(' filter_expr ')' */
3417 #line 443 "lib/filter/filter-expr-grammar.y"
3418 { (yyval.node) = (yyvsp[-1].node); }
3419 #line 3420 "lib/filter/filter-expr-grammar.c"
3420 break;
3421
3422 case 10: /* filter_simple_expr: KW_FACILITY '(' filter_fac_list ')' */
3423 #line 447 "lib/filter/filter-expr-grammar.y"
3424 { (yyval.node) = filter_facility_new((yyvsp[-1].num)); }
3425 #line 3426 "lib/filter/filter-expr-grammar.c"
3426 break;
3427
3428 case 11: /* filter_simple_expr: KW_FACILITY '(' LL_NUMBER ')' */
3429 #line 448 "lib/filter/filter-expr-grammar.y"
3430 { (yyval.node) = filter_facility_new(0x80000000 | (yyvsp[-1].num)); }
3431 #line 3432 "lib/filter/filter-expr-grammar.c"
3432 break;
3433
3434 case 12: /* filter_simple_expr: KW_SEVERITY '(' filter_severity_list ')' */
3435 #line 449 "lib/filter/filter-expr-grammar.y"
3436 { (yyval.node) = filter_severity_new((yyvsp[-1].num)); }
3437 #line 3438 "lib/filter/filter-expr-grammar.c"
3438 break;
3439
3440 case 13: /* filter_simple_expr: KW_FILTER '(' string ')' */
3441 #line 450 "lib/filter/filter-expr-grammar.y"
3442 { (yyval.node) = filter_call_new((yyvsp[-1].cptr), configuration); free((yyvsp[-1].cptr)); }
3443 #line 3444 "lib/filter/filter-expr-grammar.c"
3444 break;
3445
3446 case 14: /* filter_simple_expr: KW_NETMASK '(' string ')' */
3447 #line 451 "lib/filter/filter-expr-grammar.y"
3448 { (yyval.node) = filter_netmask_new((yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
3449 #line 3450 "lib/filter/filter-expr-grammar.c"
3450 break;
3451
3452 case 15: /* filter_simple_expr: KW_NETMASK6 '(' string ')' */
3453 #line 452 "lib/filter/filter-expr-grammar.y"
3454 {
3455 #if SYSLOG_NG_ENABLE_IPV6
3456 (yyval.node) = filter_netmask6_new((yyvsp[-1].cptr));
3457 #else
3458 YYERROR;
3459 #endif
3460 free((yyvsp[-1].cptr));
3461 }
3462 #line 3463 "lib/filter/filter-expr-grammar.c"
3463 break;
3464
3465 case 16: /* filter_simple_expr: KW_TAGS '(' string_list ')' */
3466 #line 460 "lib/filter/filter-expr-grammar.y"
3467 { (yyval.node) = filter_tags_new((yyvsp[-1].ptr)); }
3468 #line 3469 "lib/filter/filter-expr-grammar.c"
3469 break;
3470
3471 case 17: /* filter_simple_expr: KW_IN_LIST '(' string string ')' */
3472 #line 462 "lib/filter/filter-expr-grammar.y"
3473 {
3474 const gchar *p = (yyvsp[-1].cptr);
3475 if (p[0] == '$')
3476 {
3477 msg_warning("Value references in filters should not use the '$' prefix, those are only needed in templates",
3478 evt_tag_str("value", (yyvsp[-1].cptr)),
3479 cfg_lexer_format_location_tag(lexer, &(yylsp[-1])));
3480 p++;
3481 }
3482 (yyval.node) = filter_in_list_new((yyvsp[-2].cptr), p);
3483 free((yyvsp[-2].cptr));
3484 free((yyvsp[-1].cptr));
3485 }
3486 #line 3487 "lib/filter/filter-expr-grammar.c"
3487 break;
3488
3489 case 18: /* filter_simple_expr: KW_IN_LIST '(' string KW_VALUE '(' string ')' ')' */
3490 #line 476 "lib/filter/filter-expr-grammar.y"
3491 {
3492 const gchar *p = (yyvsp[-2].cptr);
3493 if (p[0] == '$')
3494 {
3495 msg_warning("Value references in filters should not use the '$' prefix, those are only needed in templates",
3496 evt_tag_str("value", (yyvsp[-2].cptr)),
3497 cfg_lexer_format_location_tag(lexer, &(yylsp[-2])));
3498 p++;
3499 }
3500 (yyval.node) = filter_in_list_new((yyvsp[-5].cptr), p);
3501 free((yyvsp[-5].cptr));
3502 free((yyvsp[-2].cptr));
3503 }
3504 #line 3505 "lib/filter/filter-expr-grammar.c"
3505 break;
3506
3507 case 19: /* filter_simple_expr: filter_re */
3508 #line 489 "lib/filter/filter-expr-grammar.y"
3509 { (yyval.node) = last_filter_expr; }
3510 #line 3511 "lib/filter/filter-expr-grammar.c"
3511 break;
3512
3513 case 22: /* filter_simple_expr: filter_throttle */
3514 #line 492 "lib/filter/filter-expr-grammar.y"
3515 { (yyval.node) = last_filter_expr; }
3516 #line 3517 "lib/filter/filter-expr-grammar.c"
3517 break;
3518
3519 case 23: /* filter_plugin: LL_IDENTIFIER */
3520 #line 498 "lib/filter/filter-expr-grammar.y"
3521 {
3522 Plugin *p;
3523 gint context = LL_CONTEXT_FILTER;
3524 FilterExprNode *node;
3525
3526 p = cfg_find_plugin(configuration, context, (yyvsp[0].cptr));
3527 CHECK_ERROR(p, (yylsp[0]), "%s plugin %s not found OR you may not used double quotes in your filter expression", cfg_lexer_lookup_context_name_by_type(context), (yyvsp[0].cptr));
3528
3529 node = (FilterExprNode *) cfg_parse_plugin(configuration, p, &(yylsp[0]), NULL);
3530 free((yyvsp[0].cptr));
3531 if (!node)
3532 {
3533 YYERROR;
3534 }
3535 (yyval.node) = node;
3536 }
3537 #line 3538 "lib/filter/filter-expr-grammar.c"
3538 break;
3539
3540 case 24: /* filter_comparison: LL_STRING operator LL_STRING */
3541 #line 518 "lib/filter/filter-expr-grammar.y"
3542 {
3543 LogTemplate *left, *right;
3544 GError *error = NULL;
3545
3546 left = log_template_new(configuration, NULL);
3547 right = log_template_new(configuration, NULL);
3548 CHECK_ERROR_GERROR(log_template_compile(left, (yyvsp[-2].cptr), &error), (yylsp[-2]), error, "compiling the left-hand-side template failed");
3549 CHECK_ERROR_GERROR(log_template_compile(right, (yyvsp[0].cptr), &error), (yylsp[0]), error, "compiling the right-hand-side template failed");
3550
3551 free((yyvsp[-2].cptr));
3552 free((yyvsp[0].cptr));
3553 (yyval.node) = fop_cmp_new(left, right, (yyvsp[-1].token));
3554 }
3555 #line 3556 "lib/filter/filter-expr-grammar.c"
3556 break;
3557
3558 case 25: /* operator: KW_NUM_LT */
3559 #line 534 "lib/filter/filter-expr-grammar.y"
3560 { (yyval.token) = yylval.token; }
3561 #line 3562 "lib/filter/filter-expr-grammar.c"
3562 break;
3563
3564 case 26: /* operator: KW_NUM_LE */
3565 #line 535 "lib/filter/filter-expr-grammar.y"
3566 { (yyval.token) = yylval.token; }
3567 #line 3568 "lib/filter/filter-expr-grammar.c"
3568 break;
3569
3570 case 27: /* operator: KW_NUM_EQ */
3571 #line 536 "lib/filter/filter-expr-grammar.y"
3572 { (yyval.token) = yylval.token; }
3573 #line 3574 "lib/filter/filter-expr-grammar.c"
3574 break;
3575
3576 case 28: /* operator: KW_NUM_NE */
3577 #line 537 "lib/filter/filter-expr-grammar.y"
3578 { (yyval.token) = yylval.token; }
3579 #line 3580 "lib/filter/filter-expr-grammar.c"
3580 break;
3581
3582 case 29: /* operator: KW_NUM_GE */
3583 #line 538 "lib/filter/filter-expr-grammar.y"
3584 { (yyval.token) = yylval.token; }
3585 #line 3586 "lib/filter/filter-expr-grammar.c"
3586 break;
3587
3588 case 30: /* operator: KW_NUM_GT */
3589 #line 539 "lib/filter/filter-expr-grammar.y"
3590 { (yyval.token) = yylval.token; }
3591 #line 3592 "lib/filter/filter-expr-grammar.c"
3592 break;
3593
3594 case 31: /* operator: KW_LT */
3595 #line 540 "lib/filter/filter-expr-grammar.y"
3596 { (yyval.token) = yylval.token; }
3597 #line 3598 "lib/filter/filter-expr-grammar.c"
3598 break;
3599
3600 case 32: /* operator: KW_LE */
3601 #line 541 "lib/filter/filter-expr-grammar.y"
3602 { (yyval.token) = yylval.token; }
3603 #line 3604 "lib/filter/filter-expr-grammar.c"
3604 break;
3605
3606 case 33: /* operator: KW_EQ */
3607 #line 542 "lib/filter/filter-expr-grammar.y"
3608 { (yyval.token) = yylval.token; }
3609 #line 3610 "lib/filter/filter-expr-grammar.c"
3610 break;
3611
3612 case 34: /* operator: KW_NE */
3613 #line 543 "lib/filter/filter-expr-grammar.y"
3614 { (yyval.token) = yylval.token; }
3615 #line 3616 "lib/filter/filter-expr-grammar.c"
3616 break;
3617
3618 case 35: /* operator: KW_GE */
3619 #line 544 "lib/filter/filter-expr-grammar.y"
3620 { (yyval.token) = yylval.token; }
3621 #line 3622 "lib/filter/filter-expr-grammar.c"
3622 break;
3623
3624 case 36: /* operator: KW_GT */
3625 #line 545 "lib/filter/filter-expr-grammar.y"
3626 { (yyval.token) = yylval.token; }
3627 #line 3628 "lib/filter/filter-expr-grammar.c"
3628 break;
3629
3630 case 37: /* $@1: %empty */
3631 #line 549 "lib/filter/filter-expr-grammar.y"
3632 { last_filter_expr = filter_re_new(LM_V_PROGRAM); }
3633 #line 3634 "lib/filter/filter-expr-grammar.c"
3634 break;
3635
3636 case 39: /* $@2: %empty */
3637 #line 550 "lib/filter/filter-expr-grammar.y"
3638 { last_filter_expr = filter_re_new(LM_V_HOST); }
3639 #line 3640 "lib/filter/filter-expr-grammar.c"
3640 break;
3641
3642 case 41: /* $@3: %empty */
3643 #line 551 "lib/filter/filter-expr-grammar.y"
3644 { last_filter_expr = filter_re_new(LM_V_MESSAGE); }
3645 #line 3646 "lib/filter/filter-expr-grammar.c"
3646 break;
3647
3648 case 43: /* $@4: %empty */
3649 #line 552 "lib/filter/filter-expr-grammar.y"
3650 { last_filter_expr = filter_source_new(); }
3651 #line 3652 "lib/filter/filter-expr-grammar.c"
3652 break;
3653
3654 case 45: /* $@5: %empty */
3655 #line 553 "lib/filter/filter-expr-grammar.y"
3656 { last_filter_expr = filter_match_new(); }
3657 #line 3658 "lib/filter/filter-expr-grammar.c"
3658 break;
3659
3660 case 47: /* filter_re_params: '(' string filter_re_opts ')' */
3661 #line 558 "lib/filter/filter-expr-grammar.y"
3662 {
3663 GError *error = NULL;
3664
3665 CHECK_ERROR_GERROR(filter_re_compile_pattern(last_filter_expr, (yyvsp[-2].cptr), &error), (yylsp[-2]), error, "compiling the regexp failed");
3666 free((yyvsp[-2].cptr));
3667 }
3668 #line 3669 "lib/filter/filter-expr-grammar.c"
3669 break;
3670
3671 case 50: /* $@6: %empty */
3672 #line 572 "lib/filter/filter-expr-grammar.y"
3673 { last_matcher_options = filter_re_get_matcher_options(last_filter_expr); }
3674 #line 3675 "lib/filter/filter-expr-grammar.c"
3675 break;
3676
3677 case 52: /* filter_match_params: '(' string filter_match_opts ')' */
3678 #line 578 "lib/filter/filter-expr-grammar.y"
3679 {
3680 GError *error = NULL;
3681
3682 CHECK_ERROR_GERROR(filter_re_compile_pattern(last_filter_expr, (yyvsp[-2].cptr), &error), (yylsp[-2]), error, "compiling the regexp failed");
3683 free((yyvsp[-2].cptr));
3684
3685 if (filter_match_is_usage_obsolete(last_filter_expr))
3686 {
3687 msg_warning_once("WARNING: the match() filter without the use of the value() "
3688 "option is deprecated and hinders performance, please use a "
3689 "more specific filter like message() and/or program() instead",
3690 cfg_lexer_format_location_tag(lexer, &(yylsp[-4])));
3691 }
3692
3693 }
3694 #line 3695 "lib/filter/filter-expr-grammar.c"
3695 break;
3696
3697 case 56: /* filter_match_opt: KW_VALUE '(' string ')' */
3698 #line 602 "lib/filter/filter-expr-grammar.y"
3699 {
3700 const gchar *p = (yyvsp[-1].cptr);
3701 if (p[0] == '$')
3702 {
3703 msg_warning("WARNING: value references in filters should not use the '$' prefix, those are only needed in templates, removing automatically",
3704 evt_tag_str("value", (yyvsp[-1].cptr)),
3705 cfg_lexer_format_location_tag(lexer, &(yylsp[-1])));
3706 p++;
3707 }
3708 if (p[0] == '(' || strchr(p, '$') != NULL)
3709 {
3710 msg_error("value() reference for the match() filter cannot contain a full template string, use the template() option or stick to a single value",
3711 evt_tag_str("value", (yyvsp[-1].cptr)),
3712 cfg_lexer_format_location_tag(lexer, &(yylsp[-1])));
3713 free((yyvsp[-1].cptr));
3714 YYERROR;
3715 }
3716 filter_match_set_value_handle(last_filter_expr, log_msg_get_value_handle(p));
3717 free((yyvsp[-1].cptr));
3718 }
3719 #line 3720 "lib/filter/filter-expr-grammar.c"
3720 break;
3721
3722 case 57: /* filter_match_opt: KW_TEMPLATE '(' template_content ')' */
3723 #line 623 "lib/filter/filter-expr-grammar.y"
3724 {
3725 filter_match_set_template_ref(last_filter_expr, (yyvsp[-1].ptr));
3726 }
3727 #line 3728 "lib/filter/filter-expr-grammar.c"
3728 break;
3729
3730 case 58: /* filter_fac_list: filter_fac filter_fac_list */
3731 #line 629 "lib/filter/filter-expr-grammar.y"
3732 { (yyval.num) = (yyvsp[-1].num) | (yyvsp[0].num); }
3733 #line 3734 "lib/filter/filter-expr-grammar.c"
3734 break;
3735
3736 case 59: /* filter_fac_list: filter_fac */
3737 #line 630 "lib/filter/filter-expr-grammar.y"
3738 { (yyval.num) = (yyvsp[0].num); }
3739 #line 3740 "lib/filter/filter-expr-grammar.c"
3740 break;
3741
3742 case 60: /* filter_fac: facility_string LL_DOTDOT facility_string */
3743 #line 635 "lib/filter/filter-expr-grammar.y"
3744 {
3745 (yyval.num) = syslog_make_range((yyvsp[-2].num) >> 3, (yyvsp[0].num) >> 3);
3746 }
3747 #line 3748 "lib/filter/filter-expr-grammar.c"
3748 break;
3749
3750 case 61: /* filter_fac: facility_string */
3751 #line 638 "lib/filter/filter-expr-grammar.y"
3752 { (yyval.num) = 1 << ((yyvsp[0].num) >> 3); }
3753 #line 3754 "lib/filter/filter-expr-grammar.c"
3754 break;
3755
3756 case 62: /* filter_severity_list: filter_severity filter_severity_list */
3757 #line 642 "lib/filter/filter-expr-grammar.y"
3758 { (yyval.num) = (yyvsp[-1].num) | (yyvsp[0].num); }
3759 #line 3760 "lib/filter/filter-expr-grammar.c"
3760 break;
3761
3762 case 63: /* filter_severity_list: filter_severity */
3763 #line 643 "lib/filter/filter-expr-grammar.y"
3764 { (yyval.num) = (yyvsp[0].num); }
3765 #line 3766 "lib/filter/filter-expr-grammar.c"
3766 break;
3767
3768 case 64: /* filter_severity: severity_string LL_DOTDOT severity_string */
3769 #line 648 "lib/filter/filter-expr-grammar.y"
3770 {
3771 (yyval.num) = syslog_make_range((yyvsp[-2].num), (yyvsp[0].num));
3772 }
3773 #line 3774 "lib/filter/filter-expr-grammar.c"
3774 break;
3775
3776 case 65: /* filter_severity: severity_string */
3777 #line 652 "lib/filter/filter-expr-grammar.y"
3778 {
3779 (yyval.num) = 1 << (yyvsp[0].num);
3780 }
3781 #line 3782 "lib/filter/filter-expr-grammar.c"
3782 break;
3783
3784 case 66: /* filter_throttle_arg: KW_TEMPLATE '(' template_content ')' */
3785 #line 659 "lib/filter/filter-expr-grammar.y"
3786 {
3787 filter_throttle_set_key_template(last_filter_expr, (yyvsp[-1].ptr));
3788 log_template_unref((yyvsp[-1].ptr));
3789 }
3790 #line 3791 "lib/filter/filter-expr-grammar.c"
3791 break;
3792
3793 case 67: /* filter_throttle_arg: KW_RATE '(' positive_integer ')' */
3794 #line 664 "lib/filter/filter-expr-grammar.y"
3795 {
3796 filter_throttle_set_rate(last_filter_expr, (yyvsp[-1].num));
3797 }
3798 #line 3799 "lib/filter/filter-expr-grammar.c"
3799 break;
3800
3801 case 70: /* $@7: %empty */
3802 #line 675 "lib/filter/filter-expr-grammar.y"
3803 { last_filter_expr = filter_throttle_new(); }
3804 #line 3805 "lib/filter/filter-expr-grammar.c"
3805 break;
3806
3807 case 72: /* template_content_inner: string */
3808 #line 912 "lib/filter/filter-expr-grammar.y"
3809 {
3810 GError *error = NULL;
3811
3812 CHECK_ERROR_GERROR(log_template_compile(last_template, (yyvsp[0].cptr), &error), (yylsp[0]), error, "Error compiling template");
3813 free((yyvsp[0].cptr));
3814 }
3815 #line 3816 "lib/filter/filter-expr-grammar.c"
3816 break;
3817
3818 case 73: /* template_content_inner: LL_IDENTIFIER '(' string ')' */
3819 #line 919 "lib/filter/filter-expr-grammar.y"
3820 {
3821 GError *error = NULL;
3822
3823 CHECK_ERROR_GERROR(log_template_compile(last_template, (yyvsp[-1].cptr), &error), (yylsp[-1]), error, "Error compiling template");
3824 free((yyvsp[-1].cptr));
3825
3826 CHECK_ERROR_GERROR(log_template_set_type_hint(last_template, (yyvsp[-3].cptr), &error), (yylsp[-3]), error, "Error setting the template type-hint \"%s\"", (yyvsp[-3].cptr));
3827 free((yyvsp[-3].cptr));
3828 }
3829 #line 3830 "lib/filter/filter-expr-grammar.c"
3830 break;
3831
3832 case 74: /* $@13: %empty */
3833 #line 931 "lib/filter/filter-expr-grammar.y"
3834 { last_template = log_template_new(configuration, NULL); }
3835 #line 3836 "lib/filter/filter-expr-grammar.c"
3836 break;
3837
3838 case 75: /* template_content: $@13 template_content_inner */
3839 #line 931 "lib/filter/filter-expr-grammar.y"
3840 { (yyval.ptr) = last_template; }
3841 #line 3842 "lib/filter/filter-expr-grammar.c"
3842 break;
3843
3844 case 78: /* positive_integer64: LL_NUMBER */
3845 #line 973 "lib/filter/filter-expr-grammar.y"
3846 {
3847 CHECK_ERROR(((yyvsp[0].num) > 0), (yylsp[0]), "Must be positive");
3848 }
3849 #line 3850 "lib/filter/filter-expr-grammar.c"
3850 break;
3851
3852 case 79: /* positive_integer: positive_integer64 */
3853 #line 980 "lib/filter/filter-expr-grammar.y"
3854 {
3855 CHECK_ERROR(((yyvsp[0].num) <= G_MAXINT32), (yylsp[0]), "Must be smaller than 2^31");
3856 }
3857 #line 3858 "lib/filter/filter-expr-grammar.c"
3858 break;
3859
3860 case 80: /* string_list: string_list_build */
3861 #line 1040 "lib/filter/filter-expr-grammar.y"
3862 { (yyval.ptr) = (yyvsp[0].ptr); }
3863 #line 3864 "lib/filter/filter-expr-grammar.c"
3864 break;
3865
3866 case 81: /* string_list_build: string string_list_build */
3867 #line 1044 "lib/filter/filter-expr-grammar.y"
3868 { (yyval.ptr) = g_list_prepend((yyvsp[0].ptr), g_strdup((yyvsp[-1].cptr))); free((yyvsp[-1].cptr)); }
3869 #line 3870 "lib/filter/filter-expr-grammar.c"
3870 break;
3871
3872 case 82: /* string_list_build: %empty */
3873 #line 1045 "lib/filter/filter-expr-grammar.y"
3874 { (yyval.ptr) = NULL; }
3875 #line 3876 "lib/filter/filter-expr-grammar.c"
3876 break;
3877
3878 case 83: /* severity_string: string */
3879 #line 1055 "lib/filter/filter-expr-grammar.y"
3880 {
3881 /* return the numeric value of the "level" */
3882 int n = syslog_name_lookup_severity_by_name((yyvsp[0].cptr));
3883 CHECK_ERROR((n != -1), (yylsp[0]), "Unknown priority level\"%s\"", (yyvsp[0].cptr));
3884 free((yyvsp[0].cptr));
3885 (yyval.num) = n;
3886 }
3887 #line 3888 "lib/filter/filter-expr-grammar.c"
3888 break;
3889
3890 case 84: /* facility_string: string */
3891 #line 1066 "lib/filter/filter-expr-grammar.y"
3892 {
3893 /* return the numeric value of facility */
3894 int n = syslog_name_lookup_facility_by_name((yyvsp[0].cptr));
3895 CHECK_ERROR((n != -1), (yylsp[0]), "Unknown facility \"%s\"", (yyvsp[0].cptr));
3896 free((yyvsp[0].cptr));
3897 (yyval.num) = n;
3898 }
3899 #line 3900 "lib/filter/filter-expr-grammar.c"
3900 break;
3901
3902 case 85: /* facility_string: KW_SYSLOG */
3903 #line 1073 "lib/filter/filter-expr-grammar.y"
3904 { (yyval.num) = LOG_SYSLOG; }
3905 #line 3906 "lib/filter/filter-expr-grammar.c"
3906 break;
3907
3908 case 86: /* matcher_option: KW_TYPE '(' string ')' */
3909 #line 1343 "lib/filter/filter-expr-grammar.y"
3910 { CHECK_ERROR(log_matcher_options_set_type(last_matcher_options, (yyvsp[-1].cptr)), (yylsp[-1]), "unknown matcher type \"%s\"", (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
3911 #line 3912 "lib/filter/filter-expr-grammar.c"
3912 break;
3913
3914 case 88: /* matcher_flags: string matcher_flags */
3915 #line 1348 "lib/filter/filter-expr-grammar.y"
3916 { CHECK_ERROR(log_matcher_options_process_flag(last_matcher_options, (yyvsp[-1].cptr)), (yylsp[-1]), "unknown matcher flag \"%s\"", (yyvsp[-1].cptr)); free((yyvsp[-1].cptr)); }
3917 #line 3918 "lib/filter/filter-expr-grammar.c"
3918 break;
3919
3920
3921 #line 3922 "lib/filter/filter-expr-grammar.c"
3922
3923 default: break;
3924 }
3925 /* User semantic actions sometimes alter yychar, and that requires
3926 that yytoken be updated with the new translation. We take the
3927 approach of translating immediately before every use of yytoken.
3928 One alternative is translating here after every semantic action,
3929 but that translation would be missed if the semantic action invokes
3930 YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
3931 if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
3932 incorrect destructor might then be invoked immediately. In the
3933 case of YYERROR or YYBACKUP, subsequent parser actions might lead
3934 to an incorrect destructor call or verbose syntax error message
3935 before the lookahead is translated. */
3936 YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
3937
3938 YYPOPSTACK (yylen);
3939 yylen = 0;
3940
3941 *++yyvsp = yyval;
3942 *++yylsp = yyloc;
3943
3944 /* Now 'shift' the result of the reduction. Determine what state
3945 that goes to, based on the state we popped back to and the rule
3946 number reduced by. */
3947 {
3948 const int yylhs = yyr1[yyn] - YYNTOKENS;
3949 const int yyi = yypgoto[yylhs] + *yyssp;
3950 yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
3951 ? yytable[yyi]
3952 : yydefgoto[yylhs]);
3953 }
3954
3955 goto yynewstate;
3956
3957
3958 /*--------------------------------------.
3959 | yyerrlab -- here on detecting error. |
3960 `--------------------------------------*/
3961 yyerrlab:
3962 /* Make sure we have latest lookahead translation. See comments at
3963 user semantic actions for why this is necessary. */
3964 yytoken = yychar == FILTER_EXPR_EMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
3965 /* If not already recovering from an error, report this error. */
3966 if (!yyerrstatus)
3967 {
3968 ++yynerrs;
3969 {
3970 yypcontext_t yyctx
3971 = {yyssp, yytoken, &yylloc};
3972 char const *yymsgp = YY_("syntax error");
3973 int yysyntax_error_status;
3974 yysyntax_error_status = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx);
3975 if (yysyntax_error_status == 0)
3976 yymsgp = yymsg;
3977 else if (yysyntax_error_status == -1)
3978 {
3979 if (yymsg != yymsgbuf)
3980 YYSTACK_FREE (yymsg);
3981 yymsg = YY_CAST (char *,
3982 YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
3983 if (yymsg)
3984 {
3985 yysyntax_error_status
3986 = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx);
3987 yymsgp = yymsg;
3988 }
3989 else
3990 {
3991 yymsg = yymsgbuf;
3992 yymsg_alloc = sizeof yymsgbuf;
3993 yysyntax_error_status = YYENOMEM;
3994 }
3995 }
3996 yyerror (&yylloc, lexer, result, arg, yymsgp);
3997 if (yysyntax_error_status == YYENOMEM)
3998 YYNOMEM;
3999 }
4000 }
4001
4002 yyerror_range[1] = yylloc;
4003 if (yyerrstatus == 3)
4004 {
4005 /* If just tried and failed to reuse lookahead token after an
4006 error, discard it. */
4007
4008 if (yychar <= FILTER_EXPR_EOF)
4009 {
4010 /* Return failure if at end of input. */
4011 if (yychar == FILTER_EXPR_EOF)
4012 YYABORT;
4013 }
4014 else
4015 {
4016 yydestruct ("Error: discarding",
4017 yytoken, &yylval, &yylloc, lexer, result, arg);
4018 yychar = FILTER_EXPR_EMPTY;
4019 }
4020 }
4021
4022 /* Else will try to reuse lookahead token after shifting the error
4023 token. */
4024 goto yyerrlab1;
4025
4026
4027 /*---------------------------------------------------.
4028 | yyerrorlab -- error raised explicitly by YYERROR. |
4029 `---------------------------------------------------*/
4030 yyerrorlab:
4031 /* Pacify compilers when the user code never invokes YYERROR and the
4032 label yyerrorlab therefore never appears in user code. */
4033 if (0)
4034 YYERROR;
4035 ++yynerrs;
4036
4037 /* Do not reclaim the symbols of the rule whose action triggered
4038 this YYERROR. */
4039 YYPOPSTACK (yylen);
4040 yylen = 0;
4041 YY_STACK_PRINT (yyss, yyssp);
4042 yystate = *yyssp;
4043 goto yyerrlab1;
4044
4045
4046 /*-------------------------------------------------------------.
4047 | yyerrlab1 -- common code for both syntax error and YYERROR. |
4048 `-------------------------------------------------------------*/
4049 yyerrlab1:
4050 yyerrstatus = 3; /* Each real token shifted decrements this. */
4051
4052 /* Pop stack until we find a state that shifts the error token. */
4053 for (;;)
4054 {
4055 yyn = yypact[yystate];
4056 if (!yypact_value_is_default (yyn))
4057 {
4058 yyn += YYSYMBOL_YYerror;
4059 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
4060 {
4061 yyn = yytable[yyn];
4062 if (0 < yyn)
4063 break;
4064 }
4065 }
4066
4067 /* Pop the current state because it cannot handle the error token. */
4068 if (yyssp == yyss)
4069 YYABORT;
4070
4071 yyerror_range[1] = *yylsp;
4072 yydestruct ("Error: popping",
4073 YY_ACCESSING_SYMBOL (yystate), yyvsp, yylsp, lexer, result, arg);
4074 YYPOPSTACK (1);
4075 yystate = *yyssp;
4076 YY_STACK_PRINT (yyss, yyssp);
4077 }
4078
4079 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
4080 *++yyvsp = yylval;
4081 YY_IGNORE_MAYBE_UNINITIALIZED_END
4082
4083 yyerror_range[2] = yylloc;
4084 ++yylsp;
4085 YYLLOC_DEFAULT (*yylsp, yyerror_range, 2);
4086
4087 /* Shift the error token. */
4088 YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
4089
4090 yystate = yyn;
4091 goto yynewstate;
4092
4093
4094 /*-------------------------------------.
4095 | yyacceptlab -- YYACCEPT comes here. |
4096 `-------------------------------------*/
4097 yyacceptlab:
4098 yyresult = 0;
4099 goto yyreturnlab;
4100
4101
4102 /*-----------------------------------.
4103 | yyabortlab -- YYABORT comes here. |
4104 `-----------------------------------*/
4105 yyabortlab:
4106 yyresult = 1;
4107 goto yyreturnlab;
4108
4109
4110 /*-----------------------------------------------------------.
4111 | yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. |
4112 `-----------------------------------------------------------*/
4113 yyexhaustedlab:
4114 yyerror (&yylloc, lexer, result, arg, YY_("memory exhausted"));
4115 yyresult = 2;
4116 goto yyreturnlab;
4117
4118
4119 /*----------------------------------------------------------.
4120 | yyreturnlab -- parsing is finished, clean up and return. |
4121 `----------------------------------------------------------*/
4122 yyreturnlab:
4123 if (yychar != FILTER_EXPR_EMPTY)
4124 {
4125 /* Make sure we have latest lookahead translation. See comments at
4126 user semantic actions for why this is necessary. */
4127 yytoken = YYTRANSLATE (yychar);
4128 yydestruct ("Cleanup: discarding lookahead",
4129 yytoken, &yylval, &yylloc, lexer, result, arg);
4130 }
4131 /* Do not reclaim the symbols of the rule whose action triggered
4132 this YYABORT or YYACCEPT. */
4133 YYPOPSTACK (yylen);
4134 YY_STACK_PRINT (yyss, yyssp);
4135 while (yyssp != yyss)
4136 {
4137 yydestruct ("Cleanup: popping",
4138 YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, yylsp, lexer, result, arg);
4139 YYPOPSTACK (1);
4140 }
4141 #ifndef yyoverflow
4142 if (yyss != yyssa)
4143 YYSTACK_FREE (yyss);
4144 #endif
4145 if (yymsg != yymsgbuf)
4146 YYSTACK_FREE (yymsg);
4147 return yyresult;
4148 }
4149
4150 #line 1443 "lib/filter/filter-expr-grammar.y"
4151
4152